Как бы я интегрировал MPI с классами C ++? - PullRequest
0 голосов
/ 23 мая 2018

Допустим, у меня есть класс

Vector

В этом классе у меня есть метод для вычисления нормы вектора.

Vector a
double Norm = a.norm()

Я хотел бы использовать MPI для распространенияэто расчет.Я знаю, что это действительно тривиальный случай.

Но куда именно я помещаю команды

MPI_Comm_size,MPI_Comm_rank,MPI_Init?

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

1 Ответ

0 голосов
/ 23 мая 2018

Как правило, для эффективного использования MPI в одной структуре данных нет функций MPI.Выяснить размер и ранг MPI-коммуникатора очень просто: сложная часть заключается в организации ваших команд MPI.

В вашем примере первое, что вам нужно сделать, - это рассеять вектор по всем процессам MPI.,Но представьте себе что-то вроде этого:

mpi_norm(mpi_add(v1, v2));

Здесь было бы ужасно неэффективно реализовывать отдельные операции над структурой данных - вы не хотите собирать результат добавления двух векторов только для поворота и прокачкиони снова возвращаются ко всем процессам MPI.

Имея достаточно много работы, вы могли бы эффективно реализовать вышесказанное, если бы mpi_add() возвращал прокси-объект, который запоминает, каким должен был быть расчет, но выполняет толькоэто лениво, поэтому частичные результаты можно оставить отдельно во многих процессах MPI, которые затем объединяют их в единую векторную норму и возвращают ее.

Но такое чувство, что вы, возможно, лаете не на то дерево - если вашЦель - «Сделать хорошую программу MPI», вы должны начинать сверху вниз, а не снизу вверх.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...