在调用operation not supported
时,在CUDA 6.0中试用托管内存会给我cudaMallocManaged()
。
#include "cuda_runtime.h"
#include <stdio.h>
#define CHECK(r) {_check((r), __LINE__);}
void _check(cudaError_t r, int line) {
if (r != cudaSuccess) {
printf("CUDA error on line %d: %s\n", line, cudaGetErrorString(r), line);
exit(0);
}
}
int main()
{
int *c;
CHECK(cudaMallocManaged(&c, sizeof(int)));
*c = 0;
return 0;
}
GeForce GTX 750 Ti(Maxwell),使用compute_50,sm_50与CUDA 6.0编译。 Windows 7 64位。使用驱动程序335.23(whql)和337.50(beta)进行测试。 Visual Studio 2012.尝试过32位调试和发布版本。
C:\ RD \项目\ CPP \ test_cuda6 \ test_cuda6&gt;“中C:\程序 Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v6.0 \ bin \ nvcc.exe“ -gencode = arch = compute_50,code = \“sm_50,compute_50 \” - use-local-env --cl-version 2012 -ccbin“C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ bin” -I \ C \ common \ inc -I“C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v6.0 \ include”-I“C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v6.0 \包括“--keep-dir Release -maxrregcount = 0 --machine 32 --compile -cudart static -DWIN32 -DNDEBUG -D_CONSOLE -D_MBCS -Xcompiler”/ EHsc / W3 / nologo / O2 / Zi / MD“-o Release \ kernel.cu.obj “C:\ RD \项目\ CPP \ test_cuda6 \ test_cuda6 \ kernel.cu”
如果我将cudaMallocManaged()
替换为cudaMalloc()
,则程序会正常运行。
有关如何让cudaMallocManaged()
工作的任何想法?
答案 0 :(得分:11)
尝试了32位调试和发布版本。
使用64位调试或发布版本。
J.1.4。系统要求
统一内存有三个基本要求:
•具有SM架构3.0或更高版本的GPU(Kepler类或更新版)
•64位主机应用程序和操作系统,Android上除外
•Linux或Windows
64位主机应用程序意味着您无法编译32位调试或发布版本。