微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

二维数组的 SSE

如何解决二维数组的 SSE

我想使用 SSE3 指令更改以下代码

 for (i=0; i<=imax+1; i++) {
        /* The vertical veLocity approaches 0 at the north and south
         * boundaries,but fluid flows freely in the horizontal direction */
        v[i][jmax] = 0.0;
        u[i][jmax+1] = u[i][jmax];

        v[i][0] = 0.0;
        u[i][0] = u[i][1];
    }

u 和 v 是 float 类型的二维数组。到目前为止,我所拥有的是这个,但程序无法正常运行。

    int loop2 = ((imax+1) / loopFactor) * loopFactor;
    for(i=0; i<loop2; i+=loopFactor) {
        
        __m128 zeroVec = _mm_set1_ps(0.0f);
        _mm_storeu_ps(&v[i][jmax],zeroVec);
        __m128 umaxVec = _mm_loadu_ps(&u[i][jmax]);
        _mm_storeu_ps(&u[i][jmax+1],umaxVec);

        __m128 zVec = _mm_set1_ps(0.0f);
        _mm_storeu_ps(&v[i][0],zVec);
        __m128 uVec = _mm_loadu_ps(&u[i][1]);
        _mm_storeu_ps(&u[i][0],uVec);
    }
    for (; i<=imax+1; i++){
        v[i][jmax] = 0.0;
        u[i][jmax+1] = u[i][jmax];

        v[i][0] = 0.0;
        u[i][0] = u[i][1];
    }

我怀疑这是因为 _mm_loadu_ps 存储了 u[i][1]、u[i][2]、u[i][3] 和 u[i][4] 的值] 但我想存储值 u[i][1]、u[i+1][1]、u[i+2][1]、u[i+3][1] 和 u[i+ 4][1]。我怎样才能做到这一点? Loopfactor 的值为 4。 非常感谢任何帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。