67
MPI_Comm CommGrid; // коммуникатор решетки
MPI_Comm RowComm; // коммуникатор строки
MPI_Comm ColComm; // коммуникатор столбца
};
// генерация исходных данных
void InitData ( int **pMatrixA, int **pMatrixB, int
*pDataSize, PROCESS *pProcs, int *argc, char **argv[] );
// параллельное умножение матриц
void ParallelMultiplication ( int *pMatrixA, int
*pMatrixB, int **pMatrixC, int DataSize, PROCESS
*pProcs, GRIDINFO *Grid );
// завершение работы
void FreeData ( int *pMatrixA, int *pMatrixB, int
DataSize, PROCESS *pProcs );
// установка параметров решетки
void CreateGrid ( PROCESS *pProcs, GRIDINFO *Grid );
// рассылка и прием блоков данных
void BcastData ( int *pMatrixA, int *pMatrixB, int
DataSize, PROCESS *pProcs, MPI_Datatype *MatrixBlock );
// перемножение матриц
void MultiplyMatrix ( int DataSize, PROCESS *pProcs,
GRIDINFO *Grid, MPI_Datatype MatrixBlock);
// сбор данных
void GatherData ( PROCESS *pProcs, GRIDINFO *Grid,
int *pMatrixC, int DataSize, MPI_Datatype MatrixBlock );
// определить тип данных - блок матрицы
void DefineType ( PROCESS *pProcs, int DataSize,
MPI_Datatype *MatrixBlock );
// локальное умножение матриц
void MultiplyLocalMatrix ( int *pMatrixA, int
*pMatrixB, int *pMatrixC, int Size, int Stride );
#endif
Файл Fox.cpp
#include "Fox.h"
int main(int argc, char *argv[]) {
PROCESS Procs;
GRIDINFO Grid;
int *pMatrixA, *pMatrixB, *pMatrixC;
int DataSize;