HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0302
princehsp3_64での実行速度ベンチマーク10解決


prince

リンク

2015/3/2(Mon) 16:44:31|NO.67614

HSP3.5beta1で、64bit版HSPが追加されましたので、ベンチマーク的なものを作ってみました。
よろしければ皆さんもどうぞ。

//↓をコメントアウトすると32bitで実行します。 #define use_64bit #ifdef use_64bit #runtime "hsp3_64" #endif //1秒以内に終わる処理でないと計測できません。 //timeの配列要素数が回数(ここでは10回) dim time, 10 average = 0.0 foreach time title "" + (cnt + 1) + "回目準備中…" gosub *sleep wait 50 title "" + (cnt + 1) + "回目実行中…" gosub *go time(cnt) = stoptime - starttime mes "" + (cnt + 1) + "回目: " + time(cnt) + "ms" loop title "完了" foreach time average += time(cnt) loop average /= length(time) mes "平均: " + average + "ms" #ifdef use_64bit buf = "hsp3_64での実行結果\n" #else buf = "hsp3(32bit)での実行結果\n" #endif //ここに実行内容 buf += {"内容: pokeで空データ(1)を10000000回書き込み\n"} foreach time buf += "" + (cnt + 1) + "回目: " + time(cnt) + "ms\n" loop buf += "平均: " + average + "ms" mesbox buf, ginfo_winx, ginfo_winy - ginfo_cy, 0 stop *sleep //-----ここから下でデータの初期化等 sdim data, 10000000 //-----ここまで return *go starttime = gettime(7) //-----ここから下に時間のかかる処理(1秒以内) repeat 10000000 poke data, cnt, 1 loop //-----ここまで stoptime = gettime(7) if (starttime > stoptime) : stoptime += 1000 return



この記事に返信する


prince

リンク

2015/3/2(Mon) 16:48:15|NO.67616

私の実行結果

OS: Windows 7 Pro 64bit メモリ: 4GBx2 (DDR3 SDRAM PC3-12800) CPU: Intel Core i7-4790K


hsp3_64での実行結果 内容: pokeで空データ(1)を10000000回書き込み 1回目: 466ms 2回目: 439ms 3回目: 428ms 4回目: 428ms 5回目: 451ms 6回目: 435ms 7回目: 435ms 8回目: 444ms 9回目: 425ms 10回目: 425ms 平均: 437.600000ms


hsp3(32bit)での実行結果 内容: pokeで空データ(1)を10000000回書き込み 1回目: 597ms 2回目: 587ms 3回目: 579ms 4回目: 592ms 5回目: 589ms 6回目: 600ms 7回目: 601ms 8回目: 894ms 9回目: 561ms 10回目: 601ms 平均: 620.100000ms



prince

リンク

2015/3/2(Mon) 16:55:08|NO.67617

コメントで囲まれているところを書き換えると、別のベンチマークもできます。
たとえば、
//ここに実行内容

の下の行を、
buf += {"内容: 空ループ10000000回\n"}
に書き換え

//-----ここから下でデータの初期化等 sdim data, 10000000 //-----ここまで
を削除

//-----ここから下に時間のかかる処理(1秒以内) repeat 10000000 poke data, cnt, 1 loop //-----ここまで


//-----ここから下に時間のかかる処理(1秒以内) repeat 10000000:loop //-----ここまで
に書き換えなど。
なおhsp3_64でのモジュールの動作にバグがあるため、計測部分のモジュール化は行っていません。



ファルコン

リンク

2015/3/2(Mon) 17:02:27|NO.67619

>環境

採取日時 2015/03/02 16:59:41 [PC Information] 製品名 dynabook BX/31KKS 型番 PABX31KLTKS 製造番号 5A086270K OSバージョン Microsoft Windows 7 Home Premium 6.1.7601 Service Pack 1 BIOSバージョン V2.00 CPU Intel(R) Celeron(R) CPU 900 @ 2.20GHz 物理メモリ 2048MB RAM ハードディスク全容量 238,115,872,768 [バイト] 221.763 [GB] ハードディスク空き容量 183,086,243,840 [バイト] 170.512 [GB] ビデオ Mobile Intel(R) 4 Series Express Chipset Family バージョン=8.15.10.1883 解像度 1366 x 768 ピクセル 色数 True Color (32 ビット) サウンド Realtek High Definition Audio バージョン=6.0.1.5904 Intel(R) High Definition Audio HDMI バージョン=6.10.1.2077
>結果

hsp3(32bit)での実行結果 内容: pokeで空データ(1)を10000000回書き込み 1回目: 454ms 2回目: 406ms 3回目: 415ms 4回目: 394ms 5回目: 397ms 6回目: 435ms 7回目: 412ms 8回目: 390ms 9回目: 710ms 10回目: 563ms 平均: 457.600000ms



