Как SIMD ведет себя в этом случае? - PullRequest
0 голосов
/ 17 января 2012

Я использую движок, который позволяет писать SIMD-код, и он работает быстро.Но есть только один блок, в котором есть весь код.

Я понимаю, что этот код запускается независимо для каждой сущности одновременно, но когда меняется только одна вещь, все равно быстрее ли ее вычислять независимо?Это идея с SIMD, параллелизм?

Например:

void simdFunction ()
{
    center = mesh.center();    // always the same
    vert.pos.x = center.x;    // run on each vertex
}

В этом случае центр всегда одинаков, поэтому будет ли он рассчитываться для каждой вершины на SIMD?Если да, то по-прежнему ли это эффективно?

В принципе, возможность выполнения этого параллельно перевешивает затраты на его вычисление независимо от общего смысла программирования SIMD?

1 Ответ

4 голосов
/ 17 января 2012

этот код запускается независимо на каждой сущности одновременно

Нет, SIMD работает не так.

В SIMD все арифметические единицы работают в режиме блокировки, выполняя идентичные операции.Независимости нет вообще.

Как правило, вам лучше вычислять общие константы только один раз в последовательном коде.Таким образом, механизм SIMD будет тратить меньше времени на каждый срез вершин.

Исключением может быть, если вычисление короткое, SIMD является сопроцессором (например, GPGPU), и данные уже находятся в этомсопроцессор.Тогда его вычисление с использованием SIMD может легко превратить перемещение данных в последовательный процессор и обратно.

...