インタプリタを高速化したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
taka
記事: 34
登録日時: 10年前
住所: 三重県

インタプリタを高速化したい

#1

投稿記事 by taka » 9年前

最近またエミュレータを作っているのですが、思うように速度が出なくて困っています。
エミュレータのほうは遅くなる要素がほとんど無いのですが、インタプリタのせいかあまりfpsが出ません。
インタプリタ本体は配列アクセスからswitch文に変えたのですがまだ遅いです。
それとcpu->r_pc(実行ポインタ)をフルで使おうとするとなぜか破壊されます。
どうにかなりませんか?

==やりたいこと==
1.エミュレータのほうで画像ずらし120fps
2.r_pc破壊の阻止
3.GPUのほうで透視投影とフィルポリゴン描画して10万ポリゴン/秒

アセンブラとリファレンスもつけておきます。
添付ファイル
CASM-GP3200.zip
アセンブラ(構文特殊です)
・EQU使用不可
・ラベル名には最初に.必須
・レジスタ名には最初に%必須
・整数には最初に$必須(でも1024*4だったら$1024*4になります)
・小数には最初に#必須
・空改行不可
・結構構文変わる(MOV %r0, %r1 なら mov(%r0,%r1) に)
・命令名小文字オンリー
(1.13 MiB) ダウンロード数: 144 回
TLSI GP3200.pdf
リファレンス(v2~用)
(148.33 KiB) ダウンロード数: 154 回
GPstation.zip
エミュレータ本体(v2使用)
(2.85 MiB) ダウンロード数: 137 回

taka
記事: 34
登録日時: 10年前
住所: 三重県

追記: インタプリタを高速化したい

#2

投稿記事 by taka » 9年前

インタプリタのv2とv1同梱で添付しておきます。
添付ファイル
GP3200_v2.zip
インタプリタ本体
(5.53 KiB) ダウンロード数: 141 回

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: インタプリタを高速化したい

#3

投稿記事 by h2so5 » 9年前

Windows環境が手元にないので試せないのですが、まずどこがボトルネックになっているのかきちんとプロファイリングしてください。

もしVMの命令フェッチの分岐がボトルネックになっている場合にはこの記事が参考になると思います。
しかし、VisualStudioではGCCのようなgotoの拡張が使えないのでアセンブラで書くしかないかもしれません。
http://magazine.rubyist.net/?0008-YarvManiacs
taka さんが書きました: それとcpu->r_pc(実行ポインタ)をフルで使おうとするとなぜか破壊されます。
フルで使うという意味が分かりません。

taka
記事: 34
登録日時: 10年前
住所: 三重県

Re: インタプリタを高速化したい

#4

投稿記事 by taka » 9年前

h2so5 さんが書きました:フルで使うという意味が分かりません。
については

コード:

UINT8 opcode = cpu->r_memory[(cpu->r_pc & (0x80000000 - 1)) + cpu->r_segs[0]];
とありますが、このcpu->r_pc & (0x80000000 - 1)をなくすとなぜかr_pcが破壊されます(0xccccccccになる)

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: インタプリタを高速化したい

#5

投稿記事 by h2so5 » 9年前

よく分からないのですが、単純にcpu->r_pcにどこかで不正な値が入っているということでは?

閉鎖

“C言語何でも質問掲示板” へ戻る