Meningkatkan kecepatan kode: jangan oper struktur yang lebih besar dari 16 byte di AMD64
- Untuk meningkatkan performa bahasa Neat, cara pengoperan array diubah dari satu parameter struktur menjadi tiga parameter pointer.
- Alasan array Neat lebih lambat daripada array di bahasa D adalah karena ukuran array 24 byte melebihi 16 byte sehingga parameternya diteruskan dengan cara yang berbeda.
- Menurut spesifikasi SystemV AMD64 ABI, semua struktur yang melebihi 16 byte diteruskan melalui pointer.
Verifikasi masalah melalui benchmark
- Melalui benchmark, dikonfirmasi adanya perbedaan performa antara cara mengoper struktur dan cara mengoper field secara terpisah.
- Saat mengoper struktur, diperlukan proses alokasi di stack dan penyalinan, sedangkan saat mengoper field satu per satu, nilainya bisa langsung diteruskan melalui register SSE.
- Cara mengoper field secara terpisah menunjukkan performa sekitar 2 kali lebih cepat dibandingkan cara mengoper struktur.
Pilihan perancang bahasa
- Saat memanggil C API, C ABI harus diikuti, tetapi tipe tingkat tinggi yang digunakan secara internal tidak harus direpresentasikan sebagai struktur.
- Perancang bahasa dapat menentukan bagaimana array, tuple, union type, dan lainnya akan diteruskan.
- Meneruskan tipe yang melebihi 16 byte sebagai field-field terpisah dapat membantu meningkatkan performa.
Opini GN⁺
- Artikel ini sangat bermanfaat bagi pengembang yang tertarik pada optimisasi perangkat lunak.
- Secara khusus, artikel ini menunjukkan bahwa pada aplikasi yang sensitif terhadap performa, ukuran struktur dan cara pengoperannya dapat memberikan dampak yang penting.
- Perancang bahasa atau pengembang API dapat memanfaatkan informasi ini untuk menemukan peluang peningkatan performa.
1 komentar
Komentar Hacker News