Арсенал средств, предназначенных для программирования параллельных вычислений, довольно широк и многообразен. Он включает в себя коммуникационные библиотеки, распараллеливающие компиляторы (автоматические и полуавтоматические), специализированные параллельные библиотеки, специализированные прикладные пакеты. Часть этих средств являются узкоспеци┐ализированными, предназначенными для решения конкретных задач, как например, специализированные прикладные пакеты (ANSYS, GAUSSIAN), а часть предоставляет универсальные средства для разработки параллельных программ.
В данном подразделе кратко рассматривается применение различных технологий для разработки параллельных программ на примере решения простейшей задачи - вычисления числа π по приближенной формуле:
Эта формула представляет собой вычисление определенного интеграла простейшим методом прямоугольников. Графическая интерпретация этого способа вычисления числа π представлена на Рис.1.4.
Рис.1.4. Графическая интерпретация вычисления числа π.
Выбор указанного примера обусловлен его исключительной простотой и легкостью программирования. Поскольку задача проста и хорошо распараллеливается, то можно ожидать, что листинги программ решения этой задачи будут короткими и легкими для восприятия.
Для начала приведем листинг последовательной программы на языке Cи. Она очень проста и в дополнительных комментариях не нуждается. В качестве параметра в программу передается единственный параметр - количество интервалов разбиения.
#includeint main(int argc, char **argv) { int n, i; double d, s, x, pi; n = atoi(argv[1]); d = 1.0/n; s = 0.0; for (i=1; i<=n; i++){ x = (i-0.5)*d; s += 4.0/(1.0+x*x); } pi = d*s; printf("pi=%.15f\n", pi); }
Рассмотрим, как усложнится эта простая программа при использовании различных способов организации параллельных вычислений.