Я пытаюсь умножить матрицу A [MxN] и вектор B [N], где каждый процесс P получает столбцы M * P / N и N / P элементов из B, используя операции разброса и уменьшения.
Я могу сделать новый тип и разбросать элементы без проблем, например:
MPI_Type_vector ( m*n/p , 1 , p , MPI_INT , &columns );
MPI_Type_create_resized ( columns , 0 , sizeof(int) , &rescolumns );
MPI_Scatter (&A[0][0], 1 , &rescolums , newvector , m*n/p , MPI_INT , 0 , MPI_COMM_WORLD)
и сделать то же самое для вектора B, но не могу понять, как использовать MPI_Reduce
умножить разбросанные результаты.
Буду признателен за любую оказанную помощь.
Да, это возможно, и есть гораздо более эффективная и оптимизированная процедура от Scalapack: PxGEMV. Посмотрите на эти примеры: http://www.netlib.org/scalapack/examples/pblas.tgz
Других решений пока нет …