森田/研究メモ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
----
*研究目的について [#u3adf80c]
-最終的な到達点は何処?
--FPGAによる低コストな多体粒子相互計算HPCを実現
--PROGRAPEシステムを複数のFPGAに乗せて並列運用とか?
-知っておくべきこと
--GPGPUというトレンド 何に強くて何に弱いの?
--FPGAは何に強い? ASIC、CPU、GPUとの比較
--FPGAの潮流 どんな製品が出てきてる?
*PROGRAPEシステム動作 [#sb079dd4]
-adr_dec
--各種weをADRから判定
---pg_pipeへのwe - 0000101 XXxxxxxxxxxx XXが自分のFPGA_NOならアサート
---jmemへのwe - 1xxxxxx xxxxxxxxxxxx ならアサート
---setnへのwe - 0000111 000000000000 ならアサート
---calcへのwe - 0000111 000000000011 ならアサート(start信号)
-setn
--weが入ったときにレジスタにDTIを入れ、それを出力する
-calc
--reset puls
---clkの立ち上がりにrst信号の判定を行う
---startがネゲートされたときにrstnをアサート
---次のpclkの立ち上がりでrstnをrstへ
--GENERATE mem_adr
---rstが1の時に、setnからの出力の下位18bitを内部レジスタmema_dcへ
---pclkの立ち上がりでmema_dcを1減算する
--GENERATE run
---rstが0かつ、mema_dcが0でなければ1
--mem_adrは 00000000 0000000 mema_dc(下位16bit) 0の形で出力される
-pipe_sts
--clkの立ち上がりで、runをirunに、runretをrundへ
--rst信号がくるか、clkの立ち上がりの時に以下の条件でstatusが変わる
---runret=0, rund=1でstatusが1(runretが1から0になったとき)
---run=1, irun=0でstatusが0(runが0から1になったとき)
---それ以外の時は現状維持
--statusは0で初期化されている
----
pg_pipe
-input
--clk
--p_run
--pclk
--pipe_sts
--rst
--p_jdata[127..0]
---jmemから
--p_adri[11..0]
---0 ADR(9 downto 3) 0 ADR(2 downto 0)
--p_datai[63..0]
---DTIから
--p_adro[11..0]
---0 ADR(9 downto 3) 0 ADR(2 downto 0)
-output
--p_runret
---runretの最下位bit(pipeユニットの0番目)
--p_datao[63..0]
---u_adroを見て、それに対応したユニットから出てきたp_dataoの内容を入れる
---それ以外ならば、上位63bitが0、最下位ビットにpipe_stsを入れた値を入れる
--test_out[63..0]
---temp_out(63 downto 0)
-内部信号
--u_adri
---p_adri(11 downto 4)
--u_adro
---p_adro(11 downto 4)
--l_adro
---p_adro(3 downto 0)
-p_we
--u_adriを見て、それに対応したビットをアサート
-pipeコンポーネント
--7個のpipeコンポーネントを生成
--p_jdata, p_run,p_datai,rst,pclk,clkはそのまま
--p_we, runretは対応したビットに接続
--p_adri,p_adroは下位4bit
--p_dataoの接続は対応したビット幅でdataoに接続
---p_datao=>datao(IDATA_WIDTH*(i+1)-1 downto IDATA_WIDTH*i)
--test_outはtemp_outへ p_dataoみたいな感じで
----
ADR
000 0000 0000 0000 0000 (19bit)
■adr_dec
pg_pipeへのwe - 0000101 XXxxxxxxxxxx XXが自分のFPGA_NOならアサート
jmemへのwe - 1xxxxxx xxxxxxxxxxxx ならアサート
setnへのwe - 0000111 000000000000 ならアサート
calcへのwe - 0000111 000000000011 ならアサート(start信号)
■jmem
wadrへ (15 downto 0)
■pg_pipe
0000 0000 0000
| | | |
ADR(9-3) ADR(2-0)
上8ビットは対応するパイプラインユニットのweをアサートするために使用
下4ビットはパイプユニットへ
■pipe
まだみてない
DTI
0000 * 16 (64bit)
■setn
weが1のときに、レジスタへDTIの下位32ビットを入れる
これはcalcへの入力nとなる
■calc
startがネゲートされた直後のpclkの立ち上がりで、内部レジスタmema_dcへnの下位18bitを入れる
それ以外の時、mema_dcは0になるまで1クロック毎にデクリメントされる
mem_adr <= "000000000000000" & mema_dc(15 downto 0) & "0" この形で出力
■jmem
下位16ビットを使用
■pg_pipe
そのままの64ビットでパイプユニットへ
■pipe
まだみてない
----
■RAMへのWrite
ADR(18) - 1ならRAMへのWEが有効に
ADR(14 downto 1) - 書き込むアドレス
ADR(0) - byte enableの定義に必要
DTIが64bitだが、pipeで扱うjdataは128bitのため、バイトイネーブルで上の64bitと下の64bitを別々に書き込めるようになっている。
RAMコンポーネントにはDTIはin <= DTI + DTIの形で入り、もし最下位bitが0ならば、バイトイネーブル信号は0x00ffとなり、ADR(14 downto 1)の下位64bitへデータが書き込まれる。
最下位bitが1ならば、バイトイネーブル信号は0xff00となり上位64bitへ。
■RAMからのRead
ADRが0000111 000000000000の時の、DTI下位32bitをsetnコンポーネントの内部レジスタで保持。
その後、ADRに0000111 000000000011が入ると、calcコンポーネントへアサートされたstart信号が入る。
このstartがネゲートされてから、二つ目のクロックの立ち上がりで、calcからRAMへread addressの信号が入る。
■制御系
ADRに以下を入れる
pipe - 0000101 XXxxxxxxxxx (XXが自分のFPGA_NOであること)
fo - 0000110 xXXxxxxxxxxx (XXが自分のFPGA_NOであること)
setn - 0000111 000000000000
run - 0000111 000000000011
■pg_pipeでのADR
0000 0000 0000
| | | |
ADR(9-3) ADR(2-0)
上8ビットは対応するパイプラインユニットのweをアサートするために使用
下4ビットはパイプユニットのどのレジスタにidataを書き込むかの判定
*気になった論文とか [#pb3b1ac8]
-物理計算のための並列リコンフィギャラブルシステムの開発
--http://progrape.jp/pgr-blog/presen/20050513-reconf-paper.pdf
物理計算におけるリコンフィギュラブルシステム
浮動小数点回路は複雑→カスタムLSIに負ける
But,精度が必要ない場合ならば、ビット幅を自由に変更できるリコンフィギュラブルシ
ステムはFPGAに多数の演算気を集積し、並列に動作することで性能差を縮められる
設計環境が未整備→浮動小数点演算は基本的な四則演算から高等関数まで幅広い設計ラ
イブラリが整っていないとアプリケーションは非常に限られたものになってしまう
ハードウェア記述言語の知識がないと設計不可→ハードル高し
キラーアプリケーション:粒子シミュレーション
粒子シミュレーションは天体物理計算や物理科学計算で頻繁に使われる
多数の粒子が相互作用しながら時間とともに進化する系を数値的に解析する
-FPGA アレイを用いた Reconfigurable HPC における演算回路の実装と評価
--http://www.sekine-lab.ei.tuat.ac.jp/papers/42.pdf
FPGAを用いたHPCサーバ:Maxwell
FPGA を扱う上での課題は回路のプログラミングとソフトウェアからの制御が難しい
-リコンフィギャラブルシステムのハイパフォーマンスコンピューティングへの応用
--http://www.ssken.gr.jp/MAINSITE/download/newsletter/2007/sci/2/3_amano.pdf
-ようこそ GPGPU の世界へ
--http://ir.nul.nagoya-u.ac.jp/dspace/bitstream/2237/1059/1/305_317kaisetu02.pdf
-GPUによるタンパク質高精度静電ポテンシャル計算の高速化
--http://www.jstage.jst.go.jp/article/seisankenkyu/61/2/103/_pdf/-char/ja/
3.1にてHPCにおけるGPU利用について触れている
終了行:
#contents
----
*研究目的について [#u3adf80c]
-最終的な到達点は何処?
--FPGAによる低コストな多体粒子相互計算HPCを実現
--PROGRAPEシステムを複数のFPGAに乗せて並列運用とか?
-知っておくべきこと
--GPGPUというトレンド 何に強くて何に弱いの?
--FPGAは何に強い? ASIC、CPU、GPUとの比較
--FPGAの潮流 どんな製品が出てきてる?
*PROGRAPEシステム動作 [#sb079dd4]
-adr_dec
--各種weをADRから判定
---pg_pipeへのwe - 0000101 XXxxxxxxxxxx XXが自分のFPGA_NOならアサート
---jmemへのwe - 1xxxxxx xxxxxxxxxxxx ならアサート
---setnへのwe - 0000111 000000000000 ならアサート
---calcへのwe - 0000111 000000000011 ならアサート(start信号)
-setn
--weが入ったときにレジスタにDTIを入れ、それを出力する
-calc
--reset puls
---clkの立ち上がりにrst信号の判定を行う
---startがネゲートされたときにrstnをアサート
---次のpclkの立ち上がりでrstnをrstへ
--GENERATE mem_adr
---rstが1の時に、setnからの出力の下位18bitを内部レジスタmema_dcへ
---pclkの立ち上がりでmema_dcを1減算する
--GENERATE run
---rstが0かつ、mema_dcが0でなければ1
--mem_adrは 00000000 0000000 mema_dc(下位16bit) 0の形で出力される
-pipe_sts
--clkの立ち上がりで、runをirunに、runretをrundへ
--rst信号がくるか、clkの立ち上がりの時に以下の条件でstatusが変わる
---runret=0, rund=1でstatusが1(runretが1から0になったとき)
---run=1, irun=0でstatusが0(runが0から1になったとき)
---それ以外の時は現状維持
--statusは0で初期化されている
----
pg_pipe
-input
--clk
--p_run
--pclk
--pipe_sts
--rst
--p_jdata[127..0]
---jmemから
--p_adri[11..0]
---0 ADR(9 downto 3) 0 ADR(2 downto 0)
--p_datai[63..0]
---DTIから
--p_adro[11..0]
---0 ADR(9 downto 3) 0 ADR(2 downto 0)
-output
--p_runret
---runretの最下位bit(pipeユニットの0番目)
--p_datao[63..0]
---u_adroを見て、それに対応したユニットから出てきたp_dataoの内容を入れる
---それ以外ならば、上位63bitが0、最下位ビットにpipe_stsを入れた値を入れる
--test_out[63..0]
---temp_out(63 downto 0)
-内部信号
--u_adri
---p_adri(11 downto 4)
--u_adro
---p_adro(11 downto 4)
--l_adro
---p_adro(3 downto 0)
-p_we
--u_adriを見て、それに対応したビットをアサート
-pipeコンポーネント
--7個のpipeコンポーネントを生成
--p_jdata, p_run,p_datai,rst,pclk,clkはそのまま
--p_we, runretは対応したビットに接続
--p_adri,p_adroは下位4bit
--p_dataoの接続は対応したビット幅でdataoに接続
---p_datao=>datao(IDATA_WIDTH*(i+1)-1 downto IDATA_WIDTH*i)
--test_outはtemp_outへ p_dataoみたいな感じで
----
ADR
000 0000 0000 0000 0000 (19bit)
■adr_dec
pg_pipeへのwe - 0000101 XXxxxxxxxxxx XXが自分のFPGA_NOならアサート
jmemへのwe - 1xxxxxx xxxxxxxxxxxx ならアサート
setnへのwe - 0000111 000000000000 ならアサート
calcへのwe - 0000111 000000000011 ならアサート(start信号)
■jmem
wadrへ (15 downto 0)
■pg_pipe
0000 0000 0000
| | | |
ADR(9-3) ADR(2-0)
上8ビットは対応するパイプラインユニットのweをアサートするために使用
下4ビットはパイプユニットへ
■pipe
まだみてない
DTI
0000 * 16 (64bit)
■setn
weが1のときに、レジスタへDTIの下位32ビットを入れる
これはcalcへの入力nとなる
■calc
startがネゲートされた直後のpclkの立ち上がりで、内部レジスタmema_dcへnの下位18bitを入れる
それ以外の時、mema_dcは0になるまで1クロック毎にデクリメントされる
mem_adr <= "000000000000000" & mema_dc(15 downto 0) & "0" この形で出力
■jmem
下位16ビットを使用
■pg_pipe
そのままの64ビットでパイプユニットへ
■pipe
まだみてない
----
■RAMへのWrite
ADR(18) - 1ならRAMへのWEが有効に
ADR(14 downto 1) - 書き込むアドレス
ADR(0) - byte enableの定義に必要
DTIが64bitだが、pipeで扱うjdataは128bitのため、バイトイネーブルで上の64bitと下の64bitを別々に書き込めるようになっている。
RAMコンポーネントにはDTIはin <= DTI + DTIの形で入り、もし最下位bitが0ならば、バイトイネーブル信号は0x00ffとなり、ADR(14 downto 1)の下位64bitへデータが書き込まれる。
最下位bitが1ならば、バイトイネーブル信号は0xff00となり上位64bitへ。
■RAMからのRead
ADRが0000111 000000000000の時の、DTI下位32bitをsetnコンポーネントの内部レジスタで保持。
その後、ADRに0000111 000000000011が入ると、calcコンポーネントへアサートされたstart信号が入る。
このstartがネゲートされてから、二つ目のクロックの立ち上がりで、calcからRAMへread addressの信号が入る。
■制御系
ADRに以下を入れる
pipe - 0000101 XXxxxxxxxxx (XXが自分のFPGA_NOであること)
fo - 0000110 xXXxxxxxxxxx (XXが自分のFPGA_NOであること)
setn - 0000111 000000000000
run - 0000111 000000000011
■pg_pipeでのADR
0000 0000 0000
| | | |
ADR(9-3) ADR(2-0)
上8ビットは対応するパイプラインユニットのweをアサートするために使用
下4ビットはパイプユニットのどのレジスタにidataを書き込むかの判定
*気になった論文とか [#pb3b1ac8]
-物理計算のための並列リコンフィギャラブルシステムの開発
--http://progrape.jp/pgr-blog/presen/20050513-reconf-paper.pdf
物理計算におけるリコンフィギュラブルシステム
浮動小数点回路は複雑→カスタムLSIに負ける
But,精度が必要ない場合ならば、ビット幅を自由に変更できるリコンフィギュラブルシ
ステムはFPGAに多数の演算気を集積し、並列に動作することで性能差を縮められる
設計環境が未整備→浮動小数点演算は基本的な四則演算から高等関数まで幅広い設計ラ
イブラリが整っていないとアプリケーションは非常に限られたものになってしまう
ハードウェア記述言語の知識がないと設計不可→ハードル高し
キラーアプリケーション:粒子シミュレーション
粒子シミュレーションは天体物理計算や物理科学計算で頻繁に使われる
多数の粒子が相互作用しながら時間とともに進化する系を数値的に解析する
-FPGA アレイを用いた Reconfigurable HPC における演算回路の実装と評価
--http://www.sekine-lab.ei.tuat.ac.jp/papers/42.pdf
FPGAを用いたHPCサーバ:Maxwell
FPGA を扱う上での課題は回路のプログラミングとソフトウェアからの制御が難しい
-リコンフィギャラブルシステムのハイパフォーマンスコンピューティングへの応用
--http://www.ssken.gr.jp/MAINSITE/download/newsletter/2007/sci/2/3_amano.pdf
-ようこそ GPGPU の世界へ
--http://ir.nul.nagoya-u.ac.jp/dspace/bitstream/2237/1059/1/305_317kaisetu02.pdf
-GPUによるタンパク質高精度静電ポテンシャル計算の高速化
--http://www.jstage.jst.go.jp/article/seisankenkyu/61/2/103/_pdf/-char/ja/
3.1にてHPCにおけるGPU利用について触れている
ページ名: