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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0904
名無しさんDLLを使用するとどれくらい速くなりますか?7解決


名無しさん

リンク

2011/9/4(Sun) 19:19:08|NO.41085

DLLを使用すると、どれくらい速くなるものなのですか?

gcopyをHSPで再現してみると以下のようになりました。

#module #deffunc pcopy int p1,int p2,int p3,int p4,int p5 sel=ginfo_sel pos_x=ginfo_cx pos_y=ginfo_cy repeat p5 :y=cnt repeat p4 gsel p1 pget p2+cnt,p3+y r=ginfo_r g=ginfo_g b=ginfo_b gsel sel color r,g,b pset pos_x+cnt,pos_y+y await loop await loop return #deffunc vcopy int p1,int p2,int p3,int p4,int p5 sel=ginfo_sel pos_x=ginfo_cx pos_y=ginfo_cy gsel p1 mref vram1, 66 sx31=(ginfo_sx*3+3)&0xfffffffc sx91=ginfo_sy*sx31-sx31 gsel sel mref vram2, 66 repeat p5 :y=cnt repeat p4 index =sx91-y*sx31+cnt*3 index1=index-p3*sx31+p2*3 index2=index-pos_y*sx31+pos_x*3 poke vram2,index2+2,peek(vram1,index1+2) poke vram2,index2+1,peek(vram1,index1+1) poke vram2,index2 ,peek(vram1,index1+0) loop loop redraw 1 return #global buffer 1 color rnd(256),rnd(256),rnd(256) boxf repeat 100 color rnd(256),rnd(256),rnd(256) circle rnd(ginfo_sx),rnd(ginfo_sy),rnd(ginfo_sx),rnd(ginfo_sy) loop screen 0 pos 0,0 :gcopy 1,0,0,640/2,480 pos 640/2,0 :pcopy 1,640/2,0,640/2,480 wait 100 cls wait 10 buffer 1 color rnd(256),rnd(256),rnd(256) boxf repeat 100 color rnd(256),rnd(256),rnd(256) circle rnd(ginfo_sx),rnd(ginfo_sy),rnd(ginfo_sx),rnd(ginfo_sy) loop screen 0 pos 0,0 :gcopy 1,0,0,640/2,480 pos 640/2,0 :vcopy 1,640/2,0,640/2,480

1回目はpsetで再現して、
2回目はvramで再現してみました。
スクリプトが見難い点はご了承ください

vramでやった方がもちろん速いのですが、
DLLを自作して使用したら、これより速くなりますか?
(実際作っているのは標準命令にない命令で、計算もたくさん使います)

計算速度、描画速度などどれくらい速くなるものですか?

もしよければgcopyをC言語で(DLL用に)再現したスクリプトを貼ってください



この記事に返信する


backdrop

リンク

2011/9/4(Sun) 21:33:33|NO.41087

DLLを使用したからといって必ずしも速くなるわけではない
RAMの使用状況によってDLLへのアクセスが遅くなり、結果的にgcopyを使うより遅くなってしまう場合がある。



check

リンク

2011/9/4(Sun) 23:43:36|NO.41090

gcopyは内部でHSPの命令を組み立てて実行しているのではなく、
HSPのランタイムに最初からCのコードとして組み込まれているので、
DLLを使うよりは関数呼び出しのオーバーヘッドがなくなるので、
結果としてはDLLを使ったほうが遅くなる、というのはあると思うぞ。
よほど複雑な処理をしない限りは。

vram = HSP内部で管理されている画面のメモリであるので、
それを操作することはHSPでもDLLでも劇的に速度が変わることは少ないと思うぞ。

個人的には単に
>gcopyをC言語で(DLL用に)再現したスクリプト
というものを欲しがっているようにしか見えないのだが…。

そしてbackdrop氏の発言は毎回なにかずれていると思うのは俺だけではないはず。



ORZ

リンク

2011/9/5(Mon) 00:29:35|NO.41091

最近はそのズレっぷりの方向がどっちにいくかを楽しむ事が出来るようになった。
スレは何となくズレながらも別の人が纏めてくれるから、いいアクセントになるよ。
下手な奴がいたほうがいい合唱になるって音楽の先生に言われたろ?



晩御飯

リンク

2011/9/5(Mon) 00:40:01|NO.41092

hsp3cnvのぞいたらそれっぽいこと書いてあったので見てみると良いんじゃないかと思います。




質問文に「スクリプトを貼って下さい」が入ってると地雷臭がする。



あり

リンク

2011/9/5(Mon) 10:17:29|NO.41098

HSP2の時代には画像コピー命令の使えるHSPプラグイン(DLL)が幾つかあり
描画速度を比較してみた事がありますが、DLL使用の方が若干(10〜20%弱程度)速くは
なるものの決定的なほど大きな差はありませんでした。
また、今はPCの描画速度がかなり速くなっているので体感的な差を感じる事は
あまり無いと思います。

演算速度の違いについては例えばクイックソートをHSPで独自に実装した場合と
hspdaのsortvalを使った場合では数十倍以上もの差が出るので
処理量が多いほどDLLの方が速度面で有利だと言えるでしょうね。



TTRUKO

リンク

2011/9/6(Tue) 08:19:18|NO.41116

gcopyでは実現できない、あるいはgcopyを何度も使わないと実現できないような
複雑な条件のコピーの場合は、vramをDLLに渡したほうが速かったりしますけど
ふつうのコピーなら、わざわざDLLを使う必要はないと思いますよ〜



名無しさん

リンク

2011/9/6(Tue) 19:54:03|NO.41117

DLLを使用してもそれほど変わらないということで、
暇なときに作ってみようと思います

スクリプトを貼るのをねだるようなコメントは控えるようにします

みなさん回答ありがとうございました



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