当我实现算法时,我尝试使用尽可能少的操作。
我想知道C#中的基本操作是否是有序的(在速度或成本方面):
答案 0 :(得分:5)
没有执行“C#操作” - 它被编译(进入MSIL,然后被JIT编译)到机器代码中,这取决于目标体系结构。因此,即使一个操作在一个架构上比另一个操作更快,但在另一个架构上则相反。
无论如何,你所要求的是令人难以置信的低水平。数据结构和算法的选择将会产生数量级的影响,即使你确定了这一点,memory latencies也可能在个别运营中占主导地位。
答案 1 :(得分:1)
正如Branko Dimitrijevic已经指出的那样,C#没有被执行,它被编译为IL。 IL也没有执行,它被编译为机器代码。所以我别无选择,只能将你的问题重新解释为“我的CPU上哪些低级操作更便宜?”。由于有许多架构可供使用,而且你并不具体说明你感兴趣的是哪一个,我将假设x86,因为它是台式机系统中最受欢迎的。
您可以在Intel Architectures Optimization Reference Manual附录C中找到您所询问的信息。此处列出了各种说明的延迟和吞吐量。延迟是指令使其结果准备好供后续指令使用所需的周期数。吞吐量是指令停止执行单元的周期数。一些例子:
pod 'CDPieMenu', :podspec => '~/Documents/Project/CDPieMenu.podspec'
,cmp
,add
,sub
,and
和or
的延迟为1,吞吐量为0.25。< / LI>
xor
和ror
的延迟为1到2,吞吐量为0.5到1.5,具体取决于数据的位置。rol
的延迟为3,吞吐量为1,但读取32位寄存器时,延迟为4到5,吞吐量为1。imul
具有可变延迟和吞吐量,具体取决于计算本身。所以,虽然我没有查询所有您提出的操作,但您建议的列表(按成本的升序排列)似乎至少是合理的。
这一切都假设问题是关于基本操作的成本,仅此而已。但是如果你想实际微观优化一个真正的程序,那就完全不同了。
请注意,在相同的手册中,在时间表进入之前,超过600页描述了在运行的程序的性能中发挥重要作用的众多因素那个架构。这些包括乱序执行引擎,缓存级别,流水线,分支预测,哪个单元运行哪个指令等。
如果您不想获得所有这些问题的工作知识,我认为尝试在该级别进行微观优化并不重要。你会盲目地做。