PBL1-v1-013j.pptx

NAIST
27 de Dec de 2022
PBL1-v1-013j.pptx
PBL1-v1-013j.pptx
PBL1-v1-013j.pptx
PBL1-v1-013j.pptx
PBL1-v1-013j.pptx
PBL1-v1-013j.pptx
PBL1-v1-013j.pptx
PBL1-v1-013j.pptx
PBL1-v1-013j.pptx
PBL1-v1-013j.pptx
1 de 10

Mais conteúdo relacionado

Similar a PBL1-v1-013j.pptx

Building a DSL with GraalVM (VoxxedDays Luxembourg)Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)Maarten Mulders
ISCA Final Presentaiton -  CompilationsISCA Final Presentaiton -  Compilations
ISCA Final Presentaiton - CompilationsHSA Foundation
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
C++ AMP 실천 및 적용 전략 C++ AMP 실천 및 적용 전략
C++ AMP 실천 및 적용 전략 명신 김
Scaling IO-bound microservicesScaling IO-bound microservices
Scaling IO-bound microservicesSalo Shp
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2PVS-Studio

Similar a PBL1-v1-013j.pptx(20)

Mais de NAIST

PBL1-v1-200j.pptxPBL1-v1-200j.pptx
PBL1-v1-200j.pptxNAIST
PBL1-v1-200e.pptxPBL1-v1-200e.pptx
PBL1-v1-200e.pptxNAIST
PBL1-v1-100j.pptxPBL1-v1-100j.pptx
PBL1-v1-100j.pptxNAIST
PBL1-v1-100e.pptxPBL1-v1-100e.pptx
PBL1-v1-100e.pptxNAIST
PBL1-v1-012j.pptxPBL1-v1-012j.pptx
PBL1-v1-012j.pptxNAIST
PBL1-v1-012e.pptxPBL1-v1-012e.pptx
PBL1-v1-012e.pptxNAIST

Último

ICT 10 2023-2024.pptxICT 10 2023-2024.pptx
ICT 10 2023-2024.pptxMichaelBandales
US Government Exchange NetZero.pdfUS Government Exchange NetZero.pdf
US Government Exchange NetZero.pdfMark Hilbert
4.docx4.docx
4.docxholdem holdem
aircraftbrakesystem (1).pptxaircraftbrakesystem (1).pptx
aircraftbrakesystem (1).pptxJairraJaeLuna
Unlocking Any Door In The 21st Century. Immersion In Biometric Security.Unlocking Any Door In The 21st Century. Immersion In Biometric Security.
Unlocking Any Door In The 21st Century. Immersion In Biometric Security.Payment Village
ELGI Airmate Air Accessories Total Compressed Air SolutionsELGI Airmate Air Accessories Total Compressed Air Solutions
ELGI Airmate Air Accessories Total Compressed Air SolutionsVijayEngineeringandM1

PBL1-v1-013j.pptx

