Saya menyadari bahwa sebagian besar GPU modern, meskipun dirancang untuk floating point, kurang lebih setara dalam kinerja integer hari ini, dengan beberapa peringatan seperti kurangnya penambahan multiply yang menyatu. Saya tidak yakin bagaimana ini berlaku untuk operasi shift. Saya sedang melakukan Marching Cubes pada GPU, awalnya menulis posisi 32-bit yang dikemas untuk setiap kubus permukaan kemudian membongkar ini di kemudian lulus ke simpul yang sebenarnya di kubus itu, seperti ini:
ivec3 unpackedPos = ivec3( packedPos >> 20 & 0x3FF,
packedPos >> 10 & 0x3FF,
packedPos & 0x3FF);
Terpikir oleh saya untuk bertanya-tanya apakah unit shader memiliki pemindah barel di dalamnya akhir-akhir ini? Apakah saya melakukan 2 shift di sini atau 30?
Sunting >> Saya idiot ... Terima kasih atas jawabannya, berguna untuk mengetahui, tapi saya sudah salah tentang semua ini. Saya seharusnya hanya menggunakan format tekstur RGB10_A2UI kemudian mengepak / membongkar dengan satu instruksi memuat / menyimpan gambar daripada mengotak-atik bithifts sendiri.
RE_EDIT >> Atau tidak ... Metode ini tampaknya bekerja pada kotak merah tetapi tidak pada yang hijau, jadi itu kembali ke bit-shift.
sumber
Jawaban:
Ya (dengan 50% dari throughput FMA 32b pada nVIDIA Maxwell).
Lihat https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#arithmetic-instructions
sumber