我想将两个__m128值合并为一个__m256
像这样的:

__m128 a = _mm_set_ps(1, 2, 3, 4);
__m128 b = _mm_set_ps(5, 6, 7, 8);

类似于:
__m256 c = { 1, 2, 3, 4, 5, 6, 7, 8 };

有什么内在的东西可以用来做这个吗?

最佳答案

这应该符合您的要求:

__m128 a = _mm_set_ps(1,2,3,4);
__m128 b = _mm_set_ps(5,6,7,8);

__m256 c = _mm256_castps128_ps256(a);
c = _mm256_insertf128_ps(c,b,1);

如果顺序与您想要的相反,那么只需切换ab
感兴趣的内在因素是_mm256_insertf128_ps,它允许您将128位寄存器插入256位avx寄存器的上半部分或下半部分:
http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/intref_cls/common/intref_avx_insertf128_ps.htm
全家人都在这里:
_mm256_insertf128_pd()
_mm256_insertf128_ps()
_mm256_insertf128_si256()

关于c - 如何将两个__m128值组合到__m256?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11116769/

10-11 07:08