В MPI топология представляет собой механизм для того, чтобы связать с процессами, принадлежащими группе, различные схемы адресации. Топология MPI - виртуальная, т. е. может не существовать никакого простого отношения между структурой процессов, определенной виртуальной топологией и фактической физической структурой параллельной машины. Известны два основных типа виртуальной топологии, которая может быть создана MPI, - декартова топология, или топология сетки, и топология графа. Первый тип является подмножеством второго. В дек. топ. множ-во процессов предст-ся в виде прям. решетки, а для указ. процессов исп-ся дек. сист. коорд. Для созд-я: int MPI_Cart_create(MPI_Comm oldcomm, int ndims, int *dims, int *periods, int reorder, MPI_Comm *cartcomm), где: oldcomm - исх. комм; ndims - разм. дек. решетки, dims - массив длины ndims, задает кол-во процессов каждом изм. решетки, periods - массив длины ndims, определяет, явл-ся ли решетка периодич. вдоль каждого изм; reorder - параметр допустимости изм. нум. процессов, cartcomm – созд-е. комм. с дек. топ. процесса. В топологии в виде графа - вершины есть процессы системы, а дуги соответствуют имеющимся каналам связи. Парные операции передачи данных могут быть выполнены между любыми процессами комм; в коллект. операции приним. участие все процессы комм. Следовательно, логическая топ. линий связи между процессами в парал. программе имеет структуру полного графа.
Параллельное умножение матрицы и вектора в MPI.
int size,rank;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
int i,k,j,s,x=0,p;
int n=10, a[n][n], c[n], b[n], d[p];
p=n/(size-1);
for (i=0;i<n;i++)
{
b[i]=i; for(j=0;j<n;j++) { a[i][j]=x;x++; }
}
if (rank!=size-1)
{ for(k=rank*p;k<p*(rank+1);k++) {
s=0; for(int j=0;j<n;j++)
{ s+=a[k][j]*b[j]; } d[k]=s; }
MPI_Send(&d[rank*p],p,MPI_DOUBLE,size-1,5,MPI_COMM_WORLD);
}
else
{ for (i=0; i<size-1;i++) { MPI_Recv(&c[i*p],p,MPI_DOUBLE,i,5,MPI_COMM_WORLD, &status); } }
Сурак
Таксономия Флинна. Архитектуры MISD, MIMD.
В литературе часто используется та или иная схема классификации компьютерных архитектур и одной из наиболее популярных является таксономия Флинна. В ее основу положено описание работы компьютера с потоком команд и потоком данных. По Флинну принято классифицировать все возможные архитектуры компьютеров на четыре категории:
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) – множествопотоковкомандимножествопотоковданных
MISD компьютеры
Вычислительных машин такого класса практически нет и трудно привести пример их успешной реализации. Один из немногих – систолический массив процессоров, в котором процессоры находятся в узлах регулярной решетки, роль ребер которой играют межпроцессорные соединения. Все процессорные элементы управляются общим тактовым генератором. В каждом цикле работы каждый процессорный элемент получает данные от своих соседей, выполняет одну команду и передает результат соседям
MIMD компьютеры
Эта категория архитектур вычислительных машин наиболее богата, если иметь в виду примеры ее успешных реализаций. В нее попадают симметричные параллельные вычислительные системы, рабочие станции с несколькими процессорами, кластеры рабочих станций и т.д. Уже довольно давно появились компьютеры с несколькими независимыми процессорами, но вначале на таких компьютерах был реализован только параллелизм заданий, то есть на разных процессорах одновременно выполнялись разные и независимые программы.