最近,当我在使用CUDA TOOLKIT 6.5中的cuSparse和cuBLAS进行稀疏矩阵乘法时,我发现在任何情况下,cuSPARSE都比cuBLAS慢得多!
在所有实验中,我使用了cuSparse中的cusparseScsrmm和cuBLAS中的cublasSgemm。在稀疏矩阵中,总元素的一半为零。我使用的GPU是NVIDIA Titan Black。此外,所有消耗时间都是通过NVIDIA提供的nvvp工具获得的。以下是一些结果:
实验A: 1. 稀疏矩阵大小:192x2400 2. 密集矩阵大小:2400x256 3. cusparse时间:1.4毫秒 4. cublas时间:0.21毫秒
实验B: 1. 稀疏矩阵大小:192x75 2. 密集矩阵大小:75x1024 3. cusparse时间:0.27毫秒 4. cublas时间:0.04毫秒
所以,看到上面列出的结果非常奇怪。因为cuSPARSE是专门设计用于处理稀疏矩阵操作的,它怎么可能比cuBLAS还要慢!?如果是这样,那么根本没有必要使用cuSPARSE。您能给我解释一下这个结果吗?此外,您能提出任何其他加速稀疏矩阵乘法的方法吗?
在所有实验中,我使用了cuSparse中的cusparseScsrmm和cuBLAS中的cublasSgemm。在稀疏矩阵中,总元素的一半为零。我使用的GPU是NVIDIA Titan Black。此外,所有消耗时间都是通过NVIDIA提供的nvvp工具获得的。以下是一些结果:
实验A: 1. 稀疏矩阵大小:192x2400 2. 密集矩阵大小:2400x256 3. cusparse时间:1.4毫秒 4. cublas时间:0.21毫秒
实验B: 1. 稀疏矩阵大小:192x75 2. 密集矩阵大小:75x1024 3. cusparse时间:0.27毫秒 4. cublas时间:0.04毫秒
所以,看到上面列出的结果非常奇怪。因为cuSPARSE是专门设计用于处理稀疏矩阵操作的,它怎么可能比cuBLAS还要慢!?如果是这样,那么根本没有必要使用cuSPARSE。您能给我解释一下这个结果吗?此外,您能提出任何其他加速稀疏矩阵乘法的方法吗?