gpt4 book ai didi

cuda - NVIDIA MPS(多进程服务器)和 CUDA Streams 是什么关系?

转载 作者:行者123 更新时间:2023-12-01 01:05:02 47 4
gpt4 key购买 nike

英伟达官方多进程服务器一览docs ,我不清楚它如何与 CUDA 流交互。

下面是一个例子:

应用 0:向逻辑流 0 发出内核;

应用程序 1:向(它自己的)逻辑流 0 发出内核。

在这种情况下,

1) MPS 是否/如何“劫持”这些 CUDA 调用?对于每个应用程序,它是否完全了解使用了哪些流以及哪些流中包含哪些内核?

2) MPS 是否创建了自己的 2 个流,并将各自的内核放入正确的流中?或者 MPS 是否可能通过流以外的机制启用内核并发?

如果有帮助,我对 MPS 在 Volta 上的工作方式很感兴趣,但也很感激有关旧架构的信息。

最佳答案

考虑 MPS 的一种方式是,它充当来自多个进程的 CUDA 事件的漏斗,在 GPU 上发生,就好像它们来自单个进程一样。 MPS 的具体好处之一是,即使内核来自不同的进程,理论上也可以实现内核并发。 “普通”CUDA 多进程执行模型将序列化此类内核执行。

由于单个进程中的内核并发意味着所讨论的内核被发布到单独的流,因此从概念上讲,MPS 将来自各个客户端进程的流视为完全独立的流是有道理的。自然地,如果您分析这样的 MPS 设置,流将显示为彼此独立,无论它们是与单个客户端进程关联的单独流,还是跨多个客户端进程的流。

在 Volta 之前的情况下,MPS 不保证内核事件与单独进程之间的进程隔离。在这方面,它非常像一个漏斗,从多个进程中获取事件并将其发布到 GPU,就好像它是从单个进程中发布的一样。

在 Volta 的情况下,来自不同进程的事件从执行的角度(例如并发等)表现得好像来自单个进程,但来自不同进程的事件仍然带有进程隔离(例如独立的地址空间)。

1) Does / how does MPS "hijack" these CUDA calls? Does it have full knowledge of , for each application, what streams are used and what kernels are in which streams?



是的,CUDA MPS 理解来自给定进程的单独流,以及向每个进程发出的事件,并在向 GPU 发出工作时维护此类流语义。据我所知,有关 MPS 如何处理 CUDA 调用的确切细节尚未公布。

2) Does MPS create its own 2 streams, and place the respective kernels into the right streams? Or does MPS potentially enable kernel concurrency via mechanisms other than streams?



MPS 维护所有客户端的所有流事件以及 CUDA 流语义。发布到特定 CUDA 流中的事件将被序列化。发布到独立流的事件可能会同时运行。无论所讨论的流的来源如何,无论是来自一个过程还是多个过程,都是如此。

关于cuda - NVIDIA MPS(多进程服务器)和 CUDA Streams 是什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49163037/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com