cuCtxCreate失败,CUDA\u错误\u无效\u设备
通过cuCtxCreate创建CUDA上下文时,我收到CUDA\u错误\u无效\u设备错误 我的代码是创建一个上下文并从中获取设备,然后创建一个新的上下文 知道我为什么不能创建另一个上下文吗cuCtxCreate失败,CUDA\u错误\u无效\u设备,cuda,cuda-context,Cuda,Cuda Context,通过cuCtxCreate创建CUDA上下文时,我收到CUDA\u错误\u无效\u设备错误 我的代码是创建一个上下文并从中获取设备,然后创建一个新的上下文 知道我为什么不能创建另一个上下文吗 #include<cuda.h> #include<assert.h> int main(){ cuInit(0); CUcontext ctx; CUdevice device; CUdevice dev2;
#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;
}
#包括
#包括
int main(){
cuInit(0);
CUcontext ctx;
CU器件;
cuv2;
c上下文c2;
断言(cuDeviceGet(&device,0)==0);
断言(cuCtxCreate(&ctx,0,设备)==0);
断言(cuCtxGetDevice(&dev2)==0);
断言(cuCtxCreate(&c2,0,dev2)==0);
返回0;
}
问题是用户的设备处于独占模式,这禁止在单个设备上创建两个上下文。问题是用户的设备处于独占模式,这禁止在单个设备上创建两个上下文。我很确定设备==dev2
这里,因此,您可以有效地从单个主机线程为单个设备创建两个上下文。为什么要这样做?两个线程可以在同一设备上创建不同的上下文。那么为什么一个线程不能创建两个不同的上下文呢?我这样做是为了建立一个性能分析f/w。我想创建一个性能分析事件所在的上下文,并且不会因为用户代码破坏上下文而被破坏。您是否已验证设备是否处于独占模式?是的,确实如此。它在一个非独占模式的设备上运行。我很确定这里的device==dev2
,因此您实际上是从一个主机线程为一个设备创建了两个上下文。为什么要这样做?两个线程可以在同一设备上创建不同的上下文。那么为什么一个线程不能创建两个不同的上下文呢?我这样做是为了建立一个性能分析f/w。我想创建一个性能分析事件所在的上下文,并且不会因为用户代码破坏上下文而被破坏。您是否已验证设备是否处于独占模式?是的,确实如此。它在非独占模式的设备上工作。