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