【发布时间】:2011-03-04 03:01:08
【问题描述】:
我正在编写一个可以解释为生产者/消费者模型的 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
【问题讨论】: