Войти
ПрограммированиеФорумОбщее

C++, низкий уровень, оптимизация быстродействия. (3 стр)

Страницы: 1 2 3 4 512 Следующая »
#30
(Правка: 16:23) 16:21, 13 фев. 2019

Truthfinder
> Какой у тебя проц?
Сейчас тестирую на AMD FX-6300, но мне, естественно, нужно, чтобы везде работало, по крайней мере там, где есть SSE2.
Truthfinder
> Смотри что у тебя в asm. movaps требует, movups нет
Вот это я не понял. Что смотреть?

А, понял, дизассемблером смотреть.

#31
16:33, 13 фев. 2019

А какая ide  у тебя и версия?

#32
16:42, 13 фев. 2019

Truthfinder
У меня VS 2008 Express, я нашёл и включил генерацию асм-кода.
Когда отладку в 32-х битах сделаю, буду искать что-нибудь для компиляции в x64.

#33
(Правка: 17:03) 17:03, 13 фев. 2019

Mikle
> где есть SSE2.
Как выделяется память? Просто если сам контролируешь, проще просто выровненную  предоставлять, если юзер, то придется края отдельно обрабатывать.

Mikle
> Когда отладку в 32-х битах сделаю, буду искать что-нибудь для компиляции в x64.
Проще сразу в 64 битах делать. Используй к примеру x64dbg для отладки и сразу смотри что куда пишется:
Изображение
Довольно удобно.
У тебя еще там ширина изображения задается, нужно еще или маски организовывать или на краях строки не SIMD обрабатывать если ширина не кратна 4 пикселям.

#34
17:15, 13 фев. 2019

https://rextester.com/CFKC81869

#35
(Правка: 17:17) 17:16, 13 фев. 2019

the trick
> нужно еще или маски организовывать или на краях строки не SIMD обрабатывать
> если ширина не кратна 4 пикселям
У меня отображение одного спрайта на другой с произвольным сдвигом, а бывает ещё и спрайт-маска тоже со своим сдвигом, подстроиться под выравнивание никак не выйдет, придётся пользоваться инструкциями, не нуждающимися в выравнивании.
the trick
> Проще сразу в 64 битах делать.
Так мне нужно, чтобы и в 32-х битах работало, и при этом, желательно, чтобы это не были два совершенно разных проекта.

#36
(Правка: 17:49) 17:36, 13 фев. 2019

Студия сама же умеет собирать x64. Если 2008 старая, то 2012 express то должна уметь. Я уже не помню что они умеют. У меня 2017 и 2019.

#37
18:01, 13 фев. 2019

FordPerfect
> https://rextester.com/CFKC81869

К этому коду очень много вопросов )))

#38
18:01, 13 фев. 2019

Truthfinder
Ты о котором умножении?
src+y*src_stride_in_bytes?
По хорошему - да, раздолбайство это.
Хотя компилятор, наверно, превратит в инкремент. Плюс оно одно на сканлинию. Плюс не такое умножение и медленное.

#39
18:03, 13 фев. 2019

Mikle
Truthfinder
Код писался влёт, без тестирования.
Я не уверен, что оно вообще корректно.

#40
18:06, 13 фев. 2019

FordPerfect
> Я не уверен, что оно вообще корректно.

Но тайминги похожи на правду.

#41
18:07, 13 фев. 2019

Truthfinder
> К этому коду очень много вопросов )))
А можно подробнее?

#42
18:07, 13 фев. 2019

FordPerfect
> https://rextester.com/CFKC81869
На выровненных данных:

add_ref              |  6.7090 ns/pixel
add_cpp              |  2.3657 ns/pixel
add_sse2             |  0.4590 ns/pixel
add_sse2_unroll      |  0.3052 ns/pixel
На не выровненных:
add_ref              |  7.3486 ns/pixel
add_cpp              |  4.3921 ns/pixel
add_sse2             |  2.0190 ns/pixel
add_sse2_unroll      |  1.6382 ns/pixel
На выровненных с использованием инструкций работающих с выровненными данными:
add_ref              |  7.3535 ns/pixel
add_cpp              |  2.3633 ns/pixel
add_sse2             |  0.4614 ns/pixel
add_sse2_unroll      |  0.2661 ns/pixel

Mikle
> У меня отображение одного спрайта на другой с произвольным сдвигом, а бывает
> ещё и спрайт-маска тоже со своим сдвигом, подстроиться под выравнивание никак
> не выйдет, придётся пользоваться инструкциями, не нуждающимися в выравнивании.
Понятно, но судя по тестам, особо разницы нет.

#43
18:09, 13 фев. 2019

for(;x<w;x+=4)
Ой, блин.

#44
18:10, 13 фев. 2019

for(x=0;x+15<w;x+=16)
Ой, блин^2.

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