/ / опции за булеварда и параметри за настройка в gcc - c, gcc

опции за булеви линии и параметри за настройка в gcc-c, gcc

Аз работя върху референтен критерий, написан в С. Опитах се да го компилирам с помощта на флага за оптимизация - funroll-loops присъстващи в gcc. Аз го компилирам само с funroll-loops и след това funroll-loops - param max-unrolled-insns = 10 и изненадващо отне 50 сек повече за двоичното, което е съставено с funroll-loops - param max-unrolled-insns = 10 опция за изпълнение, отколкото бинарното компилирано само с funroll-loops. Същият случай с funroll-all-loops също. Не мога да разбера това поведение на gcc. Защо ефективността се разрушава, когато използваме настройващия параметър max-unrolled-insns? Моля, помогнете.

Отговори:

1 за отговор № 1

Когато кажете, че сте добавили 50 секунди, каква е свързана с това, колко голям е общият брой?

max-unrolled-insns ще зададе броя наинструкциите, които може да се развият в цикъл, така че ако го зададете на 10, има добър шанс да загубите няколко процента. Например .. ако имате линия, която има 6 инструкции, тя няма да се развие изобщо, защото развъртането ще го направи 12 инструкции.

Ако не развиете този случай, ще ви накара да изгубите няколко инструкции и да насилите клон ... така че може да добавите няколко процента към времето, необходимо да се изпълни.