О реализации параллельных вычислений в системе Wolfram Mathematica Текст научной статьи по специальности «Компьютерные и информационные науки»
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Егорова Дарья Константиновна, Шмелева Мария Дмитриевна
В статье рассматриваются некоторые вопросы реализации параллельных вычислений в системе компьютерной алгебры Wolfram Mathematica . Проводится сравнительный анализ нескольких последовательных и параллельных алгоритмов , реализованных в
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Егорова Дарья Константиновна, Шмелева Мария Дмитриевна
Возможности параллельного программирования в математических пакетах
Оценка эффективности реализации параллельных алгоритмов на нрс-кластере
Реализация параллельного алгоритма глобального поиска на gpu
Обзор моделей параллельных вычислений
Повышение производительности расчета динамики частиц на параллельных системах
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Wolfram Mathematica 8.0 и Visual Studio 2010 c поддержкой OpenMP.The article considers some issues of implementation of parallel computing in Wolfram Mathematica . The analysis of several sequential and parallel algorithms implemented in Wolfram Mathematica 8.0 and Visual Studio 2010 with OpenMP support is presented.
Текст научной работы на тему «О реализации параллельных вычислений в системе Wolfram Mathematica»
ШМЕЛЕВА М. Д., ЕГОРОВА Д. К.
О РЕАЛИЗАЦИИ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛЕНИЙ В СИСТЕМЕ WOLFRAM MATHEMATICA Аннотация. В статье рассматриваются некоторые вопросы реализации параллельных вычислений в системе компьютерной алгебры Wolfram Mathematica. Проводится сравнительный анализ нескольких последовательных и параллельных алгоритмов, реализованных в Wolfram Mathematica 8.0 и Visual Studio 2010 c поддержкой OpenMP.
Ключевые слова: Wolfram Mathematica, последовательный алгоритм, параллельный алгоритм, время, ускорение, эффективность.
SHMELYOVA M. D., EGOROVA D. K.
ON IMPLEMENTATION OF PARALLEL COMPUTING IN WOLFRAM MATHEMATICA SYSTEM Abstract. The article considers some issues of implementation of parallel computing in Wolfram Mathematica. The analysis of several sequential and parallel algorithms implemented in Wolfram Mathematica 8.0 and Visual Studio 2010 with OpenMP support is presented.
Keywords: Wolfram Mathematica, sequential algorithm, parallel algorithm, time, acceleration, efficiency.
Система компьютерной алгебры 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.
Рис. 3. Последовательный алгоритм. Рис. 4. Параллельный алгоритм.
Последовательные вычисления произвели с помощью функции Sum. ParallelSum параллельная версия Sum, которая автоматически распределяет частичные сложения между различными ядрами и процессорами. Функция AbsoluteTiming возвращает реальное время вычисления своего аргумента в секундах и результат вычисления аргумента. Ее отличие от функции Timing заключается в том, что Timing измеряет количество процессорного времени, потребляемый ядром для оценки данного выражения. Ее результат лишь приблизителен, так как, в зависимости от базовой платформы, он может включать или не включать в себя процессорное время, используемое для системных вызовов, ошибок страниц и т.д. Она также не включает в себя время центрального процессора, используемого для параллельных процессов и потоков, и на ядра системы Wolfram Mathematica [3; 4].
Вычислим эффективность и ускорение алгоритмов (см. табл. 1).
Эффективность и ускорение алгоритмов
Visual Studio Wolfram Mathematica
Последовательный алгоритм Параллельный алгоритм Последовательный алгоритм Параллельный алгоритм
Время, Т 0,019353 0,002518 0,469 0,047
Т-, Ускорение, S=— Тп 7,685861795 9,9787234
5 Эффективность, E=- 3,84293 4,9893617
Из результатов таблицы 1 видно, что E>1, т.е. мы получили суперлинейное ускорение. Это может быть связано с тем, что, например, при реализации вычислений в Visual Studio в качестве последовательного алгоритма был применен не самый оптимальный алгоритм из известных, а при вычислениях реализованных в Wolfram Mathematica увеличение количества вычислений вызвало рост суммарного объема их оперативной и кэш памяти вследствие чего, большая часть данных умещается в кэше.[1]
Рассмотрим задачу вычисления числа п. Результаты замеров времени при параллельной и последовательной реализациях в Visual Studio и Wolfram Mathematica приведены в таблице 2.
Сравнительный анализ ускорения и эффективности при параллельной и последовательной реализациях алгоритма вычисления числа я в Visual Studio и Wolfram Mathematica
Visual Studio Wolfram Mathematica
Последовательный алгоритм Параллельный алгоритм Последовательный алгоритм Параллельный алгоритм
Время, T 0,064970 0,063345 126,0468750 96,672
т1 Ускорение, S=— Тп 1,025653 1,3038612
5 Эффективность, E=- 0,512826 0,65193
Из таблиц 1 и 2 видно, что время вычислений как последовательного, так и параллельного алгоритмов приведенных тестовых задач в Wolfram Mathematica существенно больше времени выполнения тех же задач в Visual Studio. Хотя ускорение, все же, достигает
удовлетворительных значений и в первом, и во втором случае. Следует заметить, что при повторном запуске одних и тех же вычислений в Wolfram Mathematica получаем худший результат при параллельных вычислениях, так как система «запоминает» предыдущие действия и при запуске последовательного алгоритма не тратит время на вычисления, а при запуске параллельных вычислений тратит время на распределение данных по ядрам.
Решение этих проблем [2] при реализации параллельных алгоритмов в системе Wolfram Mathematica может состоять в выполнении следующих действий:
1) при контрольных замерах времени загружать данные ядра только один раз;
2) избегать необходимости обмена данными между ядрами с помощью совместно используемых данных;
3) избегать повторения идентичных вычислений на отдельных ядрах.
1. Зюзьков В. М. Компьютерная алгебра. — Томск: Издательство Томского университета, 2014. — 121 с.
2. Mangano S. Mathematica Cookbook. — O’Reilly Media, 2010. — 830 р.
Как запустить терминал языка Wolfram Language
Терминал вычислительного ядра языка Wolfram Language – это текстовая среда для выполнения вычислений. У него есть много применений, включая диагностирование трудностей с установкой. Следующий пример содержит указания для системы Mathematica.
Windows
Щелкните на меню Пуск, выбирете All Programs ► Wolfram Mathematica, потом щелкните на программу Mathematica Kernel.
Mac

