TensorFlow,自定义C ++ op,使用现有的MatMul

时间:2019-02-10 20:49:41

标签: c++ tensorflow blas cublas

我想为CPU和GPU(在CUDA中)编写一个自定义op(在C ++中)。 这很简单,除了:我怎么称呼BLAS(s)gemm(在两种情况下,对于CPU和GPU)?

我通过LSTMBlock操作(lstm_ops.hlstm_ops.cclstm_ops_gpu.cu.ccblas_gemm.hblas_gemm.cc)看了一下,似乎在CPU情况下使用Eigen,在GPU情况下使用ctx->op_device_context()->stream()->ThenBlasGemm()

如果ThenBlasGemm API也可用于CPU,那就太好了,但它似乎仅是GPU。 (也许我应该为此请求功能吗?)

但是在所有情况下,将Eigen用于CPU情况(或通常也称为gemm)似乎并不是最好的选择。我在浏览MatMul操作(matmul_op.hmatmul_op.ccmkl_matmul_op.ccgemm_functors.h)时,似乎有很多特殊情况(例如,使用gemm或gemv ,使用MKL(如果有)等)。我认为尝试复制所有这些(最好是复制并粘贴代码)不是一个好主意。

我可以在自定义操作中使用matmul的任何易于使用的API吗? (也许我应该为此请求功能吗?)

也许,有没有办法在我自己的操作中调用现有的MatMulOp::Compute

0 个答案:

没有答案