“__builtin_prefetch:解密其读取范围”
“__builtin_prefetch”是一个 C/C 编译器内部函数,用于指示编译器预加载数据到高速缓存中,从而减少访问该数据的延迟。然而,它的确切行为,特别是在预取结构内容方面,可能会令人困惑。
有关“__builtin_prefetch”提供的文档指出它预取行缓存,但该行缓存的大小可以因处理器而异。在预取整个结构的情况下,“__builtin_prefetch”通常只会预取结构的前几个缓存行。
例如,让我们考虑给定代码中的循环:
for (int i = from; i < to; i++) { particle* from = con[i].Pfrom; particle* to = con[i].Pto; // Assume particle has 8 double values }
在此循环中,“__builtin_prefetch (con[i].Pfrom)”只会预取粒子结构的前 8 个双精度值。如果粒子结构包含超过 8 个双精度值,则不会预取剩余的值。
要预取其他值,可以使用多个“__builtin_prefetch”内在函数。例如,“__builtin_prefetch (con[i 3].Pfrom)”将预取位于 con[i 3].Pfrom 的粒子结构的前 8 个双精度数。
但是,使用“__builtin_prefetch”非常重要明智地。过度使用实际上会降低性能。建议衡量“__builtin_prefetch”对代码的影响,并且仅在可提供显着优势的情况下使用它。
现代处理器和编译器已显着改进了缓存处理。结果,“__builtin_prefetch”的有效性降低了。但是,它在某些情况下仍然有用,特别是对于复杂的数据结构或以可预测模式访问的大型数组。始终建议使用基准来确定“__builtin_prefetch”是否值得。
以上是“__builtin_prefetch”实际加载了多少数据?的详细内容。更多信息请关注PHP中文网其他相关文章!