cusparseMatrixType_t:
矩阵的格式有以下几类:
CUSPARSE_MATRIX_TYPE_GENERAL 普通矩阵
CUSPARSE_MATRIX_TYPE_SYMMETRIC 对称矩阵
CUSPARSE_MATRIX_TYPE_HERMITIAN 埃尔米特矩阵
CUSPARSE_MATRIX_TYPE_TRIANGULAR 三角矩阵
此类型指示存储在稀疏存储中的矩阵的类型。注意,对于对称矩阵、厄米矩阵和三角矩阵,假设只存储它们的上下部分。
矩阵类型(MatrixType)和填充模式的基本思想是保持对称/厄米矩阵的最小存储量,并利用SpMV(Sparse Matrix Vector multiplication)的对称性。
当矩阵A是对称矩阵并且只存储下三角部分时,求解y=A*x需要两步:①求解y=(L+D)*x;②求解y=L^T*x + y。鉴于计算y=L^T*x 比计算y=L*x慢十倍,所以对称属性不会显示任何性能增加。因此,我们最好将对称矩阵推广成普通格式的矩阵并求直接求解y=A*x,此时矩阵的格式为CUSPARSE_MATRIX_TYPE_GENERAL。
一般而言,SpMV、预条件算子(如不完全Cholesky 分解或者不完全LU分解)以及三角矩阵求解都是通过迭代算法(如PCG和GMRES)计算的。如果总是使用普通格式的矩阵(而非对称格式),那么预条件算子中无需支持除普通格式之外的矩阵格式。因此,在新的程序中,[bsr|csr]sv2 (triangular solver)、 [bsr|csr]ilu02 (incomplete LU) 和[bsr|csr]ic02 (incomplete Cholesky)仅支持的矩阵格式为CUSPARSE_MATRIX_TYPE_GENERAL