0
我需要一個warp的每個線程決定是否設置一個32位字的相應位。這種多重設置只需要一次內存訪問,還是每次設置一次內存訪問?許多線程可以同時在同一個字上設置位?
我需要一個warp的每個線程決定是否設置一個32位字的相應位。這種多重設置只需要一次內存訪問,還是每次設置一次內存訪問?許多線程可以同時在同一個字上設置位?
CUDA中沒有獨立的位設置功能。 (在PTX中有一個bit-field-insert指令,但它仍然以32位數量運行。)
每個線程都會通過完整的32位寫入來設置一點。這樣的寫入需要是原子RMW操作,以保留其他位。因此,無論原子的吞吐量是多少,訪問都將被有效地序列化。
如果內存空間不是問題,那麼將這些位拆分爲單獨的整數將允許您避免原子。
然後可以使用__ballot()
warp vote function快速組裝32位打包數量。在答案here中給出了一個例子。
(事實上,經投票功能可以讓你避免內存交易完全;一切都可以在寄存器中進行處理,如果唯一的結果你需要的是32位壓縮量。)
選票,這也正是我需要什麼! –