2012-09-30 352 views
7

如何计算我的应用程序的FLOPS? 如果我有执行指令的总数,我可以将它除以执行时间。但是,如何计算执行指令的数量?计算FLOPS(浮点运算每秒)

我的问题是一般的,任何语言的答案是高度赞赏。但我期待为我的应用程序找到一个解决方案,它是由C/C++和CUDA开发的。

我不知道标签是否合适,如果我错了,请纠正我。

+0

可能的重复[如何计算内核的Gflops](http://stackoverflow.com/questions/7875607/how-to-calculate-gflops-of-a-kernel) – talonmies

+0

我意识到这个问题!我的问题是一般的。如何计算FLOPS?即使是多核心。答案也可能帮助我的案例“CUDA”。 – ahmad

+3

我发布了如何使用NVIDIA工具来收集[计算实现的带宽和FLOPS ...]中的FLOP(http://stackoverflow.com/questions/12539300/calculating-achieved-bandwidth-and-flops-gflops-and -evaluate-CUDA内核-perfor)。对于x86,有几个用于计算FLOP的Linux库。 x86性能监视器支持计数FLOP,但您必须阅读手册以了解具体细节(推测性指令,计数内容......) –

回答

7

如果浮点运算的数量不容易建模,我该怎么做是为了产生两个可执行文件:一个是生产版本,给了我执行时间,另一个在执行时对所有浮点运算进行计数(当然这会很慢,但这对我们的目的无关紧要)。然后我可以通过将第二个可执行文件中的浮点操作数除以第一个可执行文件的时间来计算FLOP/s值。

这可能甚至可能是自动的,但到目前为止我还没有这方面的需要。

6

您应该用数学方法模拟您的数据完成了什么。隔离一个循环迭代。然后计算所有简单的浮点加法,乘法,除法等。例如, y = x * 2 * (y + z*w)是4个浮点运算。将结果数乘以迭代次数。结果将是您正在搜索的指令数量。

+0

适用于相干控制流和确定性分支。它不适用于具有输入相关条件分支的代码(动态运行时间决定执行多少个FP)。 – ahmad

+0

你是否忽略条件语句if(i MySchizoBuddy