我正在寫一個可以解釋爲生產者/消費者模型的cuda程序。
有兩個內核: 一個產生設備內存數據,
和另一個內核產生的數據。
令人滿意的線程數被設置爲32的倍數,這是warp大小。
並且每個經紗等待其他32個數據已經產生。
我在這裏有一些問題。
如果消費者內核的加載時間晚於生產者,則該程序不會暫停。
即使消費者首先加載,程序有時仍會無限期地運行。
我在問CUDA中是否有一個很好的生產者/消費者實現模型?
有人可以給我一個方向或參考嗎?
這裏是我的代碼的骨架。
生產者/消費者模型和併發內核
**kernel1**:
while LOOP_COUNT
compute something
if SOME CONDITION
atomically increment PRODUCE_COUNT
write data into DATA
atomically increment PRODUCER_DONE
**kernel2**:
while FOREVER
CURRENT=0
if FINISHED CONDITION
return
if PRODUCER_DONE==TOTAL_PRODUCER && CONSUME_COUNT==PRODUCE_COUNT
return
if (MY_WARP+1)*32+(CONSUME_WARPS*32*CURRENT)-1 < PRODUCE_COUNT
process the data
if SOME CONDITION
set FINISHED CONDITION true
increment CURRENT
else if PRODUCUER_DONE==TOTAL_PRODUCER
if currnet*32*CONSUME_WARPS+THREAD_INDEX < PRODUCE_COUNT
process the data
if SOME CONDITION
set FINISHED CONDITION true
increment CURRENT
謝謝你的回答! – superscalar 2011-03-04 07:00:59