我正在写一个可以解释为生产者/消费者模型的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