Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Перемножение матриц - как быстрее? / 8 сообщений из 8, страница 1 из 1
24.10.2014, 17:39
    #38786916
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц - как быстрее?
Всем привет.

Заинтересовался GPGPU, но для начала неплохо бы понять, от чего отталкиваться.

Написал простое перемножение матриц для float.

Ниже речь только про однопоток.

На яве и плюсах скорость примерно одинакова (7-8 секунд) для [1024х1024] (проц i5-2500)

В флопсах это просто ужас - вроде ~300 Мегафлопс (могу ошибаться), хотя доступ к памяти достаточно предсказуемый.

В общем, кто может подсказать по опциям компилятора, etc - велкам!
...
Рейтинг: 0 / 0
25.10.2014, 12:38
    #38787188
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц - как быстрее?
tolyanchikНаписал простое перемножение матриц для float.1.Я бы начал с алгоритма перемножения - как известно, именно в алгоритме скрываются лучшие возможности оптимизации. Соответственно, лучше взять готовую библиотеку чем делать свое простое. Например, симметричные матрицы хранятся и перемножаются совсем по- другому, чем несимметричные. Сильно разреженные - по-третьему.
2. Использовать double вместо float. Во-первых мат.процессоры работают с длинными числами, и float операнды сначала преобразуются в double, делается операция и потом результат преобразуется обратно во float. Теряется время. Во вторых - перемножение матриц, это из тех алгоритмов, в которых значительно теряется точность при вычислениях, и надо обязательно иметь запас прочности точности, в виде бОльшего количества битов для хранения числа.
...
Рейтинг: 0 / 0
25.10.2014, 12:52
    #38787191
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц - как быстрее?
S.G.Использовать double вместо float. Во-первых мат.процессоры работают с длинными числами, и float операнды сначала преобразуются в double, делается операция и потом результат преобразуется обратно во float. Теряется время.

да неужели?
...
Рейтинг: 0 / 0
25.10.2014, 14:39
    #38787214
Aleksandr Sharahov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц - как быстрее?
tolyanchik,

Перед работой с большими массивами данных имеет смысл изучить устройство памяти того железа, с которым будешь работать.
После этого станет понятно, как эффективнее хранить данные для решения конкретной задачи и в какой последовательности их обрабатывать.
Ну и все время необходимо помнить, что один и тот же результат можно получить 1024 различными способами.
...
Рейтинг: 0 / 0
25.10.2014, 15:25
    #38787224
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц - как быстрее?
ИзопропилS.G.Использовать double вместо float. Во-первых мат.процессоры работают с длинными числами, и float операнды сначала преобразуются в double, делается операция и потом результат преобразуется обратно во float. Теряется время.

да неужели?авторВнутри FPU числа хранятся в 80-битном формате с плавающей запятой, для записи же или чтения из памяти могут использоваться:
Вещественные числа в трёх форматах: коротком (32 бита), длинном (64 бита) и расширенном (80 бит).То есть, все что меньше 80 бит, растягивается до 80 бит.

На самом деле, да, я не совсем прав, так как во-первых имел ввиду не "double" а 80 бит "long double", (то есть "extended" в паскале), и да, может быть чтение-запись этих длинных 80 битных чисел может замедлить процесс и уничтожить плюсы от не-растягивания длинных чисел в FPU. Во всяком случае, все это неплохо иметь ввиду, и автору как-раз сейчас время попробовать разные варианты ;)
...
Рейтинг: 0 / 0
25.10.2014, 16:22
    #38787253
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц - как быстрее?
S.G.То есть, все что меньше 80 бит, растягивается до 80 бит.
заканчивается 2014 год....

преобразование single-double на регистрах задержки не вносит, а вот удвоение объёма данных существенно для любой архитектуры
...
Рейтинг: 0 / 0
25.10.2014, 17:13
    #38787264
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц - как быстрее?
tolyanchikВсем привет.

Заинтересовался GPGPU, но для начала неплохо бы понять, от чего отталкиваться.

Написал простое перемножение матриц для float.

Ниже речь только про однопоток.

Толянчик. Умножение двух матриц - это классическая задача на мультипроцессность-мультипоточность.
Смысл правильной оптимизации - порезать матрицу A на прямогольники и матрицу B и соотвесттвенно
перемножать с параллельной записью резалта в матрицу C.

Поэтому про однопоток говорить неинтересно. Алгоритм там известен и весьма стационарен.
Можно лишь жонглировать техниками оптимизаций машинных команд на уровне железа и
получать различные приросты в операциях ADD/MUL или в спаривании команд или в векторизации.

GpGPU я не использовал поэтому как там оно делается - не знаю.
...
Рейтинг: 0 / 0
25.10.2014, 19:34
    #38787301
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц - как быстрее?
Всем спасибо за советы, буду думать...
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Перемножение матриц - как быстрее? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]