Altifigence Academy

13 / 20 · Konsep

Pembagian tile dan padding batas

Petakan matriks lebih besar ke kisi lebih kecil dan tangani padding nol serta mask keluaran.

Bagilah ruang keluaran terlebih dahulu

Kisi N×N menangani hasil M×P yang lebih besar menggunakan ceil(M/N)×ceil(P/N) tile spasial. Dasar kita mempertahankan seluruh reduksi K dalam setiap tile dan melakukan clear antartile keluaran. Pembungkus menyimpan titik asal tile r0,c0; PE(i,j) lokal dipetakan ke C(r0+i,c0+j) global. Penggeseran jadwal bergantung pada koordinat lokal.

Ambil N=2 dan M=P=K=3. Misalkan A=[[1,2,3],[4,5,6],[7,8,9]] dan B=[[1,0,2],[0,1,0],[2,0,1]]. Hasil kalinya adalah [[7,2,5],[16,5,14],[25,8,23]]. Keempat titik asal tile adalah (0,0), (0,2), (2,0), dan (2,2).

Beri padding operand, mask penulisan

Pasok baris A dan kolom B di luar rentang sebagai token nol valid. Setiap PE tetap mengonsumsi K suku sehingga mempertahankan kontrak penyelesaian sederhana. Menjadikan suku padding tidak valid justru dapat membuat sebagian count tetap di bawah K selamanya. Secara terpisah, beri mask penulisan hasil untuk mencegah penulisan di luar matriks nyata.

Tile terakhir menggunakan A=[[7,8,9],[0,0,0]] dan B=[[2,0],[0,0],[1,0]]. Hasil lokalnya [[23,0],[0,0]], tetapi hanya nilai kiri atas yang boleh ditulis ke C(2,2). Nol numerik tidak menjadikan alamat di luar rentang aman.

Setiap tile menggunakan lima tepi advance, sehingga totalnya dua puluh untuk empat tile berurutan, tidak termasuk clear, pemuatan, dan transfer keluaran. Kisi mengeksekusi empat puluh delapan MAC dengan padding; hanya dua puluh tujuh yang termasuk perkalian 3×3 sebenarnya.

Pembagian reduksi memerlukan jumlah yang dipertahankan

Pembagian K memerlukan penggabungan jumlah parsial untuk keluaran yang sama. C(0,0)=1×1+2×0+3×2=7 terbagi menjadi jumlah parsial satu dan enam untuk K=2+1. Mengosongkan akumulator akhir di antara reduksi itu hanya menyisakan enam. Pertahankan akumulator atau gabungkan jumlah parsial lebar di tempat lain. Menguantisasi setiap bagian sebelum penggabungan dapat berbeda dari menguantisasi jumlah lengkap sekali.

Proyek akhir dimulai dengan pembagian spasial dan K penuh. Uji batas satu elemen, dimensi yang habis dibagi N, tile terakhir dengan satu keluaran nyata, nol padding valid, dan mask keluaran. Gunakan koordinat global sebagai kunci scoreboard acuan agar perubahan urutan tile tidak mengubah hasil yang diharapkan.

Coba sendiri

Untuk tile (0,2) dalam contoh 3×3, berikan mask keluaran dan hasil lokal. Berapa jumlah parsial C(0,2) ketika K dibagi menjadi 2+1?

Baca penjelasan

Hasil lokalnya [[5,0],[14,0]] dan mask-nya [[1,0],[1,0]]. C(0,2)=1×2+2×0+3×1 memiliki jumlah parsial dua dan tiga, sehingga totalnya lima.

Pilihan berlaku di peramban ini. Ubah kapan saja di bagian bawah halaman.