我有一个问题,每个线程块(1维)必须在共享内存中的数组上运行扫描,并与其他任务一起完成。该数组最多有1024个元素。
是否有任何好的库支持这种类型的操作?
我检查了Thrust和CudPP,但它们都仅适用于数据最初在全局内存中的情况,这不是我想要的,因为我不想为每个小段开始新的内核并将数据复制回全局内存,因为这会产生相当大的开销。
如果没有公共库支持此类操作,那么如果我想要编写此操作仅一次并在几个不同的问题中使用它,您有什么建议?
我的第一个想法是编写一个简单的设备函数来运行扫描操作,但是可能可以从非内核函数调用该设备函数并访问共享内存并执行__syncthreads()操作吗?
我的另一个想法是在宏中编写整个函数,然后它可以工作,因为预处理器将代码复制到内核代码中,但编写如此复杂的宏并不是使用宏的最佳方法。
附:我有流式多处理器版本2.1,因此无法从另一个内核启动新内核(没有CUDA动态并行性)。