⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dgemm.c

📁 DTMK软件开发包,此为开源软件,是一款很好的医学图像开发资源.
💻 C
📖 第 1 页 / 共 2 页
字号:
/*<       IF( INFO.NE.0 )THEN >*/
    if (info != 0) {
/*<          CALL XERBLA( 'DGEMM ', INFO ) >*/
        xerbla_("DGEMM ", &info, (ftnlen)6);
/*<          RETURN >*/
        return 0;
/*<       END IF >*/
    }

/*     Quick return if possible. */

/*<    >*/
    if (*m == 0 || *n == 0 || ((*alpha == 0. || *k == 0) && *beta == 1.)) {
        return 0;
    }

/*     And if  alpha.eq.zero. */

/*<       IF( ALPHA.EQ.ZERO )THEN >*/
    if (*alpha == 0.) {
/*<          IF( BETA.EQ.ZERO )THEN >*/
        if (*beta == 0.) {
/*<             DO 20, J = 1, N >*/
            i__1 = *n;
            for (j = 1; j <= i__1; ++j) {
/*<                DO 10, I = 1, M >*/
                i__2 = *m;
                for (i__ = 1; i__ <= i__2; ++i__) {
/*<                   C( I, J ) = ZERO >*/
                    c__[i__ + j * c_dim1] = 0.;
/*<    10          CONTINUE >*/
/* L10: */
                }
/*<    20       CONTINUE >*/
/* L20: */
            }
/*<          ELSE >*/
        } else {
/*<             DO 40, J = 1, N >*/
            i__1 = *n;
            for (j = 1; j <= i__1; ++j) {
/*<                DO 30, I = 1, M >*/
                i__2 = *m;
                for (i__ = 1; i__ <= i__2; ++i__) {
/*<                   C( I, J ) = BETA*C( I, J ) >*/
                    c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
/*<    30          CONTINUE >*/
/* L30: */
                }
/*<    40       CONTINUE >*/
/* L40: */
            }
/*<          END IF >*/
        }
/*<          RETURN >*/
        return 0;
/*<       END IF >*/
    }

/*     Start the operations. */

