HeadlinesBriefing HeadlinesBriefing.com

Optimisasi Pengineran Prestasi Alokator Tumpukan

Hacker News •
×

Saat memprogram aplikasi berkinerja tinggi seperti permainan video, pengembang mencari trik untuk menulis kode cepat yang memaksimalkan sumber daya terbatas. Alokasi memori kritis untuk kode kritis kinerja yang membutuhkan memori variabel. "Bump allocator" atau alokator tumpukan mengoptimalkan ini dengan memperlakukan alokasi sebagai penjumlahan bilangan bulat sederhana dan dealokasi sebagai penugasan bilangan bulat yang bahkan lebih murah. Sekitar tahun 2010, saat bekerja di Surreal Software pada proyek yang dibatalkan "This is Vegas," pemrograman animasi menghadapi alokasi sementara yang sering untuk pencampuran animasi.

Alokasi ini hanya ada sejenak per bingkai dan bergantung pada karakter mana yang aktif, ditentukan oleh frustum kamera. Alokator muncul sebagai titik panas dalam pemodelan. Solusi melibatkan penerapan alokator tumpukan di mana alokasi hanyalah penjumlahan bilangan bulat, dan melepaskan memori adalah penugasan bilangan bulat tunggal.

Dengan mengalokasikan blok tetap (misalnya, 1MB) dan mempertahankan variabel "tos" (top of stack), pengelolaan memori menjadi hampir instan. Hasilnya adalah peningkatan kinerja yang signifikan, dengan waktu alokasi yang dapat diukur dalam profiler. Batasan kunci adalah alokator ini tidak secara otomatis memanggil destruktor; sementara placement new dapat menangani konstruktor, pengelolaan destruktor bersifat manual dan rawan kesalahan.

Selain itu, alokator tumpukan unggul dalam lingkungan multithread jika variabel "tos" menggunakan penjumlahan atomik, memungkinkan beberapa thread untuk mengalokasikan dari pool yang sama, bermanfaat dalam situasi CPU fork/join atau algoritma GPU. Dealokasi parsial juga mungkin, dengan mengingat keadaan "tos" pada awal proses rekursif dan meresetnya saat selesai. Teknik ini menawarkan peningkatan kecepatan yang substansial untuk kebutuhan memori sementara selama bingkai permainan.

Sumber: Hacker News · Diringkas oleh HeadlinesBriefing