雑多な趣味の記録帳

tom01h.exblog.jp

tiny-dnn アクセラレータを Ultra96 で動かしたい4

キャッシュ付き DMA をいったんあきらめて、キャッシュなしで DMA 転送をしてみました。
こんな感じ で、転送と演算を並列動作しているプログラムは認識率は 97.41% で安定。
並列化していないプログラムは不安定。

プログラムを見比べて思いつく疑惑。

DMA の終了判定を間違っているっぽい。
DMA の転送が終わっていないのに、DMA リセットをかけているのか、IP 側の受け取り状態を解除しているのが原因じゃないかと思う。

よく見る終了判定
while ((dma_addr[0x04/4] & 0x1000)!=0x1000); // Wait for the tx to finish
最初のうちに起きていたハングアップを避けるために今まで使っていた終了判定
while ((dma_addr[0x04/4] & 0x3)==0); // Wait for the tx to finish

よく見る終了判定に変更したら、並列化していないプログラムも 97.41% で安定しました。

シミュレーション結果と一致しないのは、コンパイラのバージョン違いってことにしておきます。

DMA でキャッシュを使う設定(AxCACHE=0xf,AxPROT=0x2,FF41A040=0x3)にしたら…
やはり認識率が一定しません。

この設定で udmabuf を O_SYNC 付きで開くと期待通りの動きです。
やっぱりキャッシュ付き転送になっていないのかな?

残念ながら時間切れ。来週は DMA 単体でテストするかな…

[PR]
# by tom01h | 2018-12-13 23:59 | Trackback | Comments(0)

Oracle VM VirtualBox Extension Pack も一緒に入れると良いよ

VirtualBox を入れるなら、Extention Pack も一緒に入れた方が良いみたいです。
入れる前は USB が 1.1 にしか対応していない模様。
USB カードリーダが古いから遅いのかと思っていたけど…

USB 3 のカードリーダを買ったのに使えない… って感じでググってみたらわかりました。
しかも、PC 内蔵の SD カードリーダも使えるようになりました。

コンピューターには詳しいつもりだったのに…

大陸から遠路はるばる届いた SD カードリーダです。リーダって言っても書き込みもできます。
f0054075_22121606.jpg


[PR]
# by tom01h | 2018-12-12 21:28 | Trackback | Comments(0)

tiny-dnn アクセラレータを Ultra96 で動かしたい3

tiny-dnn アクセラレータがいまだ Ultra96 上では安定して動きません。
実行時間的にはだいたい期待通りなんだけど、実行結果(認識率)に再現性がないです。
いやなことに、正解だと思っている認識率 96.95% よりも高いことが多いのですが…

Interface の 2019年1月号 の読み返したけど、やり忘れていることはなさそう。
udmabuf の説明 を読んでみると、デバイスツリーに登録して dma-coherent を設定しないといけない気もしますが、試してみたけど変わりません。
DMA の設定の相性問題 で Petalinux ツールがうまく動かないのも疑ってみたけど違うようです。
しかも、いつからか Wifi が使えなくなっています。
DMA のデバイスツリーから dma-coherent を外すと Wifi 復活しました。→ 単に dd の書き損じの可能性もあります。

しかし、Ultra96 は何をやるにも時間がかかります。
だいたいの原因は、ルートファイルシステムが 1.5GB もある事かと…
しかも、Petalinux ツールはルートファイルシステムのコピーを何種類も作って、あっちで作ってこっちにコピーとかもしています。
あと、dd もすごく時間かかるし、たまにうまく書けていないこともある感じです。
ちなみに、VirtualBox が PC 内蔵の SD カードリーダを認識してくれないので、古い USB カードリーダを持ち出しています。
それが原因で dd が遅いのもあると思います。
また、形が悪くて隣りのポートもつぶしたりするので USB カードリーダを買ったのですがまだ届きません。
ついでに、机のわきに固定する形の USB ハブ を買いました。
f0054075_20030769.jpg
悪いのは DMA の使い方じゃないのかなぁ?
CORA はちゃんと動いているみたいだけど…

[PR]
# by tom01h | 2018-12-11 23:46 | Trackback | Comments(0)

トラ技 1月号

たぶん、真似するところなんかなくて単なる読み物で終わると思うけど、かなり楽しみです。
f0054075_20325498.jpg

[PR]
# by tom01h | 2018-12-10 21:32 | 本・映画など | Trackback | Comments(0)

tiny-dnn アクセラレータを Ultra96 で動かしたい2

前回は reserved-memory で Linuz が使わないようにした領域を DMA バッファに使おうと思って上手く出来ませんでした。
udmabuf の使い方もわかったところで、再度 Ultra96 上での実行に挑戦してみます。

結論。速くなったけど、結果に再現性がない。まだ上手く行っていないところあるのかなぁ?
ちなみに認識率はちゃんと動いていると思われる時よりも高くなります。
[覚悟を決めて Verilator で 20000 サンプルの学習をしてみました。96.95% でした。ちなみに 10分ちょっとかかりました。]
f0054075_20231846.png
まだなんか怪しいけど、github に置きました。グラフの上の方を見たければそちらをどうぞ。

Ultra96 への移植では Interface 2019年1月号 がとっても参考になりました。
もう一度読み返して、怪しい動作の解析をしたいと思います。

そうは言っても、記事で気になるところを…
汎用 GEMM アクセラレータを作るのが目的ならこの記事で良いのかなと思います。
が、畳み込みを高速化したいのなら、CPU で im2col をやったらダメかと思います。
転送速度がネックだとわかっていつつ、ほぼ 9倍(3x3conv)にデータを増やしてから転送するなんて…
いや、他がすごく良かったのでここが気になるって話です。
あと、HLS 使ったら仕方ないのか?って気もしますが、ユーザメモリから DMA バッファへの同じデータの転送を何度もやらない工夫をしているみたいですが、何度も同じデータを DMA 転送しているのも気になります。
さらに、IP の中もダブルバッファ化するとか HLS でも出来るのですかね?
出来ないなら、HLS もまだまだって気もします。

[PR]
# by tom01h | 2018-12-09 21:18 | Trackback | Comments(0)