如果一个kernel要使用上一个kernel的输出,请问有什么注意吗?
要进行两次拷贝操作,并且数据要不能越界哦!
[
为何要反复拷贝?
我觉得只要能保证两个kernel是一前一后连续执行的(例如默认情况, 或者在一个流里, 或者多个流并行使用cuStreamWaitEvent同步等),
那么前一个kernel的结果数据没必要从global拷回host再拷回global给后一个kernel做输入数据. 直接使用就可以了.
[ 本帖最后由 悠闲的小猫 于 2011-1-10 16:06 编辑 ]
[
这里有个问题可能您没想到的吧,就是你如何保证在kernel中发射下一次的数据的时候上一次的数据的状态没有被破坏呢?cuda自身硬件的保证,还是什么?
[
您的意思是什么? 什么叫"kernel中发射下一次的数据的时候上一次的数据的状态没有被破坏呢??"
如果您指的是, 如何才能保证两个kernel是一前一后的执行, 以便可以能够确保下一个kernel可以使用上一个kernel的结果数据, 那么:
我想, 悠闲的小猫已经在上文给出了明确答案:
(1)使用默认方式启动两个kernel,
(2)或指定同一个流.
(3)或在(1),(2)都无法做到的情况下, 使用流同步函数(3.2新引入的).