tds12

リンク

2015/3/2(Mon) 17:03:34|NO.67620

OS:Windows 8.1 64bit
メモリ:4GB * 1 (DDR3)
CPU: Intel(R) Celeron(R) CPU 1017U

hsp3_64での実行結果
内容: pokeで空データ(1)を10000000回書き込み
1回目: 346ms
2回目: 334ms
3回目: 326ms
4回目: 322ms
5回目: 324ms
6回目: 326ms
7回目: 329ms
8回目: 356ms
9回目: 338ms
10回目: 329ms
平均: 333.000000ms

hsp3(32bit)での実行結果
内容: pokeで空データ(1)を10000000回書き込み
1回目: 515ms
2回目: 504ms
3回目: 506ms
4回目: 506ms
5回目: 507ms
6回目: 504ms
7回目: 505ms
8回目: 516ms
9回目: 513ms
10回目: 516ms
平均: 509.200000ms

i7-4790Kより速いとは驚きました。



ファルコン

リンク

2015/3/2(Mon) 17:38:41|NO.67622

捕捉ですがNO.67619で記した環境は32bitのパソコンです。



prince

リンク

2015/3/2(Mon) 18:15:01|NO.67625

まさかCeleronに負ける(?)とは思っていませんでした。
メモリの速度の問題ですかね…
書き忘れましたが、実行中にウィンドウを動かすと正しく計測できませんのでご注意ください。

別バージョンを作ってみました。
1.乱数値で書き込み(5000000回、randomizeは実行していません)
ソースコード

//↓をコメントアウトすると32bitで実行します。 #define use_64bit #ifdef use_64bit #runtime "hsp3_64" #endif //1秒以内に終わる処理でないと計測できません。 //timeの配列要素数が回数(ここでは10回) dim time, 10 average = 0.0 foreach time title "" + (cnt + 1) + "回目準備中…" gosub *sleep wait 50 title "" + (cnt + 1) + "回目実行中…" gosub *go time(cnt) = stoptime - starttime mes "" + (cnt + 1) + "回目: " + time(cnt) + "ms" loop title "完了" foreach time average += time(cnt) loop average /= length(time) mes "平均: " + average + "ms" #ifdef use_64bit buf = "hsp3_64での実行結果\n" #else buf = "hsp3(32bit)での実行結果\n" #endif //ここに実行内容 buf += {"内容: pokeで乱数値を5000000回書き込み\n"} foreach time buf += "" + (cnt + 1) + "回目: " + time(cnt) + "ms\n" loop buf += "平均: " + average + "ms" mesbox buf, ginfo_winx, ginfo_winy - ginfo_cy, 0 stop *sleep //-----ここから下でデータの初期化等 sdim data, 5000000 //-----ここまで return *go starttime = gettime(7) //-----ここから下に時間のかかる処理(1秒以内) repeat 5000000 poke data, cnt, rnd(256) loop //-----ここまで stoptime = gettime(7) if (starttime > stoptime) : stoptime += 1000 return
私の結果(環境は同じです)

hsp3_64での実行結果 内容: pokeで乱数値を5000000回書き込み 1回目: 442ms 2回目: 440ms 3回目: 435ms 4回目: 443ms 5回目: 454ms 6回目: 440ms 7回目: 459ms 8回目: 435ms 9回目: 429ms 10回目: 458ms 平均: 443.500000ms

hsp3(32bit)での実行結果 内容: pokeで乱数値を5000000回書き込み 1回目: 486ms 2回目: 448ms 3回目: 519ms 4回目: 489ms 5回目: 471ms 6回目: 484ms 7回目: 476ms 8回目: 485ms 9回目: 487ms 10回目: 480ms 平均: 482.500000ms
回数が少ないせいかほとんど差はないようです。

2.sin(rnd(32768))(5000000回、randomizeは実行していません)
ソースコード

//↓をコメントアウトすると32bitで実行します。 ;#define use_64bit #ifdef use_64bit #runtime "hsp3_64" #endif //1秒以内に終わる処理でないと計測できません。 //timeの配列要素数が回数(ここでは10回) dim time, 10 average = 0.0 foreach time title "" + (cnt + 1) + "回目準備中…" gosub *sleep wait 50 title "" + (cnt + 1) + "回目実行中…" gosub *go time(cnt) = stoptime - starttime mes "" + (cnt + 1) + "回目: " + time(cnt) + "ms" loop title "完了" foreach time average += time(cnt) loop average /= length(time) mes "平均: " + average + "ms" #ifdef use_64bit buf = "hsp3_64での実行結果\n" #else buf = "hsp3(32bit)での実行結果\n" #endif //ここに実行内容 buf += {"内容: sin(rnd(32768))を5000000回\n"} foreach time buf += "" + (cnt + 1) + "回目: " + time(cnt) + "ms\n" loop buf += "平均: " + average + "ms" mesbox buf, ginfo_winx, ginfo_winy - ginfo_cy, 0 stop *sleep //-----ここから下でデータの初期化等 a = 0 //-----ここまで return *go starttime = gettime(7) //-----ここから下に時間のかかる処理(1秒以内) repeat 5000000 a = sin(rnd(32768)) loop //-----ここまで stoptime = gettime(7) if (starttime > stoptime) : stoptime += 1000 return
私の実行結果

