内核使用Streams调用CUDA的延迟

时间:2016-06-08 11:13:34

标签: cuda cuda-streams

我已经从头开始为CUDA创建扫描算法,并尝试将其用于小于80,000字节的较小数据量。

创建了两个单独的实例,其中一个在可能的情况下使用流运行内核,另一个仅在默认流中运行。

我观察到的是,对于这一系列的数据大小,与其他方法相比,使用流运行需要更长的时间才能完成任务。

使用nvprofiler进行分析时,观察到的是,对于较小的数据量,在流中运行不会为单独的核提供并行性

没有Streams Scan Without Streams

使用Streams Scan With Streams

但是当数据大小增加时,可以获得某种并行性

使用Streams for 400,000bytes With Streams for 400,000

我的问题是,是否有一些额外的参数来减少这个内核调用时间延迟,或者对于使用流是不利的较小数据大小这种行为是正常的

更新:

我已经包含了Runtime API调用时间表以澄清答案

With Streams with the Runtime API

1 个答案:

答案 0 :(得分:2)

通常,您的数据太小,无法在第一种情况下充分利用GPU。如果你在nvvp中检查'Runtime API'的时间线,你没有在你的图中显示,你会发现启动一个内核需要几微秒。如果流13中的第一个内核太短,则流14中的第二个内核可能尚未启动,因此跨流没有并行性。

由于这些开销,如果数据很小,您可能会发现在CPU上运行程序的速度更快。