问题标签 [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.
c - 在 NUMA 机器上使用 CUDA 进行多 GPU 编程
我目前将算法移植到两个 GPU。硬件具有以下设置:
- 两个 CPU 作为一个 NUMA 系统,因此主内存被拆分到两个 NUMA 节点。
- 每个 GPU 都物理连接到其中一个 GPU。(每个 PCIe 控制器有一个 GPU)
我在主机上创建了两个线程来控制 GPU。每个线程都绑定到一个 NUMA 节点,即两个线程中的每一个都在一个 CPU 插槽上运行。如何确定 GPU 的数量以便我可以选择直接连接的 GPU 使用cudaSetDevice()
?
windows - 如何在 windows7 上使用 DirectX 9 和多 GPU
我在 Windows 7 系统上有多个 nVidia GPU 卡(Q2000),没有 SLI,只有一个显示器。
现在我要做的是让 Direct3D9 设备在特定 GPU 上运行。
我可以使用 [Adapter] 参数IDirect3D9::CreateDevice
来选择 GPU,但除非我在该 GPU 卡上连接第二台显示器,否则它将无法工作(如果我在 Windows 上只有一个桌面)。
如果我单击“分辨率控制面板”中的“检测”按钮,它可以在我的主桌面一侧制作一个“假”桌面,并且 CreateDevice(1, ...) 运行良好 - 但这不是我想要的。
对于 OpenGL,这很容易,因为 WGL_NV_gpu_affinity,它可以使 OpenGL 设备在第二个 GPU 上运行,只连接一个显示器,一个桌面在 windows 上。
我想知道是否有任何 API 可用于 Directx 9 作为“WGL_NV_gpu_affinity”工作。
任何提示将不胜感激。提前致谢!
visual-studio-2010 - VS2010 Nsight 3.0,多GPU卡但只能看到一台设备。
症状:
我首先要确保这个盒子里实际上有两张 nvidia 卡,所以
在 VS2010 -> NSight -> Windows -> SystemInfo -> 显示设备
我可以看到似乎有两个设备。
英伟达 GeForce GTX 560 Ti
英伟达 GeForce GTX 560 Ti
名称 \.\DISPLAY2
ID PCI\VEN_10DE&DEV_1200&SUBSYS_35151458&REV_A1
状态标志 无
但
在 VS2010 -> NSight -> Windows -> SystemInfo -> GPU 设备或 CUDA 设备
我只能看到一列值(不包括“属性”列)
我只能在 NVIDIA 控制面板 -> 3D 设置 -> 设置 PhysX 配置下看到一张卡
在代码中,当我这样做时
整数开发计数;cudaGetDeviceCount(&devCount);
devCount 将只是 '1'
结果,我无法根据需要设置为使用特定的 GPU。
问题:
我想知道
如果这是因为显示器使用了第一张 GeForce 卡,因此所有 CUDA 计算都在第二张卡上进行,并且只知道第二张卡?
即使假设是正确的,有没有办法在 Windows 上规避这个问题,以便我仍然可以在两个 GPU 设备上进行计算?
cuda - CUDA多GPU添加功能
我按照下面的例子: multi-GPU basic usage
该代码正在总结:
回答为已接受的人发送添加函数,如下所示:
在上面的代码中,他NS[dev]
还添加了添加功能,但是发送问题帖子的人添加了如下功能:
上述函数的作用是什么 Ns[dev]
。因为当我 Ns[dev]
在下面的代码中删除时,像这样:
添加功能不起作用。我的意思是它不会增加值。
我如何 Ns[dev]
在这里使用添加功能?
opengl - 两张 GPU 卡,一张 Endabled Display,一张 Disabled Display:如何判断 OpenGL 在哪个 GPU 卡上运行?
所以我有两张 NVidia GPU 卡
卡 A:GeForce GTX 560 Ti - 有线连接到显示器 A (Dell P2210)
卡 B:GeForce 9800 GTX+ - 有线连接到显示器 B (ViewSonic VP20)
设置:带有支持 SLI 的 Intel Core i7 的华硕主板
在 NVidia 控制面板中,我禁用了监视器 A,因此我只有监视器 B 用于所有显示目的。
我运行了我的程序,它
在 OpenGL 中模拟 10000 个粒子并渲染它们(在监视器 B 中正确显示)
使用 cudaSetDevice() 在卡 A 上“定位”以运行计算密集型 CUDA 内核。
这个想法很简单——使用卡 B 进行所有 OpenGL 渲染工作,使用卡 A 进行所有 CUDA 内核计算工作。
我的问题是这样的:
使用 GPU-Z 监控两张卡后,我可以看到:
卡 A 的 GPU 负载按预期立即增加到 60% 以上。
然而,卡 B 的 GPU 负载仅增加了 2%。对于在 opengl 中以 3D 渲染的 10000 个粒子,我不确定这是否是我应该预料到的。
那么我如何才能确定 OpenGL 渲染是否确实使用了卡 B(其连接的监视器 B 是唯一启用的监视器),并且与卡 A 无关?
问题的扩展是:
- 有没有办法“强制”OpenGL 渲染逻辑使用特定的 GPU 卡?
cuda - 当分配的内存增加时,多 GPU 性能会下降
我在 Windows 7 x64、Visual C++ 10 的 GTX 690 GPU 和 4GB RAM 上测试了以下内容:
我编写了一个函数,它接收 2 个向量并添加到第 3 个向量中。该任务在 2 个 GPU 设备上被打破。我逐渐增加了向量大小来测试 GPU 性能。所需时间相对于向量大小线性增加,直到某个点,然后突然向上跳跃。当我禁用每个 GPU 内核时,所需时间与可用内存结束保持线性关系。我附上了一张图表,显示了所需时间与分配的内存。
您可以在此处查看速度图:速度比较图!
你能告诉我有什么问题吗?
最好的,拉敏
这是我的代码:
cuda - 多 GPU 内存分配的行为因分配顺序不同而不同
我已经在 Windows 7 x64、Visual C++ 10 和 4 GB RAM 的 GTX 690 GPU 上对此进行了测试:
我想在两台设备上分别分配 1.2 GB RAM。如果我从第一个设备然后第二个设备获取 ram,它会失败并返回内存分配错误,但是当我首先从设备 1 和设备 0 获取它时,它没有问题。谁能告诉我为什么?
此代码失败:
此代码有效:
最好的,拉敏
PS CudaCheck 函数只检查输出结果。
c++ - 在多个 Nvidia GPU 上使用以下代码进行分段错误
当配置为在多个卡上运行(我有一个 4 GPU 系统(NVIDIA Titan's))时,以下代码在一段时间后可靠地导致分段错误。这是我之前尝试解决的问题的一个最小示例(请参见此处:从 libcuda.so.1 调用的 __pthread_getspecific 中的分段错误)。
代码作用的描述:
首先,它在每张卡上分配大量内存(在前 N 张卡上,其中 N 为 1-4),其想法是尽可能给卡施加压力。然后它继续启动 16 个线程,每个线程在一张随机卡上运行几个内核。它会重复几次,每次随机选择一张卡片,然后退出。主线程等待所有 16 个线程完成,然后无限期地重复该过程,或者直到其中一个线程由于某种原因失败。
在主线程的几次(通常大约 20 次,但可能或多或少)迭代之后,它会导致分段错误。堆栈通常如下所示:
完整的源代码:
主.cpp:
cuda_test.cu:
生成文件:
我正在使用带有最新驱动程序(319.32)的 CUDA 5.5,运行 Ubuntu Linux(64 位)。
我的问题是: 代码中是否存在可能导致这种行为的错误?为什么我只使用一张卡时没有看到崩溃?只是坠机的可能性要小得多吗?(似乎使用更多卡会使崩溃比使用更少卡更快地出现) 奖励:是否有其他人使用此代码看到崩溃?
matlab - 在 GPU 上存储数据并在 MATLAB 中并行化卷积
我有一个严重依赖卷积的代码。它负责 80% 以上的时间运行时间。我想使用 gpu 让它更快,但有些事情我不完全理解,(我还没有权限为我自己测试这个)
如果我在类的构造函数(从句柄继承)中传递信息以存储在 GPU 内存中(使用
gpuArray
),它会保留在那里吗?将类作为参数传递给函数会有问题吗?对数据本身执行的操作都可以在 GPU 上完成(我猜无论数组存储在哪里,数组上的循环都可以正常工作)我有一个矩阵
size(MyMat)=[s, s, b, n]
,我想在其中存储 n 个[s, s, b]
同时计算的大小不同的矩阵(可以在 GPU 上完成的操作)我必须使用 parfor 吗?(我知道在大多数情况下开销使它成为一个坏主意)还是有更快的方法让 GPU 快速完成这项工作?在这种情况下我需要执行的唯一计算是卷积(但它不能全部在单个 convn 操作中完成)
谢谢!
opengl - OpenCL/OpenGL 与多个 GPU 的互操作
我在使用具有 OpenCL/OpenGL 互操作性的多个 GPU 时遇到问题。我正在尝试编写一个呈现密集计算结果的应用程序。最后它会运行一个优化问题,然后根据结果在屏幕上渲染一些东西。作为测试用例,我从本课程的粒子模拟示例代码开始:http ://web.engr.oregonstate.edu/~mjb/sig13/
示例代码创建 OpenGL 上下文,然后使用 cl_khr_gl_sharing 扩展创建共享状态的 OpenCL 上下文。当我使用单个 GPU 时,一切正常。创建上下文如下所示:
稍后,该示例使用 clCreateFromGLBuffer 创建共享 CL/GL 缓冲区。
现在,我想从两个 GPU 设备创建一个上下文:
我已经成功打开了这些设备,并且可以查询它们是否都支持 cl_khr_gl_sharing,并且都可以单独工作。但是,当尝试创建上述上下文时,我得到
这是 cl_khr_gl_sharing 扩展添加的错误代码。在扩展描述(上面链接)它说
CL_INVALID_OPERATION 如果为 CGL、EGL、GLX 或 WGL 之一指定了上下文或共享组对象,并且满足以下任何条件:
- OpenGL 实现不支持为其指定了上下文或共享组对象的窗口系统绑定 API。
- 多个属性 CL_CGL_SHAREGROUP_KHR、CL_EGL_DISPLAY_KHR、CL_GLX_DISPLAY_KHR 和 CL_WGL_HDC_KHR 设置为非默认值。
- 属性 CL_CGL_SHAREGROUP_KHR 和 CL_GL_CONTEXT_KHR 都设置为非默认值。
- 参数中指定的任何设备都不能支持共享 OpenGL 对象数据存储的 OpenCL 对象,如第 9.12 节所述。”
该描述似乎不完全适合我的任何情况。不能与多个 GPU 进行 OpenCL/OpenGL 互操作吗?还是我有异构硬件?我从枚举的设备中打印出一些参数。我刚刚使用了两个随机的 GPU,我可以拿到手。
请注意,如果我创建没有互操作部分的上下文(例如 props 数组如下所示),那么它会成功创建上下文,但显然不能与应用程序的 OpenGL 端共享缓冲区。