The Flop (Floating Point Operations per Second) Rate of MATLAB Code
9 次查看(过去 30 天)
显示 更早的评论
Hello, I know Intel MKL / IPP libraries performance in simple operations (Multiplication, Summation, Matrix Multiplication, Vector Multiplication) gets something like 80-95% of the theoretical performance of the CPU (Measured in FLOPS).
http://software.intel.com/en-us/articles/parallelism-in-the-intel-math-kernel-library http://software.intel.com/en-us/intel-mkl
Yet, doing so using MATLAB I get much worse results.
I have this simple script:
numElements = 2 ^ 16;
numIter = 100;
vecX = randn(numElements, 1, 'single');
vecY = randn(numElements, 1, 'single');
initTime = tic();
for ii = 1:numIter
vecX .* vecY;
end
stopTime = toc(initTime);
gFlops = (numElements * numIter) / stopTime
Yet I get only 1.1 GFLOPS on my i7-860 Which should be closer to 2.8GHz (Frequency) * 4 (Cores) * 4 (Single Precisio Operations per Cycle as SSE Vector - 128 Bit) = 44.8 GFLOPS.
Yet I get something like 1.4 GFLOPS. Which is only 3% of the theoretical performance.
How can MATLAB be so inefficient?
2 个评论
Amit
2014-1-28
BTW, MATLAB is only using 1 core, I'd believe. And for a benchmark, is there anything else running besides MATLAB?
采纳的回答
Amit
2014-1-28
编辑:Amit
2014-1-28
I don't think the way you're trying to calculate flops here is right. Even if one assumes that you can calculate Flops like this, you're missing out many overheads that matlab is doing. For example, try something like this:
numElements = 2 ^ 18;
numIter = 100;
vecX = randn(numElements, 1, 'single');
vecY = randn(numElements, 1, 'single');
initTime = tic();
% for ii = 1:numIter
% vecX .* vecY;
% end
vecX + vecY; % I used +, but you can switch to .* as well
stopTime = toc(initTime);
gFlops = (numElements * numIter) / stopTime
And see if you see any difference. I am pretty sure you will. Remember, for loop is slow.
4 个评论
Walter Roberson
2019-6-16
tic and toc only provide elapsed time information, which is not the same as the amount of computation done, as elapsed time can include time that the operating system suspended MATLAB in order to work on something else.
更多回答(1 个)
Walter Roberson
2014-1-28
single() is often slower than double()
Your arrays are not that big; I am not sure that it is kicking in calls to the libraries.
2 个评论
Walter Roberson
2014-1-29
Try with timeit. Or if you have an older MATLAB that does not have that built-in, you can get timeit from the File Exchange.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!