在 dpc++ malloc_shared 我们可以在 2 个 gpus 之间共享一个缓冲区吗

Posted

技术标签:

【中文标题】在 dpc++ malloc_shared 我们可以在 2 个 gpus 之间共享一个缓冲区吗【英文标题】:In dpc++ malloc_shared can we share a buffer between 2 gpus 【发布时间】:2021-11-11 06:16:42 【问题描述】:

在 sycl/dpc++ malloc_shared 中,我知道可以使用以下函数创建一个可以在主机和单个 gpu 之间共享的缓冲区。

void* malloc_shared(size_t num_bytes,
                    const sycl::device& dev,
                    const sycl::context& ctxt);

int *data = malloc_shared<int>(N, q);

我想知道是否存在可以跨多个 GPU 共享相同数据/缓冲区的东西?类似下面的东西

int *data = malloc_shared<int>(N, q1,q2);

【问题讨论】:

【参考方案1】:

不,没有使用sycl::malloc_shared 在多个设备上分配内存的标准化方法。

如果您希望在多个设备(和主机)之间使用相同的缓冲区,则需要使用 sycl::malloc_host(过载采用 sycl::context),但这可能会对性能产生负面影响。

【讨论】:

以上是关于在 dpc++ malloc_shared 我们可以在 2 个 gpus 之间共享一个缓冲区吗的主要内容,如果未能解决你的问题,请参考以下文章

密度峰值聚类算法(DPC)

密度峰值聚类算法(DPC)

如何在内核卸载到 GPU 的情况下调试以下 DPC++ 程序?

x64枚举DPC定时器

如何在 DPC++ 编译器选项中指定 C++ 标准版本?

如何从非 DPC 应用程序获取托管配置?