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


HSPTV!掲示板


未解決 解決 停止 削除要請

2025
0714
zakkiHSP高速化拡張4解決


zakki

リンク

2025/7/14(Mon) 22:11:34|NO.103661

別のスレッドでBASICコンパイラの話が出ていましたが、PythonのCythonの仕組みを見てて似たようなことがHSPでもできないか考えてます。
HSPの文法を拡張してユーザー定義関数をC++に変換してDLLを作るとお手軽に高速化できるんじゃないかっていうアイディアを考えてるんですがどうでしょうか。

https://github.com/zakki/OpenHSP-fork/blob/chsp/sample/chsp/README.md


#deffunc vcross array c, array v0, array v1 c(0) = v0(1) * v1(2) - v0(2) * v1(1) c(1) = v0(2) * v1(0) - v0(0) * v1(2) c(2) = v0(0) * v1(1) - v0(1) * v1(0) return
の代わりに

#chsp_deffunc vcross array[double] c, array[double] v0, array[double] v1 c(0) = v0(1) * v1(2) - v0(2) * v1(1) c(1) = v0(2) * v1(0) - v0(0) * v1(2) c(2) = v0(0) * v1(1) - v0(1) * v1(0) return #chsp_end
みたいに書くとその部分だけC++ DLLになるって構想です。

手で変換して実験してみたところ、aobenchのレイトレーシング処理っていう極端にCPU負荷高く独立性高い関数多いサンプルで2〜7倍程度の高速化です。

そもそもの課題としては実装出来るのかというのはありますが、それはそれとして需要あるのかっていうのも気になりました。

この仕組みでメリットを得られるのが引数だけを使って計算する純粋関数を定義してCPU負荷の高い計算をするみたいなプログラムに限られるので
hsp3のzipに入ってるような公式サンプルだとほとんど使えなさそうです。



この記事に返信する


窓月らら

リンク

2025/7/14(Mon) 22:39:01|NO.103662

面白い試みだと思います。
例えば画像フィルタみたいなものをHSP3で書いてもどうしても遅くて
実用的な速度がでないことがあるんですが、
そういう用途でも使えそうな気はします。

HSPでDLLが作れるようになったらちょっとした革命なんですがね。



zakki

リンク

2026/3/8(Sun) 23:24:58|NO.104802

最低限の機能はとりあえず動くようになりました。
https://github.com/zakki/OpenHSP-fork/tree/chsp


# axとc++ソースを生成 ./hspcmp sample/chsp/ao_opt.chsp # c++ソースをビルド g++ -shared -fPIC -g -O2 sample/chsp/ao_opt.cpp -I . -o sample/chsp/ao_opt.so # 共有ライブラリの読み込みパスを指定して実行 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./sample/chsp ./hsp3dish sample/chsp/ao_opt.ax

でアンビエントオクルージョンが6倍速くらいになります。
開発が楽なのでLinux上での動作確認しかしてませんが、OS固有機能は使ってないのでWindowsでも動くと思います。

ドキュメント https://github.com/zakki/OpenHSP-fork/blob/chsp/src/hspcmp/docs/chsp.md
テストケース https://github.com/zakki/OpenHSP-fork/tree/chsp/test/test_chsp_compare



雪月夜

リンク

2026/3/9(Mon) 19:31:52|NO.104803

HSPの高速化と言うとtoropippi氏が作ったHSPCL64とかもありましたね
https://toropippi.web.fc2.com/index.html



zakki

リンク

2026/3/10(Tue) 22:32:06|NO.104811

Windowsで動かない箇所いくつかあったので修正しました。
hspcmp.dllを差し替えるとF5でdllとaxができて実行できるようになりました。
プリプロセッサとaxコンパイルの間でcプログラムを生成して内部でdllにコンパイルしています。

chspは設計上hspのプログラムからCPUバウンドな部分の処理を切り出して
hspで書いたかのように呼び出すためのdllを作る目的です。
現状は数値か数値の配列受け取って数値返す処理しか書けません。
将来的にhspsdk使ったHSPプラグイン相当のことも出来たらとは思ってます。

hsp3ax2dllとは利用方向が逆で、他アプリプラグインdllを作るって用途は設計上想定してません。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.103661への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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