代码之家  ›  专栏  ›  技术社区  ›  Albert

TensorFlow,自定义C++ OP,使用现有MatMatl

  •  2
  • Albert  · 技术社区  · 6 年前

    我想编写一个自定义的OP(在C++中),既适用于CPU,也适用于GPU(CUDA)。 这很直接,除了:如何调用blas(s)gemm(在这两种情况下,对于cpu和gpu)?

    我看了一下 LSTMBlock 运算器 lstm_ops.h , lstm_ops.cc , lstm_ops_gpu.cu.cc , blas_gemm.h , blas_gemm.cc ,这似乎使用了eign作为cpu的外壳,并且 ctx->op_device_context()->stream()->ThenBlasGemm() 在GPU的情况下。

    如果 ThenBlasGemm api本来也可以用于cpu,但它似乎只是gpu。(也许我应该为此做一个功能请求?)

    但是,在所有情况下,使用eigen来处理cpu情况(或者通常使用gemm)并不是最好的做法。我在看 MatMul 运算器 matmul_op.h , matmul_op.cc , mkl_matmul_op.cc , gemm_functors.h )而且似乎有许多特殊情况(例如,使用gemm或gemv、使用mkl(如果可用)等)。我不认为尝试复制所有这些(主要是复制和粘贴代码)是一个好主意。

    是否有易于使用的api matmul 我可以在我的自定义操作中使用哪个?(也许我应该为此做一个功能请求?)

    或者,有没有办法把现有的 MatMulOp::Compute 在我自己的手术室里?

    0 回复  |  直到 6 年前
    推荐文章