EssenR2_ess03h
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* Essen Rev2 (ess03h)
-(by [[K]], 2017.08.23)
** これはなに?
-[[EssenR2_ess03f]]の改良版です。
** 主な差分
-大半の項目はすごいことではなく、むしろ今まできちんと作っ...
-[1]グラフィックス描画ウィンドウを途中で閉じても例外が出...
-[2] ! ~ - + などの単項演算子が機能するようになった。
-[3] & | ^ などの二項演算子が機能するようになった。
-[4] a = b < c みたいな演算が可能になった。
-[5] 最適化機能の強化。
-[6] $i00~$i03が利用可能になった。
** 例1: シンプルな20億回ループ(1)
-まずは、シンプルな20億回ループを書いてみる。なぜ20億回な...
i = 0
while (i < 2000000000) {
i++
}
-ess03hにはまだfor構文がないので、素直に20億回ループを書...
-これを prompt>ess03h sample1.txt na で処理させると、JIT...
XOR $EAX $EAX
MOV g032 $EAX
label L000000001
MOV $EAX g032
INC $EAX $EAX
MOV g032 $EAX
CMP $EAX c##s20#77359400$
JL L000000001
-まあたいしたことないコードだ。当然たいして速くもない。
-これをCore_i7-2600/3.4GHz上で実行すると''3.85秒''くらい...
--JITコンパイル時間に関して言えば、50行程度のesmandelの場...
** 例2: シンプルな20億回ループ(2)
-ここで、変数iを整数専用レジスタに割り振ったらどうなるか...
i :== $i00
i = 0
while (i < 2000000000) {
i++
}
-これを同様にnaするとこうなる。
XOR $EBX $EBX
label L000000001
INC $EBX $EBX
CMP $EBX c##s20#77359400$
JL L000000001
-EBXレジスタに割り当てられているのが見て取れる。無駄なメ...
-これをCore_i7-2600/3.4GHzで実行すると、''0.567秒''で終わ...
** 議論: EssenRev2の最適化の方針について
-最近のEssenRev2では、最適化をがんばっている。新しい命令...
--(1) JITコンパイル方式での実行速度はあまりにも魅力的であ...
--(2) となれば、なにはともあれJITコンパイラ部分を整備して...
--(3) JITコンパイル方式を採用したのは、JITコンパイラのエ...
-Essenはgccとは最適化の方針が明らかに異なっている。その理...
--(4) gccはプログラマに対して-Oオプションでレベルを指定さ...
--(5) この方針の違いは意外に大きい。gccではとにかくコンパ...
--(6) たとえばgccはループがあってもその演算結果を使うこと...
** 説明: Essenの内部構造
-#0: 高次レイヤ(高級言語→仮想アセンブラ)(註:仮想アセ...
-#1: 仮想アセンブラ最適化レイヤ(仮想アセンブラ→仮想アセ...
-#2: ネイティブアセンブラ最適化レイヤ(仮想アセンブラ→ネ...
-#3: 機械語出力レイヤ(つまりアセンブラ)(ネイティブアセ...
-#0と#1は機種依存しない。
-#1~#3は、他の言語に対しても流用できる。おそらくOSECPU-V...
** ダウンロード
-http://khfdpl.osask.jp/download/ess03h.zip
--ちなみにess03h.exeは31.5KB。
// :==の後ろにコメントを入れられなかった。
* こめんと欄
#comment
終了行:
* Essen Rev2 (ess03h)
-(by [[K]], 2017.08.23)
** これはなに?
-[[EssenR2_ess03f]]の改良版です。
** 主な差分
-大半の項目はすごいことではなく、むしろ今まできちんと作っ...
-[1]グラフィックス描画ウィンドウを途中で閉じても例外が出...
-[2] ! ~ - + などの単項演算子が機能するようになった。
-[3] & | ^ などの二項演算子が機能するようになった。
-[4] a = b < c みたいな演算が可能になった。
-[5] 最適化機能の強化。
-[6] $i00~$i03が利用可能になった。
** 例1: シンプルな20億回ループ(1)
-まずは、シンプルな20億回ループを書いてみる。なぜ20億回な...
i = 0
while (i < 2000000000) {
i++
}
-ess03hにはまだfor構文がないので、素直に20億回ループを書...
-これを prompt>ess03h sample1.txt na で処理させると、JIT...
XOR $EAX $EAX
MOV g032 $EAX
label L000000001
MOV $EAX g032
INC $EAX $EAX
MOV g032 $EAX
CMP $EAX c##s20#77359400$
JL L000000001
-まあたいしたことないコードだ。当然たいして速くもない。
-これをCore_i7-2600/3.4GHz上で実行すると''3.85秒''くらい...
--JITコンパイル時間に関して言えば、50行程度のesmandelの場...
** 例2: シンプルな20億回ループ(2)
-ここで、変数iを整数専用レジスタに割り振ったらどうなるか...
i :== $i00
i = 0
while (i < 2000000000) {
i++
}
-これを同様にnaするとこうなる。
XOR $EBX $EBX
label L000000001
INC $EBX $EBX
CMP $EBX c##s20#77359400$
JL L000000001
-EBXレジスタに割り当てられているのが見て取れる。無駄なメ...
-これをCore_i7-2600/3.4GHzで実行すると、''0.567秒''で終わ...
** 議論: EssenRev2の最適化の方針について
-最近のEssenRev2では、最適化をがんばっている。新しい命令...
--(1) JITコンパイル方式での実行速度はあまりにも魅力的であ...
--(2) となれば、なにはともあれJITコンパイラ部分を整備して...
--(3) JITコンパイル方式を採用したのは、JITコンパイラのエ...
-Essenはgccとは最適化の方針が明らかに異なっている。その理...
--(4) gccはプログラマに対して-Oオプションでレベルを指定さ...
--(5) この方針の違いは意外に大きい。gccではとにかくコンパ...
--(6) たとえばgccはループがあってもその演算結果を使うこと...
** 説明: Essenの内部構造
-#0: 高次レイヤ(高級言語→仮想アセンブラ)(註:仮想アセ...
-#1: 仮想アセンブラ最適化レイヤ(仮想アセンブラ→仮想アセ...
-#2: ネイティブアセンブラ最適化レイヤ(仮想アセンブラ→ネ...
-#3: 機械語出力レイヤ(つまりアセンブラ)(ネイティブアセ...
-#0と#1は機種依存しない。
-#1~#3は、他の言語に対しても流用できる。おそらくOSECPU-V...
** ダウンロード
-http://khfdpl.osask.jp/download/ess03h.zip
--ちなみにess03h.exeは31.5KB。
// :==の後ろにコメントを入れられなかった。
* こめんと欄
#comment
ページ名: