使用AVX内在函数在__m512i中求和8位整数

问题描述 投票:0回答:1

AVX512为我们提供了对__mm512向量中的所有单元求和的内在函数。但是,它们的某些对应项缺失:尚无_mm512_reduce_add_epi8

_mm512_reduce_add_ps     //horizontal sum of 16 floats
_mm512_reduce_add_pd     //horizontal sum of 8 doubles
_mm512_reduce_add_epi32  //horizontal sum of 16 32-bit integers
_mm512_reduce_add_epi64  //horizontal sum of 8 64-bit integers

基本上,我需要在以下代码段中实现MAGIC。>

__m512i all_ones = _mm512_set1_epi16(1);
short sum_of_ones = MAGIC(all_ones);
/* now sum_of_ones contains 32, the sum of 32 ones. */

最明显的方法是使用_mm512_storeu_epi8并将数组的元素加在一起,但这会很慢,而且它可能会使缓存无效。我想有一种更快的方法。

同样是实现_mm512_reduce_add_epi16的奖励点。

AVX512为我们提供了将__mm512向量中的所有单元格求和的内在函数。但是,它们的某些对应项缺失:尚无_mm512_reduce_add_epi8。 _mm512_reduce_add_ps //水平...

c x86 simd intrinsics avx
1个回答
4
投票

首先,_mm512_reduce_add_epi64不对应于单个AVX512指令,但它会产生一系列混洗和加法。

© www.soinside.com 2019 - 2024. All rights reserved.