日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MKL学习——矩阵矩阵操作

發布時間:2023/12/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MKL学习——矩阵矩阵操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

前面介紹了BLAS Level 1中向量-向量操作,以及BLAS Level 2中矩陣-向量的操作,就剩下這一篇的BLAS Level 3中的矩陣-矩陣的操作了。對稀疏矩陣的操作以后等要用再看看。對基本的矩陣和向量運算的函數有所了解以后,就進行常用參數分析,以及實現了。

所有函數概覽

函數名稱缺失部分描述
cblas_?gemms,d,c,z一般矩陣的矩陣-矩陣乘法
cblas_?hemmc,z某個輸入矩陣是Hermitian,然后計算矩陣-矩陣乘法
cblas_?herkc,zHermitian的k階更新
cblas_?herk2c,zHermitian的2k階更新
cblas_?symms,d,c,z某個輸入矩陣是對稱的,然后計算矩陣-矩陣乘法
cblas_?syrks,d,c,z對稱矩陣的k階更新
cblas_?syr2ks,d,c,z對稱矩陣的2k階更新
cblas_?trmms,d,c,z某個輸入矩陣是三角的,就是你矩陣-矩陣的乘法
cblas_?trsms,d,c,z解三角矩陣方程

矩陣運算

cblas_?gemm

  • 作用 : 一般矩陣的矩陣-矩陣乘法

  • 定義函數

    void cblas_sgemm (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE transa, const CBLAS_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const float alpha, const float *a, const MKL_INT lda, const float *b, const MKL_INT ldb, const float beta, float *c, const MKL_INT ldc);void cblas_dgemm (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE transa, const CBLAS_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const double alpha, const double *a, const MKL_INT lda, const double *b, const MKL_INT ldb, const double beta, double *c, const MKL_INT ldc);void cblas_cgemm (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE transa, const CBLAS_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const void *beta, void *c, const MKL_INT ldc);void cblas_zgemm (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE transa, const CBLAS_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const void *beta, void *c, const MKL_INT ldc);
  • 運算

    C:=α?op(A)?op(B)+β?C
    其中op(x)可以是op(x)=x或者op(x)=xT或者op(x)=XH

    αβ是標量

    A,B,C是矩陣: op(A)是一個m?k的矩陣,op(B)k?n的矩陣,C是一個m?n的矩陣

  • 輸入參數

    Layout: 指定矩陣是行優先(CblasRowMajor)還是列優先(CblasColMajor)

    transa: 指定對矩陣的操作op(A),如果transa=CblasNoTrans那么op(A)=A;如果transa=CblasTrans那么op(A)=AT;如果transa=CblasConjTrans那么op(A)=AH

    transb: 同上

    m: 矩陣op(A)C的行數

    n: 矩陣op(B)和C的列數

    k: 矩陣op(A)op(B)的列數

    alpha: 標量

    a:

transa=CblasNoTranstransa=CblasTrans或者transa=CblasConjTrans
Layout=CblasColMajor矩陣大小lda?k
Layout=CblasRowMajor矩陣大小lda?m

lda : 引導維度

transa=CblasNoTranstransa=CblasTrans或者transa=CblasConjTrans
Layout=CblasColMajorlda至少為max(1,m)
Layout=CblasRowMajorlda至少為max(1,k)

b:

transa=CblasNoTranstransa=CblasTrans或者transa=CblasConjTrans
Layout=CblasColMajor矩陣大小ldb?n
Layout=CblasRowMajor矩陣大小ldb?k

ldb:

transa=CblasNoTranstransa=CblasTrans或者transa=CblasConjTrans
Layout=CblasColMajorldb至少為max(1,k)
Layout=CblasRowMajorldb至少為max(1,n)

beta: 標量

c: 當Layout=CblasColMajor時候,數組大小為lda?n;當Layout=CblasRowMajor時候,數組大小為lda?m

ldc:當Layout=CblasColMajor的時候,ldc必須至少為max(1,m);當Layout=CblasRowMajor的時候,ldc必須至少為max(1,n)

  • 輸出參數: 將計算得到的矩陣寫入到c

cblas_?hemm

  • 作用 : 當一個輸入矩陣為Hermitian時,計算矩陣-矩陣的乘法

  • 定義函數

    void cblas_chemm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const void *beta, void *c, const MKL_INT ldc);void cblas_zhemm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const void *beta, void *c, const MKL_INT ldc);
  • 運算

    C:=α?A?B+β?CC:=α?B?A+β?C
    其中,α,β是標量,A是Hermitian矩陣,B,Cm?n的矩陣

cblas_?herk

  • 作用: Hermitian的k階更新

  • 定義函數:

    void cblas_cherk (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const float alpha, const void *a, const MKL_INT lda, const float beta, void *c, const MKL_INT ldc);void cblas_zherk (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const double alpha, const void *a, const MKL_INT lda, const double beta, void *c, const MKL_INT ldc);
  • 運算

    C:=α?A?AH+β?CC:=α?AH?A+β?C
    其中,α,β是標量,Cn?n的Hermitian矩陣,第一個式子的An?k矩陣,第二個式子的Ak?n的矩陣

