SPMVM Function
Multiplies a sparse matrix and a dense vector.
enabled.
Usage
w = SPMVM( n, m, r, c, v )
Input Parameters
n—Number of rows in the matrix.
m—Double-precision vector of nonzero elements in the matrix, stored in row-major order. Each row of the matrix must have at least one non-zero entry.
r—Long-integer (n+1)-element vector of row pointers. The nonzero elements in the ith row of the matrix consist of m(r(i)) through m(r(i+1)–1).
c—Long-integer vector of column numbers. Each matrix element m(j) is in column c(j).
v—Double-precision dense vector to be multiplied by the matrix.
Returned Value
w—Double-precision dense vector which is the result of the multiplication.
Keywords
None.
Discussion
Sparse-matrix dense-vector multiplications represent nearly all the computational cost associated with iterative solvers for large sparse linear systems. Since these systems are generally quite large, double-precision is usually required for reasonable accuracy, so for this reason and to eliminate repeated data-type conversions in iterative processes, SPMVM requires double-precision for floating-point input and LONGs for integer input. SPMVM is multithreaded and uses a computationally efficient compressed-sparse-row (CSR) storage format.
Example
; Create a small dense matrix to model a sparse matrix.
a = [[0,7,0,0],[8,0,3,0],[0,2,0,5],[1,0,0,0],[0,6,0,4]]
PM, a
; PV-WAVE prints:
; 0 8 0 1 0
; 7 0 2 0 6
; 0 3 0 0 0
; 0 0 5 0 4
; number of rows
n = 4
; nonzeros in row-major order
m = DOUBLE([8, 1, 7, 2, 6, 3, 5, 4])
; row pointers
r = LONG([0, 2, 5, 6, 8])
; column numbers
c = LONG([1, 3, 0, 2, 4, 1, 2, 4])
; Create a dense vector to complete the data for the example.
v = DOUBLE([5, 4, 3, 2, 1])
; Now compute and print the result.
w = SPMVM(n, m, r, c, v)
PM, w
; PV-WAVE prints:
; 34.000000
; 47.000000
; 12.000000
; 19.000000