GPUDevice 上具有 Eigen::half 的自定义张量流 C++ 操作中的特征和

Eigen sum in custom tensorflow C++ op with Eigen::half on GPUDevice

我正在尝试创建自定义 tensorflow Op。我已经获得了一些使用 https://www.tensorflow.org/versions/master/how_tos/adding_an_op/index.html 和普通 C++ 的操作。

问题出现在使用 Eigen C++ 框架及其 .sum reducer 时。它适用于 CPU 和 doublefloatEigen::half 类型,但在 GPU 上它在编译时使用 Eigen::half 时会中断。

我已将问题简化为 https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/kernels, where I have renamed L2Loss to CustomL2Loss (otherwise I get name conflicts). See: https://gist.github.com/AndreasMadsen/4335215cd4293daad3cad745bbeae82a

l2loss_op 的副本

错误比较长:https://gist.github.com/AndreasMadsen/5cd0579267f0bc3e5a1c21f2341d9ad6

因为它适用于所有其他情况,但 <GPUDevice, Eigen::half>(通过注释 l2loss_op.cu.cc 中的行确认)我在考虑这是否是张量流问题。但是我可以自己编译tensorflow。

支持半浮点数需要大于或等于 3.5 的 cuda 架构。您需要使用 -arch compute_35 标志进行编译以启用相应的指令。