FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

NVIDIAのオープンソース ディープラーニングアクセラレータを試す(3. NVDLAの内部ブロック)

この記事は 半導体・ハードウェア開発 Advent Calendar 2017 - Qiita の13日目の記事です。

Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 私一人では、クオリティのある記事を続けられそうにありません。。。(弱音)

目次


NVDLAのシミュレーションを実行するとモジュールの構造が分かってくる。NVDLAの現在リリースされている構成で最大のもの(NV_full)を見てみると、大きく分けて5つのモジュールに分けられている。

  • u_partition_o
  • u_partition_c
  • u_partition_ma
  • u_partition_mb
  • u_partition_a
  • u_partition_p

に分けられている。これらのブロックについてちゃんとしたドキュメントが公開されていないため、あまり詳細は分からない。

u_partiotion_o

大きな演算モジュールは入っていなさそうだ。どちらかというと制御レジスタのような細々としたインタフェースが入っているような感じがしている。 それぞれの制御レジスタについては、 Hardware Architectural Specification — NVDLA Documentation が詳しい。外部インタフェースもこのモジュールと接続されているようである。

f:id:msyksphinz:20171212231637p:plain

u_partition_c

名前からしてCovolution Unitであると思われる。CDMA (convolution DMA)なども入っているため、畳み込み演算を実行するためのエンジンだと思われる。

f:id:msyksphinz:20171212231951p:plain

u_partition_ma, u_partition_mb

MACユニットだと思われる。partition_ma, partition_mb は同じユニット(u_partition_m)なので、MACユニットが2つ搭載されていることになる。 さらに、partition_ma には8つのMACユニットが接続されており、各MACには1024bitのデータバスが接続されている。結構な大きさだ。

f:id:msyksphinz:20171212232146p:plain

u_partition_a

Accumulatorだろうか?レジスタファイルなども含まれている。 f:id:msyksphinz:20171212232734p:plain

u_partition_p

pは良く分からない。パイプライン制御ユニット?

f:id:msyksphinz:20171212232836p:plain

sanity0テストパタンからみるレジスタの読み書きインタフェース

sanity0テストパタンは、NVDLAの外部からレジスタを読み書きするインタフェースだ。 テストパタンを見ると、制御レジスタ(CFG_DST_SURF_0)を読み書きしている。

read_reg 0xffff100b 0xffffffe0 0x00000000 #NVDLA_BDMA.CFG_DST_SURF_0
write_reg 0xffff100b 0xf0a5a500 #NVDLA_BDMA.CFG_DST_SURF_0
read_reg 0xffff100b 0xffffffe0 0xf0a5a500 #NVDLA_BDMA.CFG_DST_SURF_0

この制御レジスタの読み書きは、レジスタをバスに直接見せているのではなく、リクエストが各ブロックに渡されてFIFOに積まれる。 FIFOから1つのリクエストが取り出され、その応答が解されるため、NVDLAの中でもRead/Writeリクエストのレイテンシは結構かかっている。 数10サイクルはかかっているかな?そりゃ、デザインは結構大きくなるような気がする。