สิ่งแรกที่คุณต้องเข้าใจคือฮาร์ดแวร์ที่คุณใช้อยู่ มันจัดการกับการแตกกิ่งได้อย่างไร แล้วแคชล่ะ มีชุดคำสั่ง SIMD หรือไม่ สามารถใช้โปรเซสเซอร์ได้กี่ตัว ต้องแชร์เวลาตัวประมวลผลกับสิ่งอื่นหรือไม่
คุณอาจแก้ปัญหาเดียวกันในวิธีที่แตกต่างกันมาก - แม้แต่ตัวเลือกของอัลกอริทึมของคุณควรขึ้นอยู่กับฮาร์ดแวร์ ในบางกรณี O (N) สามารถทำงานช้ากว่า O (NlogN) (ขึ้นอยู่กับการใช้งาน)
ในภาพรวมคร่าวๆของการปรับให้เหมาะสมสิ่งแรกที่ฉันจะทำคือดูว่าปัญหาอะไรและข้อมูลใดที่คุณพยายามแก้ไข จากนั้นปรับให้เหมาะสมสำหรับสิ่งนั้น หากคุณต้องการประสิทธิภาพที่ยอดเยี่ยมคุณสามารถลืมวิธีแก้ปัญหาทั่วไปได้คุณสามารถใช้ตัวพิมพ์เล็กพิเศษทุกอย่างที่ไม่ตรงกับตัวพิมพ์ที่คุณใช้บ่อย
รายละเอียดแล้ว โปรไฟล์, โปรไฟล์, โปรไฟล์ ดูการใช้งานหน่วยความจำดูบทลงโทษการแยก, ดูค่าใช้จ่ายการเรียกใช้ฟังก์ชัน, ดูการใช้ไปป์ไลน์ หาสิ่งที่ทำให้โค้ดของคุณช้าลง อาจเป็นการเข้าถึงข้อมูล (ฉันเขียนบทความชื่อ "The Latency Elephant" เกี่ยวกับค่าใช้จ่ายในการเข้าถึงข้อมูล - google it ฉันไม่สามารถโพสต์ลิงก์ 2 ลิงก์ที่นี่เนื่องจากฉันไม่มี "ชื่อเสียง" เพียงพอ) ตรวจสอบอย่างละเอียดและ จากนั้นปรับโครงร่างข้อมูลของคุณ (อาเรย์ที่เป็นเนื้อเดียวกันขนาดใหญ่ที่ยอดเยี่ยมนั้นยอดเยี่ยมมาก ) และการเข้าถึงข้อมูล
เมื่อคุณลดค่าใช้จ่ายของระบบย่อยหน่วยความจำให้น้อยที่สุดแล้วลองพิจารณาว่าคำสั่งนั้นเป็นคอขวดหรือไม่ (หวังว่ามันจะเป็นเช่นนั้น) จากนั้นดูการใช้งาน SIMD ของอัลกอริทึมของคุณ - โครงสร้างของอาร์เรย์ (SoA) แคชคำสั่งที่มีประสิทธิภาพ หาก SIMD ไม่ตรงกับปัญหาของคุณคุณอาจจำเป็นต้องใช้รหัสภายในระดับแอสเซมเบลอร์และแอสเซมเบลอร์
หากคุณยังต้องการความเร็วมากกว่านี้ให้ขนานกันไป หากคุณได้รับประโยชน์จากการทำงานบน PS3 แล้ว SPU นั้นเป็นเพื่อนของคุณ ใช้พวกเขารักพวกเขา หากคุณเขียนโซลูชัน SIMD อยู่แล้วคุณจะได้รับผลประโยชน์มหาศาลจากการเข้า SPU
แล้วโพรไฟล์เพิ่มเติม ทดสอบในสถานการณ์เกม - รหัสนี้ยังเป็นปัญหาคอขวดหรือไม่ คุณสามารถเปลี่ยนวิธีใช้รหัสนี้ในระดับที่สูงขึ้นเพื่อลดการใช้งาน (จริง ๆ แล้วนี่ควรเป็นขั้นตอนแรกของคุณ) คุณสามารถเลื่อนการคำนวณในหลาย ๆ เฟรมได้หรือไม่?
ไม่ว่าคุณจะอยู่บนแพลตฟอร์มใดเรียนรู้ให้มากที่สุดเท่าที่จะทำได้เกี่ยวกับฮาร์ดแวร์และโปรไฟล์ที่มีให้ อย่าคิดว่าคุณรู้ว่าคอขวดคืออะไร - หามันจาก profiler ของคุณ และให้แน่ใจว่าคุณมีฮิวริสติกเพื่อตัดสินว่าคุณทำให้เกมของคุณเร็วขึ้นจริงหรือไม่
แล้วโปรไฟล์อีกครั้ง