我正在使用SIMD并尝试对循环进行矢量化。在这里,我试图向指针添加一个索引向量,左边,以便在该指标处获得指针的值,然后继续执行SIMD操作。
例如,如果我在没有SIMD的情况下这样做,它将如下所示:
x1 = left[a]
x2 = left[b]
x3 = left[c]
x4 = left[d]
其中[a,b,c,d]存储在索引向量中(index_left_float)
float* left_Array[] = {left, left, left, left};
__m128 left_Array_simd = _mm_load_ps((float *) left_Array);
__m128 nleft = _mm_add_ps(index_left_float, left_Array_simd);
我还尝试加载nleft 到一个新的向量中,以便将指针内存储的值保留在nleft的索引处,但它不会让我。
我唯一能想到的就是从向量中提取索引,正常进行计算,然后将其重新加载到向量,但这看起来非常昂贵,我试图尽可能地优化我的代码。任何建议表示赞赏!我发现SIMD / SSE网站很难理解。 谢谢!