mkl_spblas CSR格式稀疏矩阵乘积计算案例 生成实矩阵

program CSR_matrix_matrix_multiplication_full
    USE MKL_SPBLAS
    implicit none
 
    ! 定义CSR格式的矩阵
    integer, parameter :: nnz = 5
    integer, parameter :: N = 3
    real(kind=8), dimension(:), ALLOCATABLE :: B1, B2, B3
    integer, dimension(:), ALLOCATABLE :: rows_start1, rows_end1, rows_start2, rows_end2, rows_start3, rows_end3
    integer, dimension(:), ALLOCATABLE :: ja1, ja2, ja3
    integer, dimension(:), ALLOCATABLE :: ia1, ia2, ia3
    TYPE(SPARSE_MATRIX_T) :: A1, A2, A3, A4
    integer :: start1, start2, start3, start4, start5

    REAL(kind=8) ,DIMENSION(6) :: A5




    ! 初始化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)


    ! 1,0
    ! 0,2
    ! 0,3

    B3 = [1.0, 2.0, 3.0]
    rows_start3 = [1, 2, 3]
    rows_end3 = [2, 3, 4]
    ja3 = [1, 2, 2]
    ia3 = [1, 2, 3, 4] ! 每行起始的位置


    start4 = mkl_sparse_d_create_csr(A4, SPARSE_INDEX_BASE_ONE, 3, 2, rows_start3, rows_end3, ja3, B3)

    start5 = mkl_sparse_d_spmmd (SPARSE_OPERATION_NON_TRANSPOSE, A3, A4, SPARSE_LAYOUT_COLUMN_MAJOR, A5, 3)


    ! 显示变量的值
    print *, "start1:", start1
    print *, "start2:", start2
    print *, "start3:", start3
    print *, "start4:", start4
    print *, "start5:", start5
    print *, "A5:",A5
    ! 在这里显示 A 的内容
 
 end program CSR_matrix_matrix_multiplication_full

参照mkl_sparse_?_spmmd (intel.com)手册操作即可,需要注意A是sparse_matrix_t格式,须通过函数mkl_sparse_d_create_csr生成,详见手册mkl_sparse_?_create_csr (intel.com),start都是0表示计算成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值