我想将两个__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);
如果顺序与您想要的相反,那么只需切换
a
和b
。感兴趣的内在因素是
_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/