问题标签 [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 回答
595 浏览

opencl - clGetEventProfilingInfo() 时间戳是否同步?

我正在尝试在多 GPU 环境中分析代码,clGetEventProfilingInfo()但在我看来,我无法关联来自不同 GPU 的时间戳。一个简单的代码示例使用两个 GPU 的速度是使用一个 GPU 的两倍,但时间戳表明一个 GPU 在另一个 GPU 开始之前执行了大部分工作。

[规范] http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetEventProfilingInfo.html)只是说,这样的时间戳是“描述当前设备时间计数器以纳秒为单位 [...]"

我是否必须假设这些不必同步?


供参考:

  • 我正在使用两个带有 NVIDIA 驱动程序版本 295.40、Linux 内核 2.6.35 的 NVIDIA GTX 580
  • 我已经在Khronos 论坛上问过这个问题,但还没有收到回复。
0 投票
1 回答
740 浏览

cuda - CUDA multi gpu:运行相同的内核(双芯片设备)

我正在编写必须在 GTX690(双芯片)板上运行相同内核的代码。由于计算是相当可分离的,我不需要设备之间的数据交换,我只是在 CPU 上合并结果。我了解如何在每个设备上运行代码,以及如何在每个设备的内存空间中提供 i/o 数据空间。

我在尝试设置在两个设备上运行的内核都使用的常量时遇到问题。我需要为每个设备制作一个阵列吗?如果是这样,我如何在内核中检查哪个设备正在运行,以便我可以从数组中访问正确的常量?

这是我正在使用的一些代码。当我仅使用 1 个芯片(通过设置numDev = 1)时,它可以正常工作,但不能同时使用。

在内核中,我只使用d_cellSizeZ常量。那么,我应该如何为每个设备创建一个常量,以便在同一个内核中很好地使用?

另一个问题是:如果我尝试在设备之间交换数据,它会通过 PCI 总线还是双芯片板上存在一些内部路径?

0 投票
1 回答
10934 浏览

cuda - Cuda 驱动程序初始化失败

我有一个两个 gpu 系统,一个 Geforce 8400 GS 和 Geforce GT 520。我能够在两个 gpu 上运行我的 cuda 程序。但是当我使用 cuda-gdb 调试它们时,我收到一条错误消息,说Cuda driver initialization failed.另外,当我使用 运行程序时cuda-gdbcudaGetDeviceCount说我只有 1 个 gpu。如果我不使用cuda-gdb. 有人可以帮我吗?

我正在运行 Ubuntu 11.04。

0 投票
1 回答
588 浏览

java - APU+GPU 的 OpenCL

我正在考虑组装这个系统:

  • AMD CPU(A8-3870 APU,内置 Radeon HD 6550D:400 个流处理器:xxx GFLOPS)近 110 美元
  • AMD显卡:HD 7750(512个流处理器:819 GFLOPS峰值性能)近170$
  • 合适的内存(1600MHz 总线)和主板

我可以使用 OpenCL 和类似程序实现官方网站中提到的 819+xxx GFLOPS 峰值性能吗?

我可以将所有 912 个内核与 OpenCL/Jocl 一起使用吗?将 cpu 内核添加到锅中是否很重要(其中 4 个(当然其中 2 个将用于馈送 gpu))?

C++ 或 Java,哪一个拥有最多的库以在计算机上使用多个 gpu 或 apu?

如果我取消 apu 和 gpu 并购买单个 Nvidia GTX-660 会怎样?这个赢了?(229$ -1800GFLOPS)(有一个简单的 4 核 cpu 最便宜的没有 apu)

我不想做一个 VS 问题。我需要知道什么对科学计算(75% 的时间)和游戏(%25 的时间)更好,因为我的预算很低。对于“科学计算”,我的意思是流体动力学+固态物理模拟。对于游戏,我的意思是那些有 openCL 和 PhysX。

你能给出一个使用多个 GPU 的 OpenCL 代码的非常简单的例子吗?

谢谢你。

0 投票
1 回答
778 浏览

gpu - 在多个 GPU 的情况下,哪一个对所有显示器进行实际渲染?

任何人都可以解释或指出多 GPU/多显示器设置中的渲染如何工作的解释(或至少一些线索)吗?

例如,我安装了 5 个 NVIDIA Quadro 4000 显卡,并连接了 9 个显示器。显示器没有任何分组。刚刚在Windows 7中安排总分辨率为4098x2304。这些卡也没有与 SLI 连接。

我有一个 Flash 应用程序,它将 4096x2304 窗口视为单个 Stage3d 上下文(使用 dx9),并且可以使用这种非常不寻常的设置,就好像它只是一个只有一个视频卡的巨大显示器。

渲染在内部是如何工作的?显卡实际上在做什么?他们共享资源吗?谁渲染所有的东西?为什么我在应用程序中几乎什么都没做却得到 29.9 fps?

谢谢你。

0 投票
2 回答
720 浏览

cuda - 在单个流中使用对等 GPU

在我目前的项目中,我使用 GPU 进行信号处理和可视化。我已经在使用流来允许异步操作。信号以为单位进行处理,对于每一帧,流中的处理步骤如下

  1. memcpy 到设备
  2. 信号调理
  3. 图像处理
  4. 可视化

