Kami sedang mengerjakan basis kode C ++ berukuran sedang (10Mloc) yang melalui upaya optimalisasi kami menjadi sangat lambat .
Basis kode ini adalah satu set perpustakaan yang kami gabungkan untuk membuatnya berfungsi. Ketika kerangka umum bagaimana perpustakaan ini berkomunikasi dikembangkan ada beberapa penekanan pada kinerja dan kemudian, ketika lebih banyak bagian di mana ditambahkan, kerangka umum tidak banyak berubah. Optimalisasi dilakukan ketika dibutuhkan dan seiring dengan perkembangan perangkat keras kami. Ini membuat keputusan awal yang mahal terlihat hanya beberapa saat kemudian. Kami sekarang pada titik di mana optimasi lebih lanjut jauh lebih mahal karena mereka akan membutuhkan penulisan ulang sebagian besar basis kode. Kami menemukan diri kami mendekati minimum lokal yang tidak diinginkan karena kami tahu bahwa pada prinsipnya kode harus dapat berjalan lebih cepat.
Apakah ada metodologi yang berhasil yang membantu memutuskan apa yang akan mengambil alih evolusi basis kode menuju solusi yang bekerja secara global yang optimal yang tidak mudah dikacaukan oleh peluang optimisasi yang mudah?
EDIT
Untuk menjawab pertanyaan bagaimana kami saat ini profil:
Kami benar-benar hanya memiliki 2 skenario berbeda bagaimana kode ini dapat digunakan, keduanya paralel paralel. Pembuatan profil dilakukan baik dengan waktu jam dinding yang dirata-ratakan atas sampel besar input dan proses yang lebih rinci (biaya instruksi, misprediksi cabang, dan masalah caching). Ini bekerja dengan baik karena kami berjalan secara eksklusif pada mesin kami yang sangat homogen (sekelompok beberapa ribu mesin yang identik). Karena kami biasanya membuat semua mesin kami sibuk sebagian besar waktu berjalan lebih cepat berarti kami dapat melihat hal-hal baru tambahan. Masalahnya tentu saja bahwa ketika variasi input baru muncul, mereka mungkin mendapatkan hukuman terlambat karena kami menghapus inefisiensi mikro yang paling jelas untuk kasus penggunaan lainnya, sehingga mungkin mempersempit jumlah skenario "berjalan secara optimal".
sloc
. Saya menyebutnya "ukuran sedang" karena saya tidak tahu apa yang dianggap "besar" di sini.