Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.16.1.195] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|||||||||||||
|
Цитата Ну не знаю, от тебя ответы на почту дублируются и на форуме они некоторое врямя были видны (я же тебя цитировал). Может быть ты случайно у своих сообщений кнопку "Удалить" нажал раза 3-4 подряд? Когда я первый раз отправил сообщение оно не появилось, потом когдя я начал вставлять его кусками оно то появлялось то снова исчезало...А потом появилось одно огромное сообщение со всеми добавлениями... конечно пришлось пару раз удалить...Какой то глюк. Вот обновленные результаты.После обновления ваш метод стал значительно быстрее.
Код своего блочного метода я прикрепил к письму. Так и не получается его сюда вставить. leo, я попробовал ваши варианты строчного блокирования. Оба они оказались хуже чем вариант с квадратными блоками одного размера.Вот результаты для той же задачи с N = 4032: 1) Размер блока = 8(Это когда 8 строк матрицы A умножаются на 8 строк матрицы B) Время = 89.4 2) Размер блока = 14 (Это когда полоска матрицы B умножаеся на всю матрицу A) Время = 81.3 Поясню как я вычислял размер блока. При N = 4032 каждая строка будет занимать 4032*8 = 32256 байт. Как вы писали, во 2-ом случае размер блока нужно брать почти на весь размер L2,оставив место под 2 строки A и несколько линеек C. При L2 = 512 000, память, необходимая для хранения блока B = L2 -2*32256 = 447488. Размер блока = 447478/32256 = 13.8 Значит дело здесь не в работе ХВП а в чем то другом. Я думаю стоит посмотреть в сторону оптимизированных библиотек BLAS, таких как Atlas,MKL,GOTOBlas и др. Какие они используют схемы блокирования и как вообще они там выбирают размеры блоков. На затравку вот нашел статью ведущего инженера Intel MKL Грега Генри. Там, в частности пишется что блокирование нужно осуществлять на всех уровнях иерархии памяти, на каждом переходе от менее скоростной памяти к более скоростной. Прикреплённый файлBlockMult.rar (1.6 Кбайт, скачиваний: 112) |
Сообщ.
#17
,
|
|
|
Цитата Какой? Использовать алгоритмы типа Штрасcена? но есть ведь более перспективный путь |
Сообщ.
#18
,
|
|
|
Цитата Да, использовать алгоритмы со сложностью ō(N3). Можно попробывать, но это совсем другой путь. Хотелось бы сначала разобратся с блочными алгоритмами, ориентированными на кэш. albomНе могли бы вы протестировать два варианта строчного блокирования, которые предлагал товарищ leo, а то после странных результов с Intel MKL я своей машине уже не доверяю. Код обоих методов в атаче. Для замеров времени можно взять ф-ию clock() для прошлого метода. Прикреплённый файлrowBlockMults.rar (0.89 Кбайт, скачиваний: 109) |
Сообщ.
#19
,
|
|
|
Цитата vitaly333 @ Хотелось бы сначала разобратся с блочными алгоритмами, ориентированными на кэш. Мне тоже. Причем разбираться желательно не путем "тупого" тестирования отдельных вариантов на конкретных тачках, а хоть с каким-то "теоретическим" обоснованием выбора размеров блока и способа прохода этих блоков (т.е. как раз организации "внешних циклов"). Что толку "тупо" сравнивать, к примеру, предложенный мною (на шару ) "построчный" вариант на атлонах с размером L2 512К и на Core2 c размером L2 в 2Мб или 4Мб - ежу понятно, что для такого способа обхода чем больше L2, тем лучше (на каждый блок требуется подгрузка из памяти двух строк матрицы A, поэтому чем больше строк в блоке, тем меньше относительный вклад подгрузки строк A в общее время расчета). К тому же на атлонах при той же частоте ОЗУ скорость чтения из памяти существенно ниже, чем в Core2 PS: Да и к тому же лобовой\тормозной вариант транспонирования матрицы может давать заметный вклад, поэтому нужно либо его привести к единому виду с оптимизированным вариантом albom'а, либо не учитывать транспонирование при тестировании Добавлено albom Можешь в двух словах пояснить суть твоего алгоритма dmm2 или придется разбираться по коду ? |
Сообщ.
#20
,
|
|
|
Цитата Можешь выложить сразу готовый к компиляции и запуску код/проект? Могу. Прикреплённый файлBlockMatrixMultiply.rar (4.54 Кбайт, скачиваний: 102) |