背景:我实现了一种随机算法,需要随机排序才能获得最佳收敛.但是,这样做显然会破坏内存局部性.我发现通过预取下一个迭代的数据,性能下降最小化.
我可以使用_mm_prefetch以简单的,主要是OS编译器 – 可移植的方式预取n个缓存行 – 但是缓存行的长度是多少?现在,我正在使用64的硬编码值,这在x64处理器上似乎是现在的常态 – 但我不知道如何在运行时和a question about this last year found no simple solution检测到这一点.
我在Windows上看到了GetLogicalProcessorInformation,但我对使用如此简单的复杂API非常谨慎,而且无论如何都无法在mac或linux上运行.
也许还有一些完全可以预取由字节(或单词等)标识的内存区域的其他API /内部函数,并允许我在不知道缓存行长度的情况下进行预取?
基本上,使用#define CACHE_LINE_LEN 64是否有合理的_mm_prefetch替代方法?