我已经从头开始为CUDA创建扫描算法,并尝试将其用于小于80,000字节的较小数据量。
创建了两个单独的实例,其中一个在可能的情况下使用流运行内核,另一个仅在默认流中运行。
我观察到的是,对于这一系列的数据大小,与其他方法相比,使用流运行需要更长的时间才能完成任务。
使用nvprofiler进行分析时,观察到的是,对于较小的数据量,在流中运行不会为单独的核提供并行性
但是当数据大小增加时,可以获得某种并行性
我的问题是,是否有一些额外的参数来减少这个内核调用时间延迟,或者对于使用流是不利的较小数据大小这种行为是正常的
更新:
我已经包含了Runtime API调用时间表以澄清答案
答案 0 :(得分:2)
通常,您的数据太小,无法在第一种情况下充分利用GPU。如果你在nvvp中检查'Runtime API'的时间线,你没有在你的图中显示,你会发现启动一个内核需要几微秒。如果流13中的第一个内核太短,则流14中的第二个内核可能尚未启动,因此跨流没有并行性。
由于这些开销,如果数据很小,您可能会发现在CPU上运行程序的速度更快。