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

         

Функция для параллельного выполнения прямого


// Функция для параллельного выполнения прямого хода метода Гаусса void ParallelGaussianElimination (double* pProcRows, double* pProcVector, int Size, int RowNum) { double MaxValue; // Значение ведущего элемента на процессоре int PivotPos; // Положение ведущей строки в полосе линейной // системы даннного процессора // Структура для выбора ведущего элемента struct { double MaxValue; int ProcRank; } ProcPivot, Pivot;
// pPivotRow используется для хранения ведущей строки матрицы и // соответствующего элемента вектора b double* pPivotRow = new double [Size+1]; // Итерации прямого хода метода Гаусса for (int i=0; i<Size; i++) {
// Нахождение ведущей строки среди строк процесса double MaxValue = 0; for (int j=0; j<RowNum; j++) { if ((pProcPivotIter[j] == -1) && (MaxValue < fabs(pProcRows[j*Size+i]))) { MaxValue = fabs(pProcRows[j*Size+i]); PivotPos = j; } } ProcPivot.MaxValue = MaxValue; ProcPivot.ProcRank = ProcRank;
// Нахождение ведущего процесса (процесса, который содержит // максимальное значение переменной MaxValue) MPI_Allreduce(&ProcPivot, &Pivot, 1, MPI_DOUBLE_INT, MPI_MAXLOC, MPI_COMM_WORLD);
// Рассылка ведущей строки if ( ProcRank == Pivot.ProcRank ){ pProcPivotIter[PivotPos]= i; // номер итерации pParallelPivotPos[i]= pProcInd[ProcRank] + PivotPos; } MPI_Bcast(&pParallelPivotPos[i], 1, MPI_INT, Pivot.ProcRank, MPI_COMM_WORLD);
if ( ProcRank == Pivot.ProcRank ){ // заполнение ведущей строки for (int j=0; j<Size; j++) { pPivotRow[j] = pProcRows[PivotPos*Size + j]; } pPivotRow[Size] = pProcVector[PivotPos]; } MPI_Bcast(pPivotRow, Size+1, MPI_DOUBLE, Pivot.ProcRank, MPI_COMM_WORLD); ParallelEliminateColumns(pProcRows, pProcVector, pPivotRow, Size, RowNum, i); } }
Пример 8.2.
Закрыть окно



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







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий