2017-08-10 36 views
0

私はTensorRT 2.1を使用しており、シンプルなカスタムレイヤーを実装したいと考えています。 (目標は埋め込みシステム上​​3210を使用してSingle Shot Detectorを実行することです。)カスタムレイヤAPI(TensorRT 2.1)の簡単な例?

実施するために、私はInc層(単に入力テンソル値に1.0を追加し、同じ次元を維持)を作りたかったです。

に続いてIncクラスを実装します。sampleFasterRNN.cppの例です。同じ次元を保つためにgetOutputDimensions()を除いて私はすべてをほぼ同じに保った。 (これは問題ありません)

「1.0追加」の部分はどこに実装すればよいですか?私はそれが "enqueue()"にあるはずだと思います。だから、試しました

int enqueue(int batchSize, const void*const *inputs, void** outputs, void*, cudaStream_t stream) override 
{ 
    # the below is from the Reshape class. seems to copy from input to output 
    CHECK(cudaMemcpyAsync(outputs[0], inputs[0], mCopySize * batchSize, cudaMemcpyDeviceToDevice, stream)); 
    # add 1.0 to first ten values 
    float* foutputs = (float*) outputs[0]; 
    int i; for (i = 0; i < 10; i++) foutputs[i] += 1.0; 
    return 0; 
} 

しかし、この部分は「セグメンテーションフォールト」エラーになります。

私の質問は以下のとおりです。

  1. とは、どのように私は、入力と出力の間にいくつかの計算を実行することができますか?
  2. 誰も簡単な例を提供できますか?

答えて

0

ファイルsamples/samplePlugin/samplePlugin.cppを参照し、FCPluginクラスを参照してください。実際の計算は、enqueueメソッドに行かなければなりません。インクリメントを行うCUDAカーネルを作成する必要があります。