intrinsics

    -1热度

    1回答

    使用AVX内在和Kahan的总和算法,我已经试过这(只是一个“加法”的部分): void add(const __m256 valuesToAdd) { volatile __m256 y = _mm256_sub_ps(valuesToAdd, accumulatedError); volatile __m256 t = _mm256_add_ps(accumulator,

    3热度

    1回答

    我试图在内核中嵌入ARMv8上的AES实现。我有一个C++实现,并且我有一个英特尔内核实现。 实现应该是等效的,所以我试图将英特尔用作ARMv8的蓝图。有一些差异,但他们是占了。问题是,我得到了不同的结果。 void AES_encrypt(const Byte *in, Byte *out, const RoundKey *rdkeys, unsigned int rounds) { #if

    2热度

    1回答

    我有两个浮点操作数的比较结果比较如下;我需要的是基于比较的结果做需要执行以下操作:即: neon_gt_res = vcgtq_f32(temp1, temp2); if(neon_gt_res[0]) array[0] |= (unsigned char)0x01; if(neon_gt_res[1]) array[0] |= (unsigned char)0x02; if(neon_gt

    3热度

    1回答

    _mm512_storenrngo_pd和_mm512_storenr_pd有什么区别? _mm512_storenr_pd(无效*公吨,__m512d V): 商店压缩双精度(64位)从V 浮点元素存储器地址公吨用非读取暗示到处理器。 我不清楚,什么没有读取提示的意思。这是否意味着它是非缓存一致写入。这是否意味着重用更昂贵或者不一致? _mm512_storenrngo_pd(无效*公吨,__m

    3热度

    1回答

    在AVX/AVX2中,我只能找到_mm256_stream_load_si256(),这是__m256i。有没有办法流式加载__m256d,为什么? (我想加载它没有污染CPU缓存) 是否有任何障碍做下列(积极铸造)? __m256d *pDest = /* ... */; __m256d *pSrc = /* ... */; /* ... */ const __m256i iWeigh

    5热度

    1回答

    我想从一个由8个整数组成的另一个__mm256i offset指定的8个位置从一个寄存器变量__mm256i src中提取8个比特。 例如:如果offset是[1,3,5,21,100,200,201,202],我想从src获得第1,3,5,10,100,121,202位,并将它们打包到int8。 这个问题类似于Extracting bits using bit manipulation,但我想用

    1热度

    1回答

    我正在看一些我们测试的ARM开发板的ARM反汇编。它们使用NEON固有的vld1q_u32使用-march=armv7-a -mfloat-abi=hard -mfpu=neon生产。 一个一个特定的机器与NEON我们看到(/proc/cpuinfo half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae

    3热度

    2回答

    在Visual C++中,当针对Windows 32位时_umul128未定义。 针对Win32时,两个无符号64位整数如何相乘? 该解决方案只需在针对Windows 32位的Visual C++ 2017上工作。

    1热度

    1回答

    我试图将一些ARM NEON代码移植到AltiVec。我们的NEON代码有两个LOAD,一个ROT,一个XOR和一个存储,所以它看起来像一个简单的测试案例。根据IBM的vec_rl文档: 结果的每个元素都是通过将左边的相应元素旋转b的相应元素指定的位数获得的。 该文档继续说vector unsigned int是,除非-qarch=power8最大的数据类型,在这种情况下vector unsign

    0热度

    2回答

    我发现_m128i int horizontal_max_Vec4i(__m128i x) { __m128i max1 = _mm_shuffle_epi32(x, _MM_SHUFFLE(0,0,3,2)); __m128i max2 = _mm_max_epi32(x,max1); __m128i max3 = _mm_shuffle_epi32(max2, _