Skip to content

Solving the second homework assignment for the computer architecture course (1 term).

Notifications You must be signed in to change notification settings

IPodtsepko/cache-oblivious-matrix-transposition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Сравнение времени работы различных алгоритмов транспонирования матриц

Рассмотрим 3 алгоритма c асимптотикой O(n2):

  1. stupid – идет по диагоналям матрицы, начиная с самой нижней и заканчивая верхней, обращаясь к элементам различных массивов.
  2. naive – наивый алгоритм, проходит последовательно по всем столбцам и записывает значения из них в соответствующие строки.
  3. cacheOblivious – кэш-эффективный алгоритм, на каждом этапе разделяющий обрабатываемый участок пополам по большей стороне. После того, как такой алгоритм доходит до достаточно маленького прямоугольника, он транспонирует обрабатываемый участок наивно (данная модификация требуется, чтобы добиться оптимального сотношения выгоды от учёта существования кэша и затрат на рекурсивные вызовы). Он использует принцип пространственной локальности кэш-памяти компьютера.

Реализации алгоритмов – методы класса matrix, они реализованы в файле matrix.cpp.

Результаты тестирования

Результаты тестирования

На графике видно, что при небольших размерах (не превышающих 2·103) разность во времени работы описанных алгоритмов пренебрежимо мала, при этом на бо́льших, чем 2.5·103 она становится заметной.

Алгоритм (3) быстрее, чем (2), чуть меньше чем в 2 раза, и быстрее, чем (1), заметно больше, чем в два раза.

About

Solving the second homework assignment for the computer architecture course (1 term).

Topics

Resources

Stars

Watchers

Forks