Я работаю с 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 очень трудны для понимания. Спасибо!