cblas_?herk2

  • 作用: Hermitian矩陣的2階更新

  • 定義函數

    void cblas_cher2k (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const float beta, void *c, const MKL_INT ldc);void cblas_zher2k (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const double beta, void *c, const MKL_INT ldc);
  • 運算

    C:=α?A?BH+conjg(α)?B?AH+β?CC:=α?AH?B+conjg(α)?BH?A+β?C
    其中,α,β是標量,Cn?n是Hermitian矩陣,第一個式子中A,Bn?k矩陣,第二個式子中是k?n的矩陣

cblas_?symm

  • 作用: 某個輸入是對稱矩陣時候,計算矩陣-矩陣的乘法

  • 定義函數

    void cblas_ssymm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const MKL_INT m, const MKL_INT n, const float alpha, const float *a, const MKL_INT lda, const float *b, const MKL_INT ldb, const float beta, float *c, const MKL_INT ldc);void cblas_dsymm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const MKL_INT m, const MKL_INT n, const double alpha, const double *a, const MKL_INT lda, const double *b, const MKL_INT ldb, const double beta, double *c, const MKL_INT ldc);void cblas_csymm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const void *beta, void *c, const MKL_INT ldc);void cblas_zsymm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const void *beta, void *c, const MKL_INT ldc);
  • 運算

    C:=α?A?b+β?CC:=α?B?A+β?C
    其中α,β是標量,A是對稱陣,B,Cm?n的矩陣

cblas_?syrk

  • 作用: 對稱矩陣的k階更新

  • 定義函數

    void cblas_ssyrk (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const float alpha, const float *a, const MKL_INT lda, const float beta, float *c, const MKL_INT ldc);void cblas_dsyrk (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const double alpha, const double *a, const MKL_INT lda, const double beta, double *c, const MKL_INT ldc);void cblas_csyrk (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *beta, void *c, const MKL_INT ldc);void cblas_zsyrk (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *beta, void *c, const MKL_INT ldc)
  • 運算

    C:=α?A?A+β?CC:=α?A?A+β?C
    其中,α,β是標量,Cn?n的對稱陣,第一個式子中An?n的矩陣,第二個式子中Ak?n的矩陣

cblas_?syr2k

  • 作用: 對稱陣的二階更新

  • 定義函數

    void cblas_ssyr2k (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const float alpha, const float *a, const MKL_INT lda, const float *b, const MKL_INT ldb, const float beta, float *c, const MKL_INT ldc);void cblas_dsyr2k (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const double alpha, const double *a, const MKL_INT lda, const double *b, const MKL_INT ldb, const double beta, double *c, const MKL_INT ldc);void cblas_csyr2k (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const void *beta, void *c, const MKL_INT ldc);void cblas_zsyr2k (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *b, const MKL_INT ldb, const void *beta, void *c, const MKL_INT ldc);
  • 運算

    C:=α?A?B+α?B?A+β?CC:=α?A?B+α?B?A+β?C
    其中,α,β是標量,Cn?n的對稱陣,第一個式子中A,Bn?k的矩陣,第二個式子中A,Bk?n的矩陣

cblas_?trmm

  • 作用: 某個輸入矩陣為三角陣的時候,計算矩陣-矩陣的乘法

  • 定義函數

    void cblas_strmm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE transa, const CBLAS_DIAG diag, const MKL_INT m, const MKL_INT n, const float alpha, const float *a, const MKL_INT lda, float *b, const MKL_INT ldb);void cblas_dtrmm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE transa, const CBLAS_DIAG diag, const MKL_INT m, const MKL_INT n, const double alpha, const double *a, const MKL_INT lda, double *b, const MKL_INT ldb);void cblas_ctrmm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE transa, const CBLAS_DIAG diag, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, void *b, const MKL_INT ldb);void cblas_ztrmm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE transa, const CBLAS_DIAG diag, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, void *b, const MKL_INT ldb);
  • 運算

    B:=α?op(A)?BB:=α?B?op(A)
    其中,α是標量,Bm?n的矩陣,op(A)=A或者op(A)=A或者op(A)=conjg(A)

cblas_?trsm

  • 作用: 解三角矩陣方程

  • 定義函數

    void cblas_strsm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE transa, const CBLAS_DIAG diag, const MKL_INT m, const MKL_INT n, const float alpha, const float *a, const MKL_INT lda, float *b, const MKL_INT ldb);void cblas_dtrsm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE transa, const CBLAS_DIAG diag, const MKL_INT m, const MKL_INT n, const double alpha, const double *a, const MKL_INT lda, double *b, const MKL_INT ldb);void cblas_ctrsm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE transa, const CBLAS_DIAG diag, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, void *b, const MKL_INT ldb);void cblas_ztrsm (const CBLAS_LAYOUT Layout, const CBLAS_SIDE side, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE transa, const CBLAS_DIAG diag, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, void *b, const MKL_INT ldb);
  • 運算

    op(A)?X=α?BX?op(A)=alpha?B
    其中,α是一個標量,XB是一個m?n的矩陣,A是單位或者非單位,上三角或者下三角矩陣,op(A)=A或者op(A)=A或者op(A)=conjg(A)。把等式的解矩陣X沖寫入到B矩陣中。

后續

研究BLAS Level 1 2 3中各種矩陣相關概念。隨后是代碼實現

總結

以上是生活随笔為你收集整理的MKL学习——矩阵矩阵操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。