[英]How can I prefetch a memory region most easily?
背景:我实现了一种随机算法,该算法需要随机排序以实现最佳收敛。 但是,这样做显然会破坏内存局部性。 我发现通过预取下一个迭代的数据,可以将性能下降降至最低。
我可以使用_mm_prefetch
以一种简单的方式(主要是OS +编译器可移植的方式)预取n条缓存行-但是缓存行的长度是多少? 现在,我正在使用64的硬编码值,这在当今的x64处理器上似乎很正常-但是我不知道如何在运行时检测到这一点,去年的一个问题没有找到简单的解决方案 。
我已经在Windows上看到了GetLogicalProcessorInformation ,但是我对使用如此复杂的API 来做这么简单的事情并不满意,无论如何在Mac或Linux上都无法使用。
也许还有其他一些API / intrinsic可以预取以字节(或字或其他形式)标识的内存区域,并允许我在不知道缓存行长的情况下进行预取?
基本上,是有一个合理的替代_mm_prefetch
用#define CACHE_LINE_LEN 64
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.