- Откройте приложение Finder и откройте в нем директорию Applications. Щелкните правой кнопкой мышки или щелкните мышкой, удерживая нажатой клавишу Control по иконке Mathematica в директории Applications и выберите “Show Package Contents” (отображать содержимое пакета).
- Появится новое окно. Перейдите в папку Contents ► MacOS.
- Дважды щелкните по иконке MathKernel, чтобы запустить терминал системы Mathematica.
Linux
Откройте системный терминал и выполните следующую команду:
math
Это запустит терминальный консоль системы Mathematica.
Wolfram mathematica как запустить вычисление

Wolfram Mathematica 11.3 — наиболее полная система для современных технических вычислений в мире, которая не имеет себе равных в большом диапазоне измерений и уникальна в своей поддержке современной среды и организации рабочего процесса для технических расчётов:
- имеет в наличии почти 5000 встроенных функций, покрывающих все области технических расчётов;
- строится на беспрецендентно мощных алгоритмах всех предметных областей, многие из которых были созданы, используя уникальные методы развития и возможности языка Wolfram Language;
- благодаря когерентному дизайну и использованию интуитивных названий функций, состоящих из полных английских слов, язык Wolfram Language исключительно просто читать, использовать и изучать;
- система предоставляет прогрессивную высокоуровневую среду (суперфункции, мета-алгоритмы) с максимальным уровнем автоматизации, что позволяет быть наиболее продуктивными;
- плавно интегрированна с облаком, позволяя совместное использование и облачные расчёты;
- построена с целью предоставления возможностей промышленной мощности, с эффективными алгоритмами во всех областях, способными решать крупномасштабные задачи с параллелизмом, вычислениями на графических процессорах и многим другим.
Вы можете ознакомиться с открытыми ресурсами компании WOLFRAM, посвященных вычислениям и знаниям, а также с коллекцией курсов для студентов и преподавателей, направленной на изучение Mathematica.
Для сотрудников, преподавателей и аспирантов университета доступна установка сетевой версии лицензионного ПО Wolfram Mathematica 11.3 для обеспечения текущего учебного процесса и поддержки научных исследований.
Все сотрудники, преподаватели и аспиранты УрФУ при нахождении во внутренней университетской сети имеют доступ к ПО Wolfram Mathematica 11.3 по схеме конкурентного лицензирования (50 одновременных подключений). При запуске программы, если имеется свободная лицензия, будет разрешено запустить приложение.
Для получения лицензии ответственный за использование ПО в подразделении должен заполнить соответствующую заявку и выслать ее по адресу softinv@urfu.ru.
~32 кБ, *.xls (Размещен 06.02.2018)
Работа с выражениями
Для запуска программы наберите команду mathematica в командном окне, либо в стартовом меню выберите пункт Mathematica.

