Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPI - MKM.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
391.79 Кб
Скачать

585 Сурак

1. Можно ли запустить программу simd на современных процессорах семейства x86.

x86 — архитектура процессора c одноимённым набором команд, впервые реализованная в процессорах компании Intel.Название образовано от двух цифр, которыми заканчивались названия процессоров Intel ранних моделей:  8086, 80186, 80286 (i286), 80386 (i386),80486 (i486). За время своего существования набор команд постоянно расширялся, сохраняя совместимость с предыдущими поколениями.

Для организации групповой обработки данных в процессорах используется SIMD расширения к х86 инструкциям. Аббревиатура SIMD расшифровывается как Single Instruction Multiple Data (одна инструкция – множество данных). Под SIMD расширением понимается программно-аппартное решение, представляющее собой совокупность дополнительных регистров и наборов инструкций процессора, предназначенных для групповой обработки данных. Также необходимо наличие соответствующих компиляторов, ”знающих” SIMD инструкции и способных оптимизировать под них код. Быстродействие повышается за счет того, что каждая команда из дополнительного набора выполняет действие, для которого понадобилось бы несколько команд основного набора. Оптимизированная программа, как правило, может работать на процессорах как с поддержкой необходимых инструкций (повышенное быстродействие), так и с отсутствием оных. Однако на практике встречаются программы, которые отказываются работать при отсутствии у процессора определенного набора SIMD инструкций. Такая проблема может возникнуть на старых процессорах, при использовании современных программ.

Однако такие исключения встречаются редко и в большинстве случаeв программа, взамен отсутствующих SIMD, будет использовать универсальные (generic) х86 инструкции. При этом мы не получим никакого повышения быстродействия, но и снижения производительности (по сравнению с обычным кодом) также не будет. 

2. Запуск и останов MPI программы.

Запуск 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 <numprocs><программа>

будет по крайней мере один способ запустить <программу> с начальным MPI_COMM_WORLD, чья группа содержит <numprocs> процессов. Другие аргументы mpiexec могут зависеть от реализации.

Пример 4.1 Запуск 16 экземпляров myprog на текущей или заданной по умолчанию машине:

mpiexec -n 16 myprog

3. Напишите программу параллельного вычисления определенного интеграла от фукнции 2*cos(x) в интервале [0,1].

double f(double x)

{return 2*cos(x);}

int main(intargc,char **argv)

{

intsize,rank;

MPI_Status status;

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

MPI_Comm_size(MPI_COMM_WORLD,&size);

float h=0.05,a=0,b=1,s=0.0;

for(inti=rank; a+h*(i+1)<b+h; i+=size)

{ s+=h*f(a+h*(i+1)); }

if(rank!=0)

{ MPI_Send(&s,1,MPI_FLOAT,0,1,MPI_COMM_WORLD);

}

if(rank==0)

{ float r;

MPI_Recv(&r,1,MPI_FLOAT,1,1,MPI_COMM_WORLD,&status);

s+=r;

printf("s=%f\n ",s);

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]