📄 zgemm.c
字号:
}
for (l = 0; l < *k; ++l) {
i__1 = l + j * *ldb;
if (b[i__1].r != 0. || b[i__1].i != 0.) {
temp.r = alpha->r * b[i__1].r - alpha->i * b[i__1].i,
temp.i = alpha->r * b[i__1].i + alpha->i * b[i__1].r;
for (i = 0; i < *m; ++i) {
i__1 = i + j * *ldc;
i__2 = i + l * *lda;
c[i__1].r += temp.r * a[i__2].r - temp.i * a[i__2].i,
c[i__1].i += temp.r * a[i__2].i + temp.i * a[i__2].r;
}
}
}
}
} else if (conja) {
/* Form C := alpha*conjg( A' )*B + beta*C. */
for (j = 0; j < *n; ++j) {
for (i = 0; i < *m; ++i) {
temp.r = 0., temp.i = 0.;
for (l = 0; l < *k; ++l) {
i__1 = l + i * *lda;
i__2 = l + j * *ldb;
temp.r += a[i__1].r * b[i__2].r + a[i__1].i * b[i__2].i,
temp.i += a[i__1].r * b[i__2].i - a[i__1].i * b[i__2].r;
}
if (beta->r == 0. && beta->i == 0.) {
i__1 = i + j * *ldc;
c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
} else {
i__1 = i + j * *ldc;
z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
}
}
}
} else {
/* Form C := alpha*A'*B + beta*C */
for (j = 0; j < *n; ++j) {
for (i = 0; i < *m; ++i) {
temp.r = 0., temp.i = 0.;
for (l = 0; l < *k; ++l) {
i__1 = l + i * *lda;
i__2 = l + j * *ldb;
temp.r += a[i__1].r * b[i__2].r - a[i__1].i * b[i__2].i,
temp.i += a[i__1].r * b[i__2].i + a[i__1].i * b[i__2].r;
}
if (beta->r == 0. && beta->i == 0.) {
i__1 = i + j * *ldc;
c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
} else {
i__1 = i + j * *ldc;
z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
}
}
}
}
} else if (nota) {
if (conjb) {
/* Form C := alpha*A*conjg( B' ) + beta*C. */
for (j = 0; j < *n; ++j) {
if (beta->r == 0. && beta->i == 0.) {
for (i = 0; i < *m; ++i) {
i__1 = i + j * *ldc;
c[i__1].r = 0., c[i__1].i = 0.;
}
} else if (beta->r != 1. || beta->i != 0.) {
for (i = 0; i < *m; ++i) {
i__1 = i + j * *ldc;
z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
c[i__1].r = z__1.r, c[i__1].i = z__1.i;
}
}
for (l = 0; l < *k; ++l) {
i__1 = j + l * *ldb;
if (b[i__1].r != 0. || b[i__1].i != 0.) {
i__1 = j + l * *ldb;
temp.r = alpha->r * b[i__1].r + alpha->i * b[i__1].i,
temp.i = alpha->i * b[i__1].r - alpha->r * b[i__1].i;
for (i = 0; i < *m; ++i) {
i__1 = i + j * *ldc;
i__2 = i + l * *lda;
c[i__1].r += temp.r * a[i__2].r - temp.i * a[i__2].i,
c[i__1].i += temp.r * a[i__2].i + temp.i * a[i__2].r;
}
}
}
}
} else {
/* Form C := alpha*A*B' + beta*C */
for (j = 0; j < *n; ++j) {
if (beta->r == 0. && beta->i == 0.) {
for (i = 0; i < *m; ++i) {
i__1 = i + j * *ldc;
c[i__1].r = 0., c[i__1].i = 0.;
}
} else if (beta->r != 1. || beta->i != 0.) {
for (i = 0; i < *m; ++i) {
i__1 = i + j * *ldc;
z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
c[i__1].r = z__1.r, c[i__1].i = z__1.i;
}
}
for (l = 0; l < *k; ++l) {
i__1 = j + l * *ldb;
if (b[i__1].r != 0. || b[i__1].i != 0.) {
i__1 = j + l * *ldb;
temp.r = alpha->r * b[i__1].r - alpha->i * b[i__1].i,
temp.i = alpha->r * b[i__1].i + alpha->i * b[i__1].r;
for (i = 0; i < *m; ++i) {
i__1 = i + j * *ldc;
i__2 = i + l * *lda;
c[i__1].r += temp.r * a[i__2].r - temp.i * a[i__2].i,
c[i__1].i += temp.r * a[i__2].i + temp.i * a[i__2].r;
}
}
}
}
}
} else if (conja) {
if (conjb) {
/* Form C := alpha*conjg( A' )*conjg( B' ) + beta*C. */
for (j = 0; j < *n; ++j) {
for (i = 0; i < *m; ++i) {
temp.r = 0., temp.i = 0.;
for (l = 0; l < *k; ++l) {
i__1 = l + i * *lda;
i__2 = j + l * *ldb;
temp.r += a[i__1].r * b[i__2].r - a[i__1].i * b[i__2].i,
temp.i += - a[i__1].r * b[i__2].i - a[i__1].i * b[i__2].r;
}
if (beta->r == 0. && beta->i == 0.) {
i__1 = i + j * *ldc;
c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
} else {
i__1 = i + j * *ldc;
z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
}
}
}
} else {
/* Form C := alpha*conjg( A' )*B' + beta*C */
for (j = 0; j < *n; ++j) {
for (i = 0; i < *m; ++i) {
temp.r = 0., temp.i = 0.;
for (l = 0; l < *k; ++l) {
i__1 = l + i * *lda;
i__2 = j + l * *ldb;
temp.r += a[i__1].r * b[i__2].r + a[i__1].i * b[i__2].i,
temp.i += a[i__1].r * b[i__2].i - a[i__1].i * b[i__2].r;
}
if (beta->r == 0. && beta->i == 0.) {
i__1 = i + j * *ldc;
c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
} else {
i__1 = i + j * *ldc;
z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
}
}
}
}
} else {
if (conjb) {
/* Form C := alpha*A'*conjg( B' ) + beta*C */
for (j = 0; j < *n; ++j) {
for (i = 0; i < *m; ++i) {
temp.r = 0., temp.i = 0.;
for (l = 0; l < *k; ++l) {
i__1 = l + i * *lda;
i__2 = j + l * *ldb;
temp.r += a[i__1].r * b[i__2].r + a[i__1].i * b[i__2].i,
temp.i += a[i__1].i * b[i__2].r - a[i__1].r * b[i__2].i;
}
if (beta->r == 0. && beta->i == 0.) {
i__1 = i + j * *ldc;
c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
} else {
i__1 = i + j * *ldc;
z__1.r = beta->r * c[i__1].r - beta->i * c[i__1].i,
z__1.i = beta->r * c[i__1].i + beta->i * c[i__1].r;
c[i__1].r = z__1.r + alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = z__1.i + alpha->r * temp.i + alpha->i * temp.r;
}
}
}
} else {
/* Form C := alpha*A'*B' + beta*C */
for (j = 0; j < *n; ++j) {
for (i = 0; i < *m; ++i) {
temp.r = 0., temp.i = 0.;
for (l = 0; l < *k; ++l) {
i__1 = l + i * *lda;
i__2 = j + l * *ldb;
temp.r += a[i__1].r * b[i__2].r - a[i__1].i * b[i__2].i,
temp.i += a[i__1].r * b[i__2].i + a[i__1].i * b[i__2].r;
}
if (beta->r == 0. && beta->i == 0.) {
i__1 = i + j * *ldc;
c[i__1].r = alpha->r * temp.r - alpha->i * temp.i,
c[i__1].i = alpha->r * temp.i + alpha->i * temp.r;
} else {
i__1 = i + j * *ldc;
z__1.r = alpha->r * temp.r - alpha->i * temp.i,
z__1.i = alpha->r * temp.i + alpha->i * temp.r;
z__1.r += beta->r * c[i__1].r - beta->i * c[i__1].i,
z__1.i += beta->r * c[i__1].i + beta->i * c[i__1].r;
c[i__1].r = z__1.r, c[i__1].i = z__1.i;
}
}
}
}
}
} /* zgemm_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -