「Lispオプティマイザの動作-BricsCAD」の版間の差分
(ページの作成:「{{BCAD_LISP}} == Lispオプティマイザの動作原理 == Lisp Optimiser は Lisp ファイル内の (defun ...) コードブロックのみを対象としていて…」) |
|||
3行目: | 3行目: | ||
== Lispオプティマイザの動作原理 == | == Lispオプティマイザの動作原理 == | ||
Lisp Optimiser は Lisp ファイル内の (defun ...) コードブロックのみを対象としていて、コマンドラインや (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ファイルをロードする場合 :=== | |||
Lisp Optimiserが有効なLispファイルをロードする場合 : | |||
ファイルから読み込まれた各 (defun ...) ブロックに対して、Lisp Optimiser は defun ブロックの評価をインターセプトし、Lisp コードを解析して既知の非効率的なパターンを検出する。主な目的は、性能向上とメモリ負荷の軽減であり、メモリ負荷の代償として性能を向上させるという選択肢はない。 | ファイルから読み込まれた各 (defun ...) ブロックに対して、Lisp Optimiser は defun ブロックの評価をインターセプトし、Lisp コードを解析して既知の非効率的なパターンを検出する。主な目的は、性能向上とメモリ負荷の軽減であり、メモリ負荷の代償として性能を向上させるという選択肢はない。 |
2022年8月6日 (土) 07:02時点における最新版
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ベンチマークには、ロードタイム最適化の効果を検証するための専用ベンチマークが含まれている。