При старте открывается рабочее окно, в котором отображаются ввод и вывод программы. В верхней его части находится меню, позволяющее выполнять различные действия, в том числе сохранение текущей сессии в файле с расширением nb. Кроме основного окна в работе участвуют так называемые палитры. Если они не появились при старте, то для их открытия можно воспользоваться пунктом Palettes из меню File. Палитра Basic Input предоставляет набор кнопок для ввода наиболее употребительных символов, таких как корни, дроби, интегралы, буквы греческого алфавита и т. д. Палитра Basic Calculations содержит шаблоны для вычисления основных алгебраических функций.
Чтобы инициировать процесс вычисления после набора команды нужно одновременно нажать клавиши Shift и Enter (либо клавишу Enter на числовой клавиатуре справа). После завершения расчета программа присваивает имена вида In[1] и Out[1] исходному выражению и результату. Можно отменить показ имен, отключив в меню Kernel пункт Show In/Out Names.
Mathematica в качестве имен функций почти всегда использует их английские названия. Исключениями являются несколько наиболее употребимых функций: кроме N для определения численного значения, символ D используется для нахождения производной.
Дополнительную информацию о назначении той или иной функции в ходе работы с системой можно получить, используя следующие команды:
| ? Name | — помощь по заданному слову Name; |
| ?? Name | — расширенная помощь по заданному слову Name. |
Большинство функций программы Mathematica являются встроенными, т. е. становятся доступными сразу после загрузки системы. Кроме того, имеется набор так называемых пакетов расширения, содержащих специализированные функции для работы в той или иной области. Среди них Algebra, Calculus, DiscreteMath, Geometry, LinearAlgebra, Miscellaneous, Graphics, NumberTheory, NumericalMath, Statistics и некоторые другие. Каждый из пакетов содержит набор подпакетов, например, в пакет Algebra входят такие подпакеты, как InequalitySolve для решения неравенств, SymbolicSum для вычисления сумм рядов, Trigonometry для работы с тригонометрическими выражениями и другие. Для того чтобы сделать доступными функции, входящие в состав специализированных пакетов, следует их подключить командой типа
Needs["Algebra`Trigonometry`"]
Mathematica всегда старается упростить введенное выражение. Если вы попробуете вычислить корень квадратный из двадцати, для чего после ввода соответствующего выражения нажмете Shift+Enter, то результатом окажется выражение, равное двум корням из пяти. Программа упростит выражение, оставив его в символьном виде. Для того чтобы получить численное значение выражения expr, следует использовать функцию N[expr] или N[expr, n], где n задает точность вычислений. По умолчанию выводится значение выражения с пятью знаками после запятой.
Для ввода выражений удобно пользоваться палитрой Basic Input, которая содержит шаблоны для ввода степеней, дробей, радикалов, греческих букв и т. п. При выборе соответствующего шаблона появляется возможность ввести нужные значения (место для ввода значений выглядит как небольшой квадратик).
Отметим некоторые особенности синтаксиса системы, используемого при записи арифметических выражений:
Mathematica допускает использование чисел четырех видов: целые, рациональные, вещественные и комплексные. Все типы чисел могут содержать любое количество цифр. Чтобы число рассматривалось как вещественное, оно должно содержать точку в его записи, даже если дробная часть равна нулю, например, 2. или 2.0.
Для перевода числа, заданного в системе счисления с произвольным основанием, в десятичную используется конструкция Основание^^Число, а для обратного перевода числа a из десятичной системы в систему с основанием n (где n не превышает 32) — функция BaseForm[a, n].

Инициализация переменных осуществляется при помощи операции =, для аннулирования значения переменной следует после знака равно указать символ . (точка).

При выполнении вычислений особая роль отводится символу % — он означает результат предыдущей операции. Комбинация символов %% соответствует результату операции, выполненной перед предыдущей, и так далее.
Для того чтобы «заставить» систему упростить выражение, используется функция Simplify. Ниже приведены примеры использования этой функции.

