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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0829
FunnyMaker配列の先頭要素に手を出すなら、 (0) は省いた方が速い?5解決


FunnyMaker

リンク

2014/8/29(Fri) 00:31:49|NO.64427

深夜に失礼します。

「HSPってこうすると速いんだよね」とかよくありますが、最近あることに気がつきました。
周知の事実ならごめんなさい。

気づいたのは、
「配列の先頭に対して参照 or 代入を行うときに (0) を明示しないと速くなる」
ことです。

下は実験コード。


#include "d3m.hsp" repnum = 100000 dim A,100 A(2) = 3 b = 0 mes ""+repnum+" 回ループ" ;< 真面目に参照 > mes "\n真面目に参照 val = A(0)" wait 50 t1 = d3timer() repeat repnum b = A(0) loop t2 = d3timer() mes "所要時間 "+str(t2-t1)+" ms" ;< 横着参照 > mes "\n横着参照 val = A" wait 50 t1 = d3timer() repeat repnum b = A loop t2 = d3timer() mes "所要時間 "+str(t2-t1)+" ms" ;< 真面目に代入 > mes "\n真面目に代入 A(0) = val" wait 50 t1 = d3timer() repeat repnum A(0) = 3 loop t2 = d3timer() mes "所要時間 "+str(t2-t1)+" ms" ;< 横着代入 > mes "横着代入" wait 50 t1 = d3timer() repeat repnum A = 3 loop t2 = d3timer() mes "所要時間 "+str(t2-t1)+" ms"

今開発している3D描画モジュールでチマチマ高速化している最中に気づきました。
そうでなくても、みなさんベクトルとかで

V(0) = ?,?,?,....
とか

F(0) = V(0),V(1),...
とかやりませんか?

(0) を書かないだけでいくらか高速になるようです。コードの保守性は僅かに下がると思いますが。

もし、逆に遅くなった人がいましたら気が向いたら教えてくれるとありがたいです。
「いや、全然速くならないんだが...」とか。



この記事に返信する


ヒラギノ

リンク

2014/8/29(Fri) 00:40:37|NO.64428

たしかに、7 ms 秒ほど早くなっていました!

なぜなんでしょうね。



Flat

リンク

2014/8/29(Fri) 01:04:18|NO.64429

こちらも速くなりました。

理由はおそらくコード量が減るからだと思います。
('('を参照→0を参照→')'を参照の分がなくなります)



ぴょぴょ

リンク

2014/8/29(Fri) 01:08:50|NO.64430

> なぜなんでしょうね。
配列の添え字部を計算しないからだと思います。
配列に添え字部分の(0)を付かなければ、配列の最初のメモリ・アドレスを使うのでしょう。
そして、添え字部分が(0)でも(1)でも、添え字部分のメモリ・アドレスを計算するから時間が掛かる。

私の推測ですがね。



ヒラギノ

リンク

2014/8/29(Fri) 08:55:21|NO.64434

なるほどです。



>7 ms 秒
ではなく
>7 ms
でした;;



FunnyMaker

リンク

2014/8/29(Fri) 10:12:39|NO.64439

ヒラギノさん、Flatさん、ぴょぴょさん、確認ありがとうございます。
どうやら本当に速くなるようですね。

速くなる理由については、Flatさんとぴょぴょさんが考察してくれましたが、
なるほど、そう考えると納得できますね。
「ランタイムが「(0)」を評価するのを省けるから高速化するということですね。


というわけで、ちょっと意外な高速化でした。



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