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

91 Сурак

1.Numa архитектурасы.

Распределеннаяобщаяпамять (DSM - Distributed Shared Memory)

Традиционно распределенные вычисления базируются на модели передачи сообщений, в которой данные передаются от процессора к процессору в виде сообщений. Удаленный вызов процедур фактически является той же самой моделью (или очень близкой). DSM - виртуальное адресное пространство, разделяемое всеми узлами (процессорами) распределенной системы. Программы получают доступ к данным в DSM примерно так же, как они работают с данными в виртуальной памяти традиционных ЭВМ. В системах с DSM данные перемещаются между локальными памятями разных компьютеров аналогично тому, как они перемещаются между оперативной и внешней памятью одного компьютера. Конфигурация — с распределенной разделяемой памятью, представляет собой вариант распределенной памяти. Здесь все узлы, состоящие из одного или нескольких процессоров, подключенных по схеме SMP, используют общее адресное пространство. Отличие этой конфигурации от машины с распределенной памятью в том, что здесь любой процессор может обратиться к любому участку памяти. Однако, время обращения к разным участкам памяти для каждого процессора различно в зависимости от того, где участок физически расположен в кластере. По этой причине такие конфигурации еще называют машинами с неоднородным доступом к памяти NUMA (non-uniformmemoryaccess).

NUMA (Non-UniformMemoryAccess) – это архитектура совместного доступа к памяти в многопроцессорных системах, в которой время доступа к участку памяти определяется его расположением относительно процессора. Как и в случае с большинством других свойств процессорных систем, невнимание к особенностям архитектуры может привести к ухудшению работы памяти. К счастью, существует возможность нивелировать проблемы в работе, связанные с характерными особенностями NUMA-архитектур и даже использовать некоторые её преимущества для улучшения работы приложений. Это касается привязки потоков к процессорам, распределения памяти с использованием неявных методов, а также применения системных API для привязки ресурсов и перемещения страниц между узлами вычислительной системы.

2.Қолданушы мәлімет типтері. Mpi_type_struct. Мысалдар.

Конструктор типа MPI_Type_struct – самый универсальный из всех конструкторов типа. Создаваемый им тип является структурой, состоящей из произвольного числа блоков, каждый из которых может содержать произвольное число элементов одного из базовых типов и может быть смещен на произвольное число байтов от начала размещения структуры.

intMPI_Type_struct(int count, int *array_of_blocklengths, MPI_Aint *array_of_displacements, MPI_Datatype *array_of_types, MPI_Datatype *newtype)

count – число блоков; array_of_blocklength – массив, содержащий число элементов одного из базовых типов в каждом блоке; array_of_displacements – массив смещений каждого блока от начала размещения структуры, смещения измеряются в байтах; array_of_types – массив, содержащий тип элементов в каждом блоке; newtype – новый производный тип данных. Функция создает тип newtype, элемент которого состоит из count блоков, где i-ый блок содержит array_of_blocklengths[i] элементов типа array_of_types[i]. Смещение i-ого блока от начала размещения элемента нового типа измеряется в байтах и задается в array_of_displacements[i].

odtypes=(MPI_INT,MPI_SHORT,MPI_CHAR);

count=3; blocklenght[3]={1,6,4}; displacements[3]={0,12,26};

3.MPI-да параллельдіматрицалардыкөбейтупрограммасы.

intsize,rank;

MPI_Status status;

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

MPI_Comm_size(MPI_COMM_WORLD,&size);

int n=10,x=0, p=n/(size-1); // kazhdyi process schitaetpo p strok

int a[n][n],c[n][n],b[n][n],d[p*n][n]; // a*b, c - rezul'tat

inti,k,l,r,j,s;

for (i=0;i<n;i++)

{ for(j=0;j<n;j++) { b[i][j]=j; a[i][j]=x; x++; } }

if (rank!=size-1)

{ for(k=rank*p;k<p*(rank+1);k++)

{ for(int j=0;j<n;j++){

s=0;

for (i=0; i<n; i++) {

s+=a[k][i]*b[i][j]; d[k][j]=s;

} } }

MPI_Send(&d[rank*p][0],p*n,MPI_DOUBLE,size-1,5,MPI_COMM_WORLD);

}

else

{ for (i=0; i<size-1;i++)

{ MPI_Recv(&c[i*p][0],p*n,MPI_DOUBLE,i,5,MPI_COMM_WORLD, &status); } }

MPI_Finalize();

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