【发布时间】:2012-05-04 15:11:40
【问题描述】:
通过 cuCtxCreate 创建 cuda 上下文时出现 CUDA_ERROR_INVALID_DEVICE 错误。
我的代码正在创建一个上下文并从中获取设备并创建一个新上下文。
知道为什么我不能创建另一个上下文吗?
#include<cuda.h>
#include<assert.h>
int main(){
cuInit(0);
CUcontext ctx;
CUdevice device;
CUdevice dev2;
CUcontext c2;
assert(cuDeviceGet(&device,0) == 0 );
assert(cuCtxCreate(&ctx, 0, device) == 0);
assert(cuCtxGetDevice(&dev2) == 0);
assert(cuCtxCreate(&c2,0,dev2) == 0);
return 0;
}
【问题讨论】:
-
我很确定
device==dev2在这里,因此您有效地从单个主机线程为单个设备创建两个上下文。为什么要这样做? -
2 个线程可以在同一设备上创建不同的上下文。那么为什么不一个线程创建两个不同的上下文呢?我这样做是为了建立一个性能分析 f/w。我想创建一个上下文,性能分析事件在该上下文中存在并且不会被破坏上下文的用户代码破坏。
-
您确认设备没有处于独占模式吗?
-
是的,就是这样。它可以在未处于独占模式的设备上找到。
标签: cuda cuda-context