How to measure FLOPS of a MatLab function?
104 次查看(过去 30 天)
显示 更早的评论
I'm running MS-OS XP, service pack 3, Pentium 4, CPU 3.4GHz.
Matlab 7.11.0.584, 32 BIT.
BACKGROUND:
I recently installed a FLOPS toolbox called Lightspeed by Tom Minka. http://research.microsoft.com/en-us/um/people/minka/software/lightspeed/
The install went well, and I'm able to access the commands.
I'm running a function I've created that involves addition, subtraction, index searching, if-statements, for-loops, conditional statements, large database structures, etc...
QUESTION:
How do I use the FLOPS commands from the Lightspeed Toolbox to measure the number of flops performed by the function? I only want the total number of flops performed by the function.
And if that doesn't work, what other method exists to measure flops of a function in Matlab and how do I use those?
0 个评论
采纳的回答
Walter Roberson
2012-10-23
You cannot use the flops() command from that toolbox to measure the number of flops performed by one function: you have to rewrite the code so that every operation you want to be counted is specifically measured, such as by changing multiplication calls to flops_mult() calls.
What are you trying to measure, exactly? "Idealized" floating point operation counts sometimes have only a rough resemblance to actual code execution times.
2 个评论
Alexey
2014-9-12
You probably already found the answer, but for the sake of others who might come across this, the answer is more like 2 - you need to add to your code a counting line for every operation you want counted. For example, if you want to do x=A*b:
flops(0) %start global flop count at 0
A=[1 2 3; 4 5 6];
b=[7 8 9]';
x=A*b; %do the operation
addflops(flops_mul(A, b)) %do the counting
flops %display count so far
you will get 10, which makes sense, there are 6 multiplications and 4 additions each costing 1 flop: [1*7+2*8+3*9; 4*7+5*8+6*9]. Note that the arguments to flops_mul should be the same as what you did. I say that for 2 reasons: 1) is obviously you want to count what was computed exactly, but 2) is that flops_mul doesn't seem to do any matrix multiplication checking - eg flops_mul([2 2; 2 2], [5 5 5 5 5]') happily returns 6 even though you can't multiply a 2x2 matrix with a 5x1 vector... Hope this helps
更多回答(1 个)
wided hechkel
2016-8-27
编辑:wided hechkel
2016-8-27
please can you give me the matlab code for calculating the FLOPs of this algorithm:
zf=10
for zj=0:0.01:20
for xf=1:1:64
for xi=0:0.01:10
for xr=1:1:128
ZT=sign(zj-zf)*sqrt((zj-zf)^2+(xf-xi)^2)-abs(zj-zf);
ZD=sqrt(zf^2+(xr-xi)^2)-zf;
somme=sum(zj-ZD-2*ZT);
end
end
end
end
i want to know the method of utilizing the lightspeed matlab toolbox, please can you give me the code not only the results of FLOPs number
1 个评论
Walter Roberson
2017-3-21
编辑:Walter Roberson
2017-6-19
The operation sqrt((zj-zf)^2+(xf-xi)^2) can be implemented in some architectures as hypot(zj-sf, xf-xi) where hypot is a built-in instruction. Such instructions can be more accurate than the naive computation done here for the case where the two values are between 0 and sqrt(realmin) as squaring such values would underflow to 0. How do you count FLOPS for a hybrid hardware instruction, one which might take fewer or more cycles than the naive equivalent (due to accuracy issues)? How do you count FLOPS for sqrt(), which is neither a multiply nor an addition?
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Manual Performance Optimization 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!