Windows 7 x64、Visual C++ 10 の 4 GB RAM を搭載した GTX 690 GPU でこれをテストしました。
2 つのデバイスのそれぞれに 1.2 GB の RAM を割り当てたいと考えています。最初のデバイスから RAM を取得し、次に 2 番目のデバイスから RAM を取得すると、失敗してメモリ割り当てエラーが返されますが、最初にデバイス 1 から取得してからデバイス 0 から取得すると、問題はありません。誰でも理由を教えてもらえますか?
このコードは失敗します:
void * pM1 , * pM2 ;
CudaCheck( cudaSetDevice( 0 ) ) ;
CudaCheck( cudaMalloc( & pM1 , 1200000000 ) ) ;
CudaCheck( cudaSetDevice( 1 ) ) ;
CudaCheck( cudaMalloc( & pM2 , 1200000000 ) ) ;
このコードは動作します:
void * pM1 , * pM2 ;
CudaCheck( cudaSetDevice( 1 ) ) ;
CudaCheck( cudaMalloc( & pM1 , 1200000000 ) ) ;
CudaCheck( cudaSetDevice( 0 ) ) ;
CudaCheck( cudaMalloc( & pM2 , 1200000000 ) ) ;
ベスト、ラミン
PS CudaCheck 関数は、出力結果をチェックするだけです。