ฉันจะเป็นคนหนึ่งที่ต่อต้านธัญพืชที่นี่และบอกว่ามันไม่เร็วเกินไปที่จะเรียนรู้เกี่ยวกับการปรับให้เหมาะสมโดยเฉพาะอย่างยิ่งการเพิ่มประสิทธิภาพการชุมนุมและที่สำคัญกว่านั้นคือการดีบักในการชุมนุม ฉันเชื่อว่าคุณจะได้รับประโยชน์สูงสุดหากคุณเป็นนักเรียน (เพราะคุณมีเวลาน้อยที่จะสูญเสีย [เช่นเวลา / เงินที่ฉลาด]) และทุกอย่างที่จะได้รับ
หากคุณอยู่ในอุตสาหกรรมและไม่ได้มอบหมายงานในการประกอบก็อย่าทำเช่นนั้น มิฉะนั้นถ้าคุณเป็นนักเรียนหรือมีเวลาโดยทั่วไปฉันจะหาเวลาเรียนรู้ที่จะถอดโปรแกรมและดูว่าฉันสามารถหาวิธีแก้ปัญหาที่ดีกว่าคอมไพเลอร์ได้ไหม ถ้าฉันทำไม่ได้ใครสนใจ! ฉันเพิ่งเรียนรู้วิธีการเขียนและคอมไพเลอร์และนั่นเป็นข้อดีอย่างมากเมื่อคุณเผชิญกับข้อผิดพลาดในรหัสการเผยแพร่ (โดยไม่มีสัญลักษณ์การแก้ปัญหา) และจ้องมองที่การถอดแยกชิ้นส่วนเพราะนั่นเป็นสิ่งเดียวที่คุณสามารถมองเห็น
คำตอบ
นี่เป็นหนึ่งในแหล่งข้อมูลที่ดีที่สุดที่ฉันได้พบสำหรับการเรียนรู้เกี่ยวกับการปรับให้เหมาะสม
http://www.agner.org/optimize/
การคุยโว
หากคุณอ่านบทความโดยนักพัฒนาที่สำคัญ ๆ (ตัวอย่างเช่นการให้เหตุผลเบื้องหลังการสร้าง EASTL และการตรวจสอบรหัสอย่างใกล้ชิดจะนำคุณไปสู่ความคิดเห็นเช่นนี้เพราะ GCC แย่มากในการทำอินไลน์ถ้าคำสั่งนี้จะบอกคุณว่า ผู้คนบอกว่าคุณเชื่อว่าคอมไพเลอร์ไม่ถูกต้องเสมอโดยเฉพาะในการพัฒนาเกม) จากนั้นคุณจะพบว่าการปรับให้เหมาะสมเป็นสิ่งที่เกิดขึ้นทุกวันและรู้ว่าการประกอบหมายถึงอะไรเป็นข้อดี นอกจากนี้ดูเหมือนว่าผู้คนจะไม่เข้าใจ (โดยเฉพาะอย่างยิ่งใน stackoverflow) ว่าเกมการทำโปรไฟล์นั้นยากมากและไม่แม่นยำเสมอไป
มีข้อแม้ว่า คุณสามารถใช้เวลาในการปรับบางสิ่งบางอย่างและในภายหลังตระหนักดีว่าเป็นเวลาที่สูญเปล่า แต่คุณเรียนรู้อะไร คุณเรียนรู้ที่จะไม่ทำซ้ำความผิดพลาดนั้นในสถานการณ์ที่คล้ายคลึง
อะไรดังนั้นตอนนี้คือการอยู่ในความคิดของฉันท่าทางศาสนาคำสั่งไม่ได้เพิ่มประสิทธิภาพจนกว่าคุณโปรไฟล์และไม่ต้องกังวลคอมไพเลอร์รู้ดีกว่าคุณ มันเป็นอุปสรรคต่อการเรียนรู้ ฉันรู้ว่าผู้เชี่ยวชาญในอุตสาหกรรมที่ได้รับเงินดีมาก (และฉันหมายถึงเงินที่ดีมาก) เพื่อเล่นเกมประกอบเพื่อเพิ่มประสิทธิภาพของเกมและแก้ไขมันเพราะคอมไพเลอร์ไม่ดีหรือไม่สามารถช่วยคุณได้เพราะมัน ไม่สามารถ (ล่มที่เกี่ยวข้องกับ GPU, ล่มได้ซึ่งข้อมูลที่เกี่ยวข้องไม่สามารถอ่านได้ในโปรแกรมดีบั๊ก ฯลฯ )!
จะเป็นอย่างไรถ้าคนที่รักการทำเช่นนั้นยังไม่รู้ตัวเลยถามคำถามตรงนี้และถูกเปิด / ปิดโดยคอมไพเลอร์คำตอบมากมายรู้ดีกว่าคุณ! และไม่เคยเป็นหนึ่งในโปรแกรมเมอร์ที่มีรายได้สูงใช่ไหม
หนึ่งความคิดสุดท้าย หากคุณเริ่มทำสิ่งนี้ตั้งแต่ต้นคุณจะพบว่าในไม่ช้าคุณจะเริ่มเขียนโค้ดที่แย่ที่สุดไม่มีการปรับปรุงประสิทธิภาพใด ๆ เนื่องจากคอมไพเลอร์ปรับให้เหมาะสมในลักษณะเดียวกันหรือดีที่สุดมีการปรับปรุงประสิทธิภาพเพราะตอนนี้คอมไพเลอร์สามารถปรับให้เหมาะสม . ไม่ว่าในกรณีใดมันก็กลายเป็นนิสัยและคุณก็ไม่ได้เขียนโค้ดแบบนี้ช้าไปกว่าที่คุณเคยทำมาก่อน ตัวอย่างสองสามข้อ (มีอีกมากมาย):
- การเพิ่มล่วงหน้าก่อนเว้นแต่ว่าคุณต้องการการเพิ่มภายหลังจริงๆ
- การเขียนลูปสำหรับคอนเทนเนอร์โดยใช้ตัวแปรขนาดโลคัลคงที่แทนที่จะเรียกขนาด () บนคอนเทนเนอร์ภายในลูป
แก้ไข:อัปเดตหลังจาก 8 ปีในอุตสาหกรรม เรียนรู้การชุมนุม เรียนรู้วิธีการทำงานของเครื่องมือเพิ่มประสิทธิภาพและแอสเซมบลีที่พวกเขาสร้างขึ้น (CompilerExplorer เป็นเครื่องมือที่ยอดเยี่ยมสำหรับสิ่งนั้น) ฉันได้พบกับข้อขัดข้องนับไม่ถ้วนในการสร้างแบบทดสอบ (รุ่นที่ปรับให้เหมาะสมสำหรับการทดสอบภายใน) ซึ่งคุณไม่สามารถพึ่งพาตัวดีบักได้แม้จะมีสัญลักษณ์การดีบัก คอมไพเลอร์ได้ปรับให้เหมาะสมหลายสิ่งเกินไปและแอสเซมบลีเป็นแหล่งข้อมูลที่มีค่าเพียงแหล่งเดียวของคุณเพื่อค้นหาข้อผิดพลาดจากการถ่ายโอนข้อมูลความผิดพลาด แต่ละบิลด์ใช้เวลา 30-40 นาทีหากคุณโชคดีและเป็นอันดับแรกในคิวการสร้างดังนั้นคุณจึงไม่สามารถพึ่งพาเทคนิคดั้งเดิมบางอย่างในการแยกบั๊ก ผู้เล่นหลายคนทำให้สิ่งต่าง ๆ แย่ลง การรู้จักชุดประกอบและวิธีการอ่านชุดประกอบที่ได้รับการปรับปรุงแล้วจะทำให้คุณดีขึ้นและมีคุณค่ามากที่สุดในทีม