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

提供:GizmoLabs - だいたい CAD LISP なサイト

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