Intel Параллельная Студия 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 ответ

Решение

Предполагая, что все переменные имеют целочисленные типы или типы с плавающей запятой, нет абсолютно никакого смысла распараллеливать этот код (в смысле выполнения различными потоками / ядрами), так как издержки будут намного выше, чем любая польза от него. Применимый параллелизм в этом примере находится на уровне нескольких вычислительных блоков и / или векторизации на одном 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+,

Другие вопросы по тегам