首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cuSparse中的有效矩阵向量乘法

cuSparse中的有效矩阵向量乘法
EN

Stack Overflow用户
提问于 2011-11-02 08:59:46
回答 1查看 1.3K关注 0票数 1

我使用jCUSPARSE (cuSparse库包装器)进行矩阵向量乘法,并且函数有问题。

代码语言:javascript
复制
cusparseDcsrmv(handle, cusparseOperation.CUSPARSE_OPERATION_NON_TRANSPOSE, matrixSize, matrixSize, alpha, descra, d_csrValA, d_rowPtrA, d_colIndA, x, beta, y);

如果我使用描述符初始化

代码语言:javascript
复制
cusparseSetMatType(descra, cusparseMatrixType.CUSPARSE_MATRIX_TYPE_GENERAL); 

它的工作速度比我用的快5-10倍。

代码语言:javascript
复制
cusparseSetMatType(descra, cusparseMatrixType.CUSPARSE_MATRIX_TYPE_SYMMETRIC);

我在一个小对称矩阵5x5上测试了它,一般的工作速度是对称矩阵的4倍

我在一个对称矩阵10000x10000上测试了它,一般的工作速度是对称矩阵的10倍

EN

回答 1

Stack Overflow用户

发布于 2012-04-08 00:32:59

似乎OP把这个问题带下了一个侧通道,然后got an official answer from

我向CUDA图书馆团队进行了检查,他们提供了以下解释:

对于非对称稀疏矩阵-向量乘法,进行了explicitly).

  • For (
  1. )运算(A存储为y = A*x,对称矩阵仅存储在矩阵A的下(或上)三角形部分)。我们可以编写y = A*x = (L+D)*x + L^{T}*x,其中A = (L+D) + L^{T}L是矩阵的严格下三角部分,D是对角线。因为只有L+D被存储,所以我们需要使用矩阵转置(L^{T})来计算得到的向量y。此操作使用atomics,因为矩阵行需要被解释为列,而且当多个线程正在遍历它们时,不同的线程可能会在生成的向量y中向相同的内存位置添加值。这就是矩阵转置和对称矩阵的矩阵向量乘法比非对称矩阵慢的原因。

加快计算速度的最佳方法(除非受到内存的限制)是将对称矩阵转换为非对称矩阵,并在其上调用适当的CUSPARSE例程。

简而言之:这是共享内存的瓶颈。不奇怪,但很有趣。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7977768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档