BLAS 3级例程(矩阵-矩阵操作)
-
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).
-
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更新后的矩阵覆盖
-
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的下三角部分被更新后的矩阵的下三角部分覆盖。对角元素的虚部设为零。
-
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的下三角部分被更新后的矩阵的下三角部分覆盖。对角元素的虚部设为零。
-
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更新后的矩阵覆盖。
-
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的下三角部分被更新后的矩阵的下三角部分覆盖。
-
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的下三角部分被更新后的矩阵的下三角部分覆盖。
-
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: 被变换矩阵覆盖。
-
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覆盖。