Assembly vmovd是否有avx sse过渡处罚?
(假设在movd前后有许多avx指令)如果我使用vmovd在通用寄存器和ymm寄存器之间移动数据,是否因为只使用1个ymm浮点值而变慢?avx sse转换惩罚仅适用于执行非VEX编码的sse指令和sse编码的指令。只要您使用Assembly vmovd是否有avx sse过渡处罚?,assembly,avx,Assembly,Avx,(假设在movd前后有许多avx指令)如果我使用vmovd在通用寄存器和ymm寄存器之间移动数据,是否因为只使用1个ymm浮点值而变慢?avx sse转换惩罚仅适用于执行非VEX编码的sse指令和sse编码的指令。只要您使用vmovd而不是(比如)使用movd,一切都应该正常。avx sse转换惩罚仅适用于执行非VEX编码的sse指令和sse编码的指令。只要你使用vmovd而不是,比如说,movd,一切都会好起来。你能详细说明一下吗?avx sse转换惩罚仅在执行非VEX编码的sse指令和sse
vmovd
而不是(比如)使用movd
,一切都应该正常。avx sse转换惩罚仅适用于执行非VEX编码的sse指令和sse编码的指令。只要你使用vmovd
而不是,比如说,movd
,一切都会好起来。你能详细说明一下吗?avx sse转换惩罚仅在执行非VEX编码的sse指令和sse编码指令时适用。只要您使用vmovd
而不是,比如说,movd
,一切都会很好。谢谢。这就是我需要的。我在C++中编写了一些内嵌的ASM,它使用AVX内核围绕它。考虑只使用本质,并删除内联程序集。编译器通常非常擅长选择避免这种惩罚的指令。但编译器擅长对我希望不被触碰的东西重新排序(例如我使用vmovd的代码块中的kahan加法)。如果编译器符合C标准,则它不能“优化”浮点运算。不需要内联汇编,只需确保编译时不会使用告诉编译器忽略C标准的选项(如-Ofast
)。您能详细说明一下吗?avx sse转换惩罚仅在执行非VEX编码的sse指令和sse编码指令时适用。只要您使用vmovd
而不是,比如说,movd
,一切都会很好。谢谢。这就是我需要的。我在C++中编写了一些内嵌的ASM,它使用AVX内核围绕它。考虑只使用本质,并删除内联程序集。编译器通常非常擅长选择避免这种惩罚的指令。但编译器擅长对我希望不被触碰的东西重新排序(例如我使用vmovd的代码块中的kahan加法)。如果编译器符合C标准,则它不能“优化”浮点运算。不需要内联汇编,只需确保编译时没有使用告诉编译器忽略C标准的选项(如-Ofast
)。