繁体   English   中英

C:是否可以将 uint64_t 转换为 const __m256i_u?

[英]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? 回复: epi64xepi64的存在(MMX 到 XMM 与 64 位整数)

此外,使用__m256i ,而不是 GCC 的内部__m256i_u未对齐类型。 使用__m256i v = __mm256_loadu_si256((const __m256i*) ptr); 做一个未对齐的负载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM