@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそ、すべては、SystemC v0.9公開から始まった
libedgetpu.so のヘッダファイルと今回公開されたソースコードとの関係づけします
edgetpu_c.h のソースコードは、tflite/edgetpu_c.cc
この中で、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 を呼びだしています。