如果我有一个具有 3D 世界的游戏,并且这个世界很大,所以需要分成 block ,如果有的话,128 字节的 block 比 150 字节的 block 是否有主要的性能优势?显然,chunks中的objects仍然是整数字节大小。
即chunks[128][128][128]
比 chunks[150][150][150]
或 chunks[112][112][112 快吗]
?之后是否还有其他副作用,例如过多的 RAM 浪费?还有其他需要考虑的因素吗?
我只是看到将所有内容存储在变量和大小为 2 的幂的数组中是一种惯例,但我不确定它是否有任何优点,以及使用更多的人类数字是否会更好,例如100 或 150。
最佳答案
其他答案确实是正确的,即二次方大小的数据将受益于使用移位而不是乘法。
但是,二次方大小的数据也有阴暗面。它会在您最意想不到的时候打击您。
查看这两个问题/答案:
- Matrix multiplication: Small difference in matrix size, large difference in timings
- Why are elementwise additions much faster in separate loops than in a combined loop?
当您的数据集是二次幂时,它们更有可能在内存中超对齐。 (这意味着他们的地址很可能在 2 的大幂次方上具有相同的模数。)
虽然这看起来很可取,但它们可能会导致:
- Conflict Cache Misses
- 虚假别名停顿(在上面的第二个链接中提到)
如果您阅读上面链接的两个问题,您会发现对齐会导致速度降低 3 倍以上 - 这可能远远超过权重您从使用移位而不是乘法中获得的任何好处。
因此,与所有性能问题一样,您需要衡量、衡量、衡量...并准备好期待任何事情发生。
您提到您正在代表一个 3D 空间 - 这正是那种会表现出可能导致速度减慢的二次幂内存访问的情况。
关于c - 2 次方大小数据的性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9515482/