1

数式を使用してフラクタルを生成するプログラムを C で作成しましたが、非常に遅くなります。基本的には、値をスタックにプッシュするか、値をポップして実行し、算術演算を実行して、結果をスタックにプッシュする関数を示す unsigned char 数値の束をレンダリング関数に渡します (リバース ポリッシュ表記のようなものです)。問題は、プログラムがこれらの関数番号を読み取り、実行する正しい操作を見つけるために if...else if...else if...else if...elseif... を実行し、プッシュとポップを行っていることです。すべてのピクセルのすべての反復の値の束。通常は、(マンデルブロのような) 式がレンダリング関数にハード コードされているだけですが、このプログラムは、多目的フラクタル レンダラーとして私が書いている DLL です。レンダリングが開始される前に数式を読み取り、その場で関数をコンパイルする小さなミニ コンパイラを作成して、レンダリング ルーチンで効率的に再利用できるようにする方法はありますか? 結局のところ、フォン ノイマン アーキテクチャの要点は、コンピュータが自身のコードを変更できることです。

前もって感謝します!

4

2 に答える 2

3

C++ を使用するオプションがある場合は、LLVM を使用することをお勧めします。IRBuilder を使用して関数を LLVM IR に変換し、最適化パスを実行してから、LLVM JIT を使用して実行時に関数をコンパイルします。

http://llvm.org/docs/tutorial/LangImpl4.html

于 2012-07-15T00:48:51.227 に答える
1

C には自己変更コードの概念はありません。たとえば、データ ポインターを関数ポインターにキャストすることによって、「データ」メモリ内にあるデータ ブロックに制御を渡そうとする試みは、未定義の動作です。このモデルは、非 vov-neuman コンピュータ用に C でプログラミングできるようにするためにあります。

そうは言っても、一連の if-then-else ステートメントを関数ポインターまたは switch ステートメントに置き換えることで、おそらく RPN コードを最適化して実行速度を大幅に向上させることができます。ターゲット関数を動的ライブラリにプログラムし、実行時に読み取り、レンダリングで使用することもできます。

于 2012-07-04T23:51:37.880 に答える