3

Bottleneck efisiensi loop CPU serial tradisional

AI999第4课:现代计算底座与张量化并行演化
00:00

Proses evolusi bergantung pada keragaman populasi, dan keragaman berarti pertumbuhan berlipat ganda pada ukuran populasi serta jumlah evaluasi. Ketika evaluasi kandidat mencapai puluhan ribu kali,loop CPU serial tradisionalmenjadi bagian tersempit di seluruh alur: ia hanya memproses satu individu dalam satu waktu, sehingga kemampuan paralel perangkat keras hampir tidak terpakai.

Loop CPU serial vs paralel batch: total waktu proses tumbuh seiring jumlah evaluasi kandidatPemrosesan serial satu per satuPemrosesan paralel batchWaktu wall-clock (dinormalisasi)≈ 100 sSerial: pertumbuhan hampir linearParalel: pertumbuhan bertingkatSerial satu per satu: ambil individu → dekode → evaluasi → tulis kembaliIterasi yang berdekatan tidak dapat tumpang tindih, sebagian besar unit paralel menganggurParalel batch: diorganisir per batch, waktu ditentukan oleh jumlah batch10³ kali10⁴ kali10⁵ kaliJumlah evaluasi kandidatCatatan: segmen gelap adalah biaya penjadwalan dan pemindahan data; pada beban kerja yang sama, pertumbuhan waktu paralel terutama ditentukan oleh jumlah batch, bukan jumlah individu.

Satu per satu: model eksekusi loop serial

Implementasi paling sederhana adalah memperlakukan seluruh populasi sebagai sebuah list, lalu mengambil individu satu per satu dengan loop: ambil individu → dekode menjadi parameter konkret → panggil fungsi evaluasi → tulis kembali nilai fitness. Iterasi yang berdekatan hampir tidak dapat tumpang tindih: tanpa hasil evaluasi, penulisan kembali tidak dapat dilanjutkan; tanpa penyelesaian penulisan kembali, individu berikutnya tidak punya tempat untuk menampung hasilnya. Akibatnya unit paralel seperti multi-core, SIMD, dan GPU sebagian besar waktu menganggur, hanya bisa melihat satu individu menyelesaikan prosesnya di alur.

Dari mana sebenarnya biaya itu berasal

  • Jumlah evaluasi yang membengkak secara linear: total evaluasi kira-kira sama dengan ukuran populasi × jumlah generasi; saat mencapai orde 10⁵, waktu wall-clock serial tumbuh hampir linear.
  • Eksekusi satu per satu di lapisan interpreter: loop per individu, pemeriksaan batas, dan pengiriman tipe menghasilkan biaya konstan yang tetap namun mahal.
  • Akses memori tidak berurutan dan pemindahan data: individu yang diambil satu per satu sering kali tidak berurutan di memori, tingkat cache hit rendah, dan biaya pemindahan harus dibayar berulang kali.
  • Sinkronisasi dan penjadwalan: untuk mengambil individu berikutnya, alur eksekusi harus berhenti dan dilanjutkan berulang kali.

Mengonversi skala menjadi waktu

Sebagai contoh, dengan populasi 1000 dan 100 generasi, totalnya sekitar 100 ribu evaluasi kandidat. Jika satu evaluasi rata-rata memerlukan 1 ms, tahap evaluasi saja secara serial membutuhkan sekitar 100 detik, belum termasuk biaya komputasi operator dan penjadwalan; jika untuk menjaga keragaman jumlah restart ditingkatkan dari 1 menjadi 5 kali, biayanya naik hampir linear menjadi sekitar 500 detik. Dengan beban kerja yang sama, jika diorganisir per batch dan ditangani perangkat keras paralel, waktu wall-clock terutama ditentukan oleh jumlah batch, bukan jumlah individu.

Kapan bottleneck ini akan menyempit

Kondisi batas juga penting: ketika satu evaluasi sangat murah (skala mikrodetik) atau populasi sangat kecil (di bawah ratusan), biaya penjadwalan dan memori bisa melebihi biaya komputasi, selisih antara serial dan paralel menyempit secara signifikan, manfaat marginal tensorisasi menurun, dan bottleneck akan berpindah ke granularitas penjadwalan serta bandwidth memori. Karena itu, apakah model eksekusi layak dirombak perlu dievaluasi dengan mempertimbangkan biaya evaluasi dan skala secara bersamaan.

Bottleneck struktural, bukan cacat kode
Bottleneck efisiensi loop CPU serial berada pada level model eksekusi: penyetelan kode pada titik tertentu tidak dapat menghilangkannya. Untuk benar-benar mengatasinya, perlu merombak pemrosesan satu per satu menjadi per batch—pemrosesan batch, tensorisasi, dan penjadwalan paralel—yang juga menjadi motivasi langsung bagi perancangan graf komputasi bertensorisasi selanjutnya.