Контрольная работа: Паралельні обчислення з використанням MPI

Аргументом операції приведення є масив даних — по одному елементі від кожного процесу. Результат такої операції — єдине значення (тому вона і називається операцією приведення).

У підпрограмах глобальних обчислень функція, передана в підпрограму, може бути: визначеною функцією MPI, наприклад MPI_SUM, користувальницькою функцією, а також оброблювачем для користувальницької функції, що створюється підпрограмою MPI_Op_create.


Три версії операції приведення повертають результат:

одному процесу;

усім процесам;

розподіляють вектор результатів між усіма процесами.

Операція приведення, результат якої передається одному процесу, виконується при виклику підпрограми MPI_Reduce:

int MPI_Reduce(void *buf, void *result, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)

Вхідні параметри підпрограми MPI_Reduce:

buf — адреса буфера передачі;

count — кількість елементів у буфері передачі;

datatype — тип даних у буфері передачі;

ор — операція приведення;

root — ранг головного процесу;

comm — комунікатор.

Підпрограма MPI_Reduce застосовує операцію приведення до операндам з buf, а результат кожної операції міститься в буфер результату result. MPI_Reduce повинна викликатися всіма процесами в комунікаторі comm, a аргументи count, datatype і op у цих викликах повинні збігатися. Функція приведення (ор) не повертає код помилки, тому при виникненні аварійної ситуації або завершується робота всієї програми, або помилка мовчазно ігнорується. І те й інше в однаковій мірі небажано.

У MPI мається 12 визначених операцій приведення (див. табл.).

Операція Опис
MPI_MAX Визначення максимальних значень елементів одномірних масивів цілого чи речовинного типу
MPI_MIN Визначення мінімальних значень елементів одномірних масивів цілого чи речовинного типу
MPI_SUM Обчислення суми елементів одномірних масивів цілого, речовинного чи комплексного типу
MPI_PROD Обчислення заелементного добутку одномірних масивів цілого, речовинного чи комплексного типу
MPI_LAND Логічне "И"
MPI_BAND Бітове "И"
MPI_LOR Логічне "ЧИ"
MPI_BOR Бітове "ЧИ"
MPI_LXOR Логічне "ЧИ", що виключає
MPI_BXOR Бітове "ЧИ", що виключає
MPI_MAXLOC Максимальні значення елементів одномірних масивів і їхні індекси
MPI_MINLOC Мінімальні значення елементів одномірних масивів і їхні індекси

Розглянемо приклад 3:

===== Example2.cpp =====

#include <mpi.h>

#include <stdio.h>

#include <math.h>

int main(int argc, char *argv[])

{

int n, myid, numprocs, i;

double PI25DT = 3.141592653589793238462643;

double mypi, pi, h, sum, x;

MPI_Init(&argc,&argv);

К-во Просмотров: 412
Бесплатно скачать Контрольная работа: Паралельні обчислення з використанням MPI