Крім того, хтось може вказати мені на хороший підручник з цього питання? Я не можу знайти жодного.
Крім того, хтось може вказати мені на хороший підручник з цього питання? Я не можу знайти жодного.
Відповіді:
-fprofile-generirati додаток додатком з кодом профілювання. Під час фактичного запуску програма реєструватиме певні події, які можуть покращити продуктивність, якби цей шаблон використання був відомий під час компіляції. Гілки, можливість вбудовування тощо можна реєструвати, але я не впевнений у деталях, як GCC це реалізує.
Після виходу програми вона скидає всі ці дані у файли * .gcda, які по суті є даними журналу для тестового запуску. Після відновлення програми з прапором -fprofile-use, GCC враховуватиме дані журналу * .gcda під час її оптимізації, зазвичай значно підвищуючи продуктивність. Звичайно, це залежить від багатьох факторів.
-fprofile-correction
друге виклик GCC.
gcc hello_world.c -o demo_fdo -fprofile-use -freorder-blocks-and-partition -O3 -fprofile-correction -Wcoverage-mismatch
все ще отримує помилку невідповідності покриття. Що я роблю не так?
З цього прикладу :
g++ -O3 -fprofile-generate [more params here, like -march=native ...] -o executable_name
// run my program's benchmarks, or something to stress its most common path
g++ -O3 -fprofile-use [more params here, like -march=native...] -o executable_name
По суті, ви спочатку компілюєте та пов'язуєте цей додатковий прапор як для компіляції, так і для зв'язування: -fprofile-generate
(з звідси ).
Потім, коли ви запускаєте його, за замовчуванням він створює .gcda-файли "поруч" з вашими .o-файлами, здається (жорстко закодований до повного шляху, де вони були побудовані).
При бажанні ви можете змінити , де вона створює ці .gcda файли з -fprofile-каталог = XXX настройки .
Потім ви повторно скомпілюєте та повторно зв’язали, використовуючи -fprofile-use
параметр, а він компілює його, використовуючи керованість профілем.
-fprofile-correction
друге виклик g ++.
gcc hello_world.c -o demo_fdo -fprofile-use -freorder-blocks-and-partition -O3 -fprofile-correction -Wcoverage-mismatch
все ще отримує помилку невідповідності покриття. Що я роблю не так?
Хитрий біт налаштовує make-файли.
Вам обов’язково потрібні окремі вихідні каталоги для об’єктних файлів. Я б порекомендував назвати їх "профіль" та "звільнити". Можливо, вам доведеться скопіювати файли * .gcda, які є результатом запуску профілю, щоб GCC знайшов їх на етапі побудови випуску.
Результат майже напевно буде швидшим. Ймовірно, він буде і більшим. Параметр -fprofile-use дозволяє використовувати багато інших кроків оптимізації, які в іншому випадку увімкнені лише за допомогою -O3.
info gcc
і шукайте використання профілю. Там сказано: "Увімкнено такі опції: -fbranch-ймовірності ',' -fvpt ',' -funroll-петлі ',' -fpeel-петлі ',' -ftracer '"