использование MPI_Op_create с функциями внешних библиотек, такими как boost или GSL - PullRequest
2 голосов
/ 23 марта 2012

Мне просто интересно, возможно ли это, и есть ли у кого-нибудь пример использования MPI_Op_create для создания операции с функцией, которая имеет много функций gsl и / или внутри нее, чтобы передать еекоманда mpi_reduce.В моей ситуации порядок не имеет значения, но serial и Openmp слишком медленны для того, что я хочу сделать, поэтому я хочу попробовать преобразовать его в mpi.

вместо стандартного примера C

void addem ( int *, int *, int *, MPI_Datatype * );

void addem(int *invec, int *inoutvec, int *len, MPI_Datatype *dtype)
{
    int i;
    for ( i=0; i<*len; i++ )
        inoutvec[i] += invec[i];
}

, который затем передается в

MPI_Op_create ((MPI_User_function *) addem, 1, & op);

я бы изменил это на нечто подобное, но гораздо более сложное, чем это

void addgsl(gsl_vector* vec,gsl matrix* mat, int num,.....,MPI_Datatype *dtype)

 for (int i=0; i <num; i++) {
     //some complicated boost or gsl mathematical formula here
                             }

1 Ответ

3 голосов
/ 23 марта 2012

Нет никаких ограничений на то, что могут делать пользовательские операции: они просто получают некоторые элементы из входных данных и должны вычислять результат. Единственное требование к пользовательским операциям состоит в том, что они являются ассоциативными. Также нет способа предсказать, сколько элементов получит функция: это зависит от реализации MPI и определяется параметром len.

...