LTO คืออะไร?
LTO เป็นคำย่อของ การเพิ่มประสิทธิภาพเวลาลิงค์. เป็นการดำเนินการที่คอมไพลเลอร์ล่าช้าในการปรับแต่งในขณะที่ลิงก์ไฟล์ต้นทางทำให้คุณสามารถดูไฟล์ทั้งหมดที่ประกอบขึ้นเป็นไฟล์ปฏิบัติการเดียวเป็นไฟล์เดียวและด้วยวิธีนี้จะใช้การปรับให้เหมาะสมอย่างมีประสิทธิภาพมากขึ้น
เพื่อดูประโยชน์และข้อเสียของ LTO: เกณฑ์มาตรฐานของ Phoronix
สิ่งที่ควรทราบ
- ไม่เสถียรอาจทำให้เกิดปัญหาในบางแพ็คเกจ
- บางแพ็กเกจจะคอมไพล์ไม่สำเร็จ (เพิ่มเติมเกี่ยวกับวิธีแก้ไขในภายหลัง)
- ขอแนะนำให้ใช้ตัวเชื่อม ทองคำ.
- ประเทศสหรัฐอเมริกา เสมอ เวอร์ชันล่าสุดของ GCC.
ทองคำนอกเหนือจากการรองรับคุณสมบัติขั้นสูงที่ทำให้น่าใช้ยิ่งขึ้น LTOเร็วกว่า gnu ldโดยเฉพาะอย่างยิ่งเมื่อพูดถึงโปรแกรมขนาดใหญ่ที่สามารถกลายเป็น เร็วขึ้น 5 เท่า. หากต้องการใช้ให้เรียกใช้:
binutils-config --linker ld.gold
ใช้ LTO: วิธีที่แนะนำ
แทนที่จะเปิดใช้งาน LTO ทั่วโลก (ซึ่งอาจทำให้เกิดปัญหา) ควรเปิดใช้งานในแพ็คเกจที่เราต้องการจะดีกว่า ด้วยวิธีนี้เฉพาะแพ็คเกจที่คุณต้องการได้รับประโยชน์ LTO พวกเขารวบรวมด้วยการเพิ่มประสิทธิภาพนี้หรือหลีกเลี่ยงเวลาการรวบรวมที่ช้าลงในโปรแกรมที่ไม่ได้รับประโยชน์จากมัน สามารถทำได้ด้วยวิธีต่อไปนี้:
ในไดเร็กทอรี / etc / portage / env เราสร้างไฟล์ LTO.conf และเราเพิ่มบรรทัดต่อไปนี้:
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.
ดังนั้นเพื่อใช้ LTO ในแพ็คเกจเราต้องใส่ชื่อ (ชื่อเต็ม www-client / firefox แทน firefox) ในไฟล์ package.envพร้อมด้วย LTO.conf ทางขวาของคุณ ด้านล่างนี้คือตัวอย่าง:
app-emulation/wine LTO.conf
www-client/firefox LTO.conf
sys-devel/gcc LTO.conf
kde-base/kdelibs LTO.conf
ตอนนี้เราต้องรวบรวมแพ็คเกจที่เราต้องการให้ใช้ LTO.
การใช้ LTO ทั่วโลก (ไม่แนะนำ)
แทนที่จะสมัคร LTO แพ็คเกจตามแพ็คเกจเรายังสามารถใช้งานได้ทั่วโลก (ซึ่งก็คือสิ่งที่ฉันใช้) ในการใช้งานขั้นตอนต่อไปนี้มีดังนี้:
เราแก้ไขไฟล์ /etc/portage/make.conf และเพิ่มสิ่งต่อไปนี้ (เป็นบรรทัดเดียวกันของไฟล์ LTO.conf):
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.
ในทางกลับกันเราสร้างไฟล์ /etc/portage/env/no-LTO.conf และเพิ่มบรรทัดต่อไปนี้:
CFLAGS="${CFLAGS} -fno-lto -fno-use-linker-plugin"
CXXFLAGS="${CXXFLAGS} -fno-lto -fno-use-linker-plugin"
LDFLAGS="${LDFLAGS} -fno-lto -fno-use-linker-plugin"
และในไฟล์ package.env เราจะใส่แพ็คเกจที่การรวบรวมล้มเหลวด้วย LTO. เขา ที่นี่ของฉัน package.env (สังเกตว่าฉันใช้ nolto.conf แทนที่ ไม่มี -LTO.conf).
เราต้องเพิ่มด้วย LTO ถึงตัวแปร USE ของ make.confนี่เป็นสิ่งจำเป็นเนื่องจากนักพัฒนาของ Gentoo พวกเขา (ช้า) เพิ่มแพตช์เสริมสำหรับการใช้การเพิ่มประสิทธิภาพนี้ในบางแพ็คเกจ
เมื่อเสร็จแล้วให้ทำการคอมไพล์แพ็กเกจระบบทั้งหมดใหม่:
emerge -e @world @system --keep-going &> errores
เรากำลังบอกด้วยการใช้ - ทำต่อไป การขนส่ง เพื่อละเว้นข้อผิดพลาดในขณะที่ &> เปลี่ยนเส้นทางผลลัพธ์ของจุดบกพร่องทั้งหมดไปยังไฟล์ที่เรียกว่าข้อผิดพลาดใช้ไฟล์นี้เพื่อดูว่าแพ็คเกจใดไม่สามารถรวบรวมและเพิ่มลงในรายการ package.env.
tail -f /var/log/emerge.log
และนั่นคือทั้งหมดฉันหวังว่าฉันจะไม่ทิ้งข้อสงสัยใด ๆ หากสิ่งนั้นฉันจะมีกำลังใจและเขียนบทความเกี่ยวกับ Openmp และ / หรือ กราไฟท์.
เก็นทูฉัน ...
ไปที่สิ่งสำคัญ: ไฟท์!
กราไฟท์ที่โง่และ ssensual สิ่งที่ผิดปกติที่ระเบิดระบบ xD ของคุณฉันจำได้ว่าครั้งสุดท้ายที่ฉันใช้มันก็เพียงพอแล้วที่จะทำซ้ำ 50 ครั้งโดยทำ "แจ้ง - ส่ง KDE <3" เพื่อให้ในการวนซ้ำ ตอนที่ 50 สภาพแวดล้อมจะนรกแตก XNUMX ใช่แล้วฉันกำลังจะผายลม xD
บอกแล้วว่ายังมีกำลังใจและเป็นหนึ่งในไฟท์ อย่างไรก็ตาม Graphite (และการเพิ่มประสิทธิภาพอื่น ๆ ) ทำงานได้ดีที่สุดกับ LTO นอกจากนี้ไม่เหมือนกับ LTO, Graphite และ OpenMP มีปัญหา ไม่ใช่ทุกโปรแกรมที่ได้รับประโยชน์จากโปรแกรมนี้และในโปรแกรมที่ไม่ได้รับประโยชน์จากโปรแกรมนั้นประสิทธิภาพจะลดลงดังนั้นในกรณีนี้ควรใช้เพียงไม่กี่แพ็คเกจเท่านั้น