【发布时间】:2016-12-19 17:42:54
【问题描述】:
基本上,我怎样才能用 AVX2 内在函数编写等效的内容?我们在这里假设result_in_float 的类型为__m256,而result 的类型为short int* 或short int[8]。
for(i = 0; i < 8; i++)
result[i] = (short int)result_in_float[i];
我知道可以使用 __m256i _mm256_cvtps_epi32(__m256 m1) 内在函数将浮点数转换为 32 位整数,但不知道如何将这些 32 位整数进一步转换为 16 位整数。而且我不仅想要这样,还想要将这些值(以 16 位整数的形式)存储到内存中,并且我想使用向量指令来完成这一切。
在互联网上搜索,我发现了一个名为 _mm256_mask_storeu_epi16 的内在函数,但我不确定这是否能解决问题,因为我找不到它的用法示例。
【问题讨论】:
-
我同时使用 C 和 C++。这些内在函数可以从它们中的任何一个中调用。所以,这就是原因。
-
将 vpshufb 与适当的字节选择一起使用,然后将值从高 128 位通道降低到低位的任何 shuffle。
-
如果它们饱和而不是在溢出时换行是否可以(从 int 到 short,即不是在 float 到 int 步骤中)?
-
在我的程序中,我认为这些浮点值总是在短值的范围内。所以,是的,这不是问题。
-
你是用
gcc还是g++编译的?