如果可以应用GPGPU中使用持久性线程与使用设备端入队/嵌套并行性仍然有优势吗?
我已经阅读了一些较旧的论文,其中旧硬件上需要持久线程以获得最佳性能,我不确定使用设备端入队/嵌套并行性是否使该技术无关紧要?
我认为,如果子任务在从父母发布后完全独立,那么持久线程可能仍然值得吗?
答案 0 :(得分:3)
作为编程方法的持久线程可能会在一段时间内继续引起关注。与嵌套并行性相比,持久线程可能具有多个优点。这是2:
消除启动延迟:虽然它很小(可能只有几微秒),但至少在CUDA动态并行(CDP)的情况下,主机内核启动和子进程都会出现启动延迟内核启动。对于极低延迟的需求(例如网络数据包处理),具有持久线程的生产者/消费者工作队列模型可以提供比接收与新工作相关的启动的任何机制更低的延迟和更快的周转时间。
内存使用优化:持久线程的一个新的用例是避免与内核启动相关的加载/存储模式。对示例的一个很好的描述是here。基本思想是,对于类似工作负载的重复处理,我们可以仔细优化片上数据存储的使用(包括共享存储器,尤其是GPU寄存器空间的使用),以避免必须加载数据/参数在内核发布时,例如从全局内存开始,然后(可能)在内核结束时将更新的参数存储回全局内存。对于存在大量携带参数的特定工作负载,这可以具有显着的处理益处,并且参数空间可以适应"适合"在芯片上。随着更新的GPU具有越来越多的片上寄存器存储空间,对于更大的工作负载,这可能会继续引起人们的兴趣。
很可能还存在其他特定用例,其中持久线程方法提供了明显优于工作中启动方法的优势。这只是两个例子。
简而言之,持久性内核不是替换其他类型GPU处理范例的一般策略,但在特定情况下,它可以提供优于重复启动内核的方法的优势。因此,对持久内核的一些兴趣可能会持续一段时间。