gpt4 book ai didi

c - _mm_load_ps vs. _mm_load_pd vs. Intel x86 ISA 等

转载 作者:太空狗 更新时间:2023-10-29 16:32:24 34 4
gpt4 key购买 nike

下面两行有什么区别?

__m128 x = _mm_load_ps((float *) ptr);
__m128 y = _mm_load_pd((double *)ptr);

换句话说,为什么有这么多不同的 _mm_load_xyz 指令,而不是通用的 __m128 _mm_load(const void *)

最佳答案

有不同的内在函数,因为它们对应于不同的指令。

之所以有不同的加载指令,是因为英特尔希望保留设计处理器的自由,在该处理器上, double vector 由与单精度 vector 或整数 vector 不同的物理寄存器文件支持,或者使用不同的执行单元。如果没有办法指定应将数据加载到适当的寄存器文件或转发网络中,那么任何这些都可能会增加额外的延迟。

一种思考方式是,不同的指令执行“相同的事情”,但另外向处理器提供提示,告诉它正在加载的数据将如何被 future 的指令使用。这可能有助于处理器确保数据位于正确的位置以尽可能高效地使用,否则处理器可能会忽略它。

请注意,这不仅仅是一个假设。存在使用整数 vector 加载 (MOVDQA) 加载浮点运算消耗的数据比使用浮点加载获取浮点运算数据需要更多时间的处理器(反之亦然) .有关该主题的更多详细信息,请参阅英特尔优化手册或 Agner Fog 的注释。使用与您将如何使用数据相匹配的负载,以避免将来出现此类性能危害的风险。

关于c - _mm_load_ps vs. _mm_load_pd vs. Intel x86 ISA 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8856044/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com