У меня есть код C++ MPI, который работает, поскольку он компилируется и действительно запускается на указанном количестве процессоров (n). Проблема в том, что он просто выполняет одно и то же вычисление n раз, а не делает одно вычисление n раз быстрее.
Я взломал довольно много примеров, которые я нашел на разных сайтах, и, похоже, мне не хватает правильного использования MPI_Send и MPI_Receive, но я не могу найти экземпляр этих команд, которые принимают функцию в качестве входных данных (и я сбит с толку относительно почему эти команды MPI могут быть полезны для чего-либо, кроме функций).
Мой код ниже. По сути, он вызывает функцию C++, которую я написал для получения p-значения точного теста Фишера. Бит случайного числа — это то, что я вставил для проверки скорости.
Я хочу, чтобы эта программа выдавала Fisher.TwoTailed с каждым набором случайных переменных (т. е. A, B, < em>C и D) на другой процессор вместо того, чтобы выполнять одни и те же вычисления на нескольких процессорах. Заранее спасибо за любое понимание - ура!
Вот код:
int
main (int argc, char* argv[])
{
int id;
int p;
//
// Initialize MPI.
//
MPI::Init ( argc, argv );
//
// Get the number of processors.
//
p = MPI::COMM_WORLD.Get_size ( );
//
// Get the rank of this processor.
//
id = MPI::COMM_WORLD.Get_rank ( );
FishersExactTest Fishers;
int i = 0;
while (i < 10) {
int A = 0 + rand() % (100 - 0);
int B = 0 + rand() % (100 - 0);
int C = 0 + rand() % (100 - 0);
int D = 0 + rand() % (100 - 0);
cout << Fishers.TwoTailed(A, B, C, D) << endl;
i += 1;
}
MPI::Finalize ( );
return 0;
}