Теория и практика параллельных вычислений



         

Пример 3


// Функция для выделения памяти и инициализации исходных данных

void ProcessInitialization (double* &pAMatrix, double* &pBMatrix,

double* &pCMatrix, double* &pAblock, double* &pBblock,

double* &pCblock, double* &pTemporaryAblock, int &Size,

int &BlockSize ) {

if (ProcRank == 0) {

do {

printf("\nВведите размер матриц: ");

scanf("%d", &Size);

if (Size%GridSize != 0) {

printf ("Размер матриц должен быть кратен размеру сетки! \n");

}

}

while (Size%GridSize != 0);

}

MPI_Bcast(&Size, 1, MPI_INT, 0, MPI_COMM_WORLD);

BlockSize = Size/GridSize;

pAblock = new double [BlockSize*BlockSize];

pBblock = new double [BlockSize*BlockSize];

pCblock = new double [BlockSize*BlockSize];

pTemporaryAblock = new double [BlockSize*BlockSize];

for (int i=0; i

pCblock[i] = 0;

}

if (ProcRank == 0) {

pAMatrix = new double [Size*Size];

pBMatrix = new double [Size*Size];

pCMatrix = new double [Size*Size];

RandomDataInitialization(pAMatrix, pBMatrix, Size);

}

}




Содержание  Назад