【问题标题】:Locking a process to Cuda core将进程锁定到 Cuda 核心
【发布时间】:2015-01-10 07:39:42
【问题描述】:

我刚刚进入 GPU 处理领域。

我想知道是否可以锁定一个新进程,或者“启动”一个锁定到 CUDA 核心的进程?

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

如果可能,对 CPU 性能有何影响 - 我们可以完全抵消 CPU 使用率还是 CPU 仍需要一些输入/输出?

我在这里的语义可能很离谱。如果我所说的需要一些解释,我深表歉意。我还不太习惯 GPU 的东西。

谢谢。

【问题讨论】:

  • 在此评论中,CUDA 线程不能保证与除它们自己的线程块中的线程之外的任何线程同时运行。这包括您可能希望在假设示例中尝试与之通信的 CPU 线程。您可能能够得到一些碰巧起作用的东西,但这种行为将不受支持。也就是说,如果系统决定更改程序中的线程调度,您的程序可能会中断。此外,CUDA 线程通常无法进行系统调用,例如访问磁盘所需的系统调用。
  • CUDA 线程可以通过网络发送数据包吗?
  • 不确定;一般来说,可能不会。您可能希望了解 CUDA 的“GPUDirect”功能。

标签: c++ cuda gpu


【解决方案1】:

我这里所有的cmets都应该以“此刻”开头。技术在不断发展。

想知道是否可以锁定新进程,或“启动”锁定到 CUDA 核心的进程?

进程 主要是一个(主机)操作系统术语。 CUDA 没有单独定义一个 process 与它的主机操作系统定义,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)写入系统内存,前提是对此机制有适当的设置活动的合理假设。

还有磁盘?

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

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

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

另外:

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

这就像磁盘问题。这些问题可以笼统地看待,在这种情况下,答案可能是“是”。但是将自己限制在对 CUDA 线程可以做什么的正式定义中,我相信答案更合理的是“不”。 CUDA 没有为磁盘或网络的 I/O 接口(或许多其他东西,例如显示器!)提供直接定义。推测或假设存在一个轻量级主机进程是合理的,它只是在 CUDA GPU 和网络接口之间复制数据包。有了这个假设,答案可能是“是”(磁盘 I/O 也是如此)。但是如果没有这个假设(和/或相关的,可能更多涉及 GPUDirect 框架的假设),我认为最合理的答案是“不”。根据 CUDA 编程模型,没有定义如何直接访问磁盘或网络资源。

【讨论】:

  • 我认为高端Nvidia卡上的网络端口会很棒:)也许他们可以做一个单独的网卡并与SLI串联?感谢您的回答。你肯定会用很好的参考资料涵盖所有内容。绿色勾号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 2012-12-12
相关资源
最近更新 更多