我在使用JCuda的GTX1080 GPU上进行矩阵乘法,使用CUDA 8.0版本为0.8.0RC . 我将两个矩阵A和B以行主矢量形式加载到设备中,并从设备读取产品矩阵 . 但我发现我的设备内存耗尽了我的预期 . 例如,如果矩阵A的尺寸为100000 * 5000 = 5亿个条目= 2GB值的浮点值,则:
cuMemAlloc(MatrixA, 100000 * 5000 * Sizeof.FLOAT);
工作良好 . 但是,如果我将数量或行从100000增加到110000,我会在此调用上得到以下错误(这是在矩阵B和C的内存分配之前进行的,因此这些不是问题的一部分):
Exception in thread "main" jcuda.CudaException: CUDA_ERROR_OUT_OF_MEMORY
at jcuda.driver.JCudaDriver.checkResult(JCudaDriver.java:344)
at jcuda.driver.JCudaDriver.cuMemAlloc(JCudaDriver.java:3714)
at JCudaMatrixMultiply.main(JCudaMatrixMultiply.java:84) (my code)
问题是在设备上分配这个大小的矩阵应该只需要大约2.2GB,而GTX1080有8GB的内存,所以我不明白为什么我的内存不足 . 有没有人对此有任何想法?确实,我正在使用JCuda 0.8.0RC和CUDA 8的发布版本,但我尝试下载RC版本的CUDA 8(8.0.27)以与JCuda 0.8.0RC一起使用,并且在使用它时遇到了一些问题 . 但是,如果版本兼容性可能是问题,我可以再试一次 .
当然,100000 * 5000的矩阵非常大,我不需要在我的神经网络项目上使用更大的矩阵一段时间,但我想确信我可以在这个新的上使用所有8GB的内存卡 . 谢谢你的帮助 .