2016-11-01 9 views
1

カスタムテンソルフローを作成しようとしています。私はhttps://www.tensorflow.org/versions/master/how_tos/adding_an_op/index.htmlと通常のC++を使用していくつかの操作を行っています。カスタムテンソルフローの固有値和GPUDeviceでEigen :: halfを使用したC++演算

Eigen C++フレームワークとその.sumレデューサーを使用すると問題が発生します。 double,floatおよびEigen::halfタイプのCPUで動作しますが、GPLではコンパイル時にEigen::halfを使用するとブレークします。

私は(そうでない場合、私は名前の衝突を取得)CustomL2LossL2Lossの名前を変更したhttps://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/kernelsからl2loss_opのコピーに問題が低下しています。参照:https://gist.github.com/AndreasMadsen/4335215cd4293daad3cad745bbeae82a

誤差はかなり長いです:https://gist.github.com/AndreasMadsen/5cd0579267f0bc3e5a1c21f2341d9ad6

それは、これがtensorflowの問題だった場合、私は検討していた他のすべてのケースのために動作しますが(l2loss_op.cu.cc中から行をコメントで確認)<GPUDevice, Eigen::half>ので。しかし、私はテンソルフロー自体をコンパイルすることができます。

+1

-arch compute_35でnvccを呼び出せますか? nvccが__shfl_downについて知らないという事実は、あなたが16ビット浮動小数点をサポートしていないアーキテクチャをターゲットにしていることを示しているようです。 –

+0

ありがとうございます。 '-arch compute_35'はそれを修正します。私はそれを受け入れることができるように答えとしてそれを追加できますか? – AndreasMadsen

+0

私は答えを加えました。 –

答えて

1

ハーフフロートのサポートでは、3.5以上のcudaアーキテクチャが必要です。対応する命令を有効にするには、-arch compute_35フラグを指定してコンパイルする必要があります。

関連する問題