Войти
ФлеймФорумПроЭкты

Contra Force Advance (12 стр)

Страницы: 111 12 13 1419 Следующая »
#165
(Правка: 11:52) 11:46, 8 июля 2018

Ага...
У меня вот такие результаты на 16 Кб:

+ Показать

и вот такие на 2Мб:
+ Показать

То есть кеш-нефрендли резко возвращает SSE к уровню "на порядок лучше худшего", а AVX на Phenom II вообще отсутствует и компилятор походу втыкает какую то эмуляцию и на эту колонку у меня смотреть не надо.


#166
12:10, 8 июля 2018

А вообще забавно еще то, что у неких интелей видимо табличный метод так же быстро работает как cmov, а bitw работает еще заметно быстрее.
У Phenom II же табличный заметно медленнее cmov как и bitw. Хм, мда уж.

#167
12:31, 8 июля 2018

> а как ты ссе авх делаешь? просто memcpy в ссе\авх тип данных, а дальше над ним проводишь обычные или интерсик операции и компилятор понимает, что ему нужно векторные операции юзать?
Код =A=L=X= изначально GCC-specific (ну или точнее совместимый: на icc и clang тоже может работать), поэтому я не испытывал угрызений, используя https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html . Для загрузки memcpy, да.

> А в мсвц также?
Нет.
Конкретно memcpy в SIMD-типы (и из них) в MSVC как-то работает, но возможно неоптимально. Арифметика - фиг там.

https://godbolt.org/g/cK9uMT

#168
13:24, 8 июля 2018

=A=L=X=
Скорость bitw странная. Если -m32 тогда ок, но в -m64 я бы ожидал шустрее.

#169
13:29, 8 июля 2018

FordPerfect
> Если -m32 тогда ок

Да, так и есть.

#170
18:09, 8 июля 2018

=A=L=X=
> Табличный метод не зависит от данных/предсказаний, но в среднем всё равно
> тормоз и нередко уступает бранчу. В лучшем случае он быстрее бранча в 1,36 раз.
Ого. Не видел такого. Раза в три он при любом раскладе быстрей.

#171
18:30, 8 июля 2018

beejah
Это platform-specific, как выяснилось. А вот sse везде пока рулит и бруталит.

#172
22:37, 8 июля 2018

bitw можно оптимизировать.
См. bit2 (для 64-битных систем) и bit4 (по задумке лучше для 32-битных).

http://rextester.com/DLHY92641

=A=L=X=
beejah
Просьба потестить.

