问题标签 [multiple-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 投票
2 回答
3068 浏览

opencl - 将 OpenCL 用于多个设备(多个 GPU)

您好 StackOverflow 用户,

我有这个问题:我有一个非常大的图像,我想处理它。我的第一个想法是将大图像分成几个子图像,然后将这些子图像发送到不同的 GPU。我不使用图像对象,因为我不使用 RGB 值,但我只使用亮度值来操作图像。

我的问题是:

  1. 我可以为每台设备使用一个context与多个吗?commandqueues或者我应该为每个设备使用一个context和一个?commandqueue
  2. 谁能给我一个例子或想法,我如何动态更改 inputMem-Data(子图像数据)以设置内核参数以发送到每个设备?(我只知道如何发送相同的输入数据)
  3. 例如,如果我有比 GPU 数量更多的子图像,我如何将子图像分配给 GPU?
  4. 或者也许是另一种更聪明的方法?

我会感谢每一个帮助和想法。非常感谢。

0 投票
1 回答
458 浏览

c++ - 在不同的 GPU 上初始化结构

我有一个看起来像这样的结构

现在我想LstmLayer用不同的 GPU 设备上的每个元素初始化一个 , 数组。我这样做如下

运行此程序会出现以下错误

请告诉我我的代码有什么问题以及如何正确处理?提前谢谢你。

0 投票
1 回答
192 浏览

opencl - 使用多个 GPU 时 OpenCL 内核启动延迟?

我有一个应用程序,我设计为在带有 OpenCL 的 AMD GPU 上运行。昨天终于让应用程序运行并且没有错误(哈哈),以单个 GPU 为目标。现在该应用程序工作正常,是时候将其扩展到多个 GPU 了。

阅读很多关于如何设置它的信息。我们使用的是单上下文多队列方法。

我拉出设备列表,然后选择 2 个 GPU 并创建一个包含它们的上下文,然后创建一个包含两个设备的 BuildProgram。创建两个单独的队列。

原始工作应用程序的伪代码,现在转换为处理 2 个 gpus:

这基本上就是代码的样子。在循环之前设置参数并完成写入 - init 内核不依赖输入来开始工作。运行后,它确实将生成的数据 async_work_group_copy 复制到全局缓冲区。

现在,在我为 2 个 GPU 修改代码之前,内核运行时间为 27 毫秒(每个循环)

修改代码后,如果我注释掉 2 个内核运行中的一个或另一个(EnqueueNDRangeKernel 和相关的 clFinish),它们都将在 27 毫秒内运行。

如果我运行代码以在两个 GPU 上并行运行,我会得到非常奇怪的行为。

循环中的第一次运行,它们都分别在大约 37-42 毫秒内执行。我可以稍微放慢速度,因为我完成了两倍的工作。但是在第一次运行之后,一个或另一个内核将在排队和启动之间随机有 4-5 秒的延迟。

这是我的分析/计时的输出。所有数字都以毫秒为单位。

我正在运行它的机器有 5 个 GPU。无论我使用哪两个,两个 GPU 中的一个(并不总是同一个)在启动时会有 4-5 秒的延迟。使用单个 GPU - 无延迟。

这可能是什么原因造成的?任何想法?我没有阻止 - clFinish 只是为了获取分析信息。即使它被阻塞,也不会延迟 5 秒。

另外-我认为内核正在执行的对全局的写入可能是延迟的一部分。我评论了这些文章。没有。没变。

其实我加了一个return;作为内核的第一行 - 所以它绝对什么都不做。40 毫秒降至 0.25,但 5 秒延迟仍然存在。

0 投票
0 回答
343 浏览

neural-network - 在 Torch 中的多个 GPU 上训练孪生神经网络:cunn 的 DataParallelTable 不支持共享

我正在尝试加快我在torch7中实现的网络,但是当我尝试使用nn.DataParallelTable时出现错误。这就是我想要做的:

函数在哪里:

另一个是:

我得到的错误是:

您可能知道错误在哪里吗?抱歉,但我对此有点陌生,我找不到解决方法。当然我弄错了网络结构。提前致谢。

0 投票
1 回答
157 浏览

matlab - Matlab 上的多个 GPU 代码仅运行几秒钟

我在带有一个 GTX 1080 和一个 K80(带有 2 个 GPU)的系统上运行以下 MATLAB 代码

代码运行大约一秒钟。当我在几秒钟后重新运行代码时。我收到消息:

我尝试增加TdrDelay,但没有帮助。

0 投票
1 回答
2139 浏览

cuda - 如何理解“warp 中的所有线程同时执行相同的指令”。在 GPU 中?

我正在阅读Professional CUDA C ProgrammingGPU Architecture Overview部分:

CUDA 采用单指令多线程 (SIMT) 架构来管理和执行 32 个一组的线程,称为 warp。warp 中的所有线程同时执行相同的指令。每个线程都有自己的指令地址计数器和寄存器状态,对自己的数据执行当前指令。每个 SM 将分配给它的线程块划分为 32 线程 warp,然后调度这些线程在可用硬件资源上执行。

SIMT 架构类似于 SIMD(单指令多数据)架构。SIMD 和 SIMT 都通过将相同的指令广播到多个执行单元来实现并行性。一个关键的区别是 SIMD 要求一个向量中的所有向量元素在一个统一的同步组中一起执行,而 SIMT 允许同一个 warp 中的多个线程独立执行。即使一个 warp 中的所有线程一起从同一个程序地址开始,单个线程也可能具有不同的行为。SIMT 使您能够为独立的标量线程编写线程级并行代码,以及为协调线程编写数据并行代码。SIMT 模型包括 SIMD 没有的三个关键特性:
➤ 每个线程都有自己的指令地址计数器。
➤ 每个线程都有自己的寄存器状态。
➤ 每个线程可以有一个独立的执行路径。

第一段提到“ All threads in a warp execute the same instruction at the same time.”,而在第二段中,它说“ Even though all threads in a warp start together at the same program address, it is possible for individual threads to have different behavior.”。这让我很困惑,上面的陈述似乎相互矛盾。谁能解释一下?

0 投票
1 回答
35 浏览

opencl - 从多个 GPU 读取时 OpenCl 错误值

我有一个内核函数,它只将数字写入 __global int* c 具体来说它看起来像这样:

在主机代码中,我为 C 值分配了内存:

我像这样打印它:

和输出:

所以第一个值是好的,其余的有点垃圾,你知道我写错了什么吗?当然,这只是部分代码,但我认为我粘贴了有关“c”值的所有行。全局大小设置为 1。

0 投票
2 回答
2275 浏览

tensorflow - 具有多个 gpu 的 TensorFlow 处理性能

朋友们!我有一个关于使用多个 gpu 进行处理的问题。我正在使用 4 gpus 并以如下 3 种方式尝试了简单的 A^n + B^n 示例。

  1. 单 GPU

    /li>
  2. 多个 GPU

    /li>
  3. 没有指定特定的 gpu(我想可能所有的 gpu 都使用了)

    /li>

当尝试这个时,结果是不可理解的。结果是 1.单个 gpu:6.x 秒 2.多个 gpu(2 gpus):2.x 秒 3.没有指定特定 gpu(可能是 4 gpus):4.x 秒

我不明白为什么#2 比#3 快。任何人都可以帮助我吗?

谢谢。

0 投票
1 回答
112 浏览

tensorflow - Tensorflow 不会将张量/运算分配给所有可用的 GPU

我有两个 GPU,一个 6GB GTX Titan 和一个 11GB GTX 1080Ti。

期望:Tensorflow 应该自动使用所有 GPU 的内存。

现实:Tensorflow 将这两个设备映射为 gpu:0 和 gpu:1,但它只使用 gpu:0 而从不使用 gpu:1,当我增加内存需求时,它会在不使用 gpu:1 的内存的情况下运行 OutOfMemory 异常。

我想要做的是使用两个设备的 11+6=17 GB 内存。我想也许 tensorflow 只支持相同的 GPU 类型,如果它们是不同的类型,它只会使用其中一种?

0 投票
0 回答
124 浏览

matlab - 将 MatConvNet 与新旧 GPU 一起使用

我在 Windows 7 64 位计算机上安装了两个 GPU:NVIDIA GeForce GTX 750 Ti 和 GeForce GTX 570。前者的计算能力为 5,后者的计算能力为 2。

对于我的一个项目,我想使用MatConvNet,这是一个用于在 MATLAB 中以类似于 Caffe 或 TensorFlow 的风格拟合卷积神经网络 (CNN) 的库。该软件包支持两种显卡的使用,但 NVIDIA 的深度学习工具包 cuDNN 仅与计算能力为 3 或更高的显卡兼容。如果我决定只使用 750 Ti,我可以编译 MatConvNet 并enableCudnn设置为true,如果我决定只使用 570,我必须编译它并设置为false

在我创建的一个简单的 CNN 上,用三个卷积层、三个池化层、一个全连接层和一个 softmax 层对手写数字进行分类,我注意到仅 750 Ti 的训练时间最短,其次是两张牌紧随其后的是570。这是因为当我使用这两张卡时,我必须使用 to 编译 MatConvNet 包enableCudnnfalse这会阻止 MatConvNet 使用作为 cuDNN 一部分的快速卷积代码。但是,拥有两个 GPU 仍然比单独拥有 570 更好。

我想知道是否有办法为每个显卡分别编译 MatConvNet,以便 750 使用 cuDNN 而 570 不使用。不考虑在显卡之间分配工作负载的开销,与单独使用 750 相比,这在理论上应该可以加快代码速度。有人可以让我知道他们是否做过这样的事情,如果可能的话,和/或如果可以的话怎么做?