Lispオプティマイザの動作-BricsCAD

提供:GizmoLabs - だいたい CAD LISP なサイト
2022年7月22日 (金) 08:18時点におけるGizmon (トーク | 投稿記録)による版 (ページの作成:「{{BCAD_LISP}} == Lispオプティマイザの動作原理 == Lisp Optimiser は Lisp ファイル内の (defun ...) コードブロックのみを対象としていて…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

Lispオプティマイザの動作原理

Lisp Optimiser は Lisp ファイル内の (defun ...) コードブロックのみを対象としていて、コマンドラインや (defun ...) ブロックの外から入力されたLisp式は分析されない。

デフォルトでは、(load ...) 文によって読み込まれたLispファイルに対してLispオプティマイザが有効になる。

オプティマイザーを無効にするには、(vle-optimiser nil) とすると、直ちに有効になり、再び有効になるまでコードの最適化を抑制する。 Lispファイルが読み込まれると、Lispオプティマイザは自動的にリセットされ、再び有効な状態に戻る。

Lispファイルが (load ...) で他のLispファイルをロードした場合、Lispオプティマイザは自動的にサブロードされたLispファイルに対して(再)有効化される。 そのファイルのロードが終了すると、LispオプティマイザはメインとなるLispファイルの元の状態に戻る - つまり、各Lispファイルに対してオプティマイザは独自の状態を維持する

Lispファイルのロードが完了し、Optimiserで処理された後、Lispコードはメモリ上にそのまま残り、それ以上の処理は行われない。

(他のCADシステムでは、(vle-optimiser t/nil) 関数は No-Operation で、 vle-extension.lsp ファイルで提供される)

Lisp Optimiserが有効なLispファイルをロードする場合 :

ファイルから読み込まれた各 (defun ...) ブロックに対して、Lisp Optimiser は defun ブロックの評価をインターセプトし、Lisp コードを解析して既知の非効率的なパターンを検出する。主な目的は、性能向上とメモリ負荷の軽減であり、メモリ負荷の代償として性能を向上させるという選択肢はない。

もちろん、このロードタイム解析は若干の性能の犠牲となり、Lispファイルのロードが若干遅くなる(平均してロード時間は5%以下程度に増加する)。

Bricsysの自動テストシステムは、Lisp Optimiserの正しい動作を監視・検証するための専用テストを含んでおり、各最適化ケースは複数のテストによってカバーされている。


現在処理されているコードパターンは、最適化されたコードパターンを参照。

また、Lispベンチマークには、ロードタイム最適化の効果を検証するための専用ベンチマークが含まれている。