Measuring time in a virtualized environment
I developed a series of microbenchmarks using some shared-memory libraries (e.g. openmp, tbb, etc) to check how they scale varying the number of threads.
Currently I'm running them on a 4-core processor, the results are pretty reasonable, but I only got 3 points on a speedup plot.
To get more data and a more wide analysis of them I'm planning to run them on a 32-core machine.
One of the possibilities is to buy a 32-core processor, like the AMD Epyc or Intel Xeon, they are kinda expensive, but I know what I'll get with them. My second and less expensive alternative is to run them on a cloud, like the Amazon AWS or Microsoft Azure.
Then, before making my choice I need some clarification:
As far as I understand AWS can make a machine with as many cores as I want, but all of them are virtualized.
When I run an application there how reliable are the time measure of its execution?
Will I get the same scalability that I get when I run the application on the real 32-core processor?