Войти
ПроектыФорумОцените

SR64 (тестирование) (3 стр)

Страницы: 1 2 3 4 511 Следующая »
#30
6:34, 14 окт. 2019

Ну да, вот такой стиль общения - я огородился тэгами в своей песочнице, леплю себе куличики, и не лезьте со своими экскаваторами - он раздражает профессиональных экскаваторщиков :)
Можно было какой-то вежливый сдержанный интерес изобразить, даже если не готов изучать Си прямо сейчас (хотя что в нём страшного? Шейдеры же писал на Си-подобном языке - не обломился). Статья, которую в комментах кидали - реально классная, можно было почитать и проникнуться тем, как люди оптимизируют. 
Нет, идите нафиг со своими ковшами! Мне и с формочками хорошо!
Тут спасёт разве что тэг "йа блондинко" :)

Кстати, протестировал сишный код (самый примитивный, из сообщения 26) - в 3.7-3.8 раза быстрее, и как ни странно, большой разницы между sse2 и avx2 нет.
Хотя блондинкам наверное неинтересно.

#31
(Правка: 10:33) 10:30, 14 окт. 2019

eDmk

Модельку самолёта сам рисовал? Или где в открытом доступе валяется? С текстурированием и освещением в софте будет? Но даже так уже очень хорошо выглядит.

#32
11:09, 14 окт. 2019

Truthfinder
> Модельку самолёта сам рисовал?
Модельку купил на 3ddd для тестов.

>С текстурированием и освещением в софте будет?
Да, делаю. Пока с текстурными координатами разбираюсь:

+ Показать

Truthfinder
> Но даже так уже очень хорошо выглядит.
Спасибо!

#33
(Правка: 11:38) 11:29, 14 окт. 2019

invis
> Мне и с формочками хорошо!
Тут вы правы.

invis
> Тут спасёт разве что тэг "йа блондинко" :)
А тут не правы.

Просто люди не уважают друг друга.
В реальном мире это называется мордобой.

Они дали мне ссылку на супер-пупер код, который не работает. Он очень быстрый (168 млн. умножений в секунду, но он не умножает матрицы по правилам умножения матриц). Это просто умножение 4-х векторов на матрицу.

Не взудмайте его использовать!

+ Показать

Я им говорю, что код нерабочий, а они мне говорят, что земля круглая и солнце теплое. Уже пытался им объяснить почему нерабочий и т.д., а они просят за тон извиниться. Ощущение, что попал в дурдом.

#34
(Правка: 12:31) 12:14, 14 окт. 2019

eDmk
> Они дали мне ссылку на супер-пупер код, который не работает. Он очень быстрый
> (168 млн. умножений в секунду, но он не умножает матрицы по правилам умножения
> матриц). Это просто умножение 4-х векторов на матрицу.

Вы ошибаетесь. Очень даже рабочий. https://habr.com/ru/post/418247/
Тут приведён вывод "неработающего" алгоритма и обычного простой перестановкой строк.

Умножение транспонированных матриц не требует изменения реализации алгоритма, достаточно переставить порядок матриц на входе.
Результат - также транспонированная матрица. Это обычная высшая алгебра. Зато вы избавляетесь от лишних инструкций транспонирования. А транспонирование это плохо. Даже 8 шафлами. Потому что там идёт полный загруз 5 порта процессора, который фиг оптимизируешь.

P.S. Нерабочий он может оказаться по одной причине, у вас формат хранения данных другой. Транспонирование 4 шафлами, равно как и умножение, я переписывал под свой формат хранения.

#35
12:31, 14 окт. 2019

Truthfinder
>Вы ошибаетесь. Очень даже рабочий. https://habr.com/ru/post/418247/
Ссылка это доказательство?

Truthfinder
> Транспонирование 4 шафлами я переписывал под свой формат хранения.
Вы туда же? Шуффлинг не умеет транспонировать. Нужно вертикально переставлять элементы в матрице B. Кроме того, в коде из #23 нет поэлементного сложения.

У меня есть умножение без транспонирования матрицы. Там вообще нет никакого шуфлинга.

>свой формат хранения.
У меня ROW-major - строками. У вас видимо Column-major - столбцами.
Или еще есть способ хранения?

#36
(Правка: 12:36) 12:35, 14 окт. 2019

eDmk
> Ссылка это доказательство?

В статье приведёт вывод алгоритма.

> Вы туда же? Шуффлинг не умеет транспонировать.

Это потому, что вы ленитесь расписать sse регистры в результате операций shuffle.

> У меня ROW-major - строками. У вас видимо Column-major - столбцами.
> Или еще есть способ хранения?

Я храню вектора как wzyx, в регистре они выглядят как xyzw, w можно оперировать через sse *ss команды.

#37
(Правка: 13:00) 13:00, 14 окт. 2019

