program CSR_matrix_matrix_multiplication
USE MKL_SPBLAS
implicit none
! 定义CSR格式的矩阵
integer, parameter :: nnz = 5
integer, parameter :: N = 3
real(kind=8), dimension(nnz) :: B1, B2
integer, dimension(3) :: rows_start1, rows_end1, rows_start2, rows_end2
integer, dimension(nnz) :: ja1, ja2
integer, dimension(N + 1) :: ia1, ia2
TYPE(SPARSE_MATRIX_T) :: A1, A2, A3
integer :: start1, start2, start3
! 初始化CSR格式的矩阵
B1 = [1.0, 2.0, 3.0, 4.0, 5.0]
rows_start1 = [1, 2, 4]
rows_end1 = [2, 4, 6]
ja1 = [1, 2, 3, 1, 2]
ia1 = [1, 2, 4, 6] ! 每行起始的位置
! 1,0,0
! 0,2,3
! 4,5,0
B2 = [2.0, 3.0, 4.0, 5.0, 1.0]
rows_start2 = [1, 2, 4]
rows_end2 = [2, 4, 6]
ja2 = [1, 2, 3, 1, 2]
ia2 = [1, 2, 4, 6] ! 每行起始的位置
! 2,0,0
! 0,3,4
! 5,1,0
start1 = mkl_sparse_d_create_csr(A1, SPARSE_INDEX_BASE_ONE, 3, 3, rows_start1, rows_end1, ja1, B1)
start2 = mkl_sparse_d_create_csr(A2, SPARSE_INDEX_BASE_ONE, 3, 3, rows_start2, rows_end2, ja2, B2)
start3 = mkl_sparse_spmm(SPARSE_OPERATION_NON_TRANSPOSE, A1, A2, A3)
! 显示变量的值
print *, "start1:", start1
print *, "start2:", start2
print *, "start3:", start3
print *, "A:"
! 在这里显示 A 的内容
end program CSR_matrix_matrix_multiplication
参照mkl_sparse_spmm (intel.com)手册操作即可,需要注意A是sparse_matrix_t格式,须通过函数mkl_sparse_d_create_csr生成,详见手册mkl_sparse_?_create_csr (intel.com),start都是0表示计算成功