我创建了 2 个 cuda 上下文“ctx1”和“ctx2”并将当前上下文设置为“ctx1”并分配 8 字节的内存并将当前上下文切换到 ctx2。然后释放 ctx1 中的内存分配。为什么会返回CUDA_SUCCESS
?
而当我销毁 ctx1 然后释放内存时,会导致CUDA_INVALID_VALUE
. 在我看来,每个上下文都包含其独特的资源,并且不允许其他上下文访问。有人可以解释这种行为吗?
int main() {
using std::cout;
CUresult answer;
CUdeviceptr dptr = 4;
int device_enum = 0;
CUcontext ctx1,ctx2;
cuInit(0);
CUdevice able_dev = 0;
CUresult create_ctx1 = cuCtxCreate(&ctx1,CU_CTX_SCHED_AUTO,able_dev);
CUresult create_ctx2 = cuCtxCreate(&ctx2,CU_CTX_SCHED_AUTO,able_dev);
assert(cuCtxSetCurrent(ctx1) == CUDA_SUCCESS);
answer = cuMemAlloc(&dptr,8);
cout << "maloc result1 = " << answer << '\n';
assert(cuCtxSetCurrent(ctx2) == CUDA_SUCCESS);
cout << "free in ctx2 result = " << cuMemFree(dptr) << '\n';
}