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

108 Сурак

1.Процесс дегеніміз не ? Ағындар дегеніміз не ? Процесс пен ағын айырмашылығы. Программы MPI состоят из автономных процессов, выполняющих собственный код, написанный в стиле MIMD. Коды, выполняемые каждым процессом, не обязательно идентичны. Процессы взаимодействуют через вызовы коммуникационных примитивов MPI. Обычно каждый процесс выполняется в его собственном адресном пространстве, хотя возможны реализации MPI с разделяемой памятью. Этот документ описывает поведение параллельной программы в предположении, что для обмена используются только вызовы MPI. MPI не описывает модель исполнения для каждого процесса. Процесс может быть последовательным или многопоточным. В последнем случае необходимо обеспечить ``потоковую безопасность'' (``thread-safe''). Желаемое взаимодействие MPI с потоками должно состоять в том, чтобы разрешить конкурирующим потокам выполнять вызовы MPI, и вызовы должны быть реентерабельными; блокирующие вызовы MPI должны блокировать только вызываемый поток, не препятствуя планированию другого потока. MPI не обеспечивает механизмы для начального распределения процессов по физическим процессорам. Ожидается, что эти механизмы для этапа загрузки или исполнения обеспечат поставщики. Такие механизмы позволят описывать начальное число требуемых процессов; код, который должен исполняться каждым начальным процессом; размещение процессов по процессорам. Однако, существующее определение MPI не обеспечивает динамического создания или удаления процессов во время исполнения программ (общее число процессов фиксировано), хотя такое расширение предусматривается. Наконец, процесс всегда идентифицируется согласно его относительному номеру в группе, т. е. последовательными целыми числами в диапазоне 0, ..., groupsize-1.

2.Декарт топологиясы. Периодтық көршілерді қолдану. Обобщением линейной и матричной топологий на произвольное число измерений является декартова топология Для создания декартовой топологии (решетки) в MPI предназначена функция: int MPI_Cart_create(MPI_Comm oldcomm, int ndims, int *dims, int *periods, int reorder, MPI_Comm *cartcomm). С помощью этой функции можно создавать топологии с произвольным числом измерений, причем по каждому измерению в отдельности можно накладывать периодические граничные условия. Таким образом, для одномерной топологии мы можем получить или линейную структуру, или кольцо в зависимости от того, какие граничные условия будут наложены. Для двумерной топологии, соответственно, либо прямоугольник, либо цилиндр, либо тор. Здесь periods - массив длины ndims, определяет, является ли решетка периодической вдоль каждого измерения. int dims[2]={0,0}, periods[2]={1,0},coords[2], ndims=2, reorder=0; - далее вызов функции MPI_Cart_create(MPI_COMM_WORLD,ndims,dims,periods,reorder,&cartcomm) – мы получаем цилиндр. Если periods[2]={1,1} – тор.

3. 3 Өлшемді Лаплас теңдеуін 2-өлшемді декомпозиция тәсілімен программалау.

MPI_Comm GridComm;

int size,rank,i;

int ix,iy,iz;

int x,y,z,X=10,Y=10,Z=10;

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&size);

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

MPI_Status status;

y=Y/size+2;

double matrix[X][y][Z],vecUP[X][Z],vecDOWN[X][Z];

if(rank==0)

{

for(ix=1;ix<X-1;ix++)

{

for(iz=1;iz<Z-1;iz++)

{

matrix[ix][1][iz]=1;

}

}

for(ix=1;ix<X-1;ix++)

{

for(iy=2;iy<y-1;iy++)

{

for(iz=1;iz<Z-1;iz++)

{

matrix[ix][iy][iz]=0;

}

}

}

}else

{

for(ix=1;ix<X-1;ix++)

{

for(iy=1;iy<y-1;iy++)

{

for(iz=1;iz<Z-1;iz++)

{

matrix[ix][iy][iz]=0;

}

}

}

}

for(int i=0;i<10;i++)

{

if(rank<size-1)

{

for(ix=0;ix<X;ix++)

{

for(iz=0;iz<Z;iz++)

{

vecUP[ix][iz]=matrix[ix][y-2][iz];

}

}

MPI_Send(vecUP,X*Z,MPI_FLOAT,rank+1,rank,MPI_COMM_WORLD);

MPI_Recv(vecUP,X*Z,MPI_FLOAT,rank+1,rank+1,MPI_COMM_WORLD,&status);

for(ix=0;ix<X;ix++)

{

for(iz=0;iz<Z;iz++)

{

matrix[ix][y-1][iz]=vecUP[ix][iz];

}

}

}

if(rank>0)

{

MPI_Recv(vecDOWN,X*Z,MPI_FLOAT,rank-1,rank-1,MPI_COMM_WORLD,&status);

for(ix=0;ix<X;ix++)

{

for(iz=0;iz<Z;iz++)

{

matrix0[ix][0][iz]=vecDOWN[ix][iz];

vecDOWN[ix][iz]=matrix[ix][1][iz];

}

}

MPI_Send(vecDOWN,X*Z,MPI_FLOAT,rank-1,rank,MPI_COMM_WORLD);

}

for(iz=1;iz<Z-1;iz++)

{

for(iy=1;iy<y-1;iy++)

{

if(rank==0&&iy==1){continue;}

if(rank==size-1&&iy==y-2){break;}

for(ix=1;ix<X-1;ix++)

{

matrix[ix][iy][iz]=matrix[ix+1][iy][iz]+matrix[ix-1][iy][iz]+matrix[ix][iy+1][iz];

matrix[ix][iy][iz]+=matrix[ix][iy-1][iz]+matrix[ix][iy][iz+1]+matrix[ix][iy][iz-1];

matrix[ix][iy][iz]/=6;

}

}

}

}while(stop==0);

MPI_Finalize();

return 0;

}

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