simd

    4热度

    1回答

    比方说,例如,我有2个变量__m256i叫rows和cols,在他们里面的值是:现在 rows: 0, 2, 7, 5, 7, 2, 3, 0 cols: 1, 2, 7, 5, 7, 2, 2, 6 ,这些值表示为8个点的x和y位置,从而,在这种情况下,我将有以下几点: p0: [0, 1], p1: [2, 2], p2: [7, 7], p3: [5, 5] p4: [7, 7],

    -1热度

    1回答

    我想转换一些现有的代码,可以使用SIMD指令进行优化。有一个掩码生成代码,我正在测试转换后可以从SIMD中获得多少性能,下面是我用来分析它的一个过于简化的块。 Random r = new Random(); var random1 = new double[65536000*4]; var random2 = new double[random1.Length]; var result =

    1热度

    1回答

    考虑存储器布局,使得8个连续的4字节块读取[abcdefgh]。我把它们加载到两个寄存器v0.4s和v1.4s,所以我得到v0.4s = [abcd]和v1.4s = [efgh],其中每个字符代表一个32位块。我想重新排序它们以获得两个(可能不同)寄存器中的[abef]和[cdgh]。 我现在的做法是首先将[efgh]的64位二进制取反,得到[ghef]。然后我可以使用提取得到[abef]和[g

    4热度

    1回答

    我无法在内核中找到很多SIMD指令(如SSE/AVX)的使用(除了用于加速RAID6的奇偶校验计算的地方)。 Q1)任何具体原因或只是缺少用例? Q2)如果我想使用SIMD指令,比如设备驱动程序,那么今天需要做什么? Q3)将ISPC这样的框架纳入内核(仅用于实验)有多难?

    -2热度

    1回答

    所以我在编译Dolphin时遇到这个错误。我已经尝试过clang-3.7和3.8以及GCC 5.2和6.3。奇怪的是,所有其他_mm函数似乎都可以工作,只是这一个。

    1热度

    1回答

    的我有一个函数: void Func(const int * a, const int * b, size_t size, int p, int * c) { for (size_t i = 0; i < size; ++i) c[i] = (a[i]*b[i])%p; } 执行该功能为整数的数组许多模乘法。 所有整数都是正数。 而且我需要改善它的表现。 我想到了SS

    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,但我想用

    0热度

    1回答

    我目前正在处理一个处理图像的项目。为了加速这个过程(并增加我的知识),我决定使用SIMD指令编写一些基本功能。 使用for循环的代码是 int idx; uint16_t* A, B, C; float gAlpha = 0.8; float alpha = 0.2; for (size_t rw = 0; rw < height; rw++) { for (size_t cl

    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, _

    3热度

    1回答

    我试图以11位精度尾数实现快速atan2(浮点数)。atan2实现将用于图像处理。 所以用SIMD指令(impl瞄准x86(带有SSE2)& ARM(带有vpfv4 NEON))可能会更好。 现在,我使用切比雪夫多项式近似(https://jp.mathworks.com/help/fixedpoint/examples/calculate-fixed-point-arctangent.html)