Оглавление секции

  • Блочная верхнее-треугольная матрица имеет вид

     

    А1,1

    А1,2

    А1,3

    …

    А1,N

    0

    А2,2

    А2,3

    …

    А2,N

    ...

    …

    …

    …

    …

    …

    …

    …

    …

    …

    0

    0

    0

    …

    АN,N

     

     

     

     

     

     

     

     

     

     

     

    Диагональные блоки являются верхне-треугольными матрицами.

    Блочная нижнее-треугольная матрица выглядит аналогично.

    Треугольные матрицы хранятся в памяти в виде одномерного массива, в котором подряд выписываются либо строки, либо столбцы. Блочная треугольная матрица также должна храниться в виде одномерного массива, в котором подряд выписываются блочные строки или блочные столбцы. При этом, элементы каждого блока должны лежать в памяти рядом. Элементы каждого блока размещаются, согласно стандарту языка Си, построчно. 

     

    При размещении указанной на рисунке блочной верхнее-треугольной матрицы поблочно построчно блоки расположатся в памяти в следующей последовательности:

     

     А1,1 , А1,2 ,…, А1,N , А2,1 , …, А2,N ,…, АN,N                                    

     

    При размещении этой же матрицы поблочно по столбцам блоки расположатся в памяти в следующей последовательности:

     

     А1,1 , А1,2 , А2,2 , А1,3 , …, А1,N ,…, АN,N                                    

     

    Симметричные матрицы хранятся в памяти как треугольные (либо нижняя, либо верхняя).

     

    Определить зависимость времени выполнения произведения матриц от размера блока. Построить таблицу с результатами численных экспериментов. Построить график зависимости.

    Рассмотреть размеры матриц N = 1440 и 2880 (у этих чисел много делителей). Рассматривать размеры блоков, которые являются делителями размера матриц: 1, 6, 10, 15, 20, 24, 30, 36, 40, 50, 60, 72, 80, 96, 120, 144, 160, 180, 240, 360, 480, 720. 

     

    Для случая N = 1440 рассмотреть типы элементов матриц float и double и сравнить быстродействие, а для случая N = 2880 только double.

     

    Использовать 2 разных компилятора, например, MS-VStudio и С++ семейства GCC. Пробовать разные опции компилятора. 

     

    Рассмотреть и сравнить по производительности разные способы распараллеливания.

    1. параллельно выполнять перемножение двух блоков

    1.1.          одну горизонтальную полосу левого блока в разных ядрах процессора умножать на разные вертикальные полосы второго блока;

    1.2.          разные горизонтальные полосы левого блока в разных ядрах процессора умножать на разные вертикальные полосы второго блока;

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

    2.1.          один блок левой матрицы в разных ядрах процессора умножать на разные блоки правой матрицы;

    2.2.          разные блоки левой матрицы в разных ядрах процессора умножать на разные блоки правой матрицы;

     

    Рассмотреть скалярное (не блочное) размещение данных и блочное перемножение. Сравнить результаты с аналогичным перемножением и блочным размещением.

     

    Определить размер блока, при котором время выполнения минимально. Определить диапазон размеров блоков, в котором значения времени выполнения несущественно отличаются от минимального. 

     

    Проверить корректность (правильность) работы программы.

     

    Отчет оформить в соответствии с ГОСТ 7.32, ГОСТ 19.301-79 ЕСПД (госты старые, но актуальные).

     

    Пример

    Задание 15. Умножения треугольной и прямоугольной матриц

    Написать программу блочного умножения двух матриц C = A*B.

    Матрица  A  прямоугольная.  Хранится в виде одномерного массива по блочным столбцам.

    Матрица  B  нижне -треугольная.  Хранится в виде одномерного массива по блочным строкам.

     

    Распараллелить блочную программу умножения двух матриц C = A*B с использованием технологии OpenMP двумя способами

    ·       Распараллелить каждое перемножение блоков.

    ·       Параллельно выполнять операции над различными блоками.

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

     

    Провести численные эксперименты и построить таблицу сравнений времени выполнения различных программных реализаций решения задачи. Определить лучшие реализации.

    Проверить корректность (правильность) программ.

    Конец Задания.

     

    Примечание. Своевременное и качественное выполнение задания оценивается в 55 баллов. За задержку в сроках сдачи Отчета по программе снимается 10 баллов.