我正在对算法进行基准测试,没有必要知道细节.主要组件是缓冲区(整数的原始数组)和索引器(整数 - 用于访问缓冲区中的元素).
缓冲区的最快类型似乎是unsigned char,以及short,int,long的有符号和无符号版本.但是char/signed char更慢.差异:1.07倍.
对于索引器,有符号和无符号类型之间没有区别.然而,int和long比char和short快1.21倍.
在考虑性能而不是内存消耗时,是否应该默认使用某种类型?
注意:缓冲区元素和索引器上使用的操作是赋值,递增,递减和比较.
通常,最大的胜利来自缓存.
如果您的数据值足够小以使它们适合8位,那么您可以在CPU缓存中容纳比使用整数和浪费3个字节/值时更多的数据.如果您正在处理数据块,则可以获得缓存命中的巨大速度优势.
索引的类型不太重要,只要它适合CPU寄存器(即不尝试使用long long8位CPU)它将具有相同的速度
编辑:值得一提的是,测量速度很棘手.您需要多次运行算法以允许缓存,您需要查看CPU上正在运行的其他内容,甚至是其他硬件可能正在中断的内容.除非您非常小心,否则10%的速度差异可能被视为噪音.
| 归档时间: |
|
| 查看次数: |
6467 次 |
| 最近记录: |