EssenR2_ess03f
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* Essen Rev2 (ess03f)
-(by [[K]], 2017.08.22)
** これはなに?
-セキュリティキャンプ中に開発したEssen Rev2の紹介。
** mandel対決
-以下の絵をどのくらい高速に描画できるか?
-http://khfdpl.osask.jp/download/20170822_mandel.png
** 対決
-CPU: Core i7-2600 @ 3.40GHz win32 (32bitモード)
|処理系 |実行時間 ...
|gcc -O3 / (GCC) 3.4.5 (mingw special) [32bit]|RIGHT:8.04...
|ess03f / [32bit] |RIGHT:9.63...
-論点:
--gccは確かに速い。文句なく速い。生成しているアセンブラを...
--しかしess03fだってそんなに悪くない。そのgccに1.2倍のと...
--gccのサイズについては、不要なものもたくさん含んでいるだ...
--ess03fはC言語をそのまま入力できるわけではないので、不公...
-ess03fの内部情報:
--JustInTimeコンパイラを内蔵したインタプリタ。
--動的型付き言語で、変数宣言などはいらない。
--現状ではグローバル変数しかサポートしてない。関数宣言す...
--現状で使える型は、整数型と実数型しかない。配列も構造体...
--動的型付き言語では、型推論を行わないとスピードが出ない...
--ess03fは、プログラムの実行にあたってCコンパイラやアセン...
--演算は、整数演算についてはすべてEAXのみを使う形でコンパ...
--そうやって生成したコードから不要な命令を削除する。たと...
// i++
MOV EAX,i
INC EAX
MOV i,EAX
// if (i < 10) ...
MOV EAX,i // この命令は削除できる
CMP EAX,10
Jcc ...
--命令の並べ替えはしない。並べ替えを検討するとすごく難し...
--この方針だとレジスタが余るので、プログラマはいくつかの...
--それでもこれだけの速度は出る!・・・CPUがレジスタリネー...
--結局何が言いたいのかというと、とりあえずこのサイズでもg...
** 自分でも実験したいという人のためのダウンロード
-http://khfdpl.osask.jp/download/ess03f.zip
--mandel.exe : gccで作ったマンデルブロ描画プログラム
--ess03f.exe : EssenRev2の試作版
--esmandel.txt : ess03f向けのプログラム
prompt>ess03 esmandel.txt
---で実行できる。
--なお、ess03fのソースコードは今回は公開しません。
** 参考:ソースコード for gcc
#include "bla.h"
#include <stdio.h>
#include <time.h>
#define MAX 447
#define STEP (7.0 / 0x100000)
#define DN 4
int main()
{
int x, y, n, sx, sy, sn, c;
double zx, zy, cx, cy, xx, yy, tx, ty;
bla_Window *w = bla_openWin(1024, 768, "mandel");
for (y = 0; y < 768; y++) {
for (x = 0; x < 1024; x++) {
sn = 0;
for (sx = 0; sx < DN; sx++) {
cx = (double) 0x4750 / 0x10000 + (x * DN...
for (sy = 0; sy < DN; sy++) {
cy = (double) -0x1e8 / 0x10000 - (y ...
zx = zy = 0;
for (n = 0; n < MAX; n++) {
yy = zy * zy;
xx = zx * zx;
tx = xx - yy;
ty = zx * zy;
ty *= 2.0;
zy = ty + cy;
zx = tx + cx;
xx += yy;
if (xx > 4.0) break;
}
sn += n;
}
}
n = sn / (DN * DN);
c = 0;
if (n < 256)
c = bla_rgb(n, 0, 0);
else if (n < MAX)
c = bla_rgb(255, n - 255, 0);
bla_setPix(w, x, y, c);
}
bla_leapFlushAll(w, 300); // これを書かないと途...
}
printf("time=%d\n", clock());
bla_wait(-1); // ウィンドウが閉じられるまで待つ.
}
** 参考:ソースコード for ess03f
MAX :== 447
STEP :== 7.0 / 1048576.0
DN :== 4
zx :== $f00 zy :== $f01 xx :== $f02 yy :== $f03 tx :...
openWin(1024 768)
y = 0 do {
x = 0 do {
sn = 0
sx = 0 do {
cx = 18256.0 / 65536.0 + double(x * DN + sx)...
sy = 0 do {
cy = -488.0 / 65536.0 - double(y * DN + ...
zx = zy = 0.0
n = 0 do {
yy = zy * zy
xx = zx * zx
tx = xx - yy
ty = zx * zy
ty *= 2.0
zy = ty + cy
zx = tx + cx
xx += yy
if (xx > 4.0) break
n++ } while (n < MAX)
sn += n
sy++ } while (sy < DN)
sx++ } while (sx < DN)
n = sn / (DN * DN)
c = 0
if (n < 256) {
c = rgb(n 0 0)
}
if (n >= 256) {
if (n < MAX) {
c = rgb(255 n - 255 0)
}
}
setPix(x y c)
x++ } while (x < 1024)
leapFlushAll(300)
y++ } while (y < 768)
//leapflushAll(0)
* こめんと欄
#comment
終了行:
* Essen Rev2 (ess03f)
-(by [[K]], 2017.08.22)
** これはなに?
-セキュリティキャンプ中に開発したEssen Rev2の紹介。
** mandel対決
-以下の絵をどのくらい高速に描画できるか?
-http://khfdpl.osask.jp/download/20170822_mandel.png
** 対決
-CPU: Core i7-2600 @ 3.40GHz win32 (32bitモード)
|処理系 |実行時間 ...
|gcc -O3 / (GCC) 3.4.5 (mingw special) [32bit]|RIGHT:8.04...
|ess03f / [32bit] |RIGHT:9.63...
-論点:
--gccは確かに速い。文句なく速い。生成しているアセンブラを...
--しかしess03fだってそんなに悪くない。そのgccに1.2倍のと...
--gccのサイズについては、不要なものもたくさん含んでいるだ...
--ess03fはC言語をそのまま入力できるわけではないので、不公...
-ess03fの内部情報:
--JustInTimeコンパイラを内蔵したインタプリタ。
--動的型付き言語で、変数宣言などはいらない。
--現状ではグローバル変数しかサポートしてない。関数宣言す...
--現状で使える型は、整数型と実数型しかない。配列も構造体...
--動的型付き言語では、型推論を行わないとスピードが出ない...
--ess03fは、プログラムの実行にあたってCコンパイラやアセン...
--演算は、整数演算についてはすべてEAXのみを使う形でコンパ...
--そうやって生成したコードから不要な命令を削除する。たと...
// i++
MOV EAX,i
INC EAX
MOV i,EAX
// if (i < 10) ...
MOV EAX,i // この命令は削除できる
CMP EAX,10
Jcc ...
--命令の並べ替えはしない。並べ替えを検討するとすごく難し...
--この方針だとレジスタが余るので、プログラマはいくつかの...
--それでもこれだけの速度は出る!・・・CPUがレジスタリネー...
--結局何が言いたいのかというと、とりあえずこのサイズでもg...
** 自分でも実験したいという人のためのダウンロード
-http://khfdpl.osask.jp/download/ess03f.zip
--mandel.exe : gccで作ったマンデルブロ描画プログラム
--ess03f.exe : EssenRev2の試作版
--esmandel.txt : ess03f向けのプログラム
prompt>ess03 esmandel.txt
---で実行できる。
--なお、ess03fのソースコードは今回は公開しません。
** 参考:ソースコード for gcc
#include "bla.h"
#include <stdio.h>
#include <time.h>
#define MAX 447
#define STEP (7.0 / 0x100000)
#define DN 4
int main()
{
int x, y, n, sx, sy, sn, c;
double zx, zy, cx, cy, xx, yy, tx, ty;
bla_Window *w = bla_openWin(1024, 768, "mandel");
for (y = 0; y < 768; y++) {
for (x = 0; x < 1024; x++) {
sn = 0;
for (sx = 0; sx < DN; sx++) {
cx = (double) 0x4750 / 0x10000 + (x * DN...
for (sy = 0; sy < DN; sy++) {
cy = (double) -0x1e8 / 0x10000 - (y ...
zx = zy = 0;
for (n = 0; n < MAX; n++) {
yy = zy * zy;
xx = zx * zx;
tx = xx - yy;
ty = zx * zy;
ty *= 2.0;
zy = ty + cy;
zx = tx + cx;
xx += yy;
if (xx > 4.0) break;
}
sn += n;
}
}
n = sn / (DN * DN);
c = 0;
if (n < 256)
c = bla_rgb(n, 0, 0);
else if (n < MAX)
c = bla_rgb(255, n - 255, 0);
bla_setPix(w, x, y, c);
}
bla_leapFlushAll(w, 300); // これを書かないと途...
}
printf("time=%d\n", clock());
bla_wait(-1); // ウィンドウが閉じられるまで待つ.
}
** 参考:ソースコード for ess03f
MAX :== 447
STEP :== 7.0 / 1048576.0
DN :== 4
zx :== $f00 zy :== $f01 xx :== $f02 yy :== $f03 tx :...
openWin(1024 768)
y = 0 do {
x = 0 do {
sn = 0
sx = 0 do {
cx = 18256.0 / 65536.0 + double(x * DN + sx)...
sy = 0 do {
cy = -488.0 / 65536.0 - double(y * DN + ...
zx = zy = 0.0
n = 0 do {
yy = zy * zy
xx = zx * zx
tx = xx - yy
ty = zx * zy
ty *= 2.0
zy = ty + cy
zx = tx + cx
xx += yy
if (xx > 4.0) break
n++ } while (n < MAX)
sn += n
sy++ } while (sy < DN)
sx++ } while (sx < DN)
n = sn / (DN * DN)
c = 0
if (n < 256) {
c = rgb(n 0 0)
}
if (n >= 256) {
if (n < MAX) {
c = rgb(255 n - 255 0)
}
}
setPix(x y c)
x++ } while (x < 1024)
leapFlushAll(300)
y++ } while (y < 768)
//leapflushAll(0)
* こめんと欄
#comment
ページ名: