我们有一个分配,我们需要分析一个'简单指令'(例如,添加或按位)。这意味着执行相同的操作很多次(100K +)并测量平均时间(以微秒为单位)。结果应以周期长度显示:(totalTime/iterations)*cphMHz
。
因此,结果可能会有所不同,但总而言之,我们被告知我们应该得到接近1个周期长度的结果。只要编程正确,实际结果无关紧要。
我的问题是:描述什么是好的操作? 我需要两点来调整:
var = i;
- 编译器只执行最后一个命令。希望我足够清楚,任何想法都会很棒。
非常感谢
P.S不知道这是否重要,但我在CPP中写道
答案 0 :(得分:1)
1)如果(或可能)启用了优化,这听起来(对我而言)就像一个不可能完成的任务。您永远无法确定编译器在优化期间将执行的操作。我肯定会像重复使用之前的结果那样做。如果允许/可能,我会尝试包含一个原始汇编程序片段进行分析(因此您可以确定没有额外的开销;虽然它仍然可以进行优化)。
2)至于指令:一个汇编程序命令是一条指令。例如。 a += i
将 - 取决于可用的指令集和内容 - 最有可能产生4条指令:读取,读取i,添加,写入a。阅读大会非常简单。根据指令集/处理器,可能存在用于读取的不同“方向”(即“从 - >到”)。 x86汇编程序(以及大多数其他常见处理程序的汇编程序)将更喜欢instruction target, source
,而DSP则更喜欢使用instruction source, target
。重要的是要知道:移动数据必须通过寄存器进行。因此,即使像a = b
这样的单个作业也会产生两条指令(b
注册并注册到a
)。
一般来说,如果这个答案走向错误的方向,请尝试详细说明您的具体任务及其要求(例如使用哪个编译器),并给我一个简短的评论。