如何统计浮点运算次数?
mathematica吧
全部回复
仅看楼主
level 1
aabb2432519 楼主
如题。我想知道在Mathematica中,如何统计一段代码在运行时,总共进行了多少次浮点运算。
不过我也不知道我的描述是否有问题,或者Mathematica是不是真的做到这件事,所以这里简单说一下来龙去脉。
事情是这样的,我的一篇论文中,算法部分的代码是用Mathematica实现的。现在主编对于我关于计算机这一部分的讨论不满意,希望我能用roofline模型,对代码进行定量的评估,以此来判断代码性能是否已达到我计算机的极限。
我之前并没有接触过什么是roofline模型,在网上简单找了一些资料,了解到大致的意思就是:统计代码在运行时,所需要进行的浮点运算次数(对应FLOPS),以及所需要进行读写的字节数(对应Band-Width),求这两者的比值,称作计算强度,或者访存比(Operational Intensity)。
查阅了Mathematica的一些帮助文档,我注意到可以用MaxMemoryUsed[]和ByteCount[]来实现读写字节数量的统计。但找了很久的资料也没看到,有什么办法可以统计浮点运算次数,直接或间接的,目前也没什么思路。所以来贴吧问问看,集思广益,说不定有小伙伴能想到办法,又或者有大佬能给我提点一下。
2023年06月26日 12点06分 1
吧务
level 10
可以考虑Trace
2023年06月26日 17点06分 2
感谢提醒。英雄所见略同,我也想过用Trace[]返回列表的长度来讨论,但是我注意到一个问题。当我输入Trace[1+1]和Trace[1+1+1]的时候,它们返回的长度是一样的,所以我疑心这个函数并不能用来代表浮点计算的次数。
2023年06月27日 02点06分
@aabb2432519 是不代表,只能知道进行了何种运算。需要自己用这个信息去推断。本来你用mma写的也就是个算法原型,mma可能会做比你算法预想的更多的事情。
2023年06月27日 03点06分
1