О реализации параллельных вычислений в системе Wolfram Mathematica
Автор: Егорова Д.К., Шмелева М.Д.
Журнал: Огарёв-online @ogarev-online
Статья в выпуске: 20 т.4, 2016 года.
Бесплатный доступ
В статье рассматриваются некоторые вопросы реализации параллельных вычислений в системе компьютерной алгебры Wolfram Mathematica. Проводится сравнительный анализ нескольких последовательных и параллельных алгоритмов, реализованных в Wolfram Mathematica 8.0 и Visual Studio 2010 c поддержкой OpenMP.
Время, параллельный алгоритм, последовательный алгоритм, ускорение, эффективность
Короткий адрес: https://sciup.org/147249213
IDR: 147249213
Текст научной статьи О реализации параллельных вычислений в системе Wolfram Mathematica
Система компьютерной алгебры Wolfram Mathematica является весьма эффективным средством вычислений. На сегодняшний день система содержит порядка 5 000 функций, многие из них написаны изначально в оптимизированном виде (особенно для низкоуровневых вычислений), а большинство операций в Wolfram Mathematica, таких как операции по снижению размерности, обработка статистических данных, обработка изображений и т.п. автоматически распараллеливаются на локальные ядра. Однако существует набор инструментов (например, ParallelSum, Parallelize, ParallelMap, ParallelTable, ParallelArray, ParallelCombine и т.д.) использование которых, при реализации многопоточных задач, призвано значительно ускорить код. Отметим, что в некоторых случаях ускорения может и не быть, или оно есть, но не достаточное по сравнению с применением других средств программирования для той же задачи. Это может быть связано с тем, что применение инструментов параллельного программирования в Wolfram Mathematica, возможно, решает задачи распределения данных и сбора результатов, не учитывая, например, накладные расходы и т.п.
Приведем несколько примеров. Все вычисления проведены на 2-х ядерном Intel Core 2 Duo с установленными лицензионными версиями Wolfram Mathematica 8.0 и Visual Studio 2010 c поддержкой OpenMP.
Проведем последовательное и параллельное вычисление суммы Е ^Д00 000 i реализованное на Visual Studio 2010. Результаты измерения времени вычисления приведены на рисунках 1 и 2.
Рис. 1. Последовательный алгоритм.

Рис. 2. Параллельный алгоритм.
Теперь произведем эти же вычисления в системе Wolfram Mathematica. Результаты приведены на рисунках 3 и 4.
ln[1l]:= Sum[i, {1, 1000 000}] //Timing) ln[10]:= Parallels™[к, {к, 1000 000}] //Timing
Out[11]= {0.469, 500 000 500 000} Out[1D]= {0.047, 500 000 500 000}
Рис. 3. Последовательный алгоритм. Рис. 4. Параллельный алгоритм.
Последовательные вычисления произвели с помощью функции Sum. ParallelSum параллельная версия Sum, которая автоматически распределяет частичные сложения между различными ядрами и процессорами. Функция AbsoluteTiming возвращает реальное время вычисления своего аргумента в секундах и результат вычисления аргумента. Ее отличие от функции Timing заключается в том, что Timing измеряет количество процессорного времени, потребляемый ядром для оценки данного выражения. Ее результат лишь приблизителен, так как, в зависимости от базовой платформы, он может включать или не включать в себя процессорное время, используемое для системных вызовов, ошибок страниц и т.д. Она также не включает в себя время центрального процессора, используемого для параллельных процессов и потоков, и на ядра системы Wolfram Mathematica [3; 4].
Вычислим эффективность и ускорение алгоритмов (см. табл. 1).
Таблица 1
Эффективность и ускорение алгоритмов
Visual Studio |
Wolfram Mathematica |
|||
Последовательный алгоритм |
Параллельный алгоритм |
Последовательный алгоритм |
Параллельный алгоритм |
|
Время, Т |
0,019353 |
0,002518 |
0,469 |
0,047 |
Ускорение, S— 1 тп |
7,685861795 |
9,9787234 |
||
S Эффективность, E= |
3,84293 |
4,9893617 |
Из результатов таблицы 1 видно, что E>1, т.е. мы получили суперлинейное ускорение. Это может быть связано с тем, что, например, при реализации вычислений в Visual Studio в качестве последовательного алгоритма был применен не самый оптимальный алгоритм из известных, а при вычислениях реализованных в Wolfram Mathematica увеличение количества вычислений вызвало рост суммарного объема их оперативной и кэш памяти вследствие чего, большая часть данных умещается в кэше.[1]
Рассмотрим задачу вычисления числа π. Результаты замеров времени при параллельной и последовательной реализациях в Visual Studio и Wolfram Mathematica приведены в таблице 2.
Таблица 2
Сравнительный анализ ускорения и эффективности при параллельной и последовательной реализациях алгоритма вычисления числа π в Visual Studio и Wolfram Mathematica
Visual Studio |
Wolfram Mathematica |
|||
Последовательный алгоритм |
Параллельный алгоритм |
Последовательный алгоритм |
Параллельный алгоритм |
|
Время, Т |
0,064970 |
0,063345 |
126,0468750 |
96,672 |
Ускорение, S=— * тп |
1,025653 |
1,3038612 |
||
S Эффективность, E= |
0,512826 |
0,65193 |
Из таблиц 1 и 2 видно, что время вычислений как последовательного, так и параллельного алгоритмов приведенных тестовых задач в Wolfram Mathematica существенно больше времени выполнения тех же задач в Visual Studio. Хотя ускорение, все же, достигает удовлетворительных значений и в первом, и во втором случае. Следует заметить, что при повторном запуске одних и тех же вычислений в Wolfram Mathematica получаем худший результат при параллельных вычислениях, так как система «запоминает» предыдущие действия и при запуске последовательного алгоритма не тратит время на вычисления, а при запуске параллельных вычислений тратит время на распределение данных по ядрам.
Решение этих проблем [2] при реализации параллельных алгоритмов в системе Wolfram Mathematica может состоять в выполнении следующих действий:
-
1) при контрольных замерах времени загружать данные ядра только один раз;
-
2) избегать необходимости обмена данными между ядрами с помощью совместно используемых данных;
-
3) избегать повторения идентичных вычислений на отдельных ядрах.
Список литературы О реализации параллельных вычислений в системе Wolfram Mathematica
- Зюзьков В. М. Компьютерная алгебра. - Томск: Издательство Томского университета, 2014. - 121 с.
- Mangano S. Mathematica Cookbook. - O'Reilly Media, 2010. - 830 р.
- Введение в Wolfram Mathematica [Электронный ресурс]. - Режим доступа: http://habrahabr.ru/post/180925/.
- Parallel Computing [Электронный ресурс]. - Режим доступа: http://www.wolfram.com/mathematica/.