第14回ASICデザインコンテスト/作業用(室橋・森・森田)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[第14回ASICデザインコンテスト]]
*第14回ASICデザインコンテスト/作業用 [#gf96c82f]
#contents
**設計方針 [#re52d0d0]
PICO16oをベースに改良を行う。
**改良案 [#p9a12180]
=暫定案=~
~
パイプラインの見直し~
コンパイラの改善~
レジスタ割り当て~
命令の見直し~
よりプログラム構文と親和性の高い命令の追加~
不要な命令の削除~
加算器のチューニング~
~
VLWI~
スーパースカラ~
スーパーパイプライン~
分岐予測~
**役割 [#t16fcdc4]
-室橋 - ドキュメント
-森 - 回路設計
-森田 - コンパイラ
**ToDo [#x107a5b1]
研究室に来る。
***室橋 [#ge991d82]
***森 [#x25d8e73]
がんばる。
***森田 [#q7f34373]
**進捗状況 [#b87d197e]
■勉強
実装予定の改良案について各自検討した。
・パイプライン
既に実装されてるパイプラインを改良。
ステージ数、段数を増やして性能向上を検討する。
>ステートマシンはIF、RF、EX、EX2の4つで構成されています。
RFとは? EX と EX2 の違いは?
・再帰の末尾最適化
末尾最適化とは、末尾再帰のコードを反復(for、while)に変換することによって処理効率を向上し、必要なスタック領域を軽減する手法である。末尾再帰とは、関数の最後の命令がその関数自身の呼び出しであるような再帰呼び出しのことである。
参照ページ wikipedia 末尾最適化
http://ja.wikipedia.org/wiki/%E6%9C%AB%E5%B0%BE%E6%9C%80%E9%81%A9%E5%8C%96
・予測分岐導入
パイプラインの時、分岐命令の次にくる命令を予想し命令を実行しておくこと。
予測があたればそのまま命令を実行していくが、予測がはずれたらそれまで実行していたものを破棄し、別の命令を実行する。
もし、予測が外れて今までの命令が破棄されると、その損失分がありデメリットに感じるが、実際にはメリットのほうが大きいことが多い。今回の改良でもメリットが得られると思われるので実装を目指す。
予測のアルゴリズムがいくつかあるが、設計の際にどれが一番高速になるかを検討したうえで、導入方法を決めたいと思う。
・ループアンローリング
for(I =0; I < 10 ; I++) {
for(j = 0; j < 3; j++)
x(I, j) = m(I, j) * 10 + n(I, j);
}
というコード列を、
for(I =0; I < 10 ; I++) {
x(I, 0) = m(I, 0) *10 +n(I, 0);
x(I, 1) = m(I, 1) *10 +n(I, 1);
x(I, 2) = m(I, 2) *10 +n(I, 2);
}
のようにループ命令を展開して、
「x(I, j) = m(I, j) * 10 + n(I, j);」を並列実行できるようにする。
・新命令実装
最低、分岐命令を実装したいが、実装方法は今後の課題。
**スケジュール [#l958d0c0]
-1月31日:PICO16oに関する基本的な理解をする
[回路設計班]
2月1日-2月6日:実装と導入アーキテクチャの勉強
2月1日-2月14日:並列プレフィクス加算器導入の検討
2月8日-2月25日:パイプライン化の検討(コンパイラ班と共同)
2月1日-2月25日:新命令実装の検討(コンパイラ班と共同)
2月20日-3月4日:予測分岐導入の検討
3月15日-3月21日:論理合成スクリプト最適化の検討
3月22日-3月30日:動作検証・デバッグ
[コンパイラ班]
2月1日-2月6日:実装と導入アーキテクチャの勉強
2月1日-2月21日:構文木レベルの最適化
2月8日-2月25日:パイプライン化の検討(回路設計班と共同)
2月1日-2月25日:新命令実装の検討(回路設計班と共同)
2月26日-3月4日:変数のレジスタ割り当て固定化の検討
3月5日-3月14日:ループアンローリングの検討
3月15日-3月21日:再帰の末尾最適化の検討
3月22日-3月30日:動作検証・デバッグ
[ドキュメント班]
2月1日-3月30日:性能向上の推移を記録
3月15日-3月30日:ドキュメント執筆・添削依頼
3月31日:提出
**評価の記録 [#jbd59d9c]
|日付|リビジョン|power|th|recur|sort|エネルギー・時間積(TxE)|備考|
|4/9|r45|14,966|31.7|139|6,522|0.430|初期化追加+OPT|
|4/8|r44|14,705|32.6|139|6,522|0.434|関数内で使用しないレジスタに対してのスタック退避を削除|
|4/7|r43|14,705|32.6|163|6,522|0.509|スタック退避最適化・細かい修正とか|
|4/6|r42|14,705|32.6|175|6,522|0.547|関数呼び出しとリターン時のレジスタ最適化・アセンブリレベルでの不要命令削除の改良|
|4/5|r41|14,705|32.6|185|6,902|0.612|即値使用時のadd,subの最適化|
|4/4|r40|14,705|32.6|196|7,511|0.705|変数のレジスタ固定割り当て実装、添え字最適化、アセンブリレベルでの不要命令削除機能の実装|
|3/30|r37|14,705|32.6|196|8,956|0.841|forループ割り当てとOPT_MAP|
|3/28|r34|14,802|32.6|196|9,853|0.931|遅延スロットの導入|
|3/17|r31|13,855|32.6|219|10,273|1.02|Brent-Kungに変更|
|3/10|r27|14,461|31.7|219|10,273|1.03|push,popの追加、フォワーディングの改良|
|3/10|r24|13,016|30.6|268|10,274|1.10|sltの追加|
|3/9|r22?|12,961|30.7|297|12,226|1.44|opt_mapの改良2|
|3/9|r22|13,903|29.4|297|12,226|1.48|ARGVのレジスタ割り当て|
|3/9|r21|14,099|29.4|325|12,226|1.65|opt_mapの改良|
|3/7|r20|12,379|45.2|325|12,226|2.22|インクリデクリの最適化|
|3/5|r19|12,379|45.2|325|12,455|2.26|xor,and,sl,sr命令の削除|
|3/5|r18|%%11,974%%|%%42.3%%|325|12,455|%%2.05%%|or,ori,xor,and,sl,sr命令の削除|
|3/5|r15|13,229|46.8|325|12,455|2.51|r8にHan-Carlson|
|3/4|r13|13,680|52.2|325|12,455|2.89|r11にLadner-Fischer|
|2/28|r11|13,858|69.7|325|12,455|3.91|ALUのinputをRFで指定|
|2/26|r8|13,157|81.2|325|12,455|4.32|RFステージ内での蛇足|
|2/24|r7|13,302|71.1|325|12,455|3.82|不要パイプラインレジスタの削除|
|2/23|r6|13,570|70.7|325|12,455|3.88|パイプライン記述の整理|
|2/23|r4|13,694|70.7|325|12,455|3.92|3stageのパイプライン|
|2/13|r2|11,231|70.98|879|36,368|25.48|割り込みの削除|
|2/13|r1|12,072|72.4|879|36,368|27.94|stateからstageに変更|
||オリジナル|12,097|66.8|879|36,368|25.83||
**コメント [#q397bd5e]
このグループの活動に対する提案、意見、質問などはこちらから。
#comment
終了行:
[[第14回ASICデザインコンテスト]]
*第14回ASICデザインコンテスト/作業用 [#gf96c82f]
#contents
**設計方針 [#re52d0d0]
PICO16oをベースに改良を行う。
**改良案 [#p9a12180]
=暫定案=~
~
パイプラインの見直し~
コンパイラの改善~
レジスタ割り当て~
命令の見直し~
よりプログラム構文と親和性の高い命令の追加~
不要な命令の削除~
加算器のチューニング~
~
VLWI~
スーパースカラ~
スーパーパイプライン~
分岐予測~
**役割 [#t16fcdc4]
-室橋 - ドキュメント
-森 - 回路設計
-森田 - コンパイラ
**ToDo [#x107a5b1]
研究室に来る。
***室橋 [#ge991d82]
***森 [#x25d8e73]
がんばる。
***森田 [#q7f34373]
**進捗状況 [#b87d197e]
■勉強
実装予定の改良案について各自検討した。
・パイプライン
既に実装されてるパイプラインを改良。
ステージ数、段数を増やして性能向上を検討する。
>ステートマシンはIF、RF、EX、EX2の4つで構成されています。
RFとは? EX と EX2 の違いは?
・再帰の末尾最適化
末尾最適化とは、末尾再帰のコードを反復(for、while)に変換することによって処理効率を向上し、必要なスタック領域を軽減する手法である。末尾再帰とは、関数の最後の命令がその関数自身の呼び出しであるような再帰呼び出しのことである。
参照ページ wikipedia 末尾最適化
http://ja.wikipedia.org/wiki/%E6%9C%AB%E5%B0%BE%E6%9C%80%E9%81%A9%E5%8C%96
・予測分岐導入
パイプラインの時、分岐命令の次にくる命令を予想し命令を実行しておくこと。
予測があたればそのまま命令を実行していくが、予測がはずれたらそれまで実行していたものを破棄し、別の命令を実行する。
もし、予測が外れて今までの命令が破棄されると、その損失分がありデメリットに感じるが、実際にはメリットのほうが大きいことが多い。今回の改良でもメリットが得られると思われるので実装を目指す。
予測のアルゴリズムがいくつかあるが、設計の際にどれが一番高速になるかを検討したうえで、導入方法を決めたいと思う。
・ループアンローリング
for(I =0; I < 10 ; I++) {
for(j = 0; j < 3; j++)
x(I, j) = m(I, j) * 10 + n(I, j);
}
というコード列を、
for(I =0; I < 10 ; I++) {
x(I, 0) = m(I, 0) *10 +n(I, 0);
x(I, 1) = m(I, 1) *10 +n(I, 1);
x(I, 2) = m(I, 2) *10 +n(I, 2);
}
のようにループ命令を展開して、
「x(I, j) = m(I, j) * 10 + n(I, j);」を並列実行できるようにする。
・新命令実装
最低、分岐命令を実装したいが、実装方法は今後の課題。
**スケジュール [#l958d0c0]
-1月31日:PICO16oに関する基本的な理解をする
[回路設計班]
2月1日-2月6日:実装と導入アーキテクチャの勉強
2月1日-2月14日:並列プレフィクス加算器導入の検討
2月8日-2月25日:パイプライン化の検討(コンパイラ班と共同)
2月1日-2月25日:新命令実装の検討(コンパイラ班と共同)
2月20日-3月4日:予測分岐導入の検討
3月15日-3月21日:論理合成スクリプト最適化の検討
3月22日-3月30日:動作検証・デバッグ
[コンパイラ班]
2月1日-2月6日:実装と導入アーキテクチャの勉強
2月1日-2月21日:構文木レベルの最適化
2月8日-2月25日:パイプライン化の検討(回路設計班と共同)
2月1日-2月25日:新命令実装の検討(回路設計班と共同)
2月26日-3月4日:変数のレジスタ割り当て固定化の検討
3月5日-3月14日:ループアンローリングの検討
3月15日-3月21日:再帰の末尾最適化の検討
3月22日-3月30日:動作検証・デバッグ
[ドキュメント班]
2月1日-3月30日:性能向上の推移を記録
3月15日-3月30日:ドキュメント執筆・添削依頼
3月31日:提出
**評価の記録 [#jbd59d9c]
|日付|リビジョン|power|th|recur|sort|エネルギー・時間積(TxE)|備考|
|4/9|r45|14,966|31.7|139|6,522|0.430|初期化追加+OPT|
|4/8|r44|14,705|32.6|139|6,522|0.434|関数内で使用しないレジスタに対してのスタック退避を削除|
|4/7|r43|14,705|32.6|163|6,522|0.509|スタック退避最適化・細かい修正とか|
|4/6|r42|14,705|32.6|175|6,522|0.547|関数呼び出しとリターン時のレジスタ最適化・アセンブリレベルでの不要命令削除の改良|
|4/5|r41|14,705|32.6|185|6,902|0.612|即値使用時のadd,subの最適化|
|4/4|r40|14,705|32.6|196|7,511|0.705|変数のレジスタ固定割り当て実装、添え字最適化、アセンブリレベルでの不要命令削除機能の実装|
|3/30|r37|14,705|32.6|196|8,956|0.841|forループ割り当てとOPT_MAP|
|3/28|r34|14,802|32.6|196|9,853|0.931|遅延スロットの導入|
|3/17|r31|13,855|32.6|219|10,273|1.02|Brent-Kungに変更|
|3/10|r27|14,461|31.7|219|10,273|1.03|push,popの追加、フォワーディングの改良|
|3/10|r24|13,016|30.6|268|10,274|1.10|sltの追加|
|3/9|r22?|12,961|30.7|297|12,226|1.44|opt_mapの改良2|
|3/9|r22|13,903|29.4|297|12,226|1.48|ARGVのレジスタ割り当て|
|3/9|r21|14,099|29.4|325|12,226|1.65|opt_mapの改良|
|3/7|r20|12,379|45.2|325|12,226|2.22|インクリデクリの最適化|
|3/5|r19|12,379|45.2|325|12,455|2.26|xor,and,sl,sr命令の削除|
|3/5|r18|%%11,974%%|%%42.3%%|325|12,455|%%2.05%%|or,ori,xor,and,sl,sr命令の削除|
|3/5|r15|13,229|46.8|325|12,455|2.51|r8にHan-Carlson|
|3/4|r13|13,680|52.2|325|12,455|2.89|r11にLadner-Fischer|
|2/28|r11|13,858|69.7|325|12,455|3.91|ALUのinputをRFで指定|
|2/26|r8|13,157|81.2|325|12,455|4.32|RFステージ内での蛇足|
|2/24|r7|13,302|71.1|325|12,455|3.82|不要パイプラインレジスタの削除|
|2/23|r6|13,570|70.7|325|12,455|3.88|パイプライン記述の整理|
|2/23|r4|13,694|70.7|325|12,455|3.92|3stageのパイプライン|
|2/13|r2|11,231|70.98|879|36,368|25.48|割り込みの削除|
|2/13|r1|12,072|72.4|879|36,368|27.94|stateからstageに変更|
||オリジナル|12,097|66.8|879|36,368|25.83||
**コメント [#q397bd5e]
このグループの活動に対する提案、意見、質問などはこちらから。
#comment
ページ名: