[英]C: is it possible to cast a uint64_t to const __m256i_u?
我正在通过编写一些 AVX 优化函数来玩。 我想使用像uint64_t
这样的标准无符号 integer 参数类型,而不是 AVX 指令所需的 256 位无符号 integer ( __m256i_u
)。 有可能做演员吗?
不,英特尔的内在函数 API 不允许在 integer 和向量类型之间进行实际的 C 转换,我认为甚至在uint64_t
和__m64
(64 位 MMX 向量)之间也不允许。
使用_mm256_set...
和_mm_cvtsi128_si64
。 (和_mm256_castsi256_si128
必要时)通过广播或操作数列表将值放入向量或从向量中取出低值。 请参阅英特尔关于cvt
和_mm256_set
内在函数的内在函数指南; 谷歌使用它的示例的固有名称,尤其是site:stackoverflow.com
。 您可能希望将内在函数指南搜索限制为 SSE4,而不是 AVX2,以限制要浏览的内在函数的数量。 因此参数列表更短; _mm_set_epi32()
采用 4 个int
args,总共 128 位,这一点更加明显。
另请参阅固有向量元素类型的名称和含义是什么,例如 epi64x 或 pi32? 回复: epi64x
与epi64
的存在(MMX 到 XMM 与 64 位整数)
此外,使用__m256i
,而不是 GCC 的内部__m256i_u
未对齐类型。 使用__m256i v = __mm256_loadu_si256((const __m256i*) ptr);
做一个未对齐的负载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.