Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Функция возвращает время в секундах, прошедшее с некоторого момента в прошлом.
Для определения времени вычислений выполним:
double tn, tk, delfaf;
tn=MPI_Wtime();
//вычислительный блок
tk=MPI_Wtime();
delfaf=tk-tn;
4. Функции работы с коммуникатором: MPI_Comm_size(), MPI_Comm_rank().
Функция определения общего числа процессов
int MPI_Comm_size(MPI_Comm comm, int *size);
MPI_Comm comm - идентификатор коммуникатора группы
int *size - адрес переменной целого типа, в которую будет записан размер группы
Процесс, обратившийся к данной функции по адресу size запишет размер группы с коммуникатором comm. Функция возвращает код ошибки или 0 в случае успешного завершения.
Функция определения уникального номера процесса
int MPI_Comm_rank(MPI_comm comm, int *rank);
MPI_comm comm - идентификатор коммуникатора группы
int *rank - указатель на переменную целого типа, в которую будет сохранен уникальный номер процесса.
Процесс, обратившийся к данной функции в переменную rank запишет свой собственный уникальный номер в группе с коммуникатором comm. Функция возвращает код ошибки или в случае успешного завершения.
Пример 1
Каждый процесс должен записать в свой файл свой номер и общее число процессов
#include <stdio.h>
#include <mpi.h>
int main(int argc, char**argv)
{
int rank, size;
if (MPI_Init(&argc, &argv)) return 1;
if (MPI_Comm_size(MPI_COMM_WORLD, &size)){
MPI_Finalize();
return 2;
}
if (MPI_Comm_rank(MPI_COMM_WORLD, &rank)){
MPI_Finalize();
return 3;
}
char name[10];
sprintf(name, “rank%d.dat”, rank);
FILE *f;
f = fopen(name, “w”);
fprintf(f, “size=%d rank=%d\n”, size, rank);
fclose(f);
MPI_Finalize();
return 0;
}
5. Функции коллективного взаимодействия процессов: MPI_Bcast(), MPI_Barrier(), MPI_Reduce(),MPI_Allreduce(),(), MPI_Scan(),. Коллективные операции.
Функция широковещательного обмена
int MPI_Bcast(void *buf, int count, MPI_Datatype type, int root, MPI_Comm comm);
void *buf - указатель на переменную или массив откуда будет считываться/куда будет записано сообщение
int count - количество элементов в передаваемом/принимаемом сообщении
MPI_Datatype type - тип элементов в передаваемом/принимаемом сообщении в терминологии MPI
int root - идентификатор процесса, который будет передавать сообщение
MPI_Comm comm - идентификатор коммуникатора группы
Функция указывается для всех процессов коммуникатора. Процесс, обратившийся к данной функции, сравнивает свой номер с параметром root, если root=rank, то этот процесс передает сообщение всем остальным процессам и себе тоже. Все остальные процессы, номер которых не совпал с root, принимают сообщение.
Функция синхронизации
Дата публикования: 2015-02-03; Прочитано: 1014 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!