gpt4 book ai didi

c++ - 分析一个简单的单周期长度操作

转载 作者:行者123 更新时间:2023-11-28 08:08:19 24 4
gpt4 key购买 nike

我们有一个任务,我们需要分析一个“简单指令”(例如加法或按位)。这意味着多次执行相同的操作(100K+)并以微秒为单位测量平均时间。结果应以周期长度表示:(totalTime/iterations)*cphMHz

因此,结果可能会有所不同,但总而言之,我们被告知我们应该得到接近 1 个周期长度的结果。只要编程正确,实际结果并不重要。

我的问题是:什么样的操作比较好?我需要考虑两点:

  1. 我使用循环展开来更加准确,因此在每次迭代中我执行 10 条简单指令。这意味着由于编译器优化,我必须选择一个不会只执行一次的操作(我们不能使用 -o0 标志,因为学校工作人员不会这样做)。错误示例:var = i; - 编译器只会执行最后一条命令。
  2. 什么是真正的“简单指令”?我如何知道实际执行的操作数?我尝试阅读汇编输出,但无法理解。

希望我说得足够清楚,任何想法都会很棒。

谢谢

P.S 不知道这是否重要,但我用 CPP 写

最佳答案

1) 如果启用(或可能)优化,这听起来(对我来说)是一项不可能完成的任务。您永远无法确定编译器在优化期间会做什么。我肯定会做一些事情,比如重用以前的结果。如果允许/可能,我会尝试包括要分析的原始汇编程序片段(这样您就可以确定没有额外的开销;尽管它仍然可以优化)。

2) 关于指令:一条汇编指令就是一条指令。例如。 a += i 将 - 取决于可用的指令集和内容 - 最有可能导致 4 条指令:读取 a、读取 i、添加、写入 a。阅读汇编非常简单。根据指令集/处理器,可能有不同的阅读“方向”(即“从 -> 到”)。 x86 汇编程序(以及大多数其他常见处理器的汇编程序)将更喜欢 instruction target, source,而 DSP 更喜欢使用 instruction source, target。重要的是要知道:移动数据必须通过寄存器进行。因此,即使像 a = b 这样的单个赋值也会导致两条指令(b 注册和注册到 a)。

一般来说,如果这个答案走错了方向,请尝试详细说明您的具体任务及其要求(例如,要使用哪个编译器)并给我一个简短的评论。

关于c++ - 分析一个简单的单周期长度操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9757537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com