Таксономия Флинна. Архитектуры SISD, SIMD
По Флинну принято классифицировать все возможные архитектуры компьютеров на четыре категории: SISD (Single Instruction Stream –Single Data Stream) – одинпотоккомандиодинпотокданных; SIMD (Single Instruction Stream –Multiple Data Stream) – одинпотоккомандимножествопотоковданных; MISD (Multiple Instruction Stream –Single Data Stream) – множествопотоковкомандиодинпотокданных; MIMD (Multiple Instruction Stream –Multiple Data Stream) – множество потоков команд и множество потоков данных.SISD компьютеры это обычные, "традиционные" последовательные компьютеры, в которых в каждый момент времени выполняется лишь одна операция над одним элементом данных (числовым или каким-либо другим значением). Иногда сюда относят и некоторые типы векторных компьютеров, это зависит от того, что понимать под потоком данных.SIMD компьютеры состоят из одного командного процессора (управляющего модуля), называемого контроллером, и нескольких модулей обработки данных, называемых процессорными элементами. Управляющий модуль принимает, анализирует и выполняет команды. Если в команде встречаются данные, контроллер рассылает на все процессорные элементы команду, и эта команда выполняется на нескольких или на всех процессорных элементах.
2.Что такое MPI ? Основные концепции и возможности.
Message Passing Interface (MPI, интерфейс передачи сообщений) — программный интерфейс (API) для передачи информации, который позволяет обмениваться сообщениями между процессами, выполняющими одну задачу. Разработан Уильямом Гроуппом, Эвином Ласком и другими. MPI является наиболее распространённым стандартом интерфейса обмена данными в параллельном программировании, существуют его реализации для большого числа компьютерных платформ. Используется при разработке программ для кластеров и суперкомпьютеров. В настоящее время существует большое количество бесплатных и коммерческих реализаций MPI. Существуют реализации для языков Фортран 77/90,Java, Си и Си++.
В первую очередь MPI ориентирован на системы с распределенной памятью, то есть когда затраты на передачу данных велики. Базовым механизмом связи между MPI процессами является передача и приём сообщений. Сообщение несёт в себе передаваемые данные и информацию, позволяющую принимающей стороне осуществлять их выборочный приём:отправитель — ранг (номер в группе) отправителя сообщения;получатель — ранг получателя;признак — может использоваться для разделения различных видов сообщений;коммуникатор — код группы процессов.
В числе основных достоинств MPI по сравнению с интерфейсами других коммуникационных библиотек обычно называют следующие его возможности:возможность использования в языках Фортран, Си, Си++;предоставление возможностей для совмещения обменов сообщениями и вычислений;предоставление режимов передачи сообщений, позволяющих избежать излишнего копирования информации для буферизации;широкий набор коллективных операций допускающих гораздо более эффективную реализацию параллельной программы;удобные средства именования адресатов сообщений, упрощающие разработку стандартных программ или разделение программы на функциональные блоки. программиста.
Напишите программу параллельного вычисления числа pi.
int main(int argc,char **argv)
{int size,rank;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
floatn=500.0,a=0.0,s=0.0,r=0.0;
if(rank!=0) {
for(int i=0; i<n; i+=2)
{s+=4*(pow(-1,i)/(2*i+1));}
MPI_Send(&s,1,MPI_FLOAT,0,1,MPI_COMM_WORLD); }
if(rank==0
{ for(int i=1; i<n; i+=2)
{s+=4*(pow(-1,i)/(2*i+1));}
MPI_Recv(&r,1,MPI_FLOAT,1,1,MPI_COMM_WORLD,&status); s+=r; // результат
printf("s=%f\n",s);
}}
Сурак
1.Что такое процесс ? Отличия процесса от потока.
Программы MPI состоят из автономных процессов, выполняющих собственный код, написанный в стиле MIMD. Коды, выполняемые каждым процессом, не обязательно идентичны. Процессы взаимодействуют через вызовы коммуникационных примитивов MPI. Обычно каждый процесс выполняется в его собственном адресном пространстве, хотя возможны реализации MPI с разделяемой памятью. Этот документ описывает поведение параллельной программы в предположении, что для обмена используются только вызовы MPI. MPI не описывает модель исполнения для каждого процесса. Процесс может быть последовательным или многопоточным. В последнем случае необходимо обеспечить ``потоковую безопасность'' (``thread-safe''). Желаемое взаимодействие MPI с потоками должно состоять в том, чтобы разрешить конкурирующим потокам выполнять вызовы MPI, и вызовы должны быть реентерабельными; блокирующие вызовы MPI должны блокировать только вызываемый поток, не препятствуя планированию другого потока. MPI не обеспечивает механизмы для начального распределения процессов по физическим процессорам. Ожидается, что эти механизмы для этапа загрузки или исполнения обеспечат поставщики. Такие механизмы позволят описывать начальное число требуемых процессов; код, который должен исполняться каждым начальным процессом; размещение процессов по процессорам. Однако, существующее определение MPI не обеспечивает динамического создания или удаления процессов во время исполнения программ (общее число процессов фиксировано), хотя такое расширение предусматривается. Наконец, процесс всегда идентифицируется согласно его относительному номеру в группе, т. е. последовательными целыми числами в диапазоне 0, ..., groupsize-1.