将进程锁定到Cuda核心

时间:2015-01-10 07:39:43

标签: c++ cuda gpu

我刚刚进入GPU处理。

我想知道是否有可能锁定一个新流程,或者是否可以启动' 锁定到CUDA核心的流程?

例如,您可能有一个小型C程序,它对图像索引执行图像过滤。你可以在每个CUDA核心上运行该程序,该核心基本上是永久运行的 - 从它自己的内存读取/写入系统内存和磁盘吗?

如果可行的话,对CPU性能有什么影响 - 我们可以完全抵消CPU使用率还是CPU仍然需要输入/输出?

我的语义可能很有用。如果我所说的要求有些解释,我道歉。我还不习惯GPU的东西。

感谢。

1 个答案:

答案 0 :(得分:4)

我在这里的所有评论都应以"开头#34;开头。技术在不断发展。

  

想知道是否有可能锁定新流程,或者“推出”流程是否可行。一个锁定到CUDA核心的进程?

进程主要是(主机)操作系统术语。 CUDA没有与主机操作系统定义AFAIK分别定义进程。 CUDA threadblocks ,一旦在Streaming Multiprocessor(或 SM ,GPU内部的硬件执行资源组件)上启动,在许多情况下将保留在该SM上"生命周期",并且SM包括一系列" CUDA核心" (有点松散或概念性的术语)。然而,在CUDA动态并行性的情况下,今天至少有one documented exception,所以在最一般意义上,不可能锁定"执行到CUDA核心的CUDA线程(在这里使用核心来指代永远保留在SM内给定warp通道上的执行线程)。

  

您是否可以在每个基本上永久运行的CUDA核心上运行该程序

你可以拥有一个基本上永远运行的CUDA程序。它是一种公认​​的编程技术,有时称为persistent threads。这样的程序自然会占用/需要一个或多个CUDA核心(再次使用松散的术语)。如前所述,这可能会或可能不会暗示程序永久占用特定的物理执行资源集。

  

从它读取/写入自己的内存到系统内存

是的,这是可能的,扩展了思路。根据定义,写入它自己的存储器显然是可能的,并且可以通过zero-copy mechanism(幻灯片21/22)写入系统存储器,给出合理的假设该机制的适当设置活动。 / p>

  

和磁盘?

不,今天没有直接可能,没有主机系统交互,和/或没有非典型外部资源的重要假设,例如通过GPUDirect接口连接的某种磁盘控制器(还有很多额外的)假设和未指明的框架)。 GPUDirect异常需要这么多额外的框架,我想说,对于典型的用法,答案是" no",没有主机系统活动/干预。主机系统(通常)拥有磁盘驱动器,而不是GPU。

  

如果可行的话,对CPU性能有什么影响 - 我们可以完全抵消CPU使用率还是CPU仍然需要输入/输出?

在我看来,仍然需要考虑CPU。一个考虑因素是您是否需要写入磁盘。即使你不是,大多数程序都从某个地方(例如MPI)派生I / O,因此存在某种更大框架的含义。其次,相关地,持久线程编程模型通常意味着生产者/消费者关系和工作队列。 GPU位于工作队列的处理端(消费者端),但是其他东西(通常)位于生产者端,通常是主机系统CPU。同样,它可能是本地或通过MPI的另一个GPU,它位于工作队列的生产者端,但通常仍然意味着其他地方的最终生产者(即需要系统I / O)。

此外:

  

CUDA线程可以通过网络发送数据包吗?

这就像磁盘问题。这些问题可以用一般的方式来看待,在这种情况下答案可能是"是"。但是,我们将自己局限于CUDA线程可以做什么的正式定义,我相信答案更合理,而且不会#34;。 CUDA没有直接定义磁盘或网络的I / O接口(或许多其他东西,如显示器!)。猜测或假设轻量级主机进程的存在是合理的,该进程只是在CUDA GPU和网络接口之间复制数据包。有了这个假设,答案可能是"是" (类似于磁盘I / O)。但是,如果没有这种假设(和/或相关的,或许更多涉及GPUDirect框架的推定),我认为最合理的答案是" no"。根据CUDA编程模型,没有关于如何直接访问磁盘或网络资源的定义。