![]() |
1
11
虽然我生成的机器代码版本与您的版本(MSVC++2005)不同,但这两个变体之间的一个区别与您的代码中的差别几乎相同:
如果你重新实施
(甚至在类中存储和维护结束指针)您应该以更“公平”的比较结束。 |
![]() |
2
2
产生指令差异的一个具体原因是VisualC++
在原始情况下,编译器必须进行实际的指针计算以设置所需的开始和结束局部变量。
|
![]() |
3
1
编译器无法知道
p、 S.:这会影响
|
![]() |
4
1
您的计时可能反映了这样一个事实:初始raw_循环支付加载缓存的成本。如果重新排序测试以首先执行向量测试(或者可以抛出第一个迭代,或者使每个测试成为一个单独的程序),会得到类似的计时吗。 |
![]() |
5
0
看看为内部循环生成的程序集,它们基本上是相同的,除了一个寄存器更改。我不希望在这个基础上有任何时间上的差异。
我有一个关于代码计时的类似问题,我无法解释两段代码之间的差异。我从来没有得到一个明确的答案,虽然最后我说服自己,这是一个代码对齐的情况。 How can adding code to a loop make it faster? |
![]() |
6
0
尝试更改播客类型
|
![]() |
7
0
我本来希望优化器足够聪明,可以消除任何差异,但通常减量和与零的比较比与非零指针的比较快。
|
|
8
0
我知道这很晚了,但有一个快速的观察:未签名的指令可以稍微快一点。据我所知,硬件实现稍微简单一点,因为没有符号位可以随增量或减量而改变。对于P6微架构CPU来说,这只是一个时钟周期,但这些都是累积起来的。 我希望大小是无符号的,因为没有负的“大小”。 您必须使用“芯片制造商档案器”(英特尔VTUNE—30天试用版;AMD代码分析器是免费的)进行档案分析,因为有太多的东西可以发挥作用:管道暂停、缓存未命中、数据未对齐、存储加载依赖性。。。 这件事比44年前我在高中写第一个Fortran程序时复杂得多。再也没有人在汇编程序中编程了。一个真正让人头疼的是,从C程序生成的PA Risc(90年代的HP Unix系统芯片)指令。。。这些操作不是我所期望的顺序,因为代码生成器理解PA Risc CPU的内部操作。指令的顺序很有趣,因为它们在CPU中是有意义的,但在我的纸上是没有意义的。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 5 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |