1

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';
}
4

1 に答える 1