การคอมไพล์ GNU / Linux ด้วยการเพิ่มประสิทธิภาพ -O3


18

ได้มีการกล่าวว่าการรวบรวมเครื่องมือ GNU และเคอร์เนล Linux พร้อม-O3ตัวเลือกการเพิ่มประสิทธิภาพ gcc จะสร้างข้อผิดพลาดที่แปลกและแปลกใหม่ จริงป้ะ? มีใครลองดูบ้างหรือว่ามันเป็นเรื่องหลอกลวง?


ที่น่าสนใจ-O0ก็คือไม่รองรับเลย! stackoverflow.com/questions/29151235/…
Ciro Santilli 事件改造中心法轮功六四事件

คำตอบ:


8

มันใช้ใน Gentoo และฉันไม่ได้สังเกตอะไรผิดปกติ


8
อย่างไรก็ตามโปรดทราบว่า -O3 มักถูกกรองโดย ebuilds
Maciej Piechotka

17

-O3 มีข้อเสียหลายประการ:

  1. ครั้งแรกของทั้งหมดก็มักจะผลิตรหัสช้ากว่าหรือ-O2 -Osบางครั้งมันสร้างรหัสอีกต่อไปเนื่องจากการวนซ้ำการคลี่คลายซึ่งในความเป็นจริงอาจช้าลงเนื่องจากประสิทธิภาพของรหัสแคชที่แย่
  2. ตามที่ได้มีการกล่าวในบางครั้งมันก็สร้างรหัสผิด อาจเป็นเพราะข้อผิดพลาดในการเพิ่มประสิทธิภาพหรือข้อผิดพลาดในรหัส (เช่นละเว้นการใช้นามแฝงที่เข้มงวด) ในขณะที่รหัสเคอร์เนลเป็นบางครั้งและบางครั้งก็ต้องเป็น 'ฉลาด' ฉันบอกว่าเป็นไปได้ว่าผู้พัฒนาเคอร์เนลบางคนทำผิดพลาด ฉันประสบปัญหาแปลก ๆ หลายอย่างเช่นการล่มของยูทิลิตี้ของผู้ใช้เมื่อฉันรวบรวมเคอร์เนลด้วย gcc 4.5 ซึ่ง ณ จุดนั้นมีเสถียรภาพ ฉันยังคงใช้ gcc 4.4 สำหรับเคอร์เนลและยูทิลิตี้ userpace ที่เลือกหลายอันเนื่องจากข้อบกพร่องต่าง ๆ -O3เดียวกันอาจนำไปใช้สำหรับ
  3. ฉันไม่คิดว่ามันจะมีประโยชน์มากสำหรับเคอร์เนล Linux เคอร์เนลไม่ได้ทำการคำนวณอย่างหนักและในสถานที่ที่มันทำมันถูกปรับให้เหมาะสมกับการชุมนุม -O3การตั้งค่าสถานะจะไม่เปลี่ยนแปลงต้นทุนของการสลับบริบทหรือความเร็วของ I / O ฉันไม่คิดว่าการเพิ่มความเร็วโดยรวม <0.1% ของประสิทธิภาพโดยรวมจะคุ้มค่า

6
Linux ถูกคอมไพล์ด้วย -fno-เคร่งครัด-aliasing เนื่องจาก Linus คิดว่า gcc นั้นโง่และถูก จำกัด อย่างมากเนื่องจากมันทำสิ่งที่โง่เช่นค่าการรักษาที่แตกต่างแม้ว่าพวกเขาจะโจ๋งครึ่มไม่ชัด ดูมัน) ดูmail-archive.com/linux-btrfs@vger.kernel.org/msg01647.html
Spudd86

@ Spudd86: เขาหมายถึงว่าพวกเขาไม่ได้เป็นคนอ่านรหัสหรือคอมไพเลอร์? ดังที่ฉันได้กล่าว - บางครั้งเคอร์เนลต้องทำสิ่งที่ชาญฉลาดที่โปรแกรมผู้ใช้พื้นที่ไม่ควรทำ สิ่งที่สมเหตุสมผลสำหรับ userspace (การเพิ่มประสิทธิภาพอย่างหนักในบางพื้นที่) อาจไม่เหมาะสมสำหรับเคอร์เนล
Maciej Piechotka

1
ไม่มีสิ่งที่เขาพูดนำไปใช้กับ userspace ด้วย
Spudd86

1
@ Spudd86: ฉันไม่เห็นด้วยกับมันแล้ว การทำให้คอมไพเลอร์ 'ฉลาดพอที่จะมองเห็นสิ่งที่' ชัดเจน 'นั้นไม่สำคัญ ดังนั้นวิธีเดียวที่เป็นไปได้คือ) สร้างโค้ดช้า (er) (ซึ่งยอมรับไม่ได้สำหรับกรณีการใช้งานบางอย่างในการพูด HPC) และ / หรือบังคับให้โปรแกรมเมอร์เขียนโค้ดด้วยตนเองให้เหมาะสมที่สุด b) ทำให้กฎเข้มงวดขึ้นเพื่อให้ คอมไพเลอร์เพื่อเพิ่มประสิทธิภาพ - เส้นทางที่ดำเนินการโดยมาตรฐาน C
Maciej Piechotka

