Сообщение gcc - глупая оптимизация от 28.11.2022 19:06
Изменено 28.11.2022 19:09 maks1180
gcc - глупая оптитмизация
специально переписал код, что-бы не вызывать memset, что-бы быстре работал:
unsigned int c = (count_in_page) >> 2;
for(;c>0; c--) *p++ = 0;
В итоге при компиляции "-O2 -m32", вижу на сайте gcc.godbolt.org (стоит gcc v12.2)
sub esp, 12
mov eax, DWORD PTR [esp+20]
shr eax, 2
je .L2
sub esp, 4
sal eax, 2
push eax
push 0
push DWORD PTR [esp+28]
call memset
add esp, 16
Я не указал, что процессор поддерживает SSE и попросил оптимизировать по скорости "-O2 -m32" почему он считает, что вызов memset будет быстрее ?
Почему он сам за меня решает, может я явно знаю, мне нужно заполнить 8-16 байт, за 2-4 операции *p++ = 0, это же будет явно быстрее чем "call memset" ?
unsigned int c = (count_in_page) >> 2;
for(;c>0; c--) *p++ = 0;
В итоге при компиляции "-O2 -m32", вижу на сайте gcc.godbolt.org (стоит gcc v12.2)
sub esp, 12
mov eax, DWORD PTR [esp+20]
shr eax, 2
je .L2
sub esp, 4
sal eax, 2
push eax
push 0
push DWORD PTR [esp+28]
call memset
add esp, 16
Я не указал, что процессор поддерживает SSE и попросил оптимизировать по скорости "-O2 -m32" почему он считает, что вызов memset будет быстрее ?
Почему он сам за меня решает, может я явно знаю, мне нужно заполнить 8-16 байт, за 2-4 операции *p++ = 0, это же будет явно быстрее чем "call memset" ?
gcc - глупая оптимизация
специально переписал код, что-бы не вызывать memset, что-бы быстре работал:
unsigned int c = (count_in_page) >> 2;
for(;c>0; c--) *p++ = 0;
В итоге при компиляции "-O2 -m32", вижу на сайте gcc.godbolt.org (стоит gcc v12.2)
sub esp, 12
mov eax, DWORD PTR [esp+20]
shr eax, 2
je .L2
sub esp, 4
sal eax, 2
push eax
push 0
push DWORD PTR [esp+28]
call memset
add esp, 16
Я не указал, что процессор поддерживает SSE и попросил оптимизировать по скорости "-O2 -m32" почему он считает, что вызов memset будет быстрее ?
Почему он сам за меня решает, может я явно знаю, мне нужно заполнить 8-16 байт, за 2-4 операции *p++ = 0, это же будет явно быстрее чем "call memset" ?
unsigned int c = (count_in_page) >> 2;
for(;c>0; c--) *p++ = 0;
В итоге при компиляции "-O2 -m32", вижу на сайте gcc.godbolt.org (стоит gcc v12.2)
sub esp, 12
mov eax, DWORD PTR [esp+20]
shr eax, 2
je .L2
sub esp, 4
sal eax, 2
push eax
push 0
push DWORD PTR [esp+28]
call memset
add esp, 16
Я не указал, что процессор поддерживает SSE и попросил оптимизировать по скорости "-O2 -m32" почему он считает, что вызов memset будет быстрее ?
Почему он сам за меня решает, может я явно знаю, мне нужно заполнить 8-16 байт, за 2-4 операции *p++ = 0, это же будет явно быстрее чем "call memset" ?