PGR QandA
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[大堀/研究]]
//研究室限定
#contents
*Q and A [#ced5156d]
** Q1:エミュレータでは正しい値が得られるのに、実機で動かすと正しい値が得られません。 [#f9e0591a]
-Ans.
-- モジュール毎にパイプラインの設定はしていますか?
例:pg_float_sub(x,y,z,NFLO,NMAN,NST,RM)のNST(パイプライン段数)は設定していますか?
RM(丸め誤差モード:round-mode)は省略可ですが、
NSTを省略すると正しく動きませんでした。
NST=3で動作確認済みです。
※ pg_conv_floattofixはwebのリファレンスではNSTの記述が省略されていました。…が動作確認できていません。(出来た方はこの部分削除お願いします。)
-- pg_bits_delayは挿入されていますか?
pg_bits_delay(x,z,NBIT,NST)をプログラム内に挿入してみると、うまくいく場合があります。
NST=10で動作確認済みです。
-- それでもダメ。
モジュール一つ一つを検証しながらどこのモジュールの記述で間違った値がでるのか確認しましょう。
**Q2:浮動小数点のマップ方式がわかりません。デバッグ中の中間値がわかりません。 [#ma598cc4]
-Ans.
--[[大堀/研究/データ/PROGRAPE-型]]参照。
--例
|NFLO|NMAN|NEXP|
|26|16|8|
の時は、
|>|>|>| 26bit |
| 1 bit | 1 bit | 8 bit | 16 bit |
|sign bit|nonzero bit|exp data | mantissa data|
**Q3:pg_fix_accum と pg_fix_smaccum の違いがわかりません。pg_fix_smaccumとはなんですか? [#oa53952d]
**Q4:pg_float_accumモジュールがないと言われましたが使えないのでしょうか? [#m7c311be]
-回路合成時
--pgrvではpg_float_accumに関するvhdファイルが生成されますが,変更を加える必要があります.
--ISE_PROJECT/pgpg_mem/pg_pipe.vhd
pg_float_accum_26_16_4_6 port map(......, run=>run);
↓以下のように書き換えましょう.
pg_float_accum_26_16_4_6 port map(......, run=>run(10※));
※ run()の数値の設定ですが、pg_float_fixaccumで生成されるrunの値を目安にすると良いです。
**Q5 pg_float_divを使うと合成時にエラーが出る[#v464d245]
エミュレーションでは結果が出るのだけれど、ISE_PROJECTでmakeするとエラーが出る&br;
エラーは
ISE_PROJECT/pgpg_mem/pg_module.vhd Undefined symbol 'z0'
pg_float_divは、pg_float_recipro(逆数)と pg_float_mult(乗算)から構成されている。この2つの演算器の入出力の宣言がうまくいってない。&br;
z0の宣言を追加してもエラーが増えるだけだった。
&br;&br;
解決策:::pg_float_divを使いたいときはpg_float_reciproとpg_float_multを使う。 &br;
他に良い案があったら、教えてください。&br;
**PROGRAPEの実行時間解析方法は? [#yc8ec125]
force()関数にてかかる時間は~
++転送時間
++計算時間
++その他の時間~
で構成される。~
~
|名|関数名|
|j-particleの転送時間|pgr_setjpset_one(devid, j, jdata);|
|i-particleの転送時間|pgr_setipset_one(devid, ichip, iii, idata, 4);|
|計算時間|pgr_start_calc(devid, nj);|
|計算結果をホストへ返す転送時間|pgr_getfoset(devid, fdata);|
~
上記3つの転送時間の合計と計算時間、そのほかの時間を合わせて
force()関数全体の時間となる。~
t1~
force();~
t2~
t2-t1でforce関数全体の時間を計り、転送時間と計算時間を引けば
そのほかの時間が算出される。~
*そのほかの時間(型変換double->pgr)など。~
~
*その他データ [#a6bb35c3]
***モジュール毎のパイプラインの設定について [#q8c066f7]
- web上のリファレンスによると、pg_fix_accumのパイプラインの記述を省いても動作しているようだが、他のモジュールは、記述しなければうまく動かないものがあるので注意。
- 下記、設定しないと正しい値が得られなかったモジュール
--他にもあると思う。
|モジュール名|NST|
|pg_float_add|3|
|pg_float_sub|3|
|pg_float_mult|3|
|pg_float_fixaccum|2以上|
終了行:
[[大堀/研究]]
//研究室限定
#contents
*Q and A [#ced5156d]
** Q1:エミュレータでは正しい値が得られるのに、実機で動かすと正しい値が得られません。 [#f9e0591a]
-Ans.
-- モジュール毎にパイプラインの設定はしていますか?
例:pg_float_sub(x,y,z,NFLO,NMAN,NST,RM)のNST(パイプライン段数)は設定していますか?
RM(丸め誤差モード:round-mode)は省略可ですが、
NSTを省略すると正しく動きませんでした。
NST=3で動作確認済みです。
※ pg_conv_floattofixはwebのリファレンスではNSTの記述が省略されていました。…が動作確認できていません。(出来た方はこの部分削除お願いします。)
-- pg_bits_delayは挿入されていますか?
pg_bits_delay(x,z,NBIT,NST)をプログラム内に挿入してみると、うまくいく場合があります。
NST=10で動作確認済みです。
-- それでもダメ。
モジュール一つ一つを検証しながらどこのモジュールの記述で間違った値がでるのか確認しましょう。
**Q2:浮動小数点のマップ方式がわかりません。デバッグ中の中間値がわかりません。 [#ma598cc4]
-Ans.
--[[大堀/研究/データ/PROGRAPE-型]]参照。
--例
|NFLO|NMAN|NEXP|
|26|16|8|
の時は、
|>|>|>| 26bit |
| 1 bit | 1 bit | 8 bit | 16 bit |
|sign bit|nonzero bit|exp data | mantissa data|
**Q3:pg_fix_accum と pg_fix_smaccum の違いがわかりません。pg_fix_smaccumとはなんですか? [#oa53952d]
**Q4:pg_float_accumモジュールがないと言われましたが使えないのでしょうか? [#m7c311be]
-回路合成時
--pgrvではpg_float_accumに関するvhdファイルが生成されますが,変更を加える必要があります.
--ISE_PROJECT/pgpg_mem/pg_pipe.vhd
pg_float_accum_26_16_4_6 port map(......, run=>run);
↓以下のように書き換えましょう.
pg_float_accum_26_16_4_6 port map(......, run=>run(10※));
※ run()の数値の設定ですが、pg_float_fixaccumで生成されるrunの値を目安にすると良いです。
**Q5 pg_float_divを使うと合成時にエラーが出る[#v464d245]
エミュレーションでは結果が出るのだけれど、ISE_PROJECTでmakeするとエラーが出る&br;
エラーは
ISE_PROJECT/pgpg_mem/pg_module.vhd Undefined symbol 'z0'
pg_float_divは、pg_float_recipro(逆数)と pg_float_mult(乗算)から構成されている。この2つの演算器の入出力の宣言がうまくいってない。&br;
z0の宣言を追加してもエラーが増えるだけだった。
&br;&br;
解決策:::pg_float_divを使いたいときはpg_float_reciproとpg_float_multを使う。 &br;
他に良い案があったら、教えてください。&br;
**PROGRAPEの実行時間解析方法は? [#yc8ec125]
force()関数にてかかる時間は~
++転送時間
++計算時間
++その他の時間~
で構成される。~
~
|名|関数名|
|j-particleの転送時間|pgr_setjpset_one(devid, j, jdata);|
|i-particleの転送時間|pgr_setipset_one(devid, ichip, iii, idata, 4);|
|計算時間|pgr_start_calc(devid, nj);|
|計算結果をホストへ返す転送時間|pgr_getfoset(devid, fdata);|
~
上記3つの転送時間の合計と計算時間、そのほかの時間を合わせて
force()関数全体の時間となる。~
t1~
force();~
t2~
t2-t1でforce関数全体の時間を計り、転送時間と計算時間を引けば
そのほかの時間が算出される。~
*そのほかの時間(型変換double->pgr)など。~
~
*その他データ [#a6bb35c3]
***モジュール毎のパイプラインの設定について [#q8c066f7]
- web上のリファレンスによると、pg_fix_accumのパイプラインの記述を省いても動作しているようだが、他のモジュールは、記述しなければうまく動かないものがあるので注意。
- 下記、設定しないと正しい値が得られなかったモジュール
--他にもあると思う。
|モジュール名|NST|
|pg_float_add|3|
|pg_float_sub|3|
|pg_float_mult|3|
|pg_float_fixaccum|2以上|
ページ名: