eDmk
Так оптимизировать тогда нужно не отдельное умножение, а более крупные операции.
Ghost2
> Ну, на массив хотя-бы умножают
А чем технически отличается реализация умножения на один от умножения на массив на sse в софтрендере? Меняется ли от этого сам алгоритм умножения?
Truthfinder
Например AoS vs SoA.
Ghost2
> Например AoS vs SoA.
Серъёзно? Я сильно сомневаюсь, что в данном случае xyzw->xxxx,yyyy,zzzz,wwww поможет ускорить. Скорее только такты на разбрасывание потерять. Сколько софтрендеров видел, что-то нет фанатов так делать. В данном случае профит это вряд ли даст. Вот в плане избавиться от горизонтальных сложений соглашусь. Это важно. Но от них можно избавиться куда проще. И это сводит на нет пользу от AoS/SoA перехода.
Truthfinder
> Сколько софтрендеров видел, что-то нет фанатов так делать
А я ни одного софтрендера не видел. Но это не отменяет того факта, что нет смысла SIMD-оптимизировать микрооперации. Тем более - на таких дубовых компиляторах, как у дельфей.
Ghost2
> А я ни одного софтрендера не видел. Но это не отменяет того факта, что нет
> смысла SIMD-оптимизировать микрооперации.
Да это с первого поста было видно, что тут демагогия сплошная будет. Ваши советы далеки от реальности, что там имеет смысл, а что нет.
В общем господа мне удалось избавиться от транспонирования и скорость умножения матрицы на матрицу стала 171 млн. умножений в секунду :) Никакого shufps :)
eDmk
> Никакого shufps
Да ну? И на что заменил? На горизонтальные сложения? А можно вообще broadcast использовать. AVX то у тебя есть.
Правильное умножение матрицы на матрицу:
Картинка:
Truthfinder
> Да ну? И на что заменил? На горизонтальные сложения?
Не. PSHUFD + ADDPS
eDmk
> Не. PSHUFD + ADDPS
Заменил одни шафлы на другие, которые точно также работают на 5 порту. Замени уже на broadcast, раз avx есть, зачем ты себя ограничиваешь?
eDmk
> Правильное умножение матрицы на матрицу:
Ну об этом на хабре ещё ссылку кидали, и не одну. Вот одна из них: https://habr.com/ru/post/418247/. Если пойти дальше, там и broadcast есть, а если есть он, тогда нет смысла отказываться от avx на ymm регистрах, что быстрее ещё раза в два. Плюс у тебя проц с fma, ещё и оно. Удивишься производительности.
Truthfinder
> раз avx есть
У меня и AVX есть и FMA, а вот у многих пользователей нету.
Pentium Gold, который сейчас активно продается не имеет ни AVX, ни AVX2.
Многие еще на Core 2 DUO и Core Quad работают, где только XMM.
eDmk
> У меня и AVX есть и FMA, а вот у многих пользователей нету.
А вот у многих нет sse 4.1, который используешь. Тогда ограничься SSE3 (SSSE3 тоже в отказ, хотя сейчас он тебе и не нужен). SSE3 есть на старых AMD просто.
eDmk
> Многие еще на Core 2 DUO и Core Quad работают, где только XMM.
И ещё xmm8+ есть только на 64 битном sse. Или ты 32 битные процы не рассматриваешь?