c++ - TensorFlow,自定义 C++ 运算,使用现有的 MatMul
问题描述
我想为 CPU 和 GPU(在 CUDA 中)编写一个自定义操作(在 C++ 中)。这很简单,除了:我如何调用 BLAS (s)gemm (在这两种情况下,对于 CPU 和 GPU)?
我看了一点LSTMBlock
操作(lstm_ops.h,lstm_ops.cc,lstm_ops_gpu.cu.cc,blas_gemm.h,blas_gemm.cc),这似乎将 Eigen 用于 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 等)。我认为尝试复制所有这些(主要是复制和粘贴代码)并不是一个好主意。
是否有任何易于使用的 APImatmul
可以在我的自定义操作中使用?(也许我应该为此做一个功能请求?)
或者,有没有办法MatMulOp::Compute
在我自己的操作中调用现有的?
解决方案
推荐阅读
- bash - 更快地运行 bash 脚本
- python - 如何从 Ubuntu 19.10 卸载 python 3.7?
- keras - 每个activation_9n 的重复错误(例如:activation_9、..activation_45.. 等)
- javascript - 如何使用条件将选择的行从表 A 复制到表 B?
- c# - CS0311 在类头中扩展泛型类型时出错
- android-studio - 方法 'CachedNetworkImageProvider.load' 的位置参数少于覆盖方法 'ImageProvider.load' 的位置参数
- c++ - 无法访问全局对象的成员函数
- c++ - 如何删除具有特定条件的向量中的所有元组?
- react-native - React Native:如何将内联阅读更多文本添加到长截断文本
- unix - 如何在unix中的分隔符内将转义字符附加到分隔符