/*<       IF( NOTB )THEN >*/
    if (notb) {
/*<          IF( NOTA )THEN >*/
        if (nota) {

/*           Form  C := alpha*A*B + beta*C. */

/*<             DO 90, J = 1, N >*/
            i__1 = *n;
            for (j = 1; j <= i__1; ++j) {
/*<                IF( BETA.EQ.ZERO )THEN >*/
                if (*beta == 0.) {
/*<                   DO 50, I = 1, M >*/
                    i__2 = *m;
                    for (i__ = 1; i__ <= i__2; ++i__) {
/*<                      C( I, J ) = ZERO >*/
                        c__[i__ + j * c_dim1] = 0.;
/*<    50             CONTINUE >*/
/* L50: */
                    }
/*<                ELSE IF( BETA.NE.ONE )THEN >*/
                } else if (*beta != 1.) {
/*<                   DO 60, I = 1, M >*/
                    i__2 = *m;
                    for (i__ = 1; i__ <= i__2; ++i__) {
/*<                      C( I, J ) = BETA*C( I, J ) >*/
                        c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
/*<    60             CONTINUE >*/
/* L60: */
                    }
/*<                END IF >*/
                }
/*<                DO 80, L = 1, K >*/
                i__2 = *k;
                for (l = 1; l <= i__2; ++l) {
/*<                   IF( B( L, J ).NE.ZERO )THEN >*/
                    if (b[l + j * b_dim1] != 0.) {
/*<                      TEMP = ALPHA*B( L, J ) >*/
                        temp = *alpha * b[l + j * b_dim1];
/*<                      DO 70, I = 1, M >*/
                        i__3 = *m;
                        for (i__ = 1; i__ <= i__3; ++i__) {
/*<                         C( I, J ) = C( I, J ) + TEMP*A( I, L ) >*/
                            c__[i__ + j * c_dim1] += temp * a[i__ + l * 
                                    a_dim1];
/*<    70                CONTINUE >*/
/* L70: */
                        }
/*<                   END IF >*/
                    }
/*<    80          CONTINUE >*/
/* L80: */
                }
/*<    90       CONTINUE >*/
/* L90: */
            }
/*<          ELSE >*/
        } else {

/*           Form  C := alpha*A'*B + beta*C */

/*<             DO 120, J = 1, N >*/
            i__1 = *n;
            for (j = 1; j <= i__1; ++j) {
/*<                DO 110, I = 1, M >*/
                i__2 = *m;
                for (i__ = 1; i__ <= i__2; ++i__) {
/*<                   TEMP = ZERO >*/
                    temp = 0.;
/*<                   DO 100, L = 1, K >*/
                    i__3 = *k;
                    for (l = 1; l <= i__3; ++l) {
/*<                      TEMP = TEMP + A( L, I )*B( L, J ) >*/
                        temp += a[l + i__ * a_dim1] * b[l + j * b_dim1];
/*<   100             CONTINUE >*/
/* L100: */
                    }
/*<                   IF( BETA.EQ.ZERO )THEN >*/
                    if (*beta == 0.) {
/*<                      C( I, J ) = ALPHA*TEMP >*/
                        c__[i__ + j * c_dim1] = *alpha * temp;
/*<                   ELSE >*/
                    } else {
/*<                      C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) >*/
                        c__[i__ + j * c_dim1] = *alpha * temp + *beta * c__[
                                i__ + j * c_dim1];
/*<                   END IF >*/
                    }
/*<   110          CONTINUE >*/
/* L110: */
                }
/*<   120       CONTINUE >*/
/* L120: */
            }
/*<          END IF >*/
        }
/*<       ELSE >*/
    } else {
/*<          IF( NOTA )THEN >*/
        if (nota) {

/*           Form  C := alpha*A*B' + beta*C */

/*<             DO 170, J = 1, N >*/
            i__1 = *n;
            for (j = 1; j <= i__1; ++j) {
/*<                IF( BETA.EQ.ZERO )THEN >*/
                if (*beta == 0.) {
/*<                   DO 130, I = 1, M >*/
                    i__2 = *m;
                    for (i__ = 1; i__ <= i__2; ++i__) {
/*<                      C( I, J ) = ZERO >*/
                        c__[i__ + j * c_dim1] = 0.;
/*<   130             CONTINUE >*/
/* L130: */
                    }
/*<                ELSE IF( BETA.NE.ONE )THEN >*/
                } else if (*beta != 1.) {
/*<                   DO 140, I = 1, M >*/
                    i__2 = *m;
                    for (i__ = 1; i__ <= i__2; ++i__) {
/*<                      C( I, J ) = BETA*C( I, J ) >*/
                        c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
/*<   140             CONTINUE >*/
/* L140: */
                    }
/*<                END IF >*/
                }
/*<                DO 160, L = 1, K >*/
                i__2 = *k;
                for (l = 1; l <= i__2; ++l) {
/*<                   IF( B( J, L ).NE.ZERO )THEN >*/
                    if (b[j + l * b_dim1] != 0.) {
/*<                      TEMP = ALPHA*B( J, L ) >*/
                        temp = *alpha * b[j + l * b_dim1];
/*<                      DO 150, I = 1, M >*/
                        i__3 = *m;
                        for (i__ = 1; i__ <= i__3; ++i__) {
/*<                         C( I, J ) = C( I, J ) + TEMP*A( I, L ) >*/
                            c__[i__ + j * c_dim1] += temp * a[i__ + l * 
                                    a_dim1];
/*<   150                CONTINUE >*/
/* L150: */
                        }
/*<                   END IF >*/
                    }
/*<   160          CONTINUE >*/
/* L160: */
                }
/*<   170       CONTINUE >*/
/* L170: */
            }
/*<          ELSE >*/
        } else {

/*           Form  C := alpha*A'*B' + beta*C */

/*<             DO 200, J = 1, N >*/
            i__1 = *n;
            for (j = 1; j <= i__1; ++j) {
/*<                DO 190, I = 1, M >*/
                i__2 = *m;
                for (i__ = 1; i__ <= i__2; ++i__) {
/*<                   TEMP = ZERO >*/
                    temp = 0.;
/*<                   DO 180, L = 1, K >*/
                    i__3 = *k;
                    for (l = 1; l <= i__3; ++l) {
/*<                      TEMP = TEMP + A( L, I )*B( J, L ) >*/
                        temp += a[l + i__ * a_dim1] * b[j + l * b_dim1];
/*<   180             CONTINUE >*/
/* L180: */
                    }
/*<                   IF( BETA.EQ.ZERO )THEN >*/
                    if (*beta == 0.) {
/*<                      C( I, J ) = ALPHA*TEMP >*/
                        c__[i__ + j * c_dim1] = *alpha * temp;
/*<                   ELSE >*/
                    } else {
/*<                      C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) >*/
                        c__[i__ + j * c_dim1] = *alpha * temp + *beta * c__[
                                i__ + j * c_dim1];
/*<                   END IF >*/
                    }
/*<   190          CONTINUE >*/
/* L190: */
                }
/*<   200       CONTINUE >*/
/* L200: */
            }
/*<          END IF >*/
        }
/*<       END IF >*/
    }

/*<       RETURN >*/
    return 0;

/*     End of DGEMM . */

/*<       END >*/
} /* dgemm_ */

#ifdef __cplusplus
        }
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -