加藤/研究/進捗状況/Benchmark
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[加藤/研究/進捗状況]]
#contents
*Benchmark [#p04bbcdf]
アセンブリレベルで4つのコアにプログラムを分割する
**案 [#y9c18860]
-Σi*j (i=0〜100, j=0〜100)
-FFT
-matrix
**Benchmark1: Σi*j (i=0〜100, j=0〜100) [#lfc086b2]
それぞれのコアで分割計算後、core0で全ての計算を行う~
core0: i=0〜100, j=0〜25~
core1: i=0〜100, j=26〜50~
core2: i=0〜100, j=51〜75~
core3: i=0〜100, j=76〜100~
-最終結果は7-segment LED(0x80000000)に表示
--core0の結果はResult0(0x00000069)にストア
--core1の結果はResult1(0x0000006a)にストア
--core2の結果はResult2(0x0000006b)にストア
--core3の結果はResult3(0x0000006c)にストア
--各コアは結果をストア後、それぞれの番地にフラグ=1を書き込む
---core1はFlag1(0x0000006e)
---core2はFlag2(0x0000006f)
---core3はFlag3(0x00000070)
-core0は、それぞれのフラグを確認してから値をロードする
--最終結果はLast_Result(0x0000006d)
***プログラム [#jdd674c5]
Queue Processorの特性を生かすため、全てのデータをメモリにロードしておく~
-C Program
--&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark1/Benchmark1.c,,Benchmark1.c);
-アセンブリプログラム
--Single core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark1/Benchmark1.s,,Benchmark1.s);
--Dual core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark1/Benchmark1_dual.s,,Benchmark1_dual.s);
--Quad core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark1/Benchmark1_quad.s,,Benchmark1_quad.s);
***検証結果 [#u552e50b]
-Cycle数
--Single core: 1289cycle
--Dual core: 1615cycle
--Quad core: 2451cycle
-Single coreのサイクル数が一番短くなった
--同時にロードする回数が非常に多いためこの結果になったと思われる
--これではマルチコアの意味がない
--メモリアクセスが少ないベンチマークを用いればQuad coreの性能が上がると思うのだが...
---Queue Processorの特性を生かしながら、メモリアクセスを少なくできるプログラムないかな??
**Benchmark2: FFT [#q6f06b1e]
とりあえずフーリエ変換をお勉強
-よく分からない
-バタフライ演算するだけでもいいかな
**Benchmark3: Σi(i=0〜100) [#c26138ef]
それぞれのコアで分割計算後、core0で全ての計算を行う~
core0: 0+1+...24+25~
core1: 26+27+...49+50~
core2: 51+52+...74+75~
core3: 76+77+...99+100~
-最終結果は7-segment LED(0x80000000)に表示
-あらかじめ、データ(0〜100)をメモリにストアしておく
--データ: 0x0000〜0x0065
--core0の結果: Result0(0x0066)
--core1の結果: Result1(0x0067)
--core2の結果: Result2(0x0068)
--core3の結果: Result3(0x0069)
--各コアは結果をストア後、それぞれの番地にフラグ=1を書き込む
---core1はFlag1(0x0070)
---core2はFlag2(0x0071)
---core3はFlag3(0x0072)
-core0は、それぞれのフラグを確認してから値をロードする
***プログラム [#jdd674c5]
Queue Processorの特性を生かすため、全てのデータをメモリにロードしておく~
-C Program
--&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark3/Benchmark3.c,,Benchmark3.c);
-アセンブリプログラム
--Single core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark3/Benchmark3.s,,Benchmark3.s);
--Dual core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark3/Benchmark3_dual.s,,Benchmark3_dual.s);
--Quad core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark3/Benchmark3_quad.s,,Benchmark3_quad.s);
***検証結果 [#u552e50b]
-Cycle数
--Single core: 477cycle
--Dual core: 353cycle
--Quad core: 361cycle
-Quad coreで計算するよりもDual coreで計算を行った方がサイクル数が短くなった
--Shared Memoryがsingle portのため4つのコアがメモリに同時にアクセスした際、3つのコアが待たなければならないことが原因だと思う
**Benchmark4: Σi(i=0〜100) [#x8081077]
SPR (Special Purpose Register)を使って、メモリへのアクセス数を減らす~
***プログラム [#jdd674c5]
-C Program
--&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark4/Benchmark4.c,,Benchmark4.c);
-アセンブリプログラム
--Single core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark4/Benchmark4.s,,Benchmark4.s);
--Dual core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark4/Benchmark4_dual.s,,Benchmark4_dual.s);
--Quad core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark4/Benchmark4_quad.s,,Benchmark4_quad.s);
***検証結果 [#u552e50b]
-Cycle数
--Single core: 2477cycle
--Dual core: 1323cycle
--Quad core: 779cycle
-Dual coreとSingle coreのcycle数の比では、Dual Core Systemが1.87倍のcycle数改善
-Quad coreとSingle coreのcycle数の比では、Quad Core Systemが3.18倍のcycle数改善
-Benchmark3に比べ、メモリアクセス数を減らすことによりProcessor coreの数が多いシステムの処理Cycle数が短くなる
-ただ、Level Order MannarでデータをフローしたBenchmark3に比べ、処理cycle数が全体的に増加している
**Benchmark6: 階乗の計算 N! [#g4fca9db]
同じ計算を4回行う~
***プログラム [#jdd674c5]
-C Program
--&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark6/Benchmark6.c,,Benchmark6.c);
-アセンブリプログラム
--Single core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark6/Benchmark6.s,,Benchmark6.s);
--Dual core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark6/Benchmark6_dual.s,,Benchmark6_dual.s);
--Quad core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark6/Benchmark6_quad.s,,Benchmark6_quad.s);
***検証結果 [#u552e50b]
-Cycle数
--Single core: 473 cycle
--Dual core: 263 cycle
--Quad core: 171 cycle
-Dual coreとSingle coreのcycle数の比では、Dual Core Systemが1.80倍のcycle数改善
-Quad coreとSingle coreのcycle数の比では、Quad Core Systemが2.77倍のcycle数改善
終了行:
[[加藤/研究/進捗状況]]
#contents
*Benchmark [#p04bbcdf]
アセンブリレベルで4つのコアにプログラムを分割する
**案 [#y9c18860]
-Σi*j (i=0〜100, j=0〜100)
-FFT
-matrix
**Benchmark1: Σi*j (i=0〜100, j=0〜100) [#lfc086b2]
それぞれのコアで分割計算後、core0で全ての計算を行う~
core0: i=0〜100, j=0〜25~
core1: i=0〜100, j=26〜50~
core2: i=0〜100, j=51〜75~
core3: i=0〜100, j=76〜100~
-最終結果は7-segment LED(0x80000000)に表示
--core0の結果はResult0(0x00000069)にストア
--core1の結果はResult1(0x0000006a)にストア
--core2の結果はResult2(0x0000006b)にストア
--core3の結果はResult3(0x0000006c)にストア
--各コアは結果をストア後、それぞれの番地にフラグ=1を書き込む
---core1はFlag1(0x0000006e)
---core2はFlag2(0x0000006f)
---core3はFlag3(0x00000070)
-core0は、それぞれのフラグを確認してから値をロードする
--最終結果はLast_Result(0x0000006d)
***プログラム [#jdd674c5]
Queue Processorの特性を生かすため、全てのデータをメモリにロードしておく~
-C Program
--&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark1/Benchmark1.c,,Benchmark1.c);
-アセンブリプログラム
--Single core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark1/Benchmark1.s,,Benchmark1.s);
--Dual core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark1/Benchmark1_dual.s,,Benchmark1_dual.s);
--Quad core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark1/Benchmark1_quad.s,,Benchmark1_quad.s);
***検証結果 [#u552e50b]
-Cycle数
--Single core: 1289cycle
--Dual core: 1615cycle
--Quad core: 2451cycle
-Single coreのサイクル数が一番短くなった
--同時にロードする回数が非常に多いためこの結果になったと思われる
--これではマルチコアの意味がない
--メモリアクセスが少ないベンチマークを用いればQuad coreの性能が上がると思うのだが...
---Queue Processorの特性を生かしながら、メモリアクセスを少なくできるプログラムないかな??
**Benchmark2: FFT [#q6f06b1e]
とりあえずフーリエ変換をお勉強
-よく分からない
-バタフライ演算するだけでもいいかな
**Benchmark3: Σi(i=0〜100) [#c26138ef]
それぞれのコアで分割計算後、core0で全ての計算を行う~
core0: 0+1+...24+25~
core1: 26+27+...49+50~
core2: 51+52+...74+75~
core3: 76+77+...99+100~
-最終結果は7-segment LED(0x80000000)に表示
-あらかじめ、データ(0〜100)をメモリにストアしておく
--データ: 0x0000〜0x0065
--core0の結果: Result0(0x0066)
--core1の結果: Result1(0x0067)
--core2の結果: Result2(0x0068)
--core3の結果: Result3(0x0069)
--各コアは結果をストア後、それぞれの番地にフラグ=1を書き込む
---core1はFlag1(0x0070)
---core2はFlag2(0x0071)
---core3はFlag3(0x0072)
-core0は、それぞれのフラグを確認してから値をロードする
***プログラム [#jdd674c5]
Queue Processorの特性を生かすため、全てのデータをメモリにロードしておく~
-C Program
--&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark3/Benchmark3.c,,Benchmark3.c);
-アセンブリプログラム
--Single core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark3/Benchmark3.s,,Benchmark3.s);
--Dual core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark3/Benchmark3_dual.s,,Benchmark3_dual.s);
--Quad core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark3/Benchmark3_quad.s,,Benchmark3_quad.s);
***検証結果 [#u552e50b]
-Cycle数
--Single core: 477cycle
--Dual core: 353cycle
--Quad core: 361cycle
-Quad coreで計算するよりもDual coreで計算を行った方がサイクル数が短くなった
--Shared Memoryがsingle portのため4つのコアがメモリに同時にアクセスした際、3つのコアが待たなければならないことが原因だと思う
**Benchmark4: Σi(i=0〜100) [#x8081077]
SPR (Special Purpose Register)を使って、メモリへのアクセス数を減らす~
***プログラム [#jdd674c5]
-C Program
--&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark4/Benchmark4.c,,Benchmark4.c);
-アセンブリプログラム
--Single core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark4/Benchmark4.s,,Benchmark4.s);
--Dual core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark4/Benchmark4_dual.s,,Benchmark4_dual.s);
--Quad core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark4/Benchmark4_quad.s,,Benchmark4_quad.s);
***検証結果 [#u552e50b]
-Cycle数
--Single core: 2477cycle
--Dual core: 1323cycle
--Quad core: 779cycle
-Dual coreとSingle coreのcycle数の比では、Dual Core Systemが1.87倍のcycle数改善
-Quad coreとSingle coreのcycle数の比では、Quad Core Systemが3.18倍のcycle数改善
-Benchmark3に比べ、メモリアクセス数を減らすことによりProcessor coreの数が多いシステムの処理Cycle数が短くなる
-ただ、Level Order MannarでデータをフローしたBenchmark3に比べ、処理cycle数が全体的に増加している
**Benchmark6: 階乗の計算 N! [#g4fca9db]
同じ計算を4回行う~
***プログラム [#jdd674c5]
-C Program
--&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark6/Benchmark6.c,,Benchmark6.c);
-アセンブリプログラム
--Single core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark6/Benchmark6.s,,Benchmark6.s);
--Dual core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark6/Benchmark6_dual.s,,Benchmark6_dual.s);
--Quad core
---&ref(http://aslweb.u-aizu.ac.jp/~s1150059/benz/research/MQSoC/Benchmark/Benchmark6/Benchmark6_quad.s,,Benchmark6_quad.s);
***検証結果 [#u552e50b]
-Cycle数
--Single core: 473 cycle
--Dual core: 263 cycle
--Quad core: 171 cycle
-Dual coreとSingle coreのcycle数の比では、Dual Core Systemが1.80倍のcycle数改善
-Quad coreとSingle coreのcycle数の比では、Quad Core Systemが2.77倍のcycle数改善
ページ名: