Vad är LTO?
LTO är förkortningen för Länktidoptimering. Det är en operation där kompilatorn fördröjer optimeringar när källfilerna länkar, så att du kan se alla filer som utgör en enda körbar som en enda fil och på detta sätt tillämpa optimeringar på ett mer effektivt sätt.
För att se fördelarna och nackdelarna med LTO: Jämförelser av Phoronix
Saker att tänka på
- Det är instabilt, det kan orsaka problem i vissa paket.
- Vissa paket kommer inte att kompileras (mer om hur du åtgärdar detta senare).
- Det rekommenderas att använda länken Gold.
- USA alltid den senaste versionen av GCC.
Gold, förutom att stödja avancerade funktioner som gör det mer attraktivt att använda LTO, det är snabbare än gnu ld, särskilt när det gäller stora program, där det kan bli 5 gånger snabbare. För att använda den, kör:
binutils-config --linker ld.gold
Använda LTO: rekommenderad metod
Istället för att aktivera LTO globalt (vilket kan orsaka problem) är det bättre att aktivera det i de paket vi vill ha. På så sätt bara de paket du vill dra nytta av LTO de sammanställs med den här optimeringen, eller som undviker långsammare sammanställningstider i program som inte drar nytta av den. Detta kan uppnås på följande sätt:
I katalogen / etc / portage / env skapar vi filen LTO.konf och vi lägger till följande rader:
CFLAGS="${CFLAGS} -flto=5" #pon en -flto los hilos de tu CPU + 1
CXXFLAGS="${CXXFLAGS} -flto=5" #igual que arriba
LDFLAGS="${LDFLAGS} -fuse-linker-plugin" #solo si usas Gold, es mejor.
Så att använda LTO i ett paket behöver vi bara lägga in dess namn (fullständigt namn, www-client / firefox, istället för firefox) i filen paket. sv, tillsammans med LTO.konf till höger. Nedan följer ett exempel:
app-emulation/wine LTO.conf
www-client/firefox LTO.conf
sys-devel/gcc LTO.conf
kde-base/kdelibs LTO.conf
Nu måste vi bara kompilera de paket vi vill att de ska använda LTO.
Använda LTO globalt (rekommenderas inte)
Istället för att ansöka LTO paket för paket kan vi också använda det globalt (vilket är vad jag använder). För att tillämpa det är stegen att följa:
Vi redigerar filen /etc/portage/make.conf och lägger till följande (de är samma rader i filen LTO.konf):
CFLAGS="${CFLAGS} -flto=5" #pon en -flto los hilos de tu CPU + 1
CXXFLAGS="${CXXFLAGS} -flto=5" #igual que arriba
LDFLAGS="${LDFLAGS} -fuse-linker-plugin" #solo si usas Gold, es mejor.
I sin tur skapar vi filen /etc/portage/env/no-LTO.conf och lägger till följande rader:
CFLAGS="${CFLAGS} -fno-lto -fno-use-linker-plugin"
CXXFLAGS="${CXXFLAGS} -fno-lto -fno-use-linker-plugin"
LDFLAGS="${LDFLAGS} -fno-lto -fno-use-linker-plugin"
Och i filen paket. sv vi kommer att lägga paketen vars sammanställning misslyckas med LTO. Han här min paket. sv (notera att jag använder nolto.conf istället för icke-LTO.conf).
Vi måste också lägga till LTO att ANVÄNDA variabeln make.conf, detta är nödvändigt eftersom utvecklarna av Gentoo de lägger till (långsamt) valfria korrigeringsfiler för att använda denna optimering i vissa paket.
När detta är klart, låt oss fortsätta att kompilera om alla systempaket:
emerge -e @world @system --keep-going &> errores
Genom att använda –keep-going, säger vi Portage att ignorera fel, medan &> omdirigera utdata från alla buggar till en fil som heter fel, använd den här filen för att se vilka paket som inte kan kompileras och lägg till dem i listan över paket. sv.
tail -f /var/log/emerge.log
Och det är allt, jag hoppas att jag inte har lämnat något tvivel om jag kommer att muntra upp och skriva en artikel om Openmp y / o grafit.
Gentoo, meh ...
Låt oss komma till det viktiga: grafit!
Den dumma och sensuella grafiten xD, den subnormala saken som spricker i ditt xD-system, jag kommer ihåg att förra gången jag använde det, räckte det för att göra en för det itererar 50 gånger med att göra «meddela-skicka KDE <3" så att i iteration nummer 50, kommer miljön att sprängas till helvetet hahahahaha, ja, jag skulle till omfarterna xD
Jag sa redan att jag fortfarande var uppmuntrad och gjorde en av Graphite. Men hur som helst, Graphite (och alla andra optimeringar) fungerar bäst med LTO. Till skillnad från LTO har också Graphite och OpenMP problem. Inte alla program drar nytta av det, och i de som inte gynnas minskar prestandan, så i det här fallet är det bättre att använda det bara för ett fåtal paket.