Intel Параллельная Студия 2011 - параллельное суммирование - PullRequest
0 голосов
/ 20 июля 2011

У меня есть серийный код, который выглядит примерно так:

sum = a;
sum += b;
sum += c;
sum += d;

Я бы хотел распараллелить это примерно так:

temp1 = a + b     and in the same time     temp2 = c + d
sum = temp1 + temp2

Как мне это сделать с помощью инструментов Intel для параллельной студии?

Спасибо !!!

1 Ответ

1 голос
/ 25 июля 2011

Предполагая, что все переменные имеют целочисленные типы или типы с плавающей запятой, нет никакого смысла распараллеливать этот код (в смысле выполнения различными потоками / ядрами), так как издержки будут намного выше, чем любая выгода от Это. Применимый параллелизм в этом примере находится на уровне нескольких вычислительных блоков и / или векторизации на одном CPU. Оптимизирующие компиляторы в настоящее время достаточно сложны, чтобы использовать это автоматически, без изменений кода; однако, если вы хотите, вы можете явно использовать временные переменные, как во второй части вопроса.

И если вы спросите просто из любопытства: Intel Parallel Studio предоставляет несколько способов распараллеливания кода. Например, давайте использовать ключевые слова Cilk вместе с лямбда-функциями C ++ 11:

#include <cilk/cilk.h>
...
temp = cilk_spawn [=]{ return a+b; }();
sum = c+d;
cilk_sync;
sum += temp;

Не рассчитывайте на повышение производительности (см. Выше), если только вы не используете классы с перегруженной вычислительной нагрузкой operator+.

...