/
NenNil
/
vmk2025-parallel-computing
Обзор
Документация
Войти
/
NenNil
/
vmk2025-parallel-computing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
omp2/generate.cpp
61 строка
2 KB
Нил Ненахов
second omp version
30 ноя 2025, 11:51
30 ноя 2025, 11:51
47d6de3
Код
Авторство
О чём код?
#include "generate.h" #include "matrix.h" #include <vector> CSRMatrix* fast_generate(int Nx, int Ny, Matrix_coef m) { auto matrix = new_matrix(Nx, Ny); matrix->IA[0] = 0; #pragma omp for for (int i = 0; i < matrix->cols; ++i) { int row = i / Nx; // 0..matrix->rows-1 int col = i % Nx; // 0..matrix->cols-1 int count = matrix->IA[i];// соседи count = 0; if (row > 0) { count += (Nx-2)*4+2*3; } if (row > 1) { count += ((Nx-2)*5+2*4)*(row-1); } if ((row == 0)||(row == Ny-1)) { if (col > 0) { count += 3; } if (col > 1) { count += 4*(col-1); } } if ((row != 0)&&(row != Ny-1)) { if (col > 0) { count += 4; } if (col > 1) { count += 5*(col-1); } } int rowIdx = row * Nx + col; if (row > 0) fast_add(matrix, m.up(col, row), (row-1)*Nx + col, &count); if (col > 0) fast_add(matrix, m.left(col, row), row*Nx + col-1, &count); fast_add(matrix, m.diag(col, row), row*Nx + col, &count); if (col < Nx-1) fast_add(matrix, m.right(col,row), row*Nx + col+1, &count); if (row < Ny-1) fast_add(matrix, m.down(col, row), (row+1)*Nx + col, &count); matrix->IA[i + 1] = count; } return matrix; }