program CSR_matrix_vector_multiplication
USE MKL_SPBLAS
implicit none
! 定义CSR格式的矩阵
integer, parameter :: nnz = 5
integer, parameter :: N = 3
real(kind=8), dimension(nnz) :: B
integer, dimension(3) :: rows_start, rows_end
integer, dimension(nnz) :: ja
integer, dimension(N + 1) :: ia
real(kind=8), dimension(N) :: x, y
integer :: start1, start2
TYPE(SPARSE_MATRIX_T) :: A
TYPE(MATRIX_DESCR) :: descr
descr%TYPE = SPARSE_MATRIX_TYPE_GENERAL ! 设置矩阵类型为一般类型
descr%MODE = SPARSE_FILL_MODE_UPPER ! 设置为上三角矩阵模式
descr%DIAG = SPARSE_DIAG_NON_UNIT ! 设置为非单位对角线
! 定义向量
x = [1.0, 2.0, 3.0]
! 初始化CSR格式的矩阵
B = [1.0, 2.0, 3.0, 4.0, 5.0]
rows_start = [1, 2, 4]
rows_end = [2, 4, 6]
ja = [1, 2, 3, 1, 2]
ia = [1, 2, 4, 6] ! 每行起始的位置
! 1,0,0
! 0,2,3
! 4,5,0
start1 = mkl_sparse_d_create_csr(A, SPARSE_INDEX_BASE_ONE, 3, 3, rows_start, rows_end, ja, B)
start2 = mkl_sparse_d_mv(SPARSE_OPERATION_NON_TRANSPOSE, 1d0, A, descr, x, 0d0, y)
! 显示变量的值
print *, "start1:", start1
print *, "start2:", start2
print *, "A%ptr"
! 在这里显示 A 的内容
print *, "y:", y
end program CSR_matrix_vector_multiplication
参照mkl_sparse_?_mv (intel.com)手册操作即可,需要注意A是sparse_matrix_t格式,须通过函数mkl_sparse_d_create_csr生成,详见手册mkl_sparse_?_create_csr (intel.com)