问题标签 [multi-gpu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
795 浏览

opencl - OpenCL MultiGPU 比单 GPU 慢

我正在开发一个对视频帧数据执行一些处理的应用程序。为了加速它,我使用了 2 个图形卡并使用 OpenCL 处理数据。我的想法是将一帧发送到第一张卡,另一帧发送到第二张卡。这些设备使用相同的上下文,但不同的命令队列、内核和内存对象。

但是,在我看来,计算不是并行执行的,因为 2 张卡所需的时间几乎与仅一张显卡所需的时间相同。

有没有人有一个很好的例子,可以同时在独立的数据片段上使用多个设备?

提前致谢。

编辑:

这是切换到 2 个单独的上下文后的结果代码。但是,2 个显卡的执行时间仍然与 1 个显卡相同。

0 投票
0 回答
188 浏览

gpu - 在多个 GPU 上的模拟中增加 GPU 数量没有初始加速

我已经使用 MPI+CUDA 在多个 GPU 上实现计算。使用的 GPU 集群有 12 个节点,每个节点有 6 个 K40 GPU。当我使用 6 个 GPU 时,它们来自同一个计算节点。但是,如果我通过更改 GPU 数量来测量执行时间,当我使用 4 个 GPU 而不是 2 个或 6 个而不是 2 个 GPU 时,我几乎没有得到加速。下面是两个不同 GPU 上的执行时间图表输入尺寸。奇怪的是,该应用程序在进一步增加系统中的 GPU 数量时实现了加速。不过,最初的平坦部分无法解释。

在此处输入图像描述

我还通过 nvprof 测量了通信时间。在添加 GPU 时,对 cudaMemcpy 的调用次数按预期增加。然而,令人惊讶的是,完成 cudaMemcpy 调用的平均时间会随着 GPU 的增加而减少。这不应该发生,因为每次数据传输的大小保持不变,只是数据传输的数量增加了。

所以主要有两个问题:1)有人对图中的初始平坦部分有一些可能的解释吗?2) 向系统添加更多 GPU 时 cudaMemCpy 时间如何减少?

任何帮助将不胜感激。

0 投票
0 回答
46 浏览

cuda - 如何强制在集群中使用另一个 GPU?

我正在使用Caffe,它是带有 GPU(或 CPU)的卷积神经网络的框架。它主要使用 CUDA 6.0,我正在使用大量图像数据集(ImageNet 数据集 = 120 万张图像)训练 CNN,并且需要大量内存。但是,我正在对原始子集进行小型实验(这也需要大量内存)。我也在研究 gpu 集群。这是命令 $ nvidia-smi 的输出

但是当我尝试运行这些多个进程(例如,在不同的数据集上运行相同的 train_net.bin)时,它们会失败,因为它们在同一个 GPU 上运行,我想知道如何强制使用另一个 GPU。我将不胜感激任何帮助。

0 投票
1 回答
250 浏览

opengl - glCreateSyncFromCLeventARB 替代方案?

在 OpenGL 中使用 cl_command_queue 结果之前,我想在 OpenCL 中保存对 clFinish() 的调用(我在 OpenCL/GL 中使用了共享图像/纹理)。

我在“OpenCL Programming by Example”(第 243 页)一书中发现,使用 glCreateSyncFromCLeventARB 从 OpenCL 事件创建 GLsync 是执行此操作的方法。

问题是Apple平台似乎不支持此功能。

我知道 Apple 有自己的方式来使用 GCD 实现 OpenGL/OpenCL 互操作性。但是,我知道这需要我完全更改我的代码并为所有内容使用非标准 OpenCL API,并且我希望我的代码是跨平台的(必要时进行小的修改除外)。

glCreateSyncFromCLEventARGB 的任何其他替代方案?

0 投票
1 回答
257 浏览

windows - 是否可以在多个 GPU 上运行直接计算?

