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

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

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

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

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

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

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

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

Перед работой с большими массивами данных имеет смысл изучить устройство памяти того железа, с которым будешь работать.
После этого станет понятно, как эффективнее хранить данные для решения конкретной задачи и в какой последовательности их обрабатывать.
Ну и все время необходимо помнить, что один и тот же результат можно получить 1024 различными способами.
...
Рейтинг: 0 / 0
Перемножение матриц - как быстрее?
    #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
Перемножение матриц - как быстрее?
    #38787253
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.То есть, все что меньше 80 бит, растягивается до 80 бит.
заканчивается 2014 год....

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

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

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

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

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

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

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


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