LINUX.ORG.RU

mpich сумма


0

0

Разбираюсь с mpich. Пробую посчитать сумму sum(i^2,1..2000) на 2-х процессорах для начала. Написал вот что

#include <iostream>
#include "mpi.h"

main(int argc, char *argv[])
{
MPI::Init(argc, argv);
int rank = MPI::COMM_WORLD.Get_rank();
int size = MPI::COMM_WORLD.Get_size();
int s1=0,s2=0;
if( rank==0 ) {
for( int i=1; i<1000; ++i )
s1+=i^2;
std::cout << "s1=" << s1 << std::endl;
}
if( rank==1 ) {
for( int i=1000; i<=2000; ++i )
s2+=i^2;
std::cout << "s2=" << s2 << std::endl;
}
MPI::Finalize();
}


Как теперь сложить s1 c s2 и вывести s = s1 + s2


anonymous

0) Сумма квадратов чисел от 1 до 2000 в знаковый 32-битный int не поместится.
1) Тебе не нужны разные переменные s1 и s2, т.к. они никогда не будут использоваться в одном экземпляре программы.
2) Стандартный вывод в MPI лучше не задействовать, по крайней мере для процессов с рангом большим 0
3) При n вычислительных узлах принято запускать (n+1) процессов; процесс с рангом 0 собирает (в твоём случае суммирует) данные от остальных процессов, которые занимаются счётом.
4) Данные передаются посредством посылки сообщений (MPI_Send()). Простые операции типа суммирования результатов от всех узлов могут также выполняться вызовом MPI_Reduce().
5) Подробнее про MPI есть на http://parallel.ru/, например
http://parallel.ru/vvv/mpi.html.

ringill
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.