TI C7000 情報

Texas Instruments の C6x シリーズ DSP の後継の C7x について、インターネットで収集した情報を記載する。

 C6x シリーズの中でも KeyStone アーキテクチャの C66x コアを載せたDSPの性能は周波数やコア数によって違うけれど、9.6 ~ 179 GFLOPS だそうだ。QMPYSP という命令が 4 個の単精度浮動小数点数の乗算を行えて、M1とM2ユニットそれぞれで実行できるので1クロックに8個の乗算が出来るとすると、600 MHz × 8 だと 4800 MFLOPS なので、乗算だけじゃなくて L1,L2,S1,S2 ユニットで行う DADDSP 命令での加算もカウントしているようだ。メモリから値を読み書きする LDDW と STDW 命令はそれぞれ 8 バイトの読み書きが出来て D1,D2 ユニットで行うので 1 クロックで合計 16 バイトの読み書きが出来る。1クロックに読み込み 8 バイト & 書き込み 8 バイトとかも可能。

1クロックにVLIWでパックして発行出来る命令数は最大 8 命令。なので演算 6 命令もコンスタントに発行しつづけられるわけはなく、「レジスタに読み書きする値を置きっ放しの完全な理論値です、本当にありがとうございました。」的な数値だろう…。実性能はよっぽどカリカリチューニングしないと半値八掛け二割引き。それはともかくこのプロセッサ、融合積和演算命令が無いのが勿体ない…。

http://www.ti.com/processors/digital-signal-processors/c6000-floating-point-dsp/overview.html

https://e2e.ti.com/support/processors/f/791/t/485503?About-the-GFLOPS-number-of-C66x-DSP-

C66x の登場時期を把握していないけれど2010年頃なのかな?製造プロセスは 28nm らしいので、ハイエンドのスマフォに使われるチップが 7nm で製造されている事を考えると電力性能比的にどんどんと時代遅れになってきている。絶対的な性能に関しても、もうすぐ2020年になるんだし 1TFLOPS 以上の性能の製品をリリースしないと GPUDSPブロックをたくさん積んだFPGAへの置き換えが進んでしまうと思う。

さてTIの次世代DSPの C7x の予想話に戻ると、まもなく 2019年の10月になるけれどC7000 のコード生成ツールのドキュメントがリリースされていた事が最近分かった。

http://www.ti.com/tool/C7000-CGT

まだISAの情報が載ったドキュメントが無いけれど、PCホスト環境でエミュレート実行とかが出来るようにしてるらしい。intrinsics 用のヘッダファイルも色々あるけどなんか記述が中途半端に思えるのは気のせいだろうか? 公式のドキュメントから読み取れる事は色々あるけれど、詳しい内容が知りたいので下記の特許情報を参照する事にした。

United States Patent Application Kind Code Title
20190095204 A1 Cache Management Operations Using Streaming Engine
20180322061 A1 Streaming engine with compressed encoding for loop circular buffer sizes
20190095205 A1 Cache Preload Operations Using Streaming Engine
20190073222 A1 Streaming engine with cache-like stream data storage and lifetime tracking
20170153959 A1 Streaming engine with deferred exception reporting
20180246855 A1 Reconfigurable matrix multiplier system and method
20180253402 A1 Implementing Fundamental Computational Primitives Using A Matrix Multiplication Accelerator (MMA)
20180246855 A1 Reconfigurable matrix multiplier system and method
2018126099 A1 Streaming engine with separately selectable element and group duplication
20190243646 A1 Variable Latency Instructions
20190188151 A1 Two address translations from a single table look-aside buffer read
20190187986 A1 Transposing a Matrix Using a Streaming Engine
20190187903 A1 Streaming engine with fetch ahead hysteresis
20190171455 A1 Streaming engine with stream metadata saving for context switching
20170168898 A1 Streaming engine with error detection, correction and restart
20190102178 A1 Converting a Stream of Data Using a Lookaside Buffer
20180322061 A1 Streaming engine with compressed encoding for loop circular buffer sizes
20190026111 A1 Dual data streams sharing dual level two cache access ports to maximize bandwidth utilization

依存性の管理

モジュールの中の要素の調整でファイル更新をすると依存関係の巻き添えが起きて大分待たされる事になって辛い。
コンパイラがEntity単位で内容が更新されたかどうかとそれぞれの依存性を把握していれば防げるのだろうか?
まぁそんなのは夢物語だからファイル分割を気を付けるべきなんだけど…。

 

リンク時最適化が上手く効いてくれるならヘッダにコードを置く必要性が薄くなるかも?でもこれも期待薄だろうなぁ。。人が工夫を凝らす事で詰め込む事は出来るんだろうけど試行錯誤しやすくするのにも知恵が必要だ…。

 

C++ の module について思い浮かんで検索したら下記のサイトがヒットした。

https://vector-of-bool.github.io/

 

依存関係はグラフで図示すれば分かりやすいのかもしれないけれど、色々な切り口があるからどう表現すれば良いのだろうか?

 

ノイマン型アーキで人間が試行錯誤して作り上げたものはなかなかに複雑で立派だけど、この方向性でずっと行くべきなのかというと躊躇する。

 

何かしらの僅かなコストと引き換えに手間を大きく省けるならそこに価値が生まれるのでうまいやり方を見つけたい。

 

 

BeagleBoard x15

BeagleBoard x15 を購入した。

https://beagleboard.org/getting-started

の説明を読んでセットアップ

SDカードにイメージを焼き込む

まずはSDカードのイメージをダウンロード 

現時点の BeagleBoard x15 の最新イメージは、「Debian 9.5 2018-10-07 4GB SD LXQT」 のようだ。Etcher というSDカードにイメージを書き込むプログラムが紹介されていてそれをインストールする事でSDカードへのイメージの書き込みは簡単に行う事が出来た。

電源について 

ちなみに BeagleBoard x15 は 12V5A(60W) の電源が必要で DCコネクタの規格は 内径 2.5mm 外径 5.5mm のようだ。手持ちのACアダプタに12V5Aのものが無かったので Tosmisy というメーカーのものを 1500 円くらいで購入した。色々なジャックに対応する為に交換可能なプラグが8種類ぐらい付属品で付いてくる。しかし話が逸れるけど、ACアダプタって電圧と電流の組み合わせの分だけ数が多くて嫌になるなぁ。。USB PDで全部賄えるようになったら良いんだけど…。

デバッグケーブル

USB変換COMケーブルはラズパイ用のを購入。

(赤) USB5V
(黒) GND
(緑) TxD ロジックレベル(約3.3V)
(白) RxD ロジックレベル(約3.3V)

となっているようで、ボード側の方は Quick Start Guide の説明を見ると

PIN番号 1 グラウンド
PIN番号 4 受信
PIN番号 5 送信
となっている。PIN1に黒、PIN4に緑、PIN5に白、のメスのジャンパワイヤを挿したら Teraterm で電文が見れるようになった。

CCSで開発

まず新規に Target Configuration File を作成する。

  • Connection に Blackhawk XDS560v2-USB System Trace Emulator を指定
  • Board or Device に GPEVM_AM572X を指定
  • Beagle Board x15 の電源投入もしくはリセット直後に、デバッグケーブルのターミナルで Press SPACE to abort autoboot in 2 seconds と表示されるのでスペースキーを打って Linux 側のブートを止める

上記の手順でC66x DSP用のプログラムをデバッグ出来るようになった。

Linuxと連携

Linux上でDSPと通信するには Processor SDK の IPC を使う必要がある。

http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components_IPC.html#ipc-quick-start-guide