第4章 Impulse C の導入 安達ほのか シグナルやストリーム 、メモリーは型だからそのまま訳す.

Slides:



Advertisements
Similar presentations
太原研究室 M1 割田臣一.  既に述べたように、イメージフィルタは一般に、 動作しているイメージデータの画面に作用する。 ◦ この例では、 3×3 ウィンドウ上でフィルタを作用させる。 ◦ 処理においては 3 つの新しい値と、先程のピクセルの計 算で用いた 6 つの同じ値を使う。  カラム(
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
シーケンス図の生成のための実行履歴圧縮手法
相互作用図 FM11010 田中健太.
Chapter11-4(前半) 加藤健.
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
Java I 第2回 (4/18)
Capter9 Creating an Embedded Test Bench ( )
計算機アーキテクチャ特論Chapter.6.6~6.9
JavaによるCAI学習ソフトウェアの開発
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
伺か with なでしこ 発表者:しらたま /05/05 うかべん大阪#3.
Chapter 5. Describing a FIR Filter 5.3後半~5.6
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
情報科学1(G1) 2016年度.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
MSBuild 色々出来るよ 2011/04/02 お だ.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
第1章 計算基盤としてのFPGA 滝本 宗宏.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
C#とC++とオブジェクト指向 上甲 健史.
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
高速剰余算アルゴリズムとそのハードウェア実装についての研究
その他の図 Chapter 7.
図書館職員のための アプリケーション開発講習会
暗黙的に型付けされる構造体の Java言語への導入
マルチスレッド処理 マルチプロセス処理について
プログラミング言語入門.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
実行時情報に基づく OSカーネルのコンフィグ最小化
巡回冗長検査CRC32の ハード/ソフト最適分割の検討
ゲーム開発モデルの基礎.
通信機構合わせた最適化をおこなう並列化ンパイラ
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
Fortranについて 高エネルギー加速器研究機構 平山 英夫.
アスペクト指向言語のための 独立性の高いパッケージシステム
Java における 先進的リフレクション技術
C言語 はじめに 2016年 吉田研究室.
高度プログラミング演習 (01).
マイグレーションを支援する分散集合オブジェクト
コンパイラ 2012年10月1日
Handel-Cを用いた パックマンの設計
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
「マイグレーションを支援する分散集合オブジェクト」
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
プログラム分散化のための アスペクト指向言語
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
第2回 開発環境とゲーム 05A1030 佐々木 和也.
extern の意味 (C プログラミング演習,Visual Studio 2019 対応)
コンパイラ 2012年10月11日
プログラミング 4 文字列.
ソフトウェア工学 知能情報学部 新田直也.
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
1.2 言語処理の諸観点 (1)言語処理の利用分野
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

第4章 Impulse C の導入 安達ほのか シグナルやストリーム 、メモリーは型だからそのまま訳す

はじめに Impulse Cは通信プロセスプログラミングモデルを使用することにより、並列で複雑なハードウェア/ソフトウェアアルゴリズムとアプリケーションの開発をサポートすることができる。 Impluse C の起源について ロスアラモス国立研究所のマヤ・ゴーカレー博士 Streams-Cの商用化であり、 FPGAベースの基盤レベルプラットホームで実現のアプリケーションを表現するメソッドを提供。 Streams-Cを使用することで、データ暗号化、イメージプロセッシング、天体物理学などの分野でアプリケーションが開発された。 ※ Streams-C  一般に公開されているC言語のコンパイラ

Impluse CとStreams-Cの相違点 Impluse Cライブラリは標準のC開発ツールを使用することで行動全体をシミュレートすることができる。 Impulse Cライブラリは、独自に連動している過程から成る並行なアプリケーションの編集とシミュレーションをするために、過程インタコネクト(ストリームなシグナルの相互連絡)を定義する機能を含み、スレッドを使用することで複数の過程(デスクトップシミュレーションの目的のための)の動きをエミュレートする。

Impulse Cツールはソフトウェアからハードウェアへのコンパイラを含んでいる。

4.1 Impulse Cの目的 高度な並行動作アプリケーションを可能にすること このマルチプロセッサ(並行アプローチ)はFPGA基盤の  高度な並行動作アプリケーションを可能にすること このマルチプロセッサ(並行アプローチ)はFPGA基盤の   組み込みシステムに適している ストリーム、シグナル、メモリーへのサポートは   それぞれのデータタイプに関連付けられたCコンパチブル(互換性   のある)組み込み関数を経由してImpulse Cに提供する。 ハードウェアに写像する過程において、C言語はCの部分集合  に抑制される。一方ソフトウェアの過程は、ホストかImpulse C   コンパイラの制限で抑制される。 並行が違う 部分集合とはなんぞや

Impulse Cソフトウェア・ライブラリはコンパイルに ビジュアルスタジオのようなスタンダードC Impulse Cコンパイラはハードウェアの過程のために、指定されたストリーム、シグナル、およびメモリーを実行しながら統合された HDL(ハードウェア記述言語)を作り出す。 コンパイラは命令スケジューリング、ループのパイプライン処理、およびループ変換(プログラムのサイズを犠牲に実行速度を最適化すること)を実行する。 Impulse Cソフトウェア・ライブラリはコンパイルに  ビジュアルスタジオのようなスタンダードC  開発ツールを使うと、 Impulse Cアプリケーション  の並列な動きのデスクトップエミュレーションや  シミュレーションをサポートする。 ループ変換とはなんぞや

Impulse Cライブラリは複数の埋め込みプロセッサにおけるImpulse Cソフトウェア処理の実行をサポートする Xilinx MicroBlazeやパワーPCベースのFPGAsなどの特定のFPGAベースのターゲットに利用可能 ハードウェアがソフトウェア処理に連結しないモジュールを生成するのに使用できる    →Impulse Cを利用するために埋め込み      プロセッサを必ずしも含む必要はない

4.2 Inpulse Cは、通信プロセスの並行なプログラミングモデルを支持してCコンパチブル事前に定義されたライブラリ関数を使用することで、標準のANSI C(アメリカ国内の工業製品の規格を策定する団体の定めたC言語の規格)を拡張している。 Impulse Cでは、プログラミングモデルは永続的なCサブルーチンとして実装される独自に連動しているプロセスのコミュニケーションのプライマリメソッドとしてバッファリングされたデータ・ストリームの使用を強調する。 ※サブルーチン プログラミングにおいて、コード中で何度も       必要とされる定型的な処理を一つのプログラムに       まとめて外部から呼び出せるようにしたもの。

構成されるFlFOsを使用するデータのこのバッファリングで、より高いレベルの抽象化で並列アプリケーションを書くことが可能になる。 Impulse Cは事前に定義されたCコンパチブルというライブラリ関数を使っているスタンダードANSI Cを拡張した。 そのライブラリ関数は、通信プロセスの並列なプログラミングモデルを支持している。 Impulse Cはストリーム指向のアプリケーションのために設計されているが、代替のプログラミングモデルをサポートするほど柔軟性があり、並行で、独自に連動しているプロセスの間の伝達方法としてシグナルと共有メモリの使用を含んでいる。

Impluse Cアプリケーションはデスクトップシミュレーションのために標準C開発ツールでコンパイルできる。   あるいはFPGAターゲットのためにImpluse Cコンパイラ    でコンパイルできる。 Impulse Cコンパイラは、Impulse Cプログラムを適切な低レベル表現に翻訳して、最適化する。   そしてそれはFPGAへと統合できるVHDLハードウェア     記述と、広く利用可能なCクロスコンパイラの使用で    支持されたマイクロプロセッサにコンパイルできる   スタンダードCを含んでいる。 完全なImpulse C環境はImpulse Cアプリケーションが標準のデスクトップコンパイラで編集されて、作成されるのを許容するライブラリのセットからなる。

4.3 HelloFPGAとは どういったプログラム? ソフトウェアテストベンチの関係

4.3 Impulse Cのプログラミング例① HelloFPGA _sw.c① 伝統的なプロセッサの上で動くソフトウェアを表す アプリケーションの一部 →伝統的はプロセッサとは? 目標システムの一部である埋め込み型プロセッサ デスクトップシミュレーションの間、ソフトウェアテストベンチ(試作品)として使用されるプロセッサ 結局何やってんの?あとあの図を解説する

HelloFPGA _sw.c② コメントヘッダ このプログラムにおける簡潔な説明 #include… マクロを含んでいる コメントヘッダ  このプログラムにおける簡潔な説明 #include…   co.hファイルはImpulse C関数ライブラリーを表す宣言と   マクロを含んでいる extern co_architecture…     関数co_initialize(初期設定)の宣言    main関数で参照されるかもしれないので、アプリケーション    のコンフィギレーション(構成)関数と同じファイルに    入っていなければならない特殊関数。

HelloFPGA _sw.c③ void Producer ソフトウェアソフトベンチのインプット側を表す いくつかの試験データ(この場合、“Hello FPGA!”という 文字を詳細に説明するキャラクタの簡単なストリーム) を生成 プロセス自体は、いくつかの宣言と、入力文字列を通して 繰り返しそして出力文字列として宣言されたストリームへと 文字を書きだす内部コードの繰り返し co_stream_open,co_stream_write,co_stream_close ImpulseCはこのようなプロセス走行関数定義を、 ハードウェアやソフトウェアの中で実際の実現や 具体化から引き離す。

HelloFPGA _sw.c④ void Consumer ソフトウェアテストベンチのアウトプット側を表す。 Producerプロセスのように、このプロセスはデータ ストリーム経由でアプリケーション(特にテストされる ハードウェアモジュール)の他の部分と相互に作用する。 また、キャラクタがモジュールでテストで生成されている 限り、このプロセスはinpute_streamからキャラクタを 読み込ませる内部コードのループをする。

HelloFPGA _sw.c⑤ main メイン関数。主な機能は単にコンソールに メッセージを表示することと、Impulse C関数である    メイン関数。主な機能は単にコンソールに    メッセージを表示することと、Impulse C関数である    co_initializeとco_executeを呼び出すことで    アプリケーションを実行する   co_initialize     あらゆるImpulse Cアプリケーションの必要な部分     (詳細は後に述べる)   co_execute     アプリケーションと、自身の構成するプロセスを実行する      Impulse Cライブラリの関数

Impulse Cのプログラミング例② HelloFPGA_hw.c① HelloFPGA_hw.cはFPGA上で動くハードウェアを表すアプリケーションの一部が書かれている。 #Include… co.hファイルを読み込んでいる Extern宣言 HelloFPGA_sw.cで定義されたProducerとConsumer プロセスのための宣言。コンフィギュレーション関数は これらが処理する参照が必要なので、ここで必要となる。 Pruducer , Coustmer

HelloFPGA_hw.c② void DoHello プロセス走行関数。このプロセス走行関数は二つのストリーム    プロセス走行関数。このプロセス走行関数は二つのストリーム    オブジェクトを受け入れる。その片方である入力ストリームは、    8ビットの文字値の入ってくるストリームを表す。    このストリームはProducerプロセスの出力に関連づけられる。    もう片方の出力ストリームは処理データを表している。    そのデータもまた8ビットの文字値である。    このストリームはConsumerプロセスに関する入力ストリームに    関連づけられる。Consumerプロセスのように、データが入力に    現れる限り、このプロセスは入力ストリームを作動させる内部     コードをループする。    このストリーム操作はImpulse C関数である以下の     co_stream_open, co_stream_read,co_stream_write,     co_stream_closeを用いて説明される。

HelloFPGA_hw.c③ void config_subroutine     このco_process_create関数コールはこのプロセスの     インスタンスを一つ作成し、そのプロセスインスタンスの         名前を示す。このプロセスは実際に受信データで     何もしない。代わりに、入力ストリームに現れる各値は     すぐに、co_stream_writeを通して出力ストリームに     書かれる。 void config_subroutine     コンフィギュレーションサブルーチンは,アプリケーションの     構造をプロセスがどう相互接続されていることになっているか        使われたプロセスの観点から定義する。このコンフィギュ     レーションサブルーチンは、3つのプロセスインスタンスを     作成するためにco_process_create関数を使う。そのイン     スタンスは producer, consumer, helloという名が与えられる。

HelloFPGA_hw.c④ データをproducerからhelloへ、またhelloからconsmerへ     それぞれ2つのストリームを作成するために     co_stream_create関数を使った。最後に、明確に述べる      ためにプロセスコンフィギュレーション関数の        co_process_configを使った。     3つのプロセスのうちの一つ、helloは目標FPGAを表す     PEOと呼ばれるハードウェアリソースに割り当てられる     ことになっている。

HelloFPGA_hw.c⑤ co_archtecture co_initialize… コンフィギュレーションサブルーチンのように、 co_initialize関数はあらゆるImpulse Cアプリケーションで 必要とされる。この関数の中ではco_architecture_create 関数への唯一の呼び出しです。その関数は前もって アプリケーションの目標アーキテクチャへ(この場合では ジェネリックハードウェア・ソフトウェアプラットフォーム)の コンフィギュレーション関数を関連付けます。(特定の プログラム可能な編集の目標になるプラットフォームは ハードウェアコンパイラ設定の一部としてアプリケーション ソースファイルの外で定義される。)