我已经在 Windows 7 x64、Visual C++ 10 和 4 GB RAM 的 GTX 690 GPU 上对此进行了测试:
我想在两台设备上分别分配 1.2 GB RAM。如果我从第一个设备然后第二个设备获取 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 函数只检查输出结果。