Я использую tdm gcc-компиляторы для компиляции моих проектов winapi, когда я тестирую некоторый простой mandebrot sse-код 9maybe с другими проектами, похожими на те же, но я не проверял все), 5.1 генерирует больший исполняемый файл 330 КБ против 270 КБ (хотя я не перекомпилировал все, только горячий модуль петли и связан с уже скомпилированными (в 4.7) модулями, а также замечает более медленный код 23,5 мс / смещение кадра 20 мс в 4,7
Это страшно .. Что я могу с этим сделать? (остальные настройки и т. д. такие же, я только переименую папку компилятора из одного в любой
Я использую c-подобный код, но компилирую в режиме c ++
Может кто-то знает, как это решить? (под разрешением я имею в виду
заставить сборку 5.1 работать как минимум так же быстро, как 4.7, также предпочел бы, чтобы исполняемый файл был меньше)
//редактировать
PS я сделал еще быстрый тест
как я могу скомпилировать модуль цикла в 51 и связать все в 47
цикл компиляции 47, ссылка 47: размер 270 К, скорость 20 мс
цикл компиляции 51 ссылка 51: размер 330 К скорость 23,5 мс
цикл компиляции 47 ссылка 51: размер 330 К скорость 20 мс
цикл компиляции 51, ссылка 47: размер 270 К, скорость 23,5 мс
это показывает, что падение скорости происходит при компиляции в 51
и размер наворота исходит от ссылки 51
Другая версия компилятора C ++ использует другой движок C ++
C ++ движок
отвечает за многие вещи, такие как:
Вы можете посмотреть на это как Операционные системы (в некоторых случаях это ОС в основном на платформах MCU)
и на производительность влияет в основном интенсивное использование:
Другой возможной причиной может быть версия связанных библиотек
как вернуть поведение к старому стилю
искать файлы как:
crt0.o
crtfv.o
libc.a
или аналогичные и замените их старыми версиями
Я проверил сборку, и она показывает некоторые изменения в сгенерированном коде,
хоть и небольшой
4,7
__Z16mandelbrot_n_sseU8__vectorfS_i:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl 8(%ebp), %ecx
movaps %xmm0, (%esp)
testl %ecx, %ecx
js L12
xorps %xmm0, %xmm0
xorl %eax, %eax
movaps %xmm0, %xmm2
movaps %xmm0, %xmm4
jmp L11
.p2align 4,,7
L19:
mulps %xmm4, %xmm2
addl $1, %eax
subps %xmm5, %xmm6
movaps (%esp), %xmm4
cmpl %eax, %ecx
addps %xmm6, %xmm4
addps %xmm2, %xmm2
addps %xmm1, %xmm2
jl L10
L11:
movaps %xmm4, %xmm6
movaps %xmm2, %xmm5
movaps LC5, %xmm7
mulps %xmm4, %xmm6
mulps %xmm2, %xmm5
movaps %xmm6, %xmm3
addps %xmm5, %xmm3
cmpltps LC4, %xmm3
andps %xmm3, %xmm7
movmskps %xmm3, %edx
testl %edx, %edx
addps %xmm7, %xmm0
jne L19
L10:
cvtps2dq %xmm0, %xmm0
leave
ret
L12:
xorps %xmm0, %xmm0
jmp L10
.globl __Z16mandelbrot_n_sseDv4_fS_i
5,1
__Z16mandelbrot_n_sseDv4_fS_i:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl 8(%ebp), %ecx
movaps %xmm0, (%esp)
testl %ecx, %ecx
js L11
pxor %xmm0, %xmm0
xorl %edx, %edx
movaps %xmm0, %xmm5
movaps %xmm0, %xmm2
jmp L10
.p2align 4,,10
L18:
mulps %xmm2, %xmm5
addl $1, %edx
subps %xmm6, %xmm4
cmpl %edx, %ecx
addps %xmm5, %xmm5
addps (%esp), %xmm4
addps %xmm1, %xmm5
jl L9
movaps %xmm4, %xmm2
L10:
movaps %xmm2, %xmm4
movaps %xmm5, %xmm6
movaps LC7, %xmm7
mulps %xmm2, %xmm4
mulps %xmm5, %xmm6
movaps %xmm4, %xmm3
addps %xmm6, %xmm3
cmpltps LC6, %xmm3
andps %xmm3, %xmm7
movmskps %xmm3, %eax
testl %eax, %eax
addps %xmm7, %xmm0
jne L18
L9:
cvtps2dq %xmm0, %xmm0
leave
ret
L11:
pxor %xmm0, %xmm0
jmp L9
.section .text.unlikely,"x"LCOLDE8:
.text
Кажется, что версия 5.1 не повезло, и это cst 15% замедление