【发布时间】:2015-03-29 17:20:07
【问题描述】:
我有一个相当快的 AVX 代码,但它只是一个使用 AVX 的单一功能,大型项目的其余部分在 SSE2 上,所以我不想将架构设置为 AVX。在每次迭代结束时,我需要将一个 YMM 寄存器中的 4 个双精度数转换为 4 个浮点数并像这样存储它:
__m256d y = ......;
_mm_storeu_ps((float*)dst + i, _mm256_cvtpd_ps(y));
但 MSVC 正在使用 movups(不带“v”前缀)生成 SSE2 代码。有没有办法强制它只使用一条 AVX 指令?在我看来,唯一知道的方法是使用 AVX 作为目标,这似乎很荒谬。我只想在一个周期内利用 AVX。英特尔编译器显然理解它,因为我使用的是 AVX 自动调度,所以它在那里工作得很好,但通常英特尔编译器现在似乎没有办法去,它很慢而且代码比 MSVC 差,好吧,除了这个.. .
【问题讨论】:
标签: sse intrinsics avx