Академический Документы
Профессиональный Документы
Культура Документы
- 390 -
Новые информационные технологии в автоматизированных системах – 2018
- 391 -
Реализация алгоритма умножения матриц по Винограду на языке Haskell
- 392 -
Новые информационные технологии в автоматизированных системах – 2018
- 393 -
Реализация алгоритма умножения матриц по Винограду на языке Haskell
:sprint для вывода значение, и теперь вы- щение к соответствующим столбцам и стро-
ведено полностью вычисленное выражение. кам. Поэтому ускорить вычисления можно
Для работы функции deepseq необходи- следующим образом:
мо изменить сигнатуру:
1 winograd :: (Num a, NFData a) => 1 c = a' `deepseq` b' `deepseq`
Matrix a -> Matrix a -> Matrix a 2 if odd n then
3 M.matrix m p $ \(i,j) ->
NFData a ограничивает тип значения a 4 let
только теми типами, которые могут быть вы- 5 v1 = V.unsafeIndex a' (i-1)
числены полностью. 6 v2 = V.unsafeIndex b' (j-1)
На рисунке 7 видно, что время выполнение 7 in
8 V.unsafeIndex rows (i-1) +
получается еще меньше эталонного. 9 V.unsafeIndex cols (j-1) +
10 helper v1 v2 +
11 V.last v1 * V.last v2
12 else
13 M.matrix m p $ \(i,j) ->
14 let
15 v1 = V.unsafeIndex a' (i-1)
16 v2 = V.unsafeIndex b' (j-1)
17 in
18 V.unsafeIndex rows (i-1) +
19 V.unsafeIndex cols (j-1) +
20 helper v1 v2
Листинг 7. Ускорение вычислений для матриц
с нечетной общей размерностью.
На рисунке 9 видно, что полученное время
выполнения, соизмеримо со временем выпол-
нения этой функции для матриц с четной
Рис. 7. Время выполнения реализации алгоритма размерностью.
Винограда
Шаг 6. Все предыдущие тесты проводи-
лись для матриц с четной общей размерно-
стью. В случае если общая размерность не-
четная необходимо провести дополнительные
вычисления.
В результате время выполнения сильно
ухудшается, о чем свидетельствует рисунок 8.
3 Заключение
В данной работе был реализован алгоритма
Винограда на языке программирования
Haskell. Были рассмотрены трудности, с ко-
торыми может столкнуться программист, при
Рис. 8. Время выполнения реализации алгоритма разработке данного алгоритма и варианты их
Винограда решения. Выполнено 5 итерации улучшения,
Это объясняется тем, что функция индек- за которые время выполнения алгоритма бы-
сирования матрицы, требует много вычисле- ло улучшено более чем в десять раз:
ний [7]. Более того, уже производилось обра-
- 394 -
Новые информационные технологии в автоматизированных системах – 2018
- 395 -