Size: a a a

Ассемблер

2021 March 28

ST

Saenro T in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
С таблицей куда быстрее будет. Синусы очень долгие. Вообще, SSE (даже скалярные операции) немного быстрее, чем FPU, даже расчет синуса через ряды Тейлора (главное, правильно сделать, чтобы минимизировать зависимости результатов). А если считать через короткий ряд, то ещё быстрее (точность будет ниже, но для графики достаточная).
Когда-то делал без FPU, в EXCELe рассчитывал таблицу от 0° до 90° для cos, только опорная таблица занимала 2×90=180 байт: значения от 0 до 10000, т.е. как от 0 до 1.0  только целочисленные. Шаг дискретизации так себе конечно, но вроде хватало.

Обхожусь только cos. Для sin просто сдвигаю cos на 90°.
А в этой демке нет ни одной таблицы, если их предварительно сделать, конечно будет быстрее за счёт занимаемой памяти, да и если делать, то уже не опорную, а на все условия которые могут возникнуть в алгоритмах, чтобы было ещё быстрее.
источник

D

Den in Ассемблер
Certain SSE instructions (movntdqa, movdqa, movdqu, etc...) can load 16 bytes from memory or store 16 bytes to memory in a single operation
Вот эти команды надо освоить!
источник

ST

Saenro T in Ассемблер
А тут каждый раз на FPU переводишь градусы в радианы, вычисляешь cos, потом умножаешь на уйму коэффициентов... И всё это чуть ли не для каждого пикселя...😱
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Вот синус на SSE (обычный и low precision). Aligned — это когда X выравнен по 16 байтам.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Success: both RDTSCP instruction and invariant TSC are supported.
Testing SINPS (UNoptimized)...... 59 ticks
Testing SINPS.................... 36 ticks
Testing SINPS (aligned X)........ 36 ticks
Testing SINPS_LP (UNoptimized)... 27 ticks
Testing SINPS_LP................. 18 ticks
Testing SINPS_LP (aligned X)..... 17 ticks
Testing FSIN..................... 69 ticks
Press a key to exit...
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Добавил немного красоты в код и вывод точности...
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Success: both RDTSCP instruction and invariant TSC are supported.
Testing SINPS (UNoptimized)...... 55 ticks
Testing SINPS.................... 31 ticks
Testing SINPS (aligned X)........ 31 ticks
Testing SINPS_LP (UNoptimized)... 25 ticks
Testing SINPS_LP................. 13 ticks
Testing SINPS_LP (aligned X)..... 14 ticks
Testing FSIN..................... 66 ticks

Calculation error for SINPS (UNoptimized) [X = 1.000000]:    2.800553e-008 (0.000000028005528342602091)
Calculation error for SINPS [X = 1.000000]:                  2.800553e-008 (0.000000028005528342602091)
Calculation error for SINPS_LP (UNoptimized) [X = 1.000000]: 2.769819e-006 (0.000002769819188010570800)
Calculation error for SINPS_LP [X = 1.000000]:               2.769819e-006 (0.000002769819188010570800)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Почему-то скорости поменялись тоже, но это обычное явление.
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Success: both RDTSCP instruction and invariant TSC are supported.
Testing SINPS (UNoptimized)...... 59 ticks
Testing SINPS.................... 36 ticks
Testing SINPS (aligned X)........ 36 ticks
Testing SINPS_LP (UNoptimized)... 27 ticks
Testing SINPS_LP................. 18 ticks
Testing SINPS_LP (aligned X)..... 17 ticks
Testing FSIN..................... 69 ticks
Press a key to exit...
Success: both RDTSCP instruction and invariant TSC are supported.
Testing SINPS (UNoptimized)...... 31 ticks
Testing SINPS.................... 20 ticks
Testing SINPS (aligned X)........ 20 ticks
Testing SINPS_LP (UNoptimized)... 16 ticks
Testing SINPS_LP................. 12 ticks
Testing SINPS_LP (aligned X)..... 12 ticks
Testing FSIN..................... 56 ticks
Press a key to exit...
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
с чем это связано? различие частот проца?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Success: both RDTSCP instruction and invariant TSC are supported.
Testing SINPS (UNoptimized)...... 31 ticks
Testing SINPS.................... 22 ticks
Testing SINPS (aligned X)........ 20 ticks
Testing SINPS_LP (UNoptimized)... 14 ticks
Testing SINPS_LP................. 10 ticks
Testing SINPS_LP (aligned X)..... 10 ticks
Testing FSIN..................... 54 ticks
Press a key to exit...

еще быстрей
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
и тогда вопрос. это у тя тики или время?
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Под для двойной точности.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
и тогда вопрос. это у тя тики или время?
Тики, написано ж.
источник

D

Den in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Тики, написано ж.
а в чем суть отличие процедуры  оптимизированой от неоптимизированой если можно в двух словах обьясни пж. 😁
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Неопт: последовательное вычисление, когда последующее зависит от предыдущего (соответственно, процессору приходится ждать результата каждый раз).
Опт: отдельно вычисляется "+" значения, отдельно "-" (с чередованием), потом они объединяются. Меньше зависимостей.
Думаю, можно ещё быстрее сделать, если поднатужиться, например, 3-4 части вычислений сделать отдельно.
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Неопт: последовательное вычисление, когда последующее зависит от предыдущего (соответственно, процессору приходится ждать результата каждый раз).
Опт: отдельно вычисляется "+" значения, отдельно "-" (с чередованием), потом они объединяются. Меньше зависимостей.
Думаю, можно ещё быстрее сделать, если поднатужиться, например, 3-4 части вычислений сделать отдельно.
а многопоток использовать можно?
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
а многопоток использовать можно?
Ну если придумаешь как :)
Думаю, с синхронизацией и пр замудохаешься и потеряешь в скорости.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Если для 1 вычисления делать.
источник

ST

Saenro T in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
У тебя 4 чтения из памяти и 1 запись. Это если классическое пламя брать.
Плюс копирование в видеопамять при буферизации.
Первый этап (4 чтения и запись) с обычном памятью будет быстрее (почти наверняка), чем одно чтение из видеопамяти.
источник