「Lispオプティマイザの動作-BricsCAD」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
(ページの作成:「{{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 ファイルで提供される)


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


オプティマイザーを無効にするには、(vle-optimiser nil) とすると、直ちに有効になり、再び有効になるまでコードの最適化を抑制する。
===Lisp Optimiserが有効なLispファイルをロードする場合 :===
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 コードを解析して既知の非効率的なパターンを検出する。主な目的は、性能向上とメモリ負荷の軽減であり、メモリ負荷の代償として性能を向上させるという選択肢はない。
ファイルから読み込まれた各 (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ベンチマークには、ロードタイム最適化の効果を検証するための専用ベンチマークが含まれている。