cudaMalloc へのすべての呼び出しが失敗し、メモリ不足エラーが発生するという単純な問題に直面しています。割り当てているのは 1 バイトだけです。
cuda デバイスが利用可能であり、利用可能なメモリも大量にあります (bot は対応する呼び出しでチェックされます)。
何が問題なのですか?
cudaMalloc へのすべての呼び出しが失敗し、メモリ不足エラーが発生するという単純な問題に直面しています。割り当てているのは 1 バイトだけです。
cuda デバイスが利用可能であり、利用可能なメモリも大量にあります (bot は対応する呼び出しでチェックされます)。
何が問題なのですか?
みなさん、ありがとうございました。
問題は実際にはcudaMalloc自体にあるのではなく、失敗したように見えるcudaの初期化に起因する実際の問題に影を落としました。
cudaへの最初の呼び出しは別のスレッドで行われたため、使用可能なGLContextがなく、失敗につながりました。コンテキストの初期化後に、メインスレッドのダミーmallocによってcudaを初期化したことを確認する必要がありました。
コード自体の先頭で cudaSetDevice()、cudaDeviceSynchronize()、cudaThreadSynchronize() の順に呼び出してみてください。
デバイスが 1 つしかない場合は cudaSetDevice(0)。デフォルトでは、CUDA ランタイムはデバイス 0 を初期化します。
cudaSetDevice(0);
cudaDeviceSynchronize();
cudaThreadSynchronize();
あなたの観察に返信してください。それでも失敗する場合は、OS、アーキテクチャ、CUDA SDK バージョン、CUDA ドライバ バージョンを指定してください。可能であれば、失敗しているコード/コード スニペットを提供してください。