#173
7:37, 9 июля 2018
%probab. | blt_if   | blt_tern | blt_tbl  | blt_cmov | blt_bitw | blt_bit2 | blt_bit4 | blt_sse2 | blt_avx2
0.000000 |    1.144 |    0.153 |    2.518 |    1.221 |    2.289 |    1.297 |    0.687 |    0.153 |    1.297
0.050000 |    1.450 |    0.153 |    2.518 |    1.221 |    2.289 |    1.297 |    0.763 |    0.153 |    1.297
0.100000 |    1.678 |    0.153 |    2.594 |    1.221 |    2.289 |    1.373 |    0.763 |    0.229 |    1.221
0.150000 |    1.984 |    0.153 |    2.518 |    1.221 |    2.289 |    1.297 |    0.687 |    0.153 |    1.221
0.200000 |    2.213 |    0.153 |    2.518 |    1.144 |    2.289 |    1.297 |    0.687 |    0.153 |    1.297
0.250000 |    2.594 |    0.229 |    2.518 |    1.221 |    2.213 |    1.297 |    0.763 |    0.153 |    1.221
0.300000 |    2.899 |    0.153 |    2.518 |    1.144 |    2.213 |    1.373 |    0.763 |    0.153 |    1.373
0.350000 |    3.128 |    0.153 |    2.518 |    1.221 |    2.289 |    1.297 |    0.687 |    0.229 |    1.297
0.400000 |    3.281 |    0.153 |    2.518 |    1.144 |    2.213 |    1.297 |    0.687 |    0.153 |    1.297
0.450000 |    3.510 |    0.153 |    2.518 |    1.221 |    2.289 |    1.297 |    0.687 |    0.153 |    1.297
0.500000 |    3.586 |    0.153 |    2.518 |    1.221 |    2.289 |    1.297 |    0.763 |    0.229 |    1.297
0.550000 |    3.510 |    0.153 |    2.518 |    1.144 |    2.289 |    1.297 |    0.687 |    0.153 |    1.221
0.600000 |    3.433 |    0.153 |    2.518 |    1.221 |    2.289 |    1.297 |    0.687 |    0.229 |    1.221
0.650000 |    3.281 |    0.229 |    2.518 |    1.221 |    2.289 |    1.297 |    0.763 |    0.153 |    1.221
0.700000 |    2.975 |    0.229 |    2.594 |    1.221 |    2.213 |    1.297 |    0.763 |    0.229 |    1.297
0.750000 |    2.747 |    0.153 |    2.518 |    1.144 |    2.289 |    1.297 |    0.687 |    0.229 |    1.221
0.800000 |    2.365 |    0.153 |    2.518 |    1.221 |    2.213 |    1.297 |    0.687 |    0.229 |    1.221
0.850000 |    2.060 |    0.153 |    2.594 |    1.221 |    2.289 |    1.297 |    0.687 |    0.153 |    1.297
0.900000 |    1.755 |    0.153 |    2.518 |    1.144 |    2.289 |    1.297 |    0.687 |    0.229 |    1.297
0.950000 |    1.602 |    0.153 |    2.518 |    1.221 |    2.289 |    1.373 |    0.687 |    0.229 |    1.297
1.000000 |    1.221 |    0.153 |    2.518 |    1.221 |    2.289 |    1.297 |    0.763 |    0.229 |    1.297
#174
12:45, 9 июля 2018

=A=L=X=
Вот, а то было странно, что четырёхстволом (32bit) не удаётся обогнать побайтовую обработку.

И без всяких компиляторо-специфичных вещей. Да и от платформы особо не зависит (желательно не меньше 32 бит). На LE/BE вроде тоже пофиг.

#175
13:52, 9 июля 2018

FordPerfect
> Просьба потестить.
Как только домой попаду, сделаю.

#176
18:32, 11 июля 2018

От SSE4.1 ему лучше не стало:
http://rextester.com/HUZL76472

Кстати, можно бы себе бэкпортить. А то у меня тоже побайтовая обработка.

Кстати, =A=L=X=, можешь завести её на GBA (физическом/эмуляторе); и здешние версии? Интересно:
1. Насколько малой кровью оно там заведётся.
2. Насколько будет тормозить.
#177
19:38, 11 июля 2018

FordPerfect
Ой, там возни много будет. К тому же GBA еще и сложен по опциям. У проца нет кеша, но уже есть трехстадийный конвеер. А так же первое поколение thumb, 16 битную шину к пзу и 256 кб озу и 32кб озу с 32-битной шиной. Нативные инструкции ARM все имеют способность условного выполнения, т.е. Не только cmov есть, но вообще любая инструкция может быть безбранчево откинута. Но когда код расположен в пзу картриджа, то рациональнее юзать режим 16-битных инструкций thumb где условны только бранчи. Но можно закинуть код и/или данные в быстрыеи32кб озу. Короче там этих тестов и без sse по хорошему тоже надо наворачивать сложно, ей богу лень.

#178
19:40, 11 июля 2018

Ну и, кстати, заливка экрана пиксельно на гба тормозит и там нет смысла в этих алгоритмах, там спрайтовый аппаратный видеочип и тем он и прекрасен.

#179
15:01, 12 июля 2018

Код блиттинга с произвольным ключом:
http://rextester.com/ZRISQ82196

Страницы: 111 12 13 1419 Следующая »
ФлеймФорумПроЭкты