Anlamanız gereken ilk şey, üzerinde çalıştığınız donanımdır. Dallara nasıl müdahale eder? Önbelleğe almaya ne dersin? SIMD komut seti var mı? Kaç tane işlemci kullanabilir? İşlemci zamanını başka bir şeyle paylaşmak zorunda mı?
Aynı problemi çok farklı şekillerde çözebilirsiniz - algoritma seçiminiz bile donanıma bağlı olmalıdır. Bazı durumlarda O (N), O'dan (NlogN) daha yavaş çalışabilir (uygulamaya bağlı olarak).
Optimizasyona kaba bir bakış olarak, yapacağım ilk şey tam olarak hangi problemlere ve hangi verileri çözmeye çalıştığınıza bakmaktır. Sonra bunun için optimize edin. Aşırı performans istiyorsanız, genel çözümleri unutun; en çok kullandığınız durumla uyuşmayan her şeyi özel olarak yapabilirsiniz.
Ardından profil. Profil, profil, profil. Bellek kullanımına bakın, dallanma cezalarına bakın, genel fonksiyon çağrısına bakın, boru hattı kullanımına bakın. Kodunuzu yavaşlatan şeyin ne olduğunu öğrenin. Muhtemelen veri erişimidir (Veri erişiminin ek yükü hakkında "Gecikme Fil" adlı bir makale yazdım - google bunu yazdı. Burada "bağlantı" yeterli olmadığı için 2 bağlantı gönderemiyorum), daha sonra veri düzeninizi optimize edin ( homojen düz diziler harika, harika ) ve veri erişimini (mümkün olan yerlerde önceden alma).
Bellek alt sisteminin yükünü en aza indirdikten sonra, talimatların şimdi tıkanıklık olup olmadığına karar verin (umarım onlardır), ardından algoritmanızın SIMD uygulamalarına bakın - Dizilerin Yapısı (SoA) uygulamaları çok veri olabilir ve Öğretim önbelleği verimli. SIMD probleminiz için uygun değilse, gerçek ve montaj seviyesi kodlaması gerekebilir.
Hala daha fazla hıza ihtiyacınız varsa paralel gidin. PS3'te yayın yapma avantajınız varsa, SPU'lar arkadaşlarınızdır. Onları kullan, onları sev. Zaten bir SIMD çözümü yazdıysanız, SPU’ya geçerken büyük bir avantaj elde edersiniz.
Ve sonra, biraz daha profil. Oyun senaryolarında test et - bu kod hala darboğaz mı? Kullanımını en aza indirmek için bu kodun kullanılma şeklini değiştirebilir misiniz (aslında, bu ilk adımınız olmalıdır)? Hesaplamaları birden fazla çerçeve üzerinden erteleyebilir misiniz?
Hangi platformda olursanız olun, donanım ve mevcut profilerler hakkında mümkün olduğunca çok şey öğrenin. Darboğazın ne olduğunu bildiğinizi sanmayın - bunu profilcinizde bulun. Ve oyununuzu gerçekten daha hızlı yapıp yapmadığınızı belirlemek için bir sezgisel buluşma yaptığınızdan emin olun.
Ve sonra tekrar profil.