我对 DirectCompute 感兴趣,我想知道是否有可能,将两个不同的图形适配器连接到计算机以同时在两者上使用 Direct Compute,就像在 CUDA 中一样。据 ai 所知,在 directcompute 中调度计算机着色器是异步的,那么是否可以将计算机着色器调度到使用不同适配器创建的不同设备?

提前致谢!

0 投票
1 回答
3638 浏览

cuda - 使用 CUDA6.5 + MPI 时是否必须使用 MPS(多进程服务)?

通过链接写:https ://docs.nvidia.com/deploy/pdf/CUDA_Multi_Process_Service_Overview.pdf

1.1。乍看上去

1.1.1。MPS

多进程服务 (MPS) 是 CUDA 应用程序编程接口 (API) 的另一种二进制兼容实现。MPS 运行时架构旨在透明地启用协作多进程 CUDA 应用程序,通常是 MPI 作业,以在最新的 NVIDIA(基于 Kepler)Tesla 和 Quadro GPU 上利用 Hyper-Q 功能。Hyper-Q 允许在同一个 GPU 上同时处理 CUDA 内核;当单个应用程序进程未充分利用 GPU 计算能力时,这可以提高性能。

  1. 使用 CUDA6.5 + MPI (OpenMPI / IntelMPI) 时我是否必须使用 MPS(多进程服务),或者我可以使用 MPS 损失一些性能但没有任何错误?

  2. 如果我使用 MPS,这是否意味着我在单个服务器上的所有 MPI 进程将在单个 GPU 卡上按顺序(非并发)执行其 GPU 内核功能,但所有其他行为将保持不变?

0 投票
1 回答
2714 浏览

concurrency - 并发 NDKernal 启动的 OpenCL 多命令队列

我正在尝试运行向量加法的应用程序,我需要同时启动多个内核,因此对于并发内核启动,我最后一个问题中有人建议我使用多个命令队列。我由数组定义

我在上述代码附近的某个地方收到错误“命令由信号 11 终止”。

我也使用 for 循环来启动内核和排队数据

问题是我不确定我哪里出错了,我在某个地方看到我们可以制作命令队列数组,所以这就是我使用数组的原因。另一个信息,当我不使用 A for 循环时,只需手动定义多个命令队列,它就可以正常工作。

0 投票
1 回答
764 浏览

cuda - 使用多 GPU NVIDIA 的问题

我正在学习如何为我的 CUDA 应用程序使用多 GPU。我尝试了一个简单的程序,它成功地在具有两个 Tesla C2070 的系统上运行。但是,当我尝试在具有 Tesla K40c 和 Tesla C2070 的不同系统上运行相同的程序时,它显示了分段错误。可能是什么问题?我确信代码没有问题。环境中是否需要进行任何设置?我在这里附上了我的代码供您参考。

在 for 循环内初始化 bi 数组时会发生分段错误,这意味着没有为 bi 分配内存。

0 投票
0 回答
66 浏览

cuda - 双GPU cuda。我可以在不复制到主机内存的情况下从 GPU 2 访问 GPU 1 上的数据吗?

我在两个 GPU 上都有大量数据集,实际上我需要每个线程都能够访问整个数据。因此,如果我想要来自 GPU 2 的一些数据用于 GPU 1 中的线程,我就会遇到问题。我发现了使用 PCI 总线的 GPU Direct,但在进入它之前,我想先从了解它的人那里得到一些见解。

0 投票
1 回答
555 浏览

cuda - GPUDirect Peer 2 peer using PCIe bus:如果我需要访问其他GPU上的太多数据,会不会导致死锁?

我有需要大量数据的模拟程序。我将数据加载到 GPU 中进行计算,并且数据中有很多依赖性。由于 1 个 GPU 不足以存储数据,所以我将其升级为 2 个 GPU。但限制是,如果我需要其他 GPU 上的数据,则必须先有一个副本来托管。

那么,如果我使用 GPU Direct P2P,PCI 总线会处理 GPU 之间的大量来回通信吗?不会导致死锁吗?

我是新手,所以需要一些帮助和见解。