hsp3_64での実行結果 内容: sin(rnd(32768))を5000000回 1回目: 604ms 2回目: 573ms 3回目: 557ms 4回目: 549ms 5回目: 558ms 6回目: 573ms 7回目: 558ms 8回目: 568ms 9回目: 572ms 10回目: 562ms 平均: 567.400000ms

hsp3(32bit)での実行結果 内容: sin(rnd(32768))を5000000回 1回目: 678ms 2回目: 663ms 3回目: 681ms 4回目: 658ms 5回目: 658ms 6回目: 657ms 7回目: 659ms 8回目: 660ms 9回目: 656ms 10回目: 678ms 平均: 664.800000ms
こちらも回数が少ないせいかほとんど差はないようです。



ファルコン

リンク

2015/3/2(Mon) 18:42:25|NO.67626

>環境

OS… Windows 7 Home Premium Service Pack 1 32bit メモリ… 2GB CPU… Intel(R) Celeron(R) CPU 900 @ 2.20GHz 2.19GHz
>実行結果

hsp3(32bit)での実行結果 内容: pokeで乱数値を5000000回書き込み 1回目: 283ms 2回目: 267ms 3回目: 367ms 4回目: 264ms 5回目: 239ms 6回目: 216ms 7回目: 218ms 8回目: 215ms 9回目: 261ms 10回目: 219ms 平均: 254.900000ms



nepisat

リンク

2015/3/2(Mon) 19:59:38|NO.67627

>環境

CPU: Intel Core i7 3770K @3.50GHz メモり: 8GB DDR3 1600 OS: Windows Technical Preview Build 9926 64Bit
>64Bit

hsp3_64での実行結果 内容: pokeで空データ(1)を10000000回書き込み 1回目: 924ms 2回目: 877ms 3回目: 873ms 4回目: 81ms 5回目: 908ms 6回目: 950ms 7回目: 112ms 8回目: 48ms 9回目: 90ms 10回目: 798ms 平均: 566.100000ms
>32Bit

hsp3(32bit)での実行結果 内容: pokeで空データ(1)を10000000回書き込み 1回目: 509ms 2回目: 629ms 3回目: 595ms 4回目: 546ms 5回目: 535ms 6回目: 947ms 7回目: 28ms 8回目: 862ms 9回目: 738ms 10回目: 9ms 平均: 539.800000ms



prince

リンク

2015/3/3(Tue) 17:14:38|NO.67652

>>nepisatさん
どうやら処理に1秒以上かかっていて正常に測定できていないようです。

ついでですが折角作ったのでDLLを使用しない時間測定モジュールを公開します。
・hsp3_64では、HSP3.5beta1時点でモジュール周りにバグがあるようで使用できません(hsp3_64でDLLが使えないから作成したのですが…)。
・1秒以上かかる処理には使用できません。

#module //時間計測モジュール(DLL不使用) //1秒以内に終わる処理でないと正しい値が返らない //timerstartで計測開始 //timerstop()で計測終了・時間取得 #deffunc timerstart starttime = gettime(7) return #defcfunc timerstop stoptime = gettime(7) if (starttime > stoptime) : stoptime += 1000 return (stoptime - starttime) #global



科学太郎

リンク

2015/3/11(Wed) 20:28:04|NO.67806

HSP3.5beta1 はインストールしてませんので
HSP3.32 の 32Bit 版で実行してみました。

OS:Windows 8.1 64bit
CPU:Intel(R) Celeron(R) CPU 2950M @ 2.00GHz
MEM:4GB

hsp3(32bit)での実行結果 内容: pokeで空データ(1)を10000000回書き込み 1回目: 243ms 2回目: 249ms 3回目: 231ms 4回目: 246ms 5回目: 218ms 6回目: 242ms 7回目: 234ms 8回目: 269ms 9回目: 207ms 10回目: 231ms 平均: 237.000000ms
ファルコンさんのCPUは2.20GHzなのに私の方が早いのはなぜなのでしょうね?
ほかにもnepisatさんのCPUは3.50GHzなのに倍ほどの差があります。なぜ?



ONION software Copyright 1997-2023(c) All rights reserved.