吉田/日誌/2009-02-26
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[吉田/日誌]]
*木曜昼に初めて金曜朝に帰って土曜に寝て日曜に備える*
&size(18){>[[パルテノンなアレ>第14回ASICデザインコンテスト]]};
-現状改良案(2009年2月26日-14:23)
--とりあえず。
++再帰処理の改良。
---スタック用ロードストア命令 or 再帰展開
++同スタック位置にある値を複数回呼び出すときの書式を以下略
---スタックロード時、addi→ld→subi→addi→ld→subi・・・とかがウザい。
---レジスタテーブルのようにコンパイラ内に管理テーブルを作成、でどうか。
++配列アドレスの添字の最適化。>半分突破。
++ループアンローリング
---とりあえず2重以降のループは展開していく方向で。
---全展開、または効率の良い部分展開数を検証。
-今日?の成果
--配列アドレスの添字の最適化。
---読み込み時は成功(ARD)
---前回書いたのはノードの取方的に木になっていなかったものと思われる。
---ソートのクロックが16686→15166に。
---同様にして書き込み時(AWT)も成功。併せてクロック:16686→14406に。
--現状改良案の再帰展開、ループ展開ともにコンパイラだけで出来るので(多分)、今のところは大分気楽かも。
--ループの展開
---む。
for(i=0; i<n; i++) z[i]=n-i;
これはこのまま。
for(i=0; i<n-1; i++)
for(j=n-1; j>i; j--)
if(z[j]<z[j-1]) {
w=z[j];
z[j]=z[j-1];
z[j-1]=w;
}
こっちは、
for(i=0; i<n-1; i++) {
if(z[(n-1)-0]<z[(n-1)-1])
{ w=z[(n-1)-0]; z[(n-1)-0]=z[(n-1)-1]; z[(n-1)-1]=w; }
if(z[(n-1)-1]<z[(n-1)-2])
{ w=z[(n-1)-1]; z[(n-1)-1]=z[(n-1)-2]; z[(n-1)-2]=w; }
.
.
.
if(z[(n-1)-(n-2)]<z[(n-1)-(n-1)])
{ w=z[(n-1)-1]; z[(n-1)-1]=z[(n-1)-2]; z[(n-1)-2]=w; }
}
こうかな。FORの中にFORがあったらコンパイラでnを認識してn-1回IF処理させることに。
--気分転換。面倒そうだったPEQ,MEQが実は楽だったのでついでに追加。今のところ性能への寄与無し。
--これから
終了行:
[[吉田/日誌]]
*木曜昼に初めて金曜朝に帰って土曜に寝て日曜に備える*
&size(18){>[[パルテノンなアレ>第14回ASICデザインコンテスト]]};
-現状改良案(2009年2月26日-14:23)
--とりあえず。
++再帰処理の改良。
---スタック用ロードストア命令 or 再帰展開
++同スタック位置にある値を複数回呼び出すときの書式を以下略
---スタックロード時、addi→ld→subi→addi→ld→subi・・・とかがウザい。
---レジスタテーブルのようにコンパイラ内に管理テーブルを作成、でどうか。
++配列アドレスの添字の最適化。>半分突破。
++ループアンローリング
---とりあえず2重以降のループは展開していく方向で。
---全展開、または効率の良い部分展開数を検証。
-今日?の成果
--配列アドレスの添字の最適化。
---読み込み時は成功(ARD)
---前回書いたのはノードの取方的に木になっていなかったものと思われる。
---ソートのクロックが16686→15166に。
---同様にして書き込み時(AWT)も成功。併せてクロック:16686→14406に。
--現状改良案の再帰展開、ループ展開ともにコンパイラだけで出来るので(多分)、今のところは大分気楽かも。
--ループの展開
---む。
for(i=0; i<n; i++) z[i]=n-i;
これはこのまま。
for(i=0; i<n-1; i++)
for(j=n-1; j>i; j--)
if(z[j]<z[j-1]) {
w=z[j];
z[j]=z[j-1];
z[j-1]=w;
}
こっちは、
for(i=0; i<n-1; i++) {
if(z[(n-1)-0]<z[(n-1)-1])
{ w=z[(n-1)-0]; z[(n-1)-0]=z[(n-1)-1]; z[(n-1)-1]=w; }
if(z[(n-1)-1]<z[(n-1)-2])
{ w=z[(n-1)-1]; z[(n-1)-1]=z[(n-1)-2]; z[(n-1)-2]=w; }
.
.
.
if(z[(n-1)-(n-2)]<z[(n-1)-(n-1)])
{ w=z[(n-1)-1]; z[(n-1)-1]=z[(n-1)-2]; z[(n-1)-2]=w; }
}
こうかな。FORの中にFORがあったらコンパイラでnを認識してn-1回IF処理させることに。
--気分転換。面倒そうだったPEQ,MEQが実は楽だったのでついでに追加。今のところ性能への寄与無し。
--これから
ページ名: