我有两个不同的用于解决数学问题的C++程序(程序
相比之下,
我知道有些CPU指令需要更多的CPU周期(例如内存访问),但是按设计,
另外,我不知道callgrind如何计算这些指令(在文档中找不到任何相关信息)。
有人能给出这种行为的合理解释吗?谢谢!
编辑:(由于评论)
不幸的是,代码太复杂了,无法在此处发布...两个程序都在同一台机器上运行。两者都是完全并行化的(每个线程运行程序的独立副本,只需告诉其他线程何时找到了解决方案)。但是指令计数是在一个线程上完成的,因为callgrind无论如何都会对程序进行排序。如上所述,
我不希望得到完全正确的答案,只是给我一些提示,可以解释这个问题的原因。
A
和B
)相比之下,
A
的表现比B
好大约10倍(以持续时间为衡量)。现在,我通过valgrind工具callgrind计算了执行的CPU指令数量,并意识到程序A
只需要程序B
执行指令数量的1/3。我本来期望这个因素大约是1/10。我知道有些CPU指令需要更多的CPU周期(例如内存访问),但是按设计,
A
应该包含比B
更多的此类昂贵的指令。另外,我不知道callgrind如何计算这些指令(在文档中找不到任何相关信息)。
有人能给出这种行为的合理解释吗?谢谢!
编辑:(由于评论)
不幸的是,代码太复杂了,无法在此处发布...两个程序都在同一台机器上运行。两者都是完全并行化的(每个线程运行程序的独立副本,只需告诉其他线程何时找到了解决方案)。但是指令计数是在一个线程上完成的,因为callgrind无论如何都会对程序进行排序。如上所述,
A
需要比B
更多的内存。我不希望得到完全正确的答案,只是给我一些提示,可以解释这个问题的原因。
B
可以将一些日志数据输出到硬盘上。或者它可能没有被适当地优化。或者使用了较慢的算法。如果没有看到实际代码,就无法确定。 - Ari0nhh