Eam*_*nne 8 c++ 64-bit caching
背景:我已经实现了一种随机算法,需要随机排序以获得最佳收敛.但是,这样做显然会破坏内存局部性.我发现通过预取下一个迭代的数据,性能下降最小化.
我可以使用简单的,主要是OS +编译器 - 便携式方式预取n个缓存行_mm_prefetch- 但是缓存行的长度是多少?现在,我正在使用64的硬编码值,这在x64处理器上似乎是现在的常态 - 但我不知道如何在运行时检测到这一点,并且去年的一个问题没有找到简单的解决方案.
我在Windows上看到了GetLogicalProcessorInformation,但我对使用如此简单的复杂API非常谨慎,而且无论如何都无法在mac或linux上运行.
也许有一些完全可以预取由字节(或单词等)标识的内存区域的其他API /内在函数,并允许我在不知道缓存行长度的情况下进行预取?
基本上,有没有一个合理的选择_mm_prefetch用#define CACHE_LINE_LEN 64?
| 归档时间: |
|
| 查看次数: |
4054 次 |
| 最近记录: |