内核融合和持久线程之间有什么区别?

问题描述 投票:0回答:1

在CUDA编程中,如果两个内核之间存在数据相关性,我试图减少片外存储器和片内存储器之间的同步开销?这两种技术有什么区别?

cuda gpu gpgpu cudnn
1个回答
0
投票

内核融合的思想是采取两个(或多个)离散的操作,这些操作可以在单独的内核中实现(并且可能已经实现),并将它们组合在一起,以便所有操作都在单个内核中进行。

此好处的好处似乎不明显,所以我推荐您参考this writeup

持久线程/持久内核是一种内核设计策略,它允许内核无限期地继续执行。典型的“普通”内核设计着重于解决特定任务,完成该任务后,内核退出(在内核代码的大括号处)。

然而,持久性内核中有一个控制循环,该循环仅在发出信号时结束-否则它将无限期地运行。人们通常将其与应用程序设计的生产者-消费者模型联系在一起。某种东西(主机代码)产生数据,而持久性内核消耗该数据并产生结果。这种生产者-消费者模型可以无限期地运行。当没有数据要消耗时,使用者(您的持久性内核)只需循环等待显示新数据。

持久性内核设计有许多重要的注意事项,在这里我不会尝试列出,而请您参考this longer writeup/example

好处:

  1. 内核融合可以将工作合并到一个内核中,从而通过减少不必要的负载和存储来提高性能,因为可以将正在操作的数据保留在设备寄存器或共享内存中的位置。

  2. 持久性内核可能有很多好处。它们可能会减少与处理数据相关的等待时间,因为不再需要CUDA内核启动开销。但是,另一个可能的性能因素可能是在设备寄存器或共享内存中保留状态(类似于内核融合)的能力。

内核融合不一定表示持久性内核。您可能只是将一组任务组合到一个内核中。持久性内核不一定意味着要合并单独的计算任务-在“消费者”主循环中可能只有1个“任务”正在执行。

但是这两个想法之间显然存在相当大的概念重叠。

© www.soinside.com 2019 - 2024. All rights reserved.