6

โปรดทราบว่าส่วนใหญ่ของ toolchain (โดยเฉพาะ glibc) จะไม่เรียบถ้าคุณเปลี่ยนระดับการปรับให้เหมาะสม ระบบบิลด์ถูกตั้งค่าให้ละเว้นการตั้งค่า -O ของคุณสำหรับส่วนเหล่านี้ใน distros ที่มีสติส่วนใหญ่

กล่าวง่ายๆคือไลบรารีพื้นฐานและคุณสมบัติของระบบปฏิบัติการขึ้นอยู่กับรหัสที่ทำในสิ่งที่มันพูดไม่ใช่สิ่งที่จะเร็วขึ้นในหลาย ๆ กรณี -fgcse-after-reload โดยเฉพาะ (เปิดใช้งานโดย -O3) อาจทำให้เกิดปัญหาแปลก ๆ


5

ในช่วง 10 ปีที่ผ่านมาฉันได้ใช้ระบบ Gentoo หลายระบบที่มีแพ็คเกจมากกว่า 1,000 รายการที่ใช้-O3 -march=nativeทั่วโลกและยังไม่พบปัญหาความมั่นคงในตำนานที่-O3ควรจะมี มาตรฐานของแอพพลิเคชั่นที่ใช้ CPU มาก (เช่นแอพพลิเคชั่นคณิตศาสตร์ / วิทยาศาสตร์) แสดงให้เห็นอย่างสม่ำเสมอ-O3เพื่อสร้างโค้ดที่เร็วขึ้นหลังจากนั้นมันก็จะไร้จุดหมายหากไม่มี สำหรับแอพเดสก์ท็อปส่วนใหญ่CFLAGSนั้นไม่ได้มีความสำคัญอะไรมากนักเนื่องจากมันถูกผูกไว้กับ IO แต่มันมีความสำคัญอย่างมากสำหรับฝั่งเซิร์ฟเวอร์ที่ CPU ผูกไว้


3

- O3 ใช้การเพิ่มประสิทธิภาพเชิงรุกบางอย่างที่ปลอดภัยเฉพาะในกรณีที่สมมติฐานบางอย่างเกี่ยวกับการใช้รีจิสเตอร์การโต้ตอบของเฟรมสแต็กและฟังก์ชัน reentrancy เป็นจริงและสมมติฐานเหล่านี้ไม่รับประกันว่าจะเป็นจริงในรหัสบางอย่างเช่นเคอร์เนล ใช้แล้ว (เนื่องจากอยู่ในบางส่วนของเคอร์เนลและโมดูลไดรเวอร์)


ไม่ต้องพูดถึงว่ามันไม่ได้เร็วขึ้นคุณต้องสร้างมาตรฐานและทดสอบเทียบ-O2กับรู้สภาพอากาศหรือไม่ว่ามันเจ็บหรือช่วยเหลือ
Spudd86

0

ในขณะที่คุณสามารถหลีกเลี่ยงการใช้ -O3 และปุ่มปรับแต่งอื่น ๆ ในแอพพลิเคชั่นส่วนใหญ่ (และอาจส่งผลให้มีการปรับปรุงความเร็ว) ฉันลังเลที่จะใช้การปรับแต่งเคอร์เนลเองหรือบนโซ่เครื่องมือที่จำเป็นสำหรับการสร้าง ฯลฯ )

ลองคิดดูสิ: ประสิทธิภาพเพิ่มขึ้น 5% ของการโจมตีและระบบย่อย ext3 ที่คุ้มค่ากับการล่มของระบบหรือการสูญหายของข้อมูลและ / หรือความเสียหาย

บิดลูกบิดทั้งหมดเพื่อต้องการพอร์ต Quake ที่คุณกำลังเล่นหรือตัวแปลงสัญญาณเสียง / วิดีโอที่คุณใช้สำหรับการคัดลอกคอลเลกชัน DVD ของคุณไปยังไฟล์ Divx คุณอาจจะเห็นการปรับปรุง เพียงแค่ไม่ยุ่งกับเคอร์เนลจนกว่าคุณจะมีเวลาเสียและข้อมูลที่คุณสามารถสูญเสีย


3
ฉันไม่ได้ถามว่ามันมีค่าหรือไม่ปลอดภัยหรือไม่หรือทำไมเราไม่ควรทำสิ่งที่ฉันถามคือความจริงมันสร้างข้อบกพร่องในแอปพลิเคชันจริงหรือไม่มันเคยเกิดขึ้นจริงหรือ มันพิสูจน์แล้วหรือยัง ..
uray
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.