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 s,s0=1,s1=0,n=10,i,p;
int k;
if(rank==0)
{ for (i=0; i<n/2; i++)
{p=1;
for (k=1; k<=i+1; k++)
{p=p*(k); }
s0=s0+(1.0)/p;
}
MPI_Send(&s0,1,MPI_FLOAT,1,5,MPI_COMM_WORLD);
}
if(rank==1)
{
for (i=n/2; i<n; i++)
{ p=1;
for (k=1; k<=i+1; k++)
{p=p*k;}
s1=s1+(1.0)/p;
}
MPI_Recv(&s0,1,MPI_FLOAT,0,5,MPI_COMM_WORLD,&status);
s=s1+s0;
printf("s=%f ",s);
}
}
Сурак
Таксономия Флинна. Архитектуры SISD, SIMD.
В литературе часто используется та или иная схема классификации компьютерных архитектур и одной из наиболее популярных является таксономия Флинна. В ее основу положено описание работы компьютера с потоком команд и потоком данных. По Флинну принято классифицировать все возможные архитектуры компьютеров на четыре категории:
SISD (Single Instruction Stream –Single Data Stream) – одинпотоккомандиодинпотокданных;
SIMD (Single Instruction Stream –Multiple Data Stream) – одинпотоккомандимножествопотоковданных;
MISD (Multiple Instruction Stream –Single Data Stream) – множествопотоковкомандиодинпотокданных;
MIMD (MultipleInstructionStream –MultipleDataStream) – множество потоков команд и множество потоков данных.
SISD компьютеры это обычные, "традиционные" последовательные компьютеры, в которых в каждый момент времени выполняется лишь одна операция над одним элементом данных (числовым или каким-либо другим значением). Большинство современных персональных ЭВМ, например, попадает именно в эту категорию. Иногда сюда относят и некоторые типы векторных компьютеров, это зависит от того, что понимать под потоком данных.
SIMD компьютеры состоят из одного командного процессора (управляющего модуля), называемого контроллером, и нескольких модулей обработки данных, называемых процессорными элементами. Управляющий модуль принимает, анализирует и выполняет команды. Если в команде встречаются данные, контроллер рассылает на все процессорные элементы команду, и эта команда выполняется на нескольких или на всех процессорных элементах. Каждый процессорный элемент имеет свою собственную память для хранения данных. Одним из преимуществ данной архитектуры считается то, что в этом случае более эффективно реализована логика вычислений. До половины логических инструкций обычного процессора связано с управлением выполнением машинных команд, а остальная их часть относится к работе с внутренней памятью процессора и выполнению арифметических операций. В SIMD компьютере управление выполняется контроллером, а "арифметика" отдана процессорным элементам. Векторные компьютеры представляют собой пример архитектуры SIMD.
Отличия MPI и PVM.
Система PVM (ParallelVirtualMachine) была создана для объединения нескольких связанных сетью рабочих станций в единую виртуальную параллельную вычислительную машину. Система представляет собой надстройку над операционной системой UNIX и используется на различных аппаратных платформах, включая и системы с массовым параллелизмом. Наиболее распространены сейчас системы параллельного программирования на основе MPI (MessageParsingInterface). Идея MPI исходно проста и очевидна. Она предполагает представление параллельной программы в виде множества параллельно исполняющихся процессов, взаимодействующих друг с другом в ходе исполнения передачи данных с помощью коммуникационных процедур. Они и составляют библиотеку MPI. Однако надлежащая реализация MPI для обеспечения межпроцессорных коммуникаций оказалась довольно сложной. Такая сложность связана с необходимостью достижения высокой производительности программ, необходимостью использовать многочисленные ресурсы мультикомпьютера, и, как следствие большим разнообразием в реализации коммуникационных процедур в зависимости от режима обработки данных.
MPI и PVM имеют следующие общие характеристики: 1. и MPI и PVM призваны решать одну и ту же задачу обеспечения межпроцессорной связи, 2. и MPI и PVM ориентированы на одну и туже MPMD парадигму программирования; 3. и MPI и PVM представляют собой библиотеку программ; 4. и MPI и PVM обеспечивают мобильность создаваемых программ.
MPI и PVM имеют следующие основные отличия: 1. интерфейс программиста PVM проще, чем такой же интерфейс MPI; 2. PVM имеет средства динамического порождения ветвей (в стандарте MPI-2 такая возможность также имеется); 3. в PVM возможно взаимодействие приложений, запущенных одним и тем же пользователем (в стандарте MPI-2 такая возможность также имеется).