首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >64位整数的按位运算成本是否与8位整数相同?

64位整数的按位运算成本是否与8位整数相同?
EN

Stack Overflow用户
提问于 2015-02-17 05:06:27
回答 2查看 1.4K关注 0票数 1

我的代码涉及对一个庞大的整数数组执行按位操作。如果正确理解,64位计算机在一个时钟周期内对64位整数进行计算.如果我在执行8位整数位的位运算,它仍然会消耗一个时钟周期.如果我做8个8位整数运算,它将消耗8个时钟周期.知道我可以将8个8位整数拟合成一个64位整数,并对64位整数执行按位运算,我会消耗1个时钟周期而不是8个时钟周期吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-17 06:46:23

即使在64位机器上,64位操作的时钟周期也不能保证为1,但显然处理器不知道64位值代表一个64位整数还是8个8位整数,因此按位运算本身对于这两种情况都是一样快的。代码的这一部分对于单个64位值也几乎肯定会表现得更好,因为64位处理器可能在64位(或至少32位)数量上工作,即使您对较小的变量进行操作。

对于程序的总体性能而言,这在很大程度上取决于您需要在8位和64位数据之间转换的频率;存储在64位整数数组中的单个8位整数的典型索引将类似于(a[i / 8] >> ((i % 8) * 8)) & 0xFF --因此,至少在C端†上,如果经常这样做,将增加复杂性,但是如果对数组的所有元素重复执行大部分操作,那么64位解决方案无论如何都有可能获胜(请记住,编译器在处理8位变量时可能需要生成类似的掩蔽)。

†您可能希望查看生成的汇编程序来验证实际的复杂性,但根据指令集…的不同,它看起来可能很不一样。

票数 2
EN

Stack Overflow用户

发布于 2015-02-17 09:07:24

准备好使用矢量化操作来加速速度:使用SSE2或AVX2本质,您可以在一次go中处理128或256个位(_m128i _mm_and_si128_mm256_and_si256等)。而即将推出的AVX512扩展一次将允许512位!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28555013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档