Сегодня мы рассмотрим: Настоящие ценители музыки знают, что для качественного...
Запуск MPI-приложения на вычислительном кластере возможен только через систему пакетной обработки заданий. Для упрощения запуска и постановки в очередь параллельной программы предусмотрен специальный скрипт mpirun. Например, mpirun -np 20 ./first.exe запустит параллельную программу first.exe на 20 процессорах, т.е. на 5 узлах. (Каждый узел имеет 2 двуядерных процессора). Стоит обратить внимание, что для запуска исполняемого модуля находящего в текущей директории ($pwd) необходимо явно указать путь «./» Ряд реализаций MPI-1 предоставляет команду запуска для программ MPI, которая имеет форму mpirun <аргументы mpirun><программа><аргументы программы>
Отделение команды запуска программы от самой программы обеспечивает гибкость, особенно для сетевых и гетерогенных реализаций. Наличие стандартного механизма запуска также расширяет мобильность MPI программ на один шаг вперед, к командным строкам и сценариям, которые управляют ими. Например, сценарий набора программ проверки правильности, который выполняет сотни программ, может быть переносимым сценарием, если он написан с использованием такого стандартного механизма запуска. Чтобы не перепутать ``стандартную"" команду с существующей на практике, которая не является стандартной и не переносимой среди реализаций, вместо mpirun MPI определил mpiexec.
В то время как стандартизированный механизм запуска улучшает применимость MPI, диапазон сред настолько разнообразен (например, не может даже быть интерфейса командной строки), что MPI не может принять под мандат такой механизм. Вместо этого, MPI определяет команду запуска mpiexec и рекомендует, но не требует, как совет разработчикам. Однако, если реализация обеспечивает команду называемую mpiexec, она должна иметь форму, описанную ниже: mpiexec -n
будет по крайней мере один способ запустить <программу> с начальным MPI_COMM_WORLD, чья группа содержит
Пример 4.1 Запуск 16 экземпляров myprog на текущей или заданной по умолчанию машине:
mpiexec -n 16 myprog
3. Напишите программу параллельного вычисления определенного интеграла от функции 2*(x+2*x*x/1200.0) в интервале .
Метод левых прямоугольников
double f(double x)
{return 2*(x+2*x*x/1200);} // iskomyi integral
int main(int argc,char **argv)
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
int n=1000,i,d; // 1000 - uzly
float a=0, b=1, h=(b-a)/n,s=0,r=0; //a i b -nachalo i konec otrezka
if (rank!=size-1) // schitaut vse processy, krome poslednego
{ for (i=rank*d; i<(rank+1)*d; i++) { s=s+h*f(a+i*h); }
MPI_Send(&s,1,MPI_FLOAT,size-1,1,MPI_COMM_WORLD);}
{ for (i=0; i { MPI_Recv(&s,1,MPI_FLOAT,i,1,MPI_COMM_WORLD, &status); r+=s; } } MPI_Finalize();} Сурак
1. Shared & distributed memory архитектуралары.
Распределенная общая память (DSM - Distributed Shared Memory) Традиционно распределенные вычисления базируются на модели передачи сообщений, в которой данные передаются от процессора к процессору в виде сообщений. Удаленный вызов процедур фактически является той же самой моделью (или очень близкой). DSM - виртуальное адресное пространство, разделяемое всеми узлами (процессорами) распределенной системы. Программы получают доступ к данным в DSM примерно так же, как они работают с данными в виртуальной памяти традиционных ЭВМ. В системах с DSM данные перемещаются между локальными памятями разных компьютеров аналогично тому, как они перемещаются между оперативной и внешней памятью одного компьютера. Конфигурация - с распределенной разделяемой памятью, представляет собой вариант распределенной памяти. Здесь все узлы, состоящие из одного или нескольких процессоров, подключенных по схеме SMP, используют общее адресное пространство. Отличие этой конфигурации от машины с распределенной памятью в том, что здесь любой процессор может обратиться к любому участку памяти. Однако, время обращения к разным участкам памяти для каждого процессора различно в зависимости от того, где участок физически расположен в кластере. По этой причине такие конфигурации еще называют машинами с неоднородным доступом к памяти NUMA (non-uniform memory access). Отличия MPI и PVM.
Система PVM (Parallel Virtual Machine) была создана для объединения нескольких связанных сетью рабочих станций в единую виртуальную параллельную вычислительную машину. Система представляет собой надстройку над операционной системой UNIX и используется на различных аппаратных платформах, включая и системы с массовым параллелизмом. Наиболее распространены сейчас системы параллельного программирования на основе MPI (Message Parsing Interface). Идея MPI исходно проста и очевидна. Она предполагает представление параллельной программы в виде множества параллельно исполняющихся процессов, взаимодействующих друг с другом в ходе исполнения передачи данных с помощью коммуникационных процедур. Они и составляют библиотеку MPI. Однако надлежащая реализация MPI для обеспечения межпроцессорных коммуникаций оказалась довольно сложной. Такая сложность связана с необходимостью достижения высокой производительности программ, необходимостью использовать многочисленные ресурсы мультикомпьютера, и, как следствие большим разнообразием в реализации коммуникационных процедур в зависимости от режима обработки данных. В этом посте мы расскажем об организации обмена данными с помощью MPI на примере библиотеки Intel MPI Library. Думаем, что эта информация будет интересна любому, кто хочет познакомиться с областью параллельных высокопроизводительных вычислений на практике. Мы приведем краткое описание того, как организован обмен данными в параллельных приложениях на основе MPI, а также ссылки на внешние источники с более подробным описанием. В практической части вы найдете описание всех этапов разработки демонстрационного MPI-приложения «Hello World», начиная с настройки необходимого окружения и заканчивая запуском самой программы. MPI является наиболее распространенным стандартом интерфейса передачи данных в параллельном программировании. Стандартизацией MPI занимается MPI Forum . Существуют реализации MPI под большинство современных платформ, операционных систем и языков. MPI широко применяется при решении различных задач вычислительной физики, фармацевтики, материаловедения, генетики и других областей знаний. Параллельная программа с точки зрения MPI - это набор процессов, запущенных на разных вычислительных узлах. Каждый процесс порождается на основе одного и того же программного кода. Основная операция в MPI - это передача сообщений. В MPI реализованы практически все основные коммуникационные шаблоны: двухточечные (point-to-point), коллективные (collective) и односторонние (one-sided). Для демонстрации я выбрал сервис Amazon Elastic Compute Cloud (Amazon EC2). Новым пользователям Amazon предоставляет пробный год бесплатного использования серверами начального уровня. Работа с Amazon EC2 интуитивно понятна. В случае возникновения вопросов, можно обратиться к подробной документации (на англ.). При желании можно использовать любой другой аналогичный сервис. Создаем два рабочих виртуальных сервера. В консоли управления выбираем EC2 Virtual Servers in the Cloud
, затем Launch Instance
(под «Instance» подразумевается экземпляр виртуального сервера). Следующим шагом выбираем операционную систему. Intel MPI Library поддерживает как Linux, так и Windows. Для первого знакомства с MPI выберем OC Linux. Выбираем Red Hat Enterprise Linux 6.6 64-bit
или SLES11.3/12.0
. После того, как сервис предложит нам запустить Launch Instances
(настроенные виртуальные сервера), сохраняем SSH-ключи, которые понадобятся для связи с виртуальными серверами извне. Состояние виртуальных серверов и IP адреса для связи с серверами локального компьютера можно отслеживать в консоли управления. Важный момент: в настройках Network & Security / Security Groups
необходимо создать правило, которым мы откроем порты для TCP соединений, - это нужно для менеджера MPI-процессов. Правило может выглядеть так: И, напоследок, небольшой опрос по поводу возможных тем для будущих публикаций, посвященных высокопроизводительным вычислениям. Только зарегистрированные пользователи могут участвовать в опросе. , пожалуйста. Распараллеливание на языке Си Пример 5a . Обмен сообщениями двух процессов на языке Си Пример 11a . Обмен по кольцевой топологии при помощи неблокирующих операций на языке Си Пример 14a . Схема итерационного метода с обменом по кольцевой топологии при помощи отложенных запросов на языке Си Пример 15a . Обмен по кольцевой топологии при помощи процедуры MPI_Sendrecv на языке Си Пример 16a . Моделирование барьерной синхронизации на языке Си Пример 17a . Моделирование глобального суммирования при помощи схемы сдваивания и коллективной операции MPI_Reduce на языке Си Пример 18a . Пользовательская глобальная функция на языке Си Пример 19a . Работа с группами на языке Си Пример 20a . Разбиение коммуникатора на языке Си Пример 22a . Cхема «мастер - рабочие» с использованием интеркоммуникатора на языке Си Пример 23a . Cхема «мастер - рабочие» с использованием графовой топологии на языке Си Пример 24a . Перестановка столбцов матрицы в обратном порядке на языке Си Пример 25a . Пересылка упакованных данных на языке Си master.c server.c Пример 28a Пример 31a . Буферизованное чтение из файла на языке Си Пример 33a . Обработка ошибок на языке Си Пример 34a . Условная компиляция на языке Си Пример 35a . Работа с системными таймерами на языке Си Пример 36a . Параллельная область на языке Си Пример 38a . Процедура omp_set_num_threads и опция num_threads на языке Си Пример 42a . Директива single и опция nowait на языке Си Пример 44a . Директива master на языке Си Пример 45a . Опция private на языке Си Пример 50a . Процедуры omp_get_num_threads и omp_get_thread_num на языке Си Пример 51a . Директива for на языке Си Аннотация:
Лекция посвящена рассмотрению технологии MPI как стандарта параллельного программирования для систем с распределенной памятью. Рассматриваются основные режимы передачи данных. Вводятся такие понятия, как группы процессов и коммуникаторы. Рассматриваются основные типы данных, операции "точка-точка", коллективные операции, операции синхронизации и измерения времени.
Цель лекции:
Лекция направлена на изучение общей методики разработки параллельных алгоритмов. Видеозапись лекции - (объем - 134 МБ). Рассмотрим ряд понятий и определений, являющихся основополагающими для стандарта MPI
. Под параллельной программой
в рамках MPI понимается множество одновременно выполняемых процессов
. Процессы могут выполняться на разных процессорах, но на одном процессоре могут располагаться и несколько процессов (в этом случае их исполнение осуществляется в режиме разделения времени). В предельном случае для выполнения параллельной программы может использоваться один процессор – как правило, такой способ применяется для начальной проверки правильности параллельной программы. Каждый процесс параллельной программы порождается на основе копии одного и того же программного кода (модель SPMP
). Данный программный код, представленный в виде исполняемой программы, должен быть доступен в момент запуска параллельной программы на всех используемых процессорах. Исходный программный код для исполняемой программы разрабатывается на алгоритмических языках C или Fortran с использованием той или иной реализации библиотеки MPI. Количество процессов и число используемых процессоров определяется в момент запуска параллельной программы средствами среды исполнения MPI-программ и в ходе вычислений меняться не может (в стандарте MPI-2 предусматривается возможность динамического изменения количества процессов). Все процессы программы последовательно перенумерованы от 0 до p-1
, где p
есть общее количество процессов. Номер процесса именуется рангом
процесса. Основу MPI составляют операции передачи сообщений. Среди предусмотренных в составе MPI функций различаются парные
(point-to-point
) операции между двумя процессами и коллективные
(collective
) коммуникационные действия для одновременного взаимодействия нескольких процессов. Для выполнения парных операций могут использоваться разные режимы передачи, среди которых синхронный, блокирующий и др. – полное рассмотрение возможных режимов передачи
будет выполнено в подразделе 5.3. Как уже отмечалось ранее, стандарт MPI предусматривает необходимость реализации большинства основных коллективных операций передачи данных – см. подразделы 5.2 и 5.4. Процессы параллельной программы объединяются в группы
. Под коммуникатором
в MPI понимается специально создаваемый служебный объект, объединяющий в своем составе группу процессов и ряд дополнительных параметров (контекст
), используемых при выполнении операций передачи данных. Как правило, парные операции передачи данных выполняются для процессов, принадлежащих одному и тому же коммуникатору. Коллективные операции применяются одновременно для всех процессов коммуникатора. Как результат, указание используемого коммуникатора является обязательным для операций передачи данных в MPI. В ходе вычислений могут создаваться новые и удаляться существующие группы процессов и коммуникаторы. Один и тот же процесс может принадлежать разным группам и коммуникаторам. Все имеющиеся в параллельной программе процессы входят в состав создаваемого по умолчанию коммуникатора с идентификатором MPI_COMM_WORLD. При необходимости передачи данных между процессами из разных групп необходимо создавать глобальный коммуникатор (intercommunicator
). Подробное рассмотрение возможностей MPI для работы с группами и коммуникаторами будет выполнено в подразделе 5.6. При выполнении операций передачи сообщений для указания передаваемых или получаемых данных в функциях MPI необходимо указывать тип
пересылаемых данных. MPI содержит большой набор базовых типов
данных, во многом совпадающих с типами данных в алгоритмических языках C и Fortran. Кроме того, в MPI имеются возможности для создания новых производных типов
данных для более точного и краткого описания содержимого пересылаемых сообщений. Подробное рассмотрение возможностей MPI для работы с производными типами данных будет выполнено в подразделе 5.5. Как уже отмечалось ранее, парные операции передачи данных могут быть выполнены между любыми процессами одного и того же коммуникатора, а в коллективной операции принимают участие все процессы коммуникатора. В этом плане, логическая топология линий связи между процессами имеет структуру полного графа (независимо от наличия реальных физических каналов связи между процессорами). Вместе с этим (и это уже отмечалось в разделе 3), для изложения и последующего анализа ряда параллельных алгоритмов целесообразно логическое представление имеющейся коммуникационной сети в виде тех или иных топологий. В MPI имеется возможность представления множества процессов в виде решетки
произвольной размерности (см. подраздел 5.7). При этом, граничные процессы решеток могут быть объявлены соседними и, тем самым, на основе решеток могут быть определены структуры типа тор
. Кроме того, в MPI имеются средства и для формирования логических (виртуальных) топологий любого требуемого типа. Подробное рассмотрение возможностей MPI для работы с топологиями будет выполнено в подразделе 5.7. И, наконец, последний ряд замечаний перед началом рассмотрения MPI: Приступая к изучению MPI, можно отметить, что, с одной стороны, MPI достаточно сложен – в стандарте MPI предусматривается наличие более 125 функций. С другой стороны, структура MPI является тщательно продуманной – разработка параллельных программ может быть начата уже после рассмотрения всего лишь 6 функций MPI. Все дополнительные возможности MPI могут осваиваться по мере роста сложности разрабатываемых алгоритмов и программ. Именное в таком стиле – от простого к сложному – и будет далее представлен весь учебный материал по MPI. Приведем минимально-необходимый набор функций MPI, достаточный для разработки достаточно простых параллельных программ. Первой вызываемой функцией
MPI должна быть функция: int MPI_Init (int *agrc, char ***argv); для инициализации среды выполнения MPI-программы. Параметрами функции являются количество аргументов в командной строке и текст самой командной строки. Последней вызываемой функцией
MPI обязательно должна являться функция: int MPI_Finalize (void); Как результат, можно отметить, что структура параллельной программы, разработанная с использованием MPI, должна иметь следующий вид: #include "mpi.h"
int main (int argc, char *argv) {
<программный код без использования MPI функций>
MPI_Init (&agrc, &argv);
<программный код с использованием MPI функций>
MPI_Finalize();
<программный код без использования MPI функций>
return 0;
} Следует отметить: Рассмотренные примеры функций дают представление синтаксиса именования функций в MPI. Имени функции предшествует префикс MPI, далее следует одно или несколько слов названия, первое слово в имени функции начинается с заглавного символа, слова разделяются знаком подчеркивания. Названия функций MPI, как правило, поясняют назначение выполняемых функцией действий. Следует отметить: В этой заметке показано как установить MPI, подключить его к Visual Studio, а затем использовать с заданными параметрами (числом вычислительных узлов). В статье используется Visual Studio 2015, т.к. именно с ней возникали проблемы у моих студентов (эта заметка написана студентами для студентов), однако вероятно инструкция подойдет и для других версий. Шаг 1:
Шаг 2:
“C:\Program Files\Microsoft HPC Pack 2008 SDK\Include”
В поле Library Directories: “C:\Program Files\Microsoft HPC Pack 2008 SDK\Lib\amd64”
В поле с библиотеками, если стоит 32 разрядная версия, вместо amd64 нужно прописать i386. Msmpi.lib
: Шаг 3
: Для настройки запуска необходимо перейти во вкладку Debugging и в поле Command указать: “C:\Program Files\Microsoft HPC Pack 2008 SDK\Bin\mpiexec.exe”
В поле Command Arguments указать, например, N 4 $(TargetPath)
Число 4 указывает на количество процессов. Для запуска программы необходимо подключить библиотеку Путь к проекту не должен содержать кириллицу. При возникновении ошибок можно воспользоваться Microsoft MPI, доступный по на сайте Microsoft. Для этого после установки достаточно прописать в поле Command вкладки Debugging путь: “C:\Program Files\Microsoft MPI\Bin\mpiexec.exe” Также перед запуском программы не забудьте указать её разрядность: Пример запуска программы с MPI
: #include Работа программы на 2 узлах:MPI (Message Passing Interface)
MPI - интерфейс передачи сообщений между процессами, выполняющими одну задачу. Он предназначен, в первую очередь, для систем с распределенной памятью (MPP) в отличие от, например, OpenMP . Распределенная (кластерная) система, как правило, представляет собой набор вычислительных узлов, соединенных высокопроизводительными каналами связи (например, InfiniBand).Работа с MPI
Рассмотрим на живом примере, как устроена типичная MPI-программа. В качестве демонстрационного приложения возьмем исходный код примера, поставляемого с библиотекой Intel MPI Library. Прежде чем запустить нашу первую MPI-программу, необходимо подготовить и настроить рабочую среду для экспериментов.Настройка кластерного окружения
Для экспериментов нам понадобится пара вычислительный узлов (желательно со схожими характеристиками). Если под руками нет двух серверов, всегда можно воспользоваться cloud-сервисами.
Выбираем Instance Type
(тип сервера). Для экспериментов нам подойдет t2.micro (1 vCPUs, 2.5 GHz, Intel Xeon processor family, 1 GiB оперативной памяти). Как недавно зарегистрировавшемуся пользователю, мне такой тип можно было использовать бесплатно - пометка «Free tier eligible». Задаем Number of instances
: 2 (количество виртуальных серверов).Type: Custom TCP Rule
Protocol: TCP
Port Range: 1024-65535
Source: 0.0.0.0/0
В целях безопасности можно задать и более строгое правило, но для нашего демонстрационного примера достаточно этого.
Пример 3b . Распараллеливание на языке Фортран
Пример 4a . Определение характеристик системного таймера на языке Си
Пример 4b . Определение характеристик системного таймера на языке Фортран1.4. Передача и прием сообщений между отдельными процессами
1.4.1. Операции типа точка-точка
1.4.2. Передача и прием сообщений с блокировкой
Пример 5b . Обмен сообщениями двух процессов на языке Фортран
Пример 6a . Обмен сообщениями четных и нечетных процессов на языке Си
Пример 6b . Обмен сообщениями четных и нечетных процессов на языке Фортран
Пример 7a . Пересылка несуществующему процессу на языке Си
Пример 7b . Пересылка несуществующему процессу на языке Фортран
Пример 8a . Буферизованная посылка данных на языке Си
Пример 8b . Буферизованная посылка данных на языке Фортран
Пример 9a . Получение информации об атрибутах сообщения на языке Си
Пример 9b . Получение информации об атрибутах сообщения на языке Фортран
Пример 10a . Определение латентности и пропускной способности на языке Си
Пример 10b . Определение латентности и пропускной способности на языке Фортран1.4.3. Передача и прием сообщений без блокировки
Пример 11b . Обмен по кольцевой топологии при помощи неблокирующих операций на языке Фортран
Пример 12a . Коммуникационная схема «мастер - рабочие» на языке Си
Пример 12b . Коммуникационная схема «мастер - рабочие» на языке Фортран
Пример 13a . Транспонирование матрицы на языке Си
Пример 13b . Транспонирование матрицы на языке Фортран1.4.4. Отложенные запросы на взаимодействие
Пример 14b . Схема итерационного метода с обменом по кольцевой топологии при помощи отложенных запросов на языке Фортран1.4.5. Тупиковые ситуации (deadlock)
Пример 15b . Обмен по кольцевой топологии при помощи процедуры MPI_SENDRECV на языке Фортран1.5. Коллективные взаимодействия процессов
1.5.1. Общие положения
1.5.2. Барьер
Пример 16b . Моделирование барьерной синхронизации на языке Фортран1.5.3. Коллективные операции пересылки данных
1.5.4. Глобальные операции
Пример 17b . Моделирование глобального суммирования при помощи схемы сдваивания и коллективной операции MPI_Reduce на языке Фортран1.5.5. Пользовательские глобальные операции
Пример 18b . Пользовательская глобальная функция на языке Фортран1.6. Группы и коммуникаторы
1.6.1. Общие положения
1.6.2. Операции с группами процессов
Пример 19b . Работа с группами на языке Фортран1.6.3. Операции с коммуникаторами
Пример 20b . Разбиение коммуникатора на языке Фортран
Пример 21a . Перенумерация процессов на языке Си
Пример 21b . Перенумерация процессов на языке Фортран1.6.4. Интеркоммуникаторы
Пример 22b . Схема «мастер - рабочие» с использованием интеркоммуникатора на языке Фортран1.6.5. Атрибуты
1.7. Виртуальные топологии
1.7.1. Общие положения
1.7.2. Декартова топология
1.7.3. Топология графа
Пример 23b . Схема «мастер - рабочие» с использованием графовой топологии на языке Фортран1.8. Пересылка разнотипных данных
1.8.1. Общие положения
1.8.2. Производные типы данных
Пример 24b . Перестановка столбцов матрицы в обратном порядке на языке Фортран1.8.3. Упаковка данных
Пример 25b . Пересылка упакованных данных на языке Фортран1.9. Объект info
1.9.1. Общие положения
1.9.2. Работа с объектом info
1.10. Динамическое управление процессами
1.10.1. Общие положения
1.10.2.Порождение процессов
slave.c
Пример 26a. Схема «мастер - рабочие» с использованием порождения процессов на языке Си
master.f
slave.f
Пример 26b. Схема «мастер - рабочие» с использованием порождения процессов на языке Фортран1.10.3. Клиент-серверная связь
client.c
Пример 27a. Обмен данными между сервером и клиентом посредством публичного имени на языке Си
server.f
client.f
Пример 27b. Обмен данными между сервером и клиентом посредством публичного имени на языке Фортран1.10.4. Удаление связи процессов
1.10.5. Связь через сокеты
1.11. Односторонние коммуникации
1.11.1. Общие положения
1.11.2. Работа с окном
1.11.3. Передача данных
1.11.4. Синхронизация
Пример 28b
Пример 29a . Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Си
Пример 29b . Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Фортран
Пример 30a . Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Си
Пример 30b . Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Фортран1.12. Внешние интерфейсы
1.12.1. Обобщенные запросы
1.12.2. Информация из статуса
1.12.3. Нити
1.13. Параллельный ввод/вывод
1.13.1. Определения
1.13.2. Работа с файлами
1.13.3. Доступ к данным
Пример 31b . Буферизованное чтение из файла на языке Фортран
Пример 32a . Коллективное чтение из файла на языке Си
Пример 32b . Коллективное чтение из файла на языке Фортран1.14. Обработка ошибок
1.14.1. Общие положения
1.14.2. Обработчики ошибок, связанные с коммуникаторами
1.14.3. Обработчики ошибок, связанные с окнами
1.14.4. Обработчики ошибок, связанные с файлами
1.14.5. Дополнительные процедуры
1.14.6. Коды и классы ошибок
1.14.7. Вызов обработчиков ошибок
Пример 33b . Обработка ошибок на языке ФортранГлава 2 Технология параллельного программирования OpenMP
2.1. Введение
2.2. Основные понятия
2.2.1. Компиляция программы
Пример 34b
Пример 34c . Условная компиляция на языке Фортран2.2.2. Модель параллельной программы
2.2.3. Директивы и процедуры
2.2.4. Выполнение программы
2.2.5. Замер времени
Пример 35b . Работа с системными таймерами на языке Фортран2.3. Параллельные и последовательные области
2.3.1. Директива parallel
Пример 36b . Параллельная область на языке Фортран
Пример 37a . Опция reduction на языке Си
Пример 37b . Опция reduction на языке Фортран2.3.2. Сокращенная запись
2.3.3. Переменные среды и вспомогательные процедуры
Пример 38b . Процедура omp_set_num_threads и опция num_threads на языке Фортран
Пример 39a . Процедуры omp_set_dynamic и omp_get_dynamic на языке Си
Пример 39b . Процедуры omp_set_dynamic и omp_get_dynamic на языке Фортран
Пример 40a . Вложенные параллельные области на языке Си
Пример 40b . Вложенные параллельные области на языке Фортран
Пример 41a . Функция omp_in_parallel на языке Си
Пример 41b . Функция omp_in_parallel на языке Фортран2.3.4. Директива single
Пример 42b . Директива single и опция nowait на языке Фортран
Пример 43a . Опция copyprivate на языке Си
Пример 43b . Опция copyprivate на языке Фортран2.3.5. Директива master
Пример 44b . Директива master на языке Фортран2.4. Модель данных
Пример 45b . Опция private на языке Фортран
Пример 46a . Опция shared на языке Си
Пример 46b . Опция shared на языке Фортран
Пример 47a . Опция firstprivate на языке Си
Пример 47b . Опция firstprivate на языке Фортран
Пример 48a . Директива threadprivate на языке Си
Пример 48b . Директива threadprivate на языке Фортран
Пример 49a . Опция copyin на языке Си
Пример 49b . Опция copyin на языке Фортран2.5. Распределение работы
2.5.1. Низкоуровневое распараллеливание
Пример 50b . Процедуры omp_get_num_threads и omp_get_thread_num на языке Фортран2.5.2. Параллельные циклы
Пример 51b . Директива do на языке Фортран
Пример 52a . Опция schedule на языке Си
Пример 52b . Опция schedule на языке Фортран
Пример 53a . Опция schedule на языке Си5.1. MPI: основные понятия и определения
5.1.1. Понятие параллельной программы
5.1.2. Операции передачи данных
5.1.3. Понятие коммуникаторов
5.1.4. Типы данных
5.1.5. Виртуальные топологии
5.2. Введение в разработку параллельных программ с использованием MPI
5.2.1. Основы MPI
5.2.1.1 Инициализация и завершение MPI программ
Необходимо установить пакет HPC Pack 2008 SDK SP2 (в вашем случае может быть уже другая версия), доступный на официальном сайте Microsoft. Разрядность пакета и системы должны соответствовать.
Необходимо настроить пути, для этого переходим во вкладку Debug — Properties: