Cuda 中的多个 GPU - 以前可以使用代码,但现在不再使用
Multiple GPUs in Cuda - Working code before, but not any more
我最近在Cuda应用程序中运行多个NVidia GPU时遇到了问题。附加的代码能够在Visual Studio 2013和2015(Windows 7,Cuda 9.2,Nvidia驱动程序398.26,1xGTX1080和1xGTX960(的系统上一致地重现该问题。我正在为我的卡(5.2 和 6.1(构建正确的计算功能。
具体来说,在第一个 GPU 初始化后,我无法在第二个 GPU 上获得任何函数调用来工作。错误代码始终为"CudaErrorMemoryAllocation"。它在 Nvidia 分析器以及调试和发布版本中都失败。我可以按任一顺序在 GPU 上初始化并重现问题。
在尝试扩展我当前的应用程序时出现了这个问题,该应用程序是图像处理算法的大型管道。此管道可以有多个独立的实例,并且由于内存限制,将需要多个卡。我对这个问题感到困惑的主要原因是我以前有过它的工作 - 我几年前运行了一个视觉配置文件会话,它显示我的相同卡片的行为符合预期。我知道的唯一区别是它在 Cuda 8.0 中。
有什么想法吗?
#include "cuda_runtime.h"
#include "cuda.h"
#include <thread>
#include <conio.h>
#include <iostream>
// Function for each thread to run
void gpuThread(int gpuIdx, bool* result)
{
cudaSetDevice(gpuIdx); // Set gpu index
// Create an int array on CPU
int* hostMemory = new int[1000000];
for (int i = 0; i < 1000000; i++)
hostMemory[i] = i;
// Allocate and copy to GPU
int* gpuMemory;
cudaMalloc(&gpuMemory, 1000000 * sizeof(int));
cudaMemcpy(gpuMemory, hostMemory, 1000000 * sizeof(int), cudaMemcpyHostToDevice);
// Synchronize and check errors
cudaDeviceSynchronize();
cudaError_t error = cudaGetLastError();
if (error != CUDA_SUCCESS)
{
result[0] = false;
return;
}
result[0] = true;
}
int main()
{
bool result1 = false;
bool result2 = false;
std::thread t1(gpuThread, 0, &result1);
std::thread t2(gpuThread, 1, &result2);
t1.join(); // Wait for both threads to complete
t2.join();
if (!result1 || !result2) // Verify our threads returned success
std::cout << "Failedn";
else
std::cout << "Passedn";
std::cout << "Press a key to exit!n";
_getch();
return 0;
}
经过一天的卸载和重新安装程序,这似乎是 398.26 驱动程序的问题。较新版本 399.07 按预期工作。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- Cuda 中的多个 GPU - 以前可以使用代码,但现在不再使用
- QTimer timeout()方法不再在代码重组后启动
- 我的代码在使用GCC-MinGW时不再编译
- 考虑到今天的处理器,代码膨胀是否不再重要?
- 在C++中不再需要清理代码了吗
- 2010 版 MFC 代码在 2013 上不再有效,有什么建议吗?
- 曾经有效的代码不再有效?视觉C++ 2010.
- 在R中编译c++代码不再工作了
- Matlab Mex文件构建:代码更改不再影响mex文件