Truthfinder
Ну это же другой способ умножения. Скорее всего кватернионы. Спрашивается при чем здесь матрицы? Я же про матрицы пишу. Есть правила умножения матрицы на матрицу. У меня они соблюдаются, а кватернионы - это другая тема. Она несовместима с матричным умножением. Поэтому и не работает.

#38
13:01, 14 окт. 2019

eDmk
> Truthfinder
> Ну это же другой способ умножения. Скорее всего кватернионы. Спрашивается при
> чем здесь матрицы? Я же про матрицы пишу. Есть правила умножения матрицы на
> матрицу. У меня они соблюдаются, а кватернионы - это другая тема. Она
> несовместима с матричным умножением. Поэтому и не работает.

Причём здесь кватернионы? Я про них ничего не писал.

#39
13:09, 14 окт. 2019

Truthfinder
> Причём здесь кватернионы?
Вы описали формат хранения кватернионов (задом наперед).

#40
13:10, 14 окт. 2019

eDmk
> Вы описали формат хранения кватернионов (задом наперед).

А причём здесь кватернионы? Это вектор обычный 4х компонентный. Матрица 4x4 в свою очередь может быть представлена 4мя такими векторами.

#41
(Правка: 13:26) 13:24, 14 окт. 2019
shuffle(a, b, i{w:2,z:2,y:2,x:2}) => b[w], b[z], a[y], a[z]

r0=r03,r02,r01,r00
r1=r13,r12,r11,r10
r2=r23,r22,r21,r20
r3=r33,r32,r31,r30

t0=shuf<0x44=0b 01'00'01'00=1,0,1,0>(r0, r1) // t0{r1|r0}=r11 r10 r01 r00
t1=shuf<0x44=0b 01'00'01'00=1,0,1,0>(r2, r3) // t1{r3|r2}=r31 r30 r21 r20
t2=shuf<0xEE=0b 11'10'11'10=3,2,3,2>(r0, r1) // t2{r1|r0}=r13 r12 r03 r02
t3=shuf<0xEE=0b 11'10'11'10=3,2,3,2>(r2, r3) // t3{r3|r2}=r33 r32 r23 r22

r0=shuf<0x88=0b 10'00'10'00=2,0,2,0>(t0, t1) // r0{t1|t0}=t12 t10 t02 t00=r30 r20 r10 r00
r1=shuf<0xDD=0b 11'01'11'01=3,1,3,1>(t0, t1) // r1{t1|t0}=t13 t11 t03 t01=r31 r21 r11 r01
r2=shuf<0x88=0b 10'00'10'00=2,0,2,0>(t2, t3) // r2{t3|t2}=t32 t20 t32 t20=r32 r22 r12 r02
r3=shuf<0xDD=0b 11'01'11'01=3,1,3,1>(t2, t3) // r3{t3|t2}=t33 t21 t33 t21=r33 r23 r13 r03

Это в регистрах. Ну и очевидно, что в памяти матрица должна хранится для этого алгоритма в виде: r00, r01, r02, r03, r10, r11, r12, r13, ..., r33.

#42
13:27, 14 окт. 2019

Truthfinder
> А причём здесь кватернионы?
Я предположил, что это они.

Я никому не навязываю свое видение. Умножайте как хотите и чем хотите.
Люди ломают копья за способ умножения. Капец. Мне ваши способы не подходят.
Они в моем случае не работают.
Я делал свое умножение по этой статье: http://www.mathprofi.ru/deistviya_s_matricami.html
Меня оно полностью устраивает.

#43
(Правка: 13:30) 13:28, 14 окт. 2019

Но и это ещё не всё. Это алгоритм из xmmintrin.h. Интеловский заголовок. При этом в intel intrinsics guide есть ещё реализация от интел в виде:

__m128 tmp3, tmp2, tmp1, tmp0;
tmp0 := _mm_unpacklo_ps(row0, row1);
tmp2 := _mm_unpacklo_ps(row2, row3);
tmp1 := _mm_unpackhi_ps(row0, row1);
tmp3 := _mm_unpackhi_ps(row2, row3);
row0 := _mm_movelh_ps(tmp0, tmp2);
row1 := _mm_movehl_ps(tmp2, tmp0);
row2 := _mm_movelh_ps(tmp1, tmp3);
row3 := _mm_movehl_ps(tmp3, tmp1);

P.S. Повторюсь, это алгоритмы Intel.

#44
(Правка: 13:32) 13:32, 14 окт. 2019

eDmk
> Меня оно полностью устраивает.

Будет интересно прогнать через Intel® Architecture Code Analyzer и сравнить эти алгоритмы.
А у вас проц модный, есть ещё AVX, что быстрее ещё раза в два можно сделать.

Страницы: 1 2 3 4 511 Следующая »
ПроектыФорумОцените