现在这些步骤发生在单个 GPU 上,但是我的机器有一个多 GPU 卡(GeForce GTX 690),我想在两个设备之间分配操作。基本上我想在设备 A 上执行步骤 1 和 2,在设备B上执行步骤 3 和 4 ,而操作 1、2、3 和 4 仍然作为单个异步流执行。期望的结果是一个看起来像这样的流式布局

我怎样才能做到这一点?

0 投票
1 回答
2819 浏览

windows - 如何使用辅助 GPU 覆盖 Windows 上的 CUDA 内核执行时间限制?

从 Nvidia 的网站上,它解释了超时问题:

问:内核执行的最大时间是多少?在 Windows 上,单个 GPU 程序启动的最长运行时间约为 5 秒。超过此时间限制通常会导致通过 CUDA 驱动程序或 CUDA 运行时报告启动失败,但在某些情况下可能会挂起整个机器,需要硬重置。这是由 Windows“看门狗”计时器引起的,如果使用主图形适配器的程序运行时间超过最大允许时间,则会导致它们超时。

出于这个原因,建议在 GPU 上运行 CUDA,该 GPU 未连接到显示器并且没有将 Windows 桌面扩展到其上。在这种情况下,系统必须至少包含一个用作主图形适配器的 NVIDIA GPU。

来源:https ://developer.nvidia.com/cuda-faq

所以看起来,nvidia 相信,或者至少强烈暗示,拥有多(nvidia)gpus,并且通过适当的配置,可以防止这种情况发生?

但是怎么做?到目前为止,我尝试了很多方法,但 GK110 GPU 上仍然存在令人讨厌的超时问题:(1)插入辅助 PCIE 16X 插槽;(2) 未连接到任何显示器 (3) 在驱动程序控制面板中设置为专用 physX 卡(如其他人推荐的那样),但阻塞仍然存在。

0 投票
1 回答
4379 浏览

cuda - 如何检查主板是否支持多GPU?

我将从事一个综合使用多个 GPU 的研究项目。我正在考虑先设置一个具有多个 GPU 的桌面。

我目前有一块MSI P55 CD53 主板,带有 Intel I5-570 CPU 和 Nvidia GTS 250 GPU。我想再购买至少 2 个 Nvidia 显卡来添加到我现有的桌面上。

有什么资源我可以查找,这样我就可以知道它是否可行,我应该买什么显卡?

非常感谢。

0 投票
1 回答
5859 浏览

memory - cudaMemGetInfo 在 GTX 690 的两台设备上返回相同数量的可用内存

我在尝试追踪内存使用情况时遇到了 Geforce GTX 690 的问题。一个简单的测试程序:

测试打印出来:

问题是分配后设备 1 上的空闲内存量与设备 0 上的完全一样,这不应该是这种情况,因此问题必须在 cudaMemGetInfo 和/或 cudaSetDevice 中。任何人都在同样的问题上运行,或者有人可以指出测试中是否存在其他根本性的错误?

在 Windows 7、Visual Studio 2010、Cuda SDK 5.0 上运行代码,使用代码生成进行编译:compute_30,sm_30

编辑 22.4.2013

我继续试验这个问题,似乎 cudaSetDevice 工作正常,可以从 cudaGetDevice 调用的结果中得到验证。我在内存分配测试之后添加了设备 0 的重置,并且似乎 cudaMemGetInfo 返回的可用内存大小对于两个设备来说再次相同。我已经在自己的代码中检查了 cuda_error_t 的所有返回值,并且所有函数调用都返回 cudaSuccess。有没有人在上面描述的设置中遇到过与 GTX 690 类似的问题?

最新测试代码:

测试输出:

0 投票
1 回答
684 浏览

cuda - OptiX 中的多个 GPU(可以异步启动?)

我的硕士论文遇到了一些挑战,希望您能帮助我,或者为我指明正确的方向。

我正在使用 Knaus 和 Zwicker ( http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Knaus11.pdf ) 使用 OptiX 的新方法实现渐进式光子映射。这种方法使得 PPM 的每个迭代/帧独立,更适合多 GPU。

我所做的(使用单个 GPU)是使用 OptiX 跟踪许多光子,然后将它们存储在缓冲区中。然后,使用 CUDA 和推力将光子分类为空间哈希图,永远不会离开 GPU。我想在 GPU 上创建空间哈希图,因为它是我的渲染器的瓶颈。最后,在间接辐射估计期间使用此缓冲区。所以这是一个多通道算法,包括光线追踪、光子追踪、光子图生成和最后创建图像。

我了解 OptiX 可以支持多个 GPU。每个上下文启动都在 GPU 上进行划分。对缓冲区的任何写入似乎都被序列化并广播到每个设备,以便它们的缓冲区内容相同。

我想做的是让一个 GPU 做一帧,而第二个 GPU 做下一帧。然后我可以组合结果,例如在 CPU 或 GPU 中的一个组合通道上。如果我可以在每个设备上并行执行每个通道(在每个通道之间同步),这也是可以接受的。这有可能吗?

例如,我是否可以在两个不同的主机线程上创建两个 OptiX 上下文映射到每个设备。这将允许我像以前一样生成 CUDA/推力空间散列图,假设光子在一个设备上,并在管道末端合并两个生成的图像。但是,编程指南声明它不支持多线程上下文处理。我可以使用多个进程,但是进程间通信有很多混乱。这种方法还需要在创建场景几何体、编译 PTX 文件等方面进行重复工作。

谢谢!