BLAS 3级例程(矩阵-矩阵操作)

BLAS 3级例程(矩阵-矩阵操作)

  1. cblas_?gemm(计算矩阵-矩阵乘积)

    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);
    
    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);
    
    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);
    
    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);
    

    描述:

    cblas_?gemm例程计算标量-矩阵-矩阵乘积,并将结果与一般矩阵相加到一个标量-矩阵乘积中。操作定义为C := alpha * op(A) * op(B) + beta * C,其中:op(X)是op(X) = X,或op(X) = X^T,或op(X) = X^H中的一个,alpha 和beta 为标量,A B C是矩阵op(A)是m×k矩阵 op(B)是k×n矩阵, C是一个m×n矩阵

    单精度实数为cblas_sgemm,双精度实数cblas_dgemm,单精度复数cblas_ cgemm,双精度复数cblas_ zgemm

    输入参数

    Layout指定二维数组存储是否是行主存储 (CblasRowMajor)或l列为主存储(CblasColMajor)
    transa指定矩阵乘法中使用的op(A)的形式:如果transa = ‘N’或’N’,则op(A) = A;如果transa = ‘T’或’T’,则op(A) = A^T;如果transa = ‘C’或’C’,则op(A) = A^H。
    transb指定矩阵乘法中使用的op(B)的形式:如果transb = ‘N’或’N’,则op(B) = B;如果transb = ‘T’或’T’,则op(B) = B^T;如果transb = ‘C’或’C’,则op(B) = B^H。
    m整数。指定矩阵op(A)和矩阵C的行数。m的值必须至少为零。
    n整数。指定矩阵op(B)和矩阵C的列数。n的值必须至少为零。
    k整数。指定矩阵op(A)的列数和矩阵op(B)的行数。k的值必须至少为零。
    alpha指定标量
    a数组,大小lda * ka,其中transa = 'N’或’N’时ka为k,否则为m。在transa = 'N’或’N’进入前,数组a的前导m×k部分必须包含矩阵a,否则数组a的前导k×m部分必须包含矩阵a。
    lda整数。指定调用中声明的a的列数。当transa = 'N’或’N’时,则lda必须至少为max(1,m),否则lda必须至少为max(1,k)。
    b当transa = 'n’或’n’时,kb为n,否则为k。在transa = 'N’或’N’进入前,数组b的前导kn部分必须包含矩阵b,否则数组b的前导nk部分必须包含矩阵b。
    ldb整数。指定调用中声明的b的列数。当transa = 'N’或’N’时,则ldb必须至少为max(1,k),否则ldb必须至少为max(1,n)。
    beta指定标量。当等于0时,就不需要在输入上设置c。
    c数组,大小ldc * n。在进入前,数组c的m×n前导部分必须包含该矩阵
    ldc整数。指定y元素的增量,incy不能为零

    输出参数

    c: 覆盖m×n矩阵 (alpha * op(A) * op(B) + beta * C).

  2. cblas_?hemm(计算一个矩阵-矩阵乘积,其中一个输入矩阵是Hermitian矩阵)

    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);
    
    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);
    

    描述:

    cblas_?hemm函数使用Hermitian矩阵A和一般矩阵计算标量-矩阵-矩阵乘积

    并使用一般矩阵C将结果加到一个标量矩阵乘积中C := alpha * A * B + beta * C或

    C := alpha * B * A + beta * C,其中alpha 和beta 为标量,A是Hermitian矩阵,B和C是m×n矩阵。

    单精度复数cblas_chemm,双精度复数cblas_zhemm

    输入参数

    Layout指定二维数组存储是否是行主存储 (CblasRowMajor)或l列为主存储(CblasColMajor)
    side指定在操作中,Hermitian特矩阵A是放在左边还是右边,具体如下:如果side = ‘L’或’l’,则C:= alpha * A * B + beta * C;如果边= ‘R’或’r’,则C:= alpha * B * A + beta * C。
    uplo指定 使用Hermitian矩阵的上三角部分还是下三角部分. 如果uplo = ‘U’或’U’,则使用Hermitian矩阵A的上三角部分。 如果uplo = ‘L’或’L’,则使用Hermitian矩阵A的下三角部分
    m整数。指定矩阵C的行数。m的值必须至少为零。
    n整数。指定矩阵C的列数。n的值必须至少为零。
    alpha指定标量。
    a数组,大小(lda,ka),其中边= 'L’或’L’时,ka为m,否则为n。side=“L”或“L”,数组的m×m部分必须包含Hermitian矩阵,这样当uplo =“U”或“U”,子阵m×m上三角阵的一部分,一个必须包含严格上三角的一部分,Hermitian矩阵和下三角的一部分不是引用,当uplo =“L”或“L”,领先m×m下三角阵的一部分必须包含Hermitian矩阵的下三角的部分,a的严格上三角形部分没有参考。在入口侧=‘R’或‘R’,数组的n×n部分必须包含Hermitian矩阵,这样当uplo =“U”或“U”,领先的n×n上三角阵的一部分,一个必须包含严格上三角的一部分,Hermitian矩阵和下三角的一部分不是引用,当uplo =“L”或“L”,领先的n×n下三角阵的一部分必须包含埃尔米特矩阵的下三角的部分,a的严格上三角形部分没有参考。无需设置对角元素的虚部,假设它们为零。
    lda整数。指定调用中声明的a的列数, lda的值必须至少为max(1, m)
    b数组,大小ldb * n。在进入前,数组b的前导m×n部分必须包含矩阵b。
    ldb整数。指定调用中声明的b的列数。ldb的值必须至少为max(1, m)。
    beta指定标量。当被设为0时,c不需要在输入上被设置
    c数组,大小(c, n)。在进入前,数组c的前导m*n部分必须包含矩阵c,除非当beta为0时,在这种情况下无需在进入时设置c。
    ldc整数。指定调用中声明的c的列数。ldc的值必须至少为max(1, m)。

    输出参数

    c: 被m×n更新后的矩阵覆盖

  3. cblas_?herk(执行Hermitian矩阵秩-k更新)

    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);
    
    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);
    

    描述:

    cblas_?herk函数使用一般矩阵a和Hermitian矩阵c执行秩-k矩阵-矩阵运算C := alpha * A * A ^H + beta * C , C:= alpha * A^H * A + beta * C, 其中alpha 和beta 为标量,C是n×n的Hermitian矩阵,A在第一种情况下是一个n×k矩阵,在第二种情况下是一个k×n矩阵

    单精度实数为cblas_cherk,双精度实数cblas_zherk

    输入参数

    Layout指定二维数组存储是否是行主存储 (CblasRowMajor)或l列为主存储(CblasColMajor)
    uplo指定是使用数组c的上三角部分还是下三角部分。如果uplo = ‘U’或’U’,则使用数组c的上三角部分。如果uplo = ‘L’或’L’,则使用数组c的下三角部分。
    trans如果trans= ‘N’或’N’,则C:= alpha * A * A^H + beta * C;如果trans= ‘C’或’C’,则C:= alpha * A^H * A + beta * C。
    n整数。指定矩阵C的列数。n的值必须至少为零。
    k整数。对于trans= ‘N’或’N’, k表示矩阵A的列数,对于trans= ‘C’或’C’, k表示矩阵A的行数。k的值必须至少为零。
    alpha指定标量。
    a数组,大小(lda, ka),其中,当trans= 'N’或’N’时,ka为k,否则为N。在进入trans= 'N’或’N’之前,数组a的前导n*k部分必须包含矩阵a,否则,数组a的前导k**n部分必须包含矩阵a。
    lda整数。指定调用中声明的a的前导维(子)阵。当trans= 'N’或’N’时,则lda至少为max(1,n),否则lda至少为max(1,k)。
    beta指定标量。
    c数组,大小ldc * n。 在uplo = 'U’或’U’进入之前,数组c的前导n*n上三角部分必须包含Hermitian矩阵的上三角部分,而c的严格下三角部分不被引用。在uplo = 'L’或’L’进入之前,数组c的前导n×n下三角部分必须包含Hermitian矩阵的下三角部分,而c的严格上三角部分不被引用。
    ldc整数。指定调用中声明的c的列数。ldc的值必须至少为max(1, m)。

    输出参数

    c: 当uplo = 'U’或’U’时,数组c的上三角形部分被更新后的矩阵的上三角形部分覆盖。当uplo = 'L’或’L’时,数组c的下三角部分被更新后的矩阵的下三角部分覆盖。对角元素的虚部设为零。

  4. cblas_?her2k(执行Hermitian秩2k更新)

    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);
    
    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);
    

    描述:

    cblas_?her2k函数使用一般的矩阵A和B和一个Hermitian矩阵C执行秩-2k矩阵-矩阵运算. 定义为 C := alpha * A * B^H + conjg(alpha) * B * A^H + beta * C或者C := alpha * B^H * A + conjg(alpha) * A^H * B + beta * C,,其中:alpha是标量,beta 是一个实标量,C是n×n的Hermitian矩阵, A和B在第一种情况下是n×k矩阵, 在第二种情况下是k×n矩阵。

    单精度复数为cblas_cher2k,双精度复数cblas_zher2k

    输入参数

    Layout指定二维数组存储是否是行主存储 (CblasRowMajor)或l列为主存储(CblasColMajor)
    uplo指定是使用数组c的上三角部分还是下三角部分。如果uplo = ‘U’或’u’,则使用数组c的上三角部分。如果uplo = ‘L’或’l’,则使用数组c的下三角部分。
    trans如果trans= ‘N’或’n’,则C:= alpha * A * B^H + alpha * B * A^H + beta * C;如果trans= ‘C’或’c’,则C:= alpha * A^H * B+ alpha * B^H * A + beta * C。
    n整数。指定矩阵C的列数。n的值必须至少为零。
    k整数。对于trans= ‘N’或’n’, k表示矩阵A的列数,对于trans= ‘C’或’c’, k表示矩阵A的行数。k的值必须至少为零。
    alpha指定标量。
    a数组,大小(lda, ka),其中,当trans= 'N’或’n’时,ka为k,否则为N。在进入trans= 'N’或’N’之前,数组a的前导n*k部分必须包含矩阵a,否则,数组a的前导k**n部分必须包含矩阵a。
    lda整数。指定调用中声明的a的前导维(子)阵。当trans= 'N’或’N’时,则lda至少为max(1,n),否则lda至少为max(1,k)。
    beta指定标量。
    b数组,大小(ldb, kb),其中当trans= 'N’或’n’时,kb为k,否则为N。在以trans= 'N’或’n’进入前,数组b的前导N*k部分必须包含矩阵b,否则数组b的前导k * N部分必须包含矩阵b。
    ldb整数。指定调用中声明的b的前导维(子)项目。当trans= 'N’或’N’时,则ldb至少为max(1,n),否则ldb至少为max(1,k)。
    c数组,大小ldc * n。 在uplo = 'U’或’U’进入之前,数组c的前导n*n上三角部分必须包含Hermitian矩阵的上三角部分,而c的严格下三角部分不被引用。在uplo = 'L’或’L’进入之前,数组c的前导n×n下三角部分必须包含Hermitian矩阵的下三角部分,而c的严格上三角部分不被引用。
    ldc整数。指定调用中声明的c的列数。ldc的值必须至少为max(1, m)。

    输出参数

    c: 当uplo = 'U’或’U’时,数组c的上三角形部分被更新后的矩阵的上三角形部分覆盖。当uplo = 'L’或’L’时,数组c的下三角部分被更新后的矩阵的下三角部分覆盖。对角元素的虚部设为零。

  5. cblas_?symm(计算一个输入矩阵是对称的矩阵-矩阵乘积)

    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);
    
    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);
    
    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);
    
    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);
    

    描述:

    cblas_?symm函数利用对称矩阵计算标量-矩阵-矩阵乘积,并将结果加到标量-矩阵乘积中。定义为 C := alpha * A * B + beta * C或者C := alpha * B * A + beta * C,,其中:alpha和beta是标量,A是对称矩阵,B和C是m×n矩阵。

    单精度实数为cblas_ssymm,双精度实数cblas_dsymm

    单精度复数为cblas_csymm,双精度复数cblas_zsymm

    输入参数

    Layout指定二维数组存储是否是行主存储 (CblasRowMajor)或l列为主存储(CblasColMajor)
    side指定对称矩阵A在操作中出现在左边还是右边。如果 side = ‘L’ 或’l’,则 C := alpha * A * B + beta * C;。如果uplo = ‘R’或’r’,则 C := alpha * B * A + beta * C.
    uplo指定是否使用对称矩阵A的上三角部分或下三角部分: 如果uplo = ‘U’或’u’,则使用上三角部分;如果uplo = ‘L’或’l’,则使用下三角部分。
    m整数。指定矩阵C的行数。m的值必须至少为零。
    n整数。指定矩阵C的列数。n的值必须至少为零。
    alpha指定标量。
    a数组,大小(lda, ka),其中边= 'L’或’l’时,ka为m,否则为n。 side=“L”或“l”,数组的m×m部分必须包含对称矩阵,这样当uplo =“U”或“u”,数组a的前导m×m上三角阵的一部分必须包含对称矩阵上三角部分,不引用a的严格下三角部分,当=“L”或“l”,数组a的前导m×m下三角部分必须包含对称矩阵的下三角部分,不引用a的严格上三角部分。 side=‘R’或‘r’,数组的n×n部分必须包含对称矩阵,这样当uplo =“U”或’u’本部数组必须包含对称矩阵上三角部分,不引用a的严格下三角的部分,当side= ’ L ‘或’ l ',a的前导n×n下三角阵的一部分必须包含对称矩阵的下三角部分,不引用对称矩阵严格上三角部分。
    lda整数。指定调用中声明的a的前导维(子)项目。当side = 'L’或’L’时,lda必须至少为max(1, m),否则lda必须至少为max(1, n)。
    b数组大小(ldb的n)。在进入前,数组b的前导m×n部分必须包含矩阵b。
    ldb整数。指定调用中声明的b的前导维(子)项目。ldb的值必须至少为max(1, m)。
    beta指定标量。 当beta设置为0时,则不需要在输入中设置c。
    c数组,大小ldc * n。在进入前,数组c的前导m * n部分必须包含矩阵c,除非beta为零,在这种情况下,无需在进入时设置c。
    ldc整数。指定调用中声明的c的列数。ldc的值必须至少为max(1, m)。

    输出参数

    c: 被m×n更新后的矩阵覆盖。

  6. cblas_?syrk(执行一个对称矩阵秩-k更新。)

    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);
    
    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);
    
    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);
    
    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);
    

    描述:

    cblas_?syrk函数使用一般矩阵A对对称矩阵C执行秩-k矩阵-矩阵运算定义为 C := alpha * A * A’ + beta * C,或者C := alpha * A’ * A + beta * C,其中:alpha和beta是标量,C是一个n×n对称矩阵,A在第一种情况下是一个n×k矩阵在第二种情况下是一个k×n矩阵。

    单精度实数为cblas_ssyrk,双精度实数cblas_dsyrk

    单精度复数为cblas_csyrk,双精度复数cblas_zsyrk

    输入参数

    Layout指定二维数组存储是否是行主存储 (CblasRowMajor)或l列为主存储(CblasColMajor)
    uplo指定是使用数组c的上三角部分还是下三角部分。如果uplo = ‘U’或’u’,则使用上三角部分;如果uplo = ‘L’或’l’,则使用下三角部分。
    trans整数。 如果trans= ‘N’或’n’,则C:= alpha * A * A’ + beta * C;如果trans= ‘T’或’t’,则C:= alpha * A’ *A + beta * C;如果trans= ‘C’或’c’,则C:= alpha * A’ * A + beta * C 。
    n整数。指定矩阵C的列数。n的值必须至少为零。
    k整数。在trans= ‘N’或’n’,k表示矩阵a的列数,而在trans= ‘T’, ‘t’, 'C’或’c’时,k表示矩阵a的行数。k的值必须至少为零。
    alpha指定标量。
    a数组,大小(lda,ka),其中,当trans= 'N’或’n’时,ka为k,否则为N。在进入trans= 'N’或’n’之前,数组a的前导N乘k部分必须包含矩阵a,否则,数组a的前导k乘N部分必须包含矩阵a。
    lda整数。指定调用中声明的a的前导维(子)项目。当trans= 'N’或’N’时,则lda至少为max(1,n),否则lda至少为max(1,k)。
    beta指定标量。
    c数组大小(ldc, n)。在uplo = 'U’或’u’进入之前,数组c的前导n*n上三角部分必须包含对称矩阵的上三角部分,而c的严格下三角部分不被引用。 在uplo = 'L’或’l’进入之前,数组c的前导n×n下三角部分必须包含对称矩阵的下三角部分,不引用c的严格上三角部分。
    ldc整数。指定调用中声明的c的前导维 (子)项目。ldc的值必须至少为max(1,n)。

    输出参数

    c: 当uplo = 'U’或’u’时,数组c的上三角形部分被更新后的矩阵的上三角形部分覆盖。当uplo = 'L’或’l’时,数组c的下三角部分被更新后的矩阵的下三角部分覆盖。

  7. cblas_?syr2k(执行一个对称矩阵的秩-2k更新)

    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);
    
    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);
    
    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);
    
    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);
    

    描述:

    cblas_?syr2k函数使用一般矩阵a和b对对称矩阵C执行秩-2k矩阵-矩阵运算 C := alpha * A * B’ + alpha * B * A’ + beta * C,或者C := alpha * A’ * B + alpha * B’ * A + beta * C,其中:alpha和beta是标量,C是一个n×n对称矩阵,AA和B在第一种情况下是n×k矩阵,在第二种情况下是k×n矩阵

    单精度实数为cblas_ssyr2k,双精度实数cblas_dsyr2k

    单精度复数为cblas_csyr2k,双精度复数cblas_zsyr2k

    输入参数

    Layout指定二维数组存储是否是行主存储 (CblasRowMajor)或l列为主存储(CblasColMajor)
    uplo指定是使用数组c的上三角部分还是下三角部分。如果uplo = ‘U’或’u’,则使用上三角部分;如果uplo = ‘L’或’l’,则使用下三角部分。
    trans整数。 如果trans= ‘N’或’n’,则 C := alpha * A * B’+alpha * B * A’+beta * C;如果trans= ‘T’或’t’,则 C := alpha * A’ * B +alpha * B’ * A +beta * C;如果trans= ‘C’或’c’,则 C := alpha * A’ * B +alpha * B’ * A +beta * C 。
    n整数。指定矩阵c的阶数,n的值必须至少为零。
    k整数。在输入trans= ‘N’或’n’时,k指定矩阵A和B的列数,而输入trans= ‘T’或’t’ 或’C’或’c’时,k指定矩阵A和B的列数’C’或’c’, k指定矩阵A和B的行数,k的值必须至少为零。
    alpha指定标量。
    a数组,大小(lda,ka),其中,当trans= 'N’或’n’时,ka为k,否则为N。在进入trans= 'N’或’n’之前,数组a的前导N乘k部分必须包含矩阵a,否则,数组a的前导k乘N部分必须包含矩阵a。
    lda整数。指定调用中声明的a的前导维(子)项目。当trans= 'N’或’N’时,则lda至少为max(1,n),否则lda至少为max(1,k)。
    b当trans= 'N’或’n’时,kb为k,否则为N。在以trans= 'N’或’n’进入前,数组b的前导N乘k部分必须包含矩阵b,否则数组b的前导k乘N部分必须包含矩阵B。
    ldb整数。指定调用中声明的a的前导维(子)项目。当trans= 'N’或’N’时,则ldb至少为max(1,n),否则ldb至少为max(1,k)。
    beta指定标量。
    c数组大小(ldc, n)。在uplo = 'U’或’u’进入之前,数组c的前导n*n上三角部分必须包含对称矩阵的上三角部分,而c的严格下三角部分不被引用。 在uplo = 'L’或’l’进入之前,数组c的前导n×n下三角部分必须包含对称矩阵的下三角部分,不引用c的严格上三角部分。
    ldc整数。指定调用中声明的c的前导维 (子)项目。ldc的值必须至少为max(1,n)。

    输出参数

    c: 当uplo = 'U’或’u’时,数组c的上三角形部分被更新后的矩阵的上三角形部分覆盖。当uplo = 'L’或’l’时,数组c的下三角部分被更新后的矩阵的下三角部分覆盖。

  8. cblas_?trmm(计算一个输入矩阵是三角矩阵的矩阵-矩阵乘积)

    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);
    
    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);
    
    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);
    
    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);
    

    描述:

    cblas_?trmm函数计算一个三角形矩阵的标量-矩阵-矩阵乘积。操作定义为B := alpha * op(A) * B或B := alpha * B * op(A),其中:alpha是标量,B是一个m×n矩阵,

    A是一个单位,或非单位,上下三角矩阵op(A)是op(A) = A,或op(A) = A’,或op(A) = conjg(A’)中的一个。

    单精度实数为cblas_ssyr2k,双精度实数cblas_dtrmm

    单精度复数为cblas_ctrmm,双精度复数cblas_ztrmm

    输入参数

    Layout指定二维数组存储是否是行主存储 (CblasRowMajor)或l列为主存储(CblasColMajor)
    side指定操作时op(A)是出现在B的左边还是右边: side= ‘L’或’l’,则B:= alpha * op(A) * B;如果side= ‘R’或’r’,则B:= alpha * B * op(A)。
    uplo指定矩阵A是上三角还是下三角:。uplo = ‘U’或’u’,则使用上三角部分;如果uplo = ‘L’或’l’, 那么这个矩阵就是低三角矩阵。
    transa指定矩阵乘法中使用的op(A)的形式: 如果transa= ‘N’或’n’,则op(A) = A;如果transa= ‘T’或’t’,则op(A) = A’;如果transa= ‘C’或’c’,则op(A) = conjg(A’)。
    diag指定矩阵A是否为单位三角形: 如果diag = 'U’或’u’则该矩阵为单位三角形;如果diag = ‘N’或’u’ diag = CblasNonUnit,则该矩阵不是单位三角形
    m整数。指定b的行数。m的值必须至少为零。
    n整数。指定b的列数。n的值必须至少为零。
    alpha指定标量。 当alpha为0时,则a不被引用,b不需要在进入前被设置
    a数组,大小lda乘以k,其中side= 'L’边或’l’时k为m,side= 'R’或’r’时k为n。在uplo = 'U’或’u’进入之前,数组a的前导k×k的上三角部分必须包含上三角矩阵,而严格意义上的下三角部分不被引用。
    lda整数。指定调用中声明的a的前导维(子)项目。当边= 'R’或’r’时,lda至少为max(1, m);当边= 'R’或’r’时,lda至少为max(1, n)。
    b数组,大小ldb * n。在进入前,数组b的前导m×n部分必须包含矩阵b。
    ldb整数。指定调用中声明的b的前导维(子)项目。ldb的值必须至少为max(1, m)。

    输出参数

    b: 被变换矩阵覆盖。

  9. cblas_?trsm(解一个三角矩阵方程)

    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);
    
    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);
    
    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);
    
    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);
    

    描述:

    cblas_?trsm函数求解下列矩阵方程之一op(A) * X = alpha * B,或X*op(A) = alpha * B,其中:alpha是标量,X和B是m×n矩阵,A是一个单位,或非单位,上下三角矩阵op(A)是op(A) = A,或op(A) = A’,或op(A) = conjg(A’)中的一个。矩阵B被解矩阵X覆盖。

    单精度实数为cblas_strsm,双精度实数cblas_dtrsm

    单精度复数为cblas_ctrsm,双精度复数cblas_ztrsm

    输入参数

    Layout指定二维数组存储是否是行主存储 (CblasRowMajor)或l列为主存储(CblasColMajor)
    side指定操作时op(A)是出现在X的左边还是右边: 如果side = ‘L’或’l’,则op(A) * X = alpha * B;如果side = ‘R’或’r’,则X * op(A) = alpha * B。
    uplo指定矩阵A是上三角还是下三角:uplo = ‘U’或’u’,则使用上三角部分;如果uplo = ‘L’或’l’, 那么这个矩阵就是下三角矩阵。
    transa指定矩阵乘法中使用的op(A)的形式: 如果transa= ‘N’或’n’,则op(A) = A;如果transa= ‘T’或’t’,则op(A) = A’;如果transa= ‘C’或’c’,则op(A) = conjg(A’)。
    diag指定矩阵A是否为单位三角形: 如果diag = 'U’或’u’则该矩阵为单位三角形;如果diag = ‘N’或’u’ diag = CblasNonUnit,则该矩阵不是单位三角形
    m整数。指定b的行数。m的值必须至少为零。
    n整数。指定b的列数。n的值必须至少为零。
    alpha指定标量。 当alpha为0时,则a不被引用,b不需要在进入前被设置
    a数组,大小lda乘以k,其中side= 'L’边或’l’时k为m,side= 'R’或’r’时k为n。在uplo = 'U’或’u’进入之前,数组a的前导k×k的上三角部分必须包含上三角矩阵,而严格意义上的下三角部分不被引用。 在加入uplo = 'L’或’l’的数组a的下三角部分之前,必须包含下三角矩阵,并且严格意义上的上三角部分不被引用。当diag = 'U’或’u’时,a的对角元素也没有引用,但被假设为一个单位。
    lda整数。指定调用中声明的a的前导维(子)项目。当边= 'R’或’r’时,lda至少为max(1, m);当边= 'R’或’r’时,lda至少为max(1, n)。
    b数组,大小ldb * n。在进入前,数组b的前导m×n部分必须包含矩阵b。
    ldb整数。指定调用中声明的b的前导维(子)项目。ldb的值必须至少为max(1, m)。

    输出参数

    b: 被解矩阵X覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值