Функция Expand раскрывает скобки в выражении. Например, в результате выполнения команды Expand[(a + b) 3 ] получится a 3 + 3a 2 b + 3ab 2 + b 3 .
К сожалению, функция Simplify не всегда выдает самый простой результат. В этом случае можно использовать функцию FullSimplify.

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

Разложение на множители, если это возможно, осуществляет функция Factor. Эта функция может работать и с тригонометрическими выражениями, но в этом случае нужно использовать дополнительную опцию Trig -> True:
In[10]:= Factor[x^4+8x^3+17x^2+16x+30] Out[10]= (3 + x)(5 + x)(2 + x^2) In[11]:= Factor[Sin[6x]/Sin[2x] + Cos[6x - Pi]/Cos[2x], Trig -> True] Out[11]= 2
Напомним, это многочленом P(x)степени n от переменной x называется выражение вида
Для вынесения общего числового множителя в многочлене за скобки предназначена функция FactorTerms[poly, x], где poly есть многочлен от переменной x. Для получения списка коэффициентов при степенях x, начиная с нулевой, используется функция CoefficientList[poly, x].
In[12]:= FactorTerms[1232x^4+168x+144, x] Out[12]= (8 ((18 + 21x + 154x^4)) In[13]:= CoefficientList[12x^4+68x+44,x] Out[13]=
Некоторые другие функции для работы с многочленами приведены в следующей таблице.
| PolynomialGCD[poly1, poly2] | Нахождение наибольшего общего делителя poly1 и poly2 |
| PolynomialLCM[poly1, poly2] | Нахождение наименьшего общего кратного |
| PolynomialQuotient[poly1, poly2, x] | Нахождение частного от деления poly1 на poly2 |
| PolynomialRemainder[poly1, poly2, x] | Нахождение остатка от деления poly1 на poly2 |
Пример
Пусть P1(x)= x 4 +2x 3 -4x 2 -5x-6. Определим, является ли число 2 корнем уравнения P1(x)=0. Известно, что многочлен делится без остатка на выражение x-x0, где x0 — корень уравнения. Найдем остаток от деления P1(x) на x-2:
PolynomialRemainder[x^4+2x^3-4x^2-5x-6, x-2 , x].
Результат равен 0, следовательно 2 — корень данного уравнения.
Задания
- Вычислитe 2 -10 с точностью 20 знаков после запятой.
- Упростите выражение .
- Разложите на множители выражение
x 6 -18x 5 +135x 4 -540x 3 + 1215x 2 -1458x+729. - Найдите остаток от деления многочлена P1(x) на x-1.
Ввод выражений

В документах Wolfram на локальном компьютере или в облаке, для начала работы нужно просто набрать нужное выражение и, затем, нажать SHIFT + ENTER для расчета:

2 + 2
| Out[1]= | ![]() |
Метки In[n] и Out[n] обозначают соответствующие входные и выходные данные. Символ % обозначает результат последних вычислений:
Как выполнять одновременные вычисления в языке Wolfram Language
Использование множественных ядер языка Wolfram Language позволяет одновременно выполнять разные команды. Это делает возможным, например, использование пользовательского интерфейса системы the Mathematica для интерактивных вычислений в то время, как одно из ядер производит трудоемкое вычисление. Для того, чтобы использовать множественные ядра языка Wolfram Language, создайте конфигурацию нового ядра и используйте его для вычислений в новом блокноте. Шаги создания нового ядра схожи на те, что необходимы для соединения с удаленным ядром, за тем только исключением, что новое ядро будет локальным, а не удаленным.
- Запустите систему Mathematica. В меню выберете Evaluation ► Kernel Configuration Options.

- Появится диалог конфигурирования ядер.

- Для того, чтобы добавить и конфигурировать новое ядро, нажмите кнопку Add (добавить). Появится диалоговое окно Kernel Properties (параметры ядра).

- Введите подходящее название для ядра, как, например, “Alternate Local Kernel”.”
- В разделе Basic Options (основные параметры) убедитесь, что “Launch on” (выполнять на) установлено в состояние “Local Machine” (локальный компьютер).
- Нажмите кнопку OK для подтверждения выбранных значений параметров.
- Откройте новый Wolfram блокнот.
- В меню выберете Evaluation ► Notebook’s Kernel и щелкните по имени новосозданного ядра.

Этот блокнот теперь использует альтернативное ядро. Любые вычисления в этом блокноте выполняются независимо и одновременно с вычислениями в других блокнотах.
Как использовать вывод команд таких Solve
Команда Solve и другие функции, такие как FindInstance, NSolve и NDSolve возвращают результат в форме списка правил. В языке Wolfram Language правила ассоциируют символ со значениями. Например, рассмотрим такой вывод:
roots = Solve[x^2 + 4 x - 1 == 0, x]
-2 - Sqrt[5]>, -2 + Sqrt[5]>>
Результат вычисления – это список списков правил. Каждый подсписок представляет собой возможное значение переменной x. Для получения первого решения в виде правила можно вычислить:
roots[[1]]
-2 - Sqrt[5]>
Символ – это x , а его значение – это — 2 — Sqrt[5] . Команда ReplaceAll (или сокращенно, /. ) заменяет каждое появление символа на его значение согласно данному правилу. Например, если мы хотим всюду заменить символ x в многочлене x^2 + 4 x — 1 на значение его первого корня, мы используем следующую команду:
x^2 + 4 x - 1 /. roots[[1]]
Результат вычисления такой подстановки дает ожидаемый ноль. Для получения второго корня многочлена и присвоения его новой переменной secondRoot вычислим:
secondRoot = x /. roots[[2]]
Пожалуйста, ознакомьтесь с вводным материалом о применении правил, где приведены дополнительные примеры и дана информация об использовании правил. Для некоторых команд, таких как NDSolve существуют эквивалентные команды с суффиксом “Value” (то есть, NDSolveValue), которые вместо правил подстановки дают непосредственные решения.
Вычисления в среде MATLAB, Wolfram Mathematica, Maple, Comsol
MATLAB – пакет прикладных программ для решения разнообразных задач технических вычислений. В рамках пакета введен одноименный язык программирования. В пакет входят инструменты для решения задач цифровой обработки сигналов, финансового анализа, разнообразных математических задач, визуализации и представления данных, расчета систем управления, и т.п. Также есть возможность интеграции с рядом дополнительных инструментальных средств – тулбоксов, типа Simulink.
Wolfram Mathematica – система компьютерной алгебры, включающая множество функций для аналитических преобразований и численных расчетов. Система включает превосходные средства визуализации, поддерживает работу со звуком. Пользовательский интерфейс удобен и понятен. Mathematica обладает возможностью осуществлять вызовы функций и принимать вызовы с C, .NET, Java и других языков, генерировать C код, компилировать автономные библиотеки и исполняемые файлы.
Maple – является важным инструментом для исследователей, преподавателей и студентов в любых математических и технических дисциплинах. Общая ориентированность пакета на символьные преобразования (компьютерную алгебру), но также поддерживает и численные вычисления. Кроме того, имеется несколько тысяч специальных функций, хранящихся в подгружаемых к ядру пакетах и библиотеках. Обладает прекрасными графическими возможностями, средствами программирования.
COMSOL – программная среда, обеспечивающая все этапы моделирования (определение геометрических параметров, описание физики, визуализация), позволяющая моделировать любые физические процессы, которые могут быть представлены в виде системы дифференциальных уравнений в частных производных. Среди рассматриваемых дисциплин ― электротехника, механика, гидродинамика, химия (в том числе с учётом химической кинетики), связанные явления на микроуровне, оптические и высокочастотные эффекты. COMSOL Multiphysics включает в себя графический пользовательский интерфейс (GUI) и набор предварительно сконфигурированных пользовательских интерфейсов и инструментов моделирования (т.н. физические интерфейсы), которые предназначены для стандартных задач моделирования. Дополнительные модули расширяют возможности платформы COMSOL Multiphysics, обеспечивая моделирование в специфических областях науки и техники и интеграцию с программными пакетами сторонних разработчиков и их функциями.
Примеры исследований, проводимых в среде:
Данная среда используется во многих областях науки: физические и химические расчёты, символьные вычисления, численное моделирование, инженерных расчёты, обработка больших объёмов данных. Также среда активно используется в поддержке научно-образовательного процесса.
Характеристики стандартной вычислительной среды:
- OS: Windows 7 Professional,
- CPU: 4 ядер,
- RAM: 4 GB,
- HDD: 250 GB,
- MATLAB R2016a,
- Wolfram Mathematica 9,
- Maple 15,
- Comsol 4.3.
