Vengineerの妄想

人生を妄想しています。

Google Edge TPU の libedgetpu の header と source の対応付け

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

libedgetpu.so のヘッダファイルと今回公開されたソースコードとの関係づけします

edgetpu_c.h ソースコードは、tflite/edgetpu_c.cc 

github.com

この中で、edgetpu_create_delegate 関数の中では、CreateEdgeTpuDelegateForCustomOp メソッドを実行しています。

tflite という ディレクトリを別に分けたのは、tflite でなくても使えるようにしているのかな?

この CreateEdgeTpuDelegateForCustomOp メソッドは、

tflite/edgetpu_delegate_for_custom_op.cc の中で定義されています。

EdgeTpuDelegateForCustomOpクラスのインスタンスを生成して、戻り値として返しています。

EdgeTPUへのCustoomOpに関しては、ここ (CustomOpUserDataDirectクラス)でいろいろとやっています。

CustomOpを解析して、複数個のExacutableにするのは、

driver/package_registry.cc の PackageRegistry クラスっぽい。

 

CustomOpの実行は、CustomOpInvokeメソッドで、ここにあります。このCustomOpInvoke メソッド内で、EdgeTpuDriverWrapper::InvokeExecutable メソッドを呼んでいる。

入力バッファと出力バッファを request に突っ込んで、 drvier_->Execute を実行

実行結果の出力バッファの内容をReFormatOutputs メソッドにて変更。

driver の Execute メソッドは、こちらで定義されていて、Submitを実行している。

request が複数ある場合の Execute メソッドは、これ で requestの回数、Submitを実行しています。

Submit は、PCIe 版と USB 版とは違います。なぜなら、デバイスへのアクセス方法が違うから。。。共に、Submit 内では、dma_scheduler_.Submit を呼びだしています。