intrinsics

    2热度

    1回答

    static __inline__ uint64_t mulhilo64(uint64_t a, uint64_t b, uint64_t* hip) { __uint128_t product = ((__uint128_t)a)*((__uint128_t)b); *hip = product>>64; return (uint64_t)product;

    2热度

    1回答

    我在看陆先生的PATCH: Update x86 rdrand intrinsics。我不知道我是否应该使用_rdrand_u64,_rdrand64_step或者是否有其他功能。似乎没有为他们编写测试用例。 看起来也似乎是缺少手册页(从Ubuntu的14,GCC 4.8.4): $ man -k rdrand rdrand: nothing appropriate. 一个人如何使用RDRA

    3热度

    1回答

    我正在写一些音频处理软件,我需要知道如何使用SSE2双精度指令来进行饱和运算。我的值需要在-1和1之间进行归一化。有没有一种聪明的方法可以用SSE2内在的方式来做到这一点,或者我需要2组if/else语句(每个值有一个)?

    0热度

    1回答

    使用Visual Studio 2012/C++: 我需要对我的resampler代码应用gamma校正。从Intels Docs我了解到,应该有内在的_mm256_pow_pd(),但我找不到它。 规划用途: _mm256_storeu_pd(&destinationData[y*dst4+x], _mm256_pow_pd(akku, _mm256_broadcast_sd(&gamma)))

    2热度

    1回答

    我想使用_bzhi_u32内部函数,但如果运行可执行文件的处理器不支持BMI2指令集,我想恢复为常规的C实现。 我使用GCC 4.8.3,我有以下 static inline uint32_t myfunc_bmi(uint32_t in) { return _bzhi_u32(in, 3); /* as an example */ } static void * resolve_m

    0热度

    1回答

    我需要将浮点向量(__m128)转换为整数向量(__m128i),并且我使用的是_mm_cvtps_epi32,但我没有得到期望的值。这是一个很简单的例子: __m128 test = _mm_set1_ps(4.5f); __m128i test_i = _mm_cvtps_epi32(test); 调试器输出我得到: (lldb) po test ([0] = 4.5, [1] = 4

    0热度

    2回答

    在(从here)这个neon指令: float32x2_t vsub_f32(float32x2_t a, float32x2_t b); // VSUB.F32 d0,d0,d0 是否返回 - B或b - 一个?我找不到它的ARM文档中......

    2热度

    2回答

    我有一个由32个字节组成的数组。我需要从这个数组中构建8个4字节的整数。例如 0x00,0x11,0x22,0x33 8位整数必须是一个0x00112233 32位整数。 我决定使用AVX指令,因为我可以用一个命令将整个数组加载到寄存器。 代码我写道: #include <stdio.h> #include "immintrin.h" typedef unsigned int uint32

    2热度

    1回答

    当我在寻找MMX功能时,我注意到他们中的两个,_m_empty和_mm_empty,有exactly the same definition。 那他们为什么都存在?他们中的一个比另一个更老?有没有在手册中提到的差异?

    0热度

    1回答

    作为一种学习练习,我正在努力加快在各种体系结构上使用SIMD的矩阵乘法代码。我对SSE2的3D矩阵乘法码有一个奇怪的问题,它的性能在两个极端之间跳跃,大约5ms(预期)或100万次操作的〜100ms。 这段代码所做的唯一不好的事情就是未对齐的存储/加载和最后的黑客来将向量存储到内存中而没有第四个元素践踏内存。这可以解释一些性能差异,但性能差异如此之大的事实让我怀疑我错过了一些重要的东西。 我已经尝