2016-08-20 33 views
0

如果可以应用GPGPU中使用持久线程vs使用device-side-enqueue/nested-parallelism仍然有优势吗?持久线程vs设备端入队/嵌套并行

我已经阅读了一些旧的论文,其中旧硬件需要持久线程才能获得最佳性能,我不确定使用device-side-enqueue/nested-parallelism是否使该技术无关紧要?

我想在孩子的任务完全独立后,他们的父母启动持续线程仍然值得吗?

回答

3

作为编程方法的持久线程在一段时间内可能会继续令人感兴趣。与嵌套并行相比,持久线程可能提供几个优点。这里有两个:推出延迟

  1. 消除:别看它小(可能低至几微秒),至少在CUDA动态并行(CDP)的情况下,存在与两个相关联的发射延迟主机内核启动和子内核启动。对于极低延迟的需求(例如网络数据包处理),具有持久线程的生产者/消费者工作队列模型可以提供比任何涉及接收新工作的启动的任何机制更低的延迟和更快的周转时间。

  2. 内存使用优化:一种新的持久线程新用例是为了避免与内核启动相关的加载/存储模式。一个例子的很好的描述是here。基本思路是,对于类似工作负载的重复处理,我们可以仔细优化片上数据存储的使用(包括共享内存,特别是使用GPU寄存器空间),以避免加载数据/参数内核启动例如从全局内存开始,然后(可能)在内核结束时将更新的参数存储回全局内存。对于大量携带参数使用情况下的特定工作负载,这可以具有显着的处理优势,并且可以使参数空间“适合”片上。随着更新的GPU拥有越来越多的片上寄存器存储空间,对于更大的工作负载,这可能会继续引起人们的兴趣。

很有可能还有其他特定用例,其中持久线程方法提供明显优于工作开始方法的优势。这仅仅是两个例子。

总之,持久内核并不是替代其他类型GPU处理范例的一般策略,但在特定情况下,它可以提供优于重复启动内核的方法的好处。因此对持久内核的某些兴趣可能会持续一段时间。

+0

这是我有史以来最有信息的答案在stackoverflow上的问题!奇怪的是最快的实际回答!它帮助优化数据缓存的重点和范例非常有用。你可能知道nVidia的Pascal CUDA 8多块coop组是否可以以某种方式保持执行之间的寄存器/共享存储状态?非常感谢。 – iam

+0

我不知道Pascal/CUDA 8能够保持从一个内核启动到下一个内核寄存器或共享内存的状态。我不知道这样的设施。你能否引用该索赔的参考资料? –

+0

从随机的谷歌搜索中,我发现在本文末尾提到它:https://asc.llnl.gov/DOE-COE-Mtg-2016/talks/1-10_NVIDIA.pdf。但我不清楚这是如何工作的。 – iam