Notas do Editor

  1. 様々なアプリケーションを取りあげて、アイマックスのポテンシャルを説明するシリーズです。第13回は、ハードウェアソフトウェア協調設計編です。といっても、ハードとソフトが高速かつシームレスに連携しているというだけですけどね。AI限定なら、たくさんありますが、汎用CGRAで、ハードソフト協調設計ができるシステムは、ほとんどみかけません。普通につくってしまうと、コンパイルに1時間かかるので、協調設計どころではないからです。
  2. これは、アイマックスのプログラムに使う、テンプレートです。EXEとEX4は、5入力ALUに使います。MEXは、アドレス同調機構に、CEXは、条件付きストアに、MOPとMO4は、ロードストアに使います。DMA情報が含まれているところが、すごいです。
  3. だいたいの感じがつかめたところで,アイマックスのプログラム開発環境について説明します。以前に説明したように,CGRAプログラムのデバッグは,ノイマン型のようにはいかないので,いろいろな実行方法が必要です。一発で動けばいいですが,動かない場合,どこで何がおこっているのかわからなければ,手も足もでません。この表は,実行方法の一覧です。本格的なCGRAの環境としては,これ以上のものはないと思います。Aでは,以前に説明した,イーマックス5エイビギンと,イーマックス5エイエンドで挟まれた部分をCPUで動かします。アイマックスコンパイラは,前に列挙した命令テンプレートをアイマックスの制御データにコンパイルしますが,このテンプレートは,C言語の関数呼び出しと全く同じ形式です。アイマックス機能のC言語ライブラリが用意されているので,アイマックスコンパイラを使わずに,通常のCコンパイラとCPUを使って,そのまま動かすことができます。この段階で正しく動かなければ,アイマックスコンパイラを使っても無駄です。 BからDでは,アームv8のクロスコンパイル環境と,アームとアイマックスシミュレータを使って,段階的に動かします。シミュレータを使えば,各アーム機械語命令の動きや,アイマックスの物理ユニットの動きを全て再現するので,内部で何が起こっているかを調査することができます。Bは,AのCPUをインテルからアームに変更しただけです。アイマックス機能C言語ライブラリを使い,アーム機械語命令のみで実行します。アーム特有の問題があれば,ここで解決しておきます。Cは,アイマックスコンパイラを使って,アーム機械語命令にアイマックスコードが埋め込まれたものを実行します。この時,CPUのDMA機能は使わず,ロードストア命令のみによって,アイマックスとのデータ送受を行います。送受する個々のデータをプリントエフなどにより確認することができます。Dは,フルスピードの実機と同じく,DMA機能を使ってデータ送受します。 EとFでは,シミュレータよりも正確に,アイマックスのハードウェアの内部動作を確認できます。プログラマが使うことは,あまりありませんが,最初に言ったように,プログラマがハードウェアも開発する局面では,必須のスキルです。Eは,べリログ言語で書かれたアイマックスの設計情報を回路レベルでシミュレーションします。配線レベルの動作を確認できますが,シミュレーション速度はとても遅いので,大きなプログラムを走らせることは,ほぼ不可能です。Fは,実機の中から指定した配線の波形を取り出して可視化してくれます。ただ,FPGA内部のメモリを流用するので,短い時間の波形しか観測できません。 GからIは,BからDを、シミュレータから,アームの実機に置き換えたものです。まとめると,Iが最終実行形態ですね。運が良い人は,いきなりIで試しましょう。動かなかったら,さかのぼって,いろいろ試してデバッグするのもよい方法です。でも,実機が少ない場合は,みんな試してみたくて,取り合いになります。一発で動く確率を上げてから試したほうが,取り合いにならないですね。前に「これ,いくらするんでしょうね」と言いました。何台も買える人は,なかなかいないでしょう。だから,AからIまでの,様々な方法が必要になるという側面もあります。慣れてきた人には,A、I、D、Iの順序がお勧めです。
  4. 色を入れ換えるだけの簡単な画像処理から始めます。左画像を入力すると、右画像のように、色が変わります。色をどのように変換するかは、RGB成分ごとの変換表をひとつにまとめた配列tで定義します。まず、C言語で書きます。画像は2次元構造ですが、画素はメモリ上で一列に並んでいるので1次元配列を使い、プログラムの構造は、あとでステンシル計算に対応できるよう、2重ループにします。インが入力画素、ピックスが処理中の1画素、tが色変換表、アウトが出力画素です。RGBの色成分は8ビットなので、シフトとマスク演算を使ってピックスから各8ビットを取り出します。そして、各成分を使って色変換表を引き、最後に3色をつなぐと、出力のでき上がりです。
  5. まず、アイマックスで実行する範囲をビギンとエンドで括ります。最初は、最内ループのみを対象とします。アイマックスは、各ユニット自身がループ制御も行います。ユニット内の単純な演算器に写像できるよう、最内ループは、ループ0という予約語を使って変形します。そして、Colを整数配列の添え字から、バイトアドレスに変更し、更新結果を後続ユニットが参照できるようにします。具体的には、初期値をマイナス4にして、ループ内部の先頭で4を加算するようにします。これで、先頭ユニットが、初期値マイナス4のcolを毎サイクルインクリメントし、後続ユニットが、元のプログラム通りにcolを参照できるようになります。もちろん、colを整数配列の添え字に使っている部分は、わる4が必要です。
  6. 次に、最内ループの中を少しづつ、アイマックス用の関数形式に書き換えていきます。ここでは、ピックス、RGBの代入部分のみを書き換えました。インロウWD、TR、TG、TBは、それぞれ、画像各ぎょうの先頭アドレス、赤成分、緑成分、青成分変換表の先頭アドレス、つまりベースアドレスです。LDUBRは、ロードしたピクセルちから、指定したバイト位置を切り出したものをオフセットとして、ベースアドレスに加えて1バイトをロードします。マスクB3は、右から4バイト目、マスクB2は、右から3バイト目、マスクB1は、右から2バイト目の各1バイトを意味します。元のC言語にあったシフトとマスク演算が、このように高機能ロード関数に吸収され、僅か4関数に置き換わりました。また、最初のロード関数末尾の、inとWDは、必要とするデータの先頭と長さです。今は画像1行分を扱うので、ワード数にWDを指定します。同様に、RGBの変換では、共通の配列tを使うので、先頭はt、ワード数は256かける3わる4です。さて、ここまで書き換えたら、コンパイルして、動作を確認することができます。実際に実行できるだけでなく、ロード関数の中で、ベースアドレスとオフセットが、指定した範囲を逸脱していないかがチェックされます。アイマックス用の関数形式は、途中の状態でも、普通のCコンパイラでコンパイルし、実行できます。途中にプリントエフを挿入しながら、少しづつ書き換えて、アルゴリズムのデバッグを進めていける点が大きな特長です。
  7. 残りの部分も、書き換えていきます。MMRGを使うと、変換後のRGBを1つにまとめることができます。最後のストアも、末尾に、先頭アドレスと長さを書いて、ベースアドレスとオフセットの逸脱をチェックします。以上で、元の最内ループが、わずか7関数に変換されました。最初、アイマックスの書き方が、アセンブラのようだと思ったことでしょう。確かにアセンブラに似ていますが、高機能ハードウェアを余すことなく使うためには、このような高機能関数として記述するほうが、無駄がなく、また、コンパイル時間を大幅に短縮できます。ノイマン型は、複雑なプログラムには、命令数を増やすことで対応しますが、CGRAは、高効率である代わりに、ハードウェア資源に制約があり、命令数をいくらでも増やすことはできません。自由記述のプログラムをコンパイラに丸投げすることをいくら繰り返しても、最適解にはたどり着けませんし、デバッグも不可能です。これが、アイマックスのプログラミングに高機能関数を使う理由です。ところで、CGRAをある程度知っている人は、これは逐次実行プログラムではないかと思うことでしょう。その通りです。逐次実行プログラムとしてアルゴリズムをデバッグし、最後は、アイマックス専用コンパイラでCGRAに写像し、同じ実行結果と、高効率処理を手に入れる。これが、アイマックスのプログラミング思想です。
  8. では、データの流れに着目して、プログラムを見直します。青いぎょうは、入力画像を必要とします。CGRAでは、最も上に配置されるべきです。次に、緑のぎょうは、RGB変換表を必要とします。入力画像をロードした後に使うので、CGRAでは、入力画像よりも下のユニットにしか配置できません。ただし、RGBの変換表は、一度に引くことができるので、同じ位置に配置できます。同様に、出力画像は最後に配置されます。このように、アイマックスコンパイラは、変数の依存関係を解析して、どのユニットに、どのデータを配置するかを決めます。
  9. アイマックスコンパイラは、このように、コンパイル結果を可視化してくれます。右うえはじが第0行0列です。ここには、最内ループのカウンタ初期値と、ALUを使う減算がセットされます。カウンタが0になったら、下のユニットに停止指示を出します。後続ユニットの動作が、順に止まっていきます。第0行1列には、colの加算、第1行0列には、最初のピックスロードがセットされています。右から2番目のレジスタに,pixという名前が見えます。これが、ロード結果が入るレジスタです。第2行0列から2列に、LDUBRがセットされています。そして,第3行0列に,紫のMMRGと、ストアがセットされます。このプログラムでは、アイマックスを起動すると、コンパイラが自動生成するDMA機能を使って、第1行0列に入力画像,第2行0列から2列に色変換表が用意された後、第3行0列のメモリに、毎サイクル1つの出力画素を格納します。演算器内部だけでなく、ユニット間もパイプライン化されているので、毎サイクル結果が出てくるわけです。実行が終わったら、同様にDMAでホストの主記憶に書き戻されます。これで、画像の1行だけを加速するアイマックスプログラムの完成です。でも、色がついている部分がまばらですね。ハードウェアは、64行4列分あります。まだ、ほんの小手調べです。
  10. アイマックスは、ハードソフト協調設計にも適したCGRAです。これを踏み台にして、自分のアプリ向けにカスタマイズするのも簡単です。アイマックスコンパイラとシミュレータのソースコードも公開しているので、好きにいじることができます。まあ、ぬるま湯につかっているエンジニアには、関係ないですけどね。ご視聴ありがとうございました。