Skip to content

提供支持更完整参数的gemm接口 #4159

Closed
@guoshengCS

Description

@guoshengCS

目前在math_function中gemm的接口如下:

// Support continuous memory now
// If transA = N, and transB = N
// Then matrixA: M * K, matrixB: K * N matrixC : M * N
// For more detailed info, please refer to
// http://www.netlib.org/lapack/explore-html/d4/de2/sgemm_8f.html
template <typename Place, typename T>
void gemm(const CBLAS_TRANSPOSE transA, const CBLAS_TRANSPOSE transB,
          const int M, const int N, const int K, const T alpha, const T* A,
          const T* B, const T beta, T* C, platform::DeviceContext* context);

在将Paddle目前GRU进行OP port过程中,目前有如下部分代码

      BlasGemm<Device, T>::compute(false,
                                   false,
                                   batchSize,
                                   2 * frameSize,
                                   frameSize,
                                   1,
                                   value.prevOutValue,
                                   frameSize,
                                   value.gateWeight,
                                   frameSize * 2,
                                   1,
                                   value.gateValue,
                                   frameSize * 3);

这里用到了math_function gemm中封装限定了的ldaldbldc这几个参数

template <>
void gemm<platform::CPUPlace, float>(const CBLAS_TRANSPOSE transA,
                                     const CBLAS_TRANSPOSE transB, const int M,
                                     const int N, const int K,
                                     const float alpha, const float* A,
                                     const float* B, const float beta, float* C,
                                     platform::DeviceContext* context) {
  int lda = (transA == CblasNoTrans) ? K : M;
  int ldb = (transB == CblasNoTrans) ? N : K;
  int ldc = N;
  cblas_sgemm(CblasRowMajor, transA, transB, M, N, K, alpha, A, lda, B, ldb,
              beta, C, ldc);
}

能否在math_function中加下gemm的带有完整所有参数的接口。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions