0

如果我有一个__constant__价值

__constant__ float constVal;

非阻塞流上的 MPI 等级可能会也可能不会初始化:

cudaMemcpyToSymbolAsync((void*)&constVal,deviceValue,sizeof(float),0,cudaMemcpyDeviceToDevice,stream);

这是:

  1. 在内核中同时被多个 MPI 等级访问是否安全?即,排名是否共享相同的实例val或 MPI 语义(它们都有一个私有副本)是否仍然有效?
  2. 如果以上是安全的,那么由多个 MPI rank 初始化是否安全?
4

1 回答 1

2
  1. 在内核中同时被多个 MPI 等级访问是否安全?即,排名是否共享同一个 val 实例或 MPI 语义(它们都有一个私有副本)是否仍然有效?

两者都不。CUDA 上下文不在进程之间共享。如果您有多个进程,您将获得多个上下文,并且每个上下文都有自己的所有静态定义的符号和代码的副本。此行为独立于 MPI 语义。如果您想象 MPI 通信器中的多个进程共享相同的 GPU 上下文和状态,那么事实并非如此。

  1. 如果以上是安全的,那么由多个 MPI rank 初始化是否安全?

它不仅安全,而且是强制性的。

于 2021-02-16T23:45:04.703 回答