Bagaimana cara kerja Texture Cache mempertimbangkan beberapa unit shader

11

GPU modern memiliki banyak unit shading paralel. Saya ingin tahu bagaimana cache tekstur dikelola dalam skenario itu.

Felipe Lira
sumber

Jawaban:

14

Di tingkat atas, GPU dibagi menjadi beberapa core shader. GPU kecil di notebook atau tablet mungkin hanya memiliki beberapa inti sementara GPU desktop kelas atas mungkin memiliki puluhan.

Selain core shader ada juga unit tekstur. Mereka dapat dikelompokkan bersama dengan satu unit tekstur per inti shader, atau satu unit tekstur dibagi antara dua atau tiga inti shader, tergantung pada GPU.

Seluruh chip berbagi cache L2 tunggal, tetapi unit yang berbeda akan memiliki cache L1 individual. Unit tekstur memiliki cache tekstur, dan unit shader memiliki cache untuk instruksi dan konstanta / seragam, dan mungkin cache terpisah untuk data buffer tergantung pada apakah beban buffer merupakan jalur terpisah dari beban tekstur atau tidak (bervariasi berdasarkan arsitektur GPU).

Unit tekstur beroperasi secara independen dan tidak sinkron dari inti shader. Ketika shader melakukan pembacaan tekstur, ia mengirim permintaan ke unit tekstur melintasi bus kecil di antara mereka; shader kemudian dapat melanjutkan dieksekusi jika memungkinkan, atau mungkin ditangguhkan dan memungkinkan utas shader lain berjalan sementara menunggu pembacaan tekstur selesai.

Unit tekstur mengumpulkan banyak permintaan dan melakukan matematika pengalamatan pada mereka — memilih tingkat mip dan anisotropi, mengonversi UV menjadi koordinat texel, menerapkan mode penjepit / pembungkus, dll. Setelah mengetahui texels yang dibutuhkan, ia membacanya melalui cache hirarki, cara yang sama yang dibaca memori bekerja pada CPU (lihat L1 pertama, jika tidak ada maka L2, lalu DRAM). Jika banyak permintaan tekstur yang tertunda semua menginginkan texels yang sama atau terdekat (seperti yang sering mereka lakukan), maka Anda mendapatkan banyak efisiensi di sini, karena Anda dapat memenuhi banyak permintaan yang tertunda dengan hanya beberapa transaksi memori. Semua operasi ini pipelined, jadi sementara unit tekstur menunggu memori pada satu batch, itu bisa melakukan matematika pengalamatan untuk batch lain dari permintaan, dan sebagainya.

Setelah data kembali, unit tekstur akan mendekode format terkompresi, melakukan konversi sRGB dan memfilter seperlunya, lalu mengembalikan hasilnya ke inti shader.

Nathan Reed
sumber
1
Terima kasih! Itu sangat membantu. Mengatur ulang konstanta / cache seragam. Apakah mereka ada tips selain presisi (mediump, lowp) yang bisa saya gunakan untuk meningkatkan rasio hit cache seragam? Apakah urutan saya mendeklarasikan seragam membuat perbedaan (seperti untuk pengepakan lebih ketat)?
Felipe Lira
2
@PhilLira Packing dapat membuat perbedaan, ya. Compiler akan memasukkan padding untuk mencegah vektor terpecah melintasi batas 16-byte, jadi cobalah untuk menghindarinya. Saya tidak berpikir mediump / lowp benar-benar melakukan apa pun pada seragam, setidaknya pada GPU desktop (mungkin itu pada ponsel). Saya tidak akan terlalu khawatir tentang rasio hit cache yang seragam. Itu sangat jarang, jika pernah, hambatan.
Nathan Reed