Pertanyaan penginisialisasi tidak diizinkan untuk variabel __shared__ untuk cuda


Saya melakukan hal-hal berikut:

__shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x];

di mana totalElementLessThanPivotEntireBlock adalah larik di GPU. Compiler melemparkan sebagai kesalahan sebagaimana tercantum dalam judul pertanyaan. Saya benar-benar tidak mengerti mengapa ini menjadi masalah?


5
2017-12-24 10:07


asal


Jawaban:


Inisialisasi statis variabel yang dibagikan adalah ilegal di CUDA. Masalahnya adalah semantik bagaimana setiap thread harus memperlakukan inisialisasi statis memori bersama tidak terdefinisi dalam model pemrograman. Thread mana yang harus menulis? Apa yang terjadi jika nilainya tidak seragam antar utas? Bagaimana seharusnya kompiler memancarkan kode untuk kasus seperti itu dan bagaimana seharusnya perangkat keras menjalankannya?

Dalam contoh tidak masuk akal Anda, Anda meminta setiap utas di blok untuk menginisialisasi variabel bersama yang sama dengan nilai - pada dasarnya sebuah ras memori yang dikompilasi secara statis.


7
2017-12-24 10:25