我们如何对数组的先前单元使用SSE内部算法运算?

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

我有尝试使用SSE2 Intrinsics运行的代码。

float *a, *b;
__m128 *va, *vb;

float k0 = 0.5, k1 = 0.5, k2 = 0.5, k3 = 0.5, k5 = 0.5, k6 = 0.5, k7 = 0.5, k8 = 0.5;
float k4 = 5.0;
int i, j;

i = posix_memalign((void **)&a, 16, N* M* sizeof(float));
if (i!=0){
    exit(1);
}

i = posix_memalign((void **)&b, 16, N* M* sizeof(float));
if (i!=0){
    exit(1);
}

。。。。。

    va = (__m128*)a;
    vb = (__m128*)b;

for(i = 1; i < N - 1; i++){
    for(j = 1; j < M - 1; j++){
        b[j+i] = (a[(i-1)+(j-1)] * k0) + (a[(i-1)+j] * k1) + (a[(i-1)+(j+1)] * k2) + (a[i+(j-1)] * k3) + (a[i+j] * k4) + (a[i+(j+1)] * k5) + (a[(i+1)+(j-1)] * k6) + (a[(i+1)+j] * k7) + (a[(i+1)+(j+1)] * k8); 
    }
}

k值为常数。一个数组代表屏幕的像素。我的问题是我无法使用

_mm_add_ps(*va, *vb);

在维数组上。有什么想法吗?

c arrays multidimensional-array sse intrinsics
1个回答
0
投票

我昨天完成了代码。这是文件的链接:

https://github.com/DeadManLogan/parprog1920a1/blob/master/sse.c

免责声明:它不像它应该的那样工作。如果出于某种原因,较大的数组(如果不是较小的则不是更快)会在sime时间运行。但是,我认为sse2内部函数背后的想法是正确的。

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