2016-09-30 9 views
2

TensorFlowでは、さまざまな理由でカスタムアロケータを作成できます(私は新しいハードウェアでそれをやっています)。デバイスの構造上、アロケータが返すデータポインタとしていくつかの要素の構造体をvoid*として使用する必要があります。TensorFlowカスタムアロケータとTensorからのデータへのアクセス

私が書いているカーネルでは、Tensorsへのアクセス権が与えられていますが、私が書いたポインタ構造体を取得する必要はありません。クラスを調べると、私がtensor_t.buf_->data()

Tensor::buf_

TensorBuffer::data()

をすることによって、この構造体を得ることができ、問題は、私はこれを行うコードを見つけることができないということであり、私はそれが安全ではないことを心配していますように思われました(可能性が高い!)、これを行うためのより標準的な方法があります。

これは良い/悪い考えであることを誰かが確認できますか?それが存在する場合は代替案を提示しますか?

答えて

3

Tensor::tensor_data() .data()を使用して、DMAHelperによる間違った間接参照を使わずに、生ポインタにアクセスすることもできます。

+0

ローポインタからTensorを構築するにはどうすればよいですか?いつ生のポインタを削除すればよいですか? THX。 –

0

4日後... GPUUtils

DMAHelper::base()から

void* GetBase(const Tensor* src) { 
    return const_cast<void*>(DMAHelper::base(src)); 
} 

はデータポインタで取得するためにプライベートTensor::base()を使用する能力を与えられている友人のクラスメソッドです。

implementationは、これがすべて私がまだ別のものの後にやりたいことを取り巻くラッパーであることを示しています。abstraction私はそれがポインタを得るためのより安全なアプローチであり、代わりに使用されるべきだと推測しています。

関連する問題