每当我致电cudaMemPrefetchAsync()
时,都会返回错误代码cudaErrorInvalidDevice
。我确信我通过了正确的设备ID(我在id == 0
下的笔记本电脑中只有一个支持CUDA的GPU)。
我认为下面发布的代码示例没有错误,但在第52
行(致cudaMemPrefetchAsync()
)我一直收到此错误。
(我不知道其他任何事情)
操作系统:Microsoft Windows 8.1 x64主页。
IDE: Visual Studio 2015
CUDA工具包: 8.0.61
NVIDIA GPU: GeForce GTX 960M
NVIDIA GPU驱动程序:版本381.65(最新)
计算能力: 5.0(麦克斯韦尔)
支持统一内存支持:。
英特尔集成gpu:英特尔高清显卡4600
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// TEST AREA:
// -- INCLUDE:
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Cuda Libs: ( Device Side ):
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
// Std C++ Libs:
#include <iostream>
#include <iomanip>
///////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// TEST AREA:
// -- NAMESPACE:
/////////////////////////////////////////////////////////////////////////////////////////////////////////
using namespace std;
///////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// TEST AREA:
// -- START POINT:
/////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() {
// Set cuda Device:
if (cudaSetDevice(0) != cudaSuccess)
cout << "ERROR: cudaSetDevice(***)" << endl;
// Array:
unsigned int size = 1000;
double * d_ptr = nullptr;
// Allocate unified memory:
if (cudaMallocManaged(&d_ptr, size * sizeof(double), cudaMemAttachGlobal) != cudaSuccess)
cout << "ERROR: cudaMallocManaged(***)" << endl;
if (cudaDeviceSynchronize() != cudaSuccess)
cout << "ERROR: cudaDeviceSynchronize(***)" << endl;
// Prefetch:
if(cudaMemPrefetchAsync(d_ptr, size * sizeof(double), 0) != cudaSuccess)
cout << "ERROR: cudaMemPrefetchAsync(***)" << endl;
// Exit:
getchar();
}
///////////