GPU modern memiliki banyak unit shading paralel. Saya ingin tahu bagaimana cache tekstur dikelola dalam skenario itu.
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.