8
ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

  • Upload
    abdalla

  • View
    75

  • Download
    1

Embed Size (px)

DESCRIPTION

ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ. УМНОЖЕНИЕ МАТРИЦЫ НА ВЕКТОР. РЕАЛИЗАЦИЯ ДЛЯ СИСТЕМ С ОБЩЕЙ ПАМЯТЬЮ. Обрабатывать различные строки на разных вычислительных ядрах. Пример реализации на OpenMP. void mxv ( int n, double* a, double* b, double* c) { int i ; - PowerPoint PPT Presentation

Citation preview

Page 1: ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

Page 2: ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

УМНОЖЕНИЕ МАТРИЦЫ НА ВЕКТОР

n

jjiji bAc

cAb

1

Page 3: ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

РЕАЛИЗАЦИЯ ДЛЯ СИСТЕМ С ОБЩЕЙ ПАМЯТЬЮ

Обрабатывать различные строки на разных вычислительных ядрах.

Page 4: ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

Пример реализации на OpenMPvoid mxv(int n, double* a, double* b, double* c){ int i;#pragma omp parallel for for(i = 0; i < n; i ++){ double s = 0.; int j; double *v; v = a + i * n; for(j = 0; j < n; j ++) { s += v[j] * b[j]; } c[i] = s; }}

Page 5: ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

УМНОЖЕНИЕ МАТРИЦ: БАЗОВЫЙ АЛГОРИТМ

void mxm (int n, double* a, double* b, double* c) { for(i := 0; i < n; i ++) { for(j: =0; j < n; j ++) { c[i*n + j] = 0.; for(k : = 0; k < n; k ++) c[i*n + j] += a[i*n + k] * b[k*n + j]; } }}Недостаток: доступ по столбцу к элементам матрицы b во внутреннем цикле.

Page 6: ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

УМНОЖЕНИЕ МАТРИЦ: БОЛЕЕ ЭФФЕКТИВНЫЙ АЛГОРИТМ

void mxm2(int n, double* a, double* b, double* c){ int i; for(i = 0; i < n; i ++){ int k; for(k = 0; k < n; k ++) { int j; for(j = 0; j < n; j ++) { if(k == 0) c[i * n + j] = 0.; c[i * n + j] += a[i * n + k] * b[k * n + j]; } } }}

Page 7: ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

УМНОЖЕНИЕ МАТРИЦ: РЕАЛИЗАЦИЯ НА OpenMP

void mxm2(int n, double* a, double* b, double* c){ int i;#pragma parallel for for(i = 0; i < n; i ++){ int k; for(k = 0; k < n; k ++) { int j; for(j = 0; j < n; j ++) { if(k == 0) c[i * n + j] = 0.; c[i * n + j] += a[i * n + k] * b[k * n + j]; } } }}

Page 8: ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ

РЕЗУЛЬТАТЫ ВЫЧИСЛИТЕЛЬНОГО ЭКСПЕРИМЕНТА

Число потоков Базовый алгоритм

Улучшенный алгоритм

1 42.9 13.4

2 23.4 6.8

4 12.8 3.4

8 6.4 1.7

Рассматривается матрица 1024x1024, процессор 4 core Xeon, 3 GHz

Число потоков Базовый алгоритм

Улучшенный алгоритм

1 57.5 4.0

2 31.3 2.0

4 20.0 1.3

8 10.9 0.7

Без

ком

пиля

торо

ной

опти

миз

ации

С оп

тим

изац

ией

(-О)