问题标签 [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.
opencl - 将 OpenCL 用于多个设备(多个 GPU)
您好 StackOverflow 用户,
我有这个问题:我有一个非常大的图像,我想处理它。我的第一个想法是将大图像分成几个子图像,然后将这些子图像发送到不同的 GPU。我不使用图像对象,因为我不使用 RGB 值,但我只使用亮度值来操作图像。
我的问题是:
- 我可以为每台设备使用一个
context
与多个吗?commandqueues
或者我应该为每个设备使用一个context
和一个?commandqueue
- 谁能给我一个例子或想法,我如何动态更改 inputMem-Data(子图像数据)以设置内核参数以发送到每个设备?(我只知道如何发送相同的输入数据)
- 例如,如果我有比 GPU 数量更多的子图像,我如何将子图像分配给 GPU?
- 或者也许是另一种更聪明的方法?
我会感谢每一个帮助和想法。非常感谢。
c++ - 在不同的 GPU 上初始化结构
我有一个看起来像这样的结构
现在我想LstmLayer
用不同的 GPU 设备上的每个元素初始化一个 , 数组。我这样做如下
运行此程序会出现以下错误
请告诉我我的代码有什么问题以及如何正确处理?提前谢谢你。
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 秒延迟仍然存在。
neural-network - 在 Torch 中的多个 GPU 上训练孪生神经网络:cunn 的 DataParallelTable 不支持共享
我正在尝试加快我在torch7中实现的网络,但是当我尝试使用nn.DataParallelTable时出现错误。这就是我想要做的:
函数在哪里:
另一个是:
我得到的错误是:
您可能知道错误在哪里吗?抱歉,但我对此有点陌生,我找不到解决方法。当然我弄错了网络结构。提前致谢。
matlab - Matlab 上的多个 GPU 代码仅运行几秒钟
我在带有一个 GTX 1080 和一个 K80(带有 2 个 GPU)的系统上运行以下 MATLAB 代码
代码运行大约一秒钟。当我在几秒钟后重新运行代码时。我收到消息:
我尝试增加TdrDelay
,但没有帮助。
cuda - 如何理解“warp 中的所有线程同时执行相同的指令”。在 GPU 中?
我正在阅读Professional CUDA C Programming和GPU 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.
”。这让我很困惑,上面的陈述似乎相互矛盾。谁能解释一下?
opencl - 从多个 GPU 读取时 OpenCl 错误值
我有一个内核函数,它只将数字写入 __global int* c 具体来说它看起来像这样:
在主机代码中,我为 C 值分配了内存:
我像这样打印它:
和输出:
所以第一个值是好的,其余的有点垃圾,你知道我写错了什么吗?当然,这只是部分代码,但我认为我粘贴了有关“c”值的所有行。全局大小设置为 1。
tensorflow - 具有多个 gpu 的 TensorFlow 处理性能
朋友们!我有一个关于使用多个 gpu 进行处理的问题。我正在使用 4 gpus 并以如下 3 种方式尝试了简单的 A^n + B^n 示例。
单 GPU
/li>多个 GPU
/li>没有指定特定的 gpu(我想可能所有的 gpu 都使用了)
/li>
当尝试这个时,结果是不可理解的。结果是 1.单个 gpu:6.x 秒 2.多个 gpu(2 gpus):2.x 秒 3.没有指定特定 gpu(可能是 4 gpus):4.x 秒
我不明白为什么#2 比#3 快。任何人都可以帮助我吗?
谢谢。
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 类型,如果它们是不同的类型,它只会使用其中一种?
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 包enableCudnn
,false
这会阻止 MatConvNet 使用作为 cuDNN 一部分的快速卷积代码。但是,拥有两个 GPU 仍然比单独拥有 570 更好。
我想知道是否有办法为每个显卡分别编译 MatConvNet,以便 750 使用 cuDNN 而 570 不使用。不考虑在显卡之间分配工作负载的开销,与单独使用 750 相比,这在理论上应该可以加快代码速度。有人可以让我知道他们是否做过这样的事情,如果可能的话,和/或如果可以的话怎么做?