IDLの設定

IDLのインストールについては別ページに分割しました。

IDLを起動するための設定

通常のサイトでは idl や idlde コマンドでIDLを起動できるように、システム管理者により環境変数/エイリアス/シンボリックリンクが適切に設定されているか、設定手段(Modulesソフトウェアパッケージなど)が提供されているはず。

そうでない場合には、次のようにして IDL の起動に必要な環境変数やエイリアスを設定できる(インストールパスは環境やバージョンにより異なる)。

  1. # csh/tcshの場合
  2. source /usr/local/harris/idl/bin/idl_setup
  3. # bashの場合
  4. . /usr/local/harris/idl/bin/idl_setup.bash
  5. # kshの場合
  6. . /usr/local/harris/idl/bin/idl_setup.ksh

重要な環境変数として、IDLのインストールパスを示す IDL_DIR がある (デフォルトは /usr/local/harris/idl87 など)。idl や idlde コマンドでは IDL_DIR が指すパスに置かれたIDLが起動する。通常は自動設定されるか、システム管理者が適切に設定してくれているはずだが、正しく設定されていない場合には手動で設定するか、上記のidl_setupを用いて設定する必要がある。

IDLの設定を変更

IDLの設定を変更する方法 (優先順):

  1. IDLのコマンドライン引数を用いて一時的に変更する
  2. 環境変数で設定する
  3. ユーザー設定ファイルを利用する (直接編集・PREF_SETを使う・GUIを使う)
  4. ディストリビューション設定ファイルを利用する

さらにIDL_STARTUP 設定でプログラム(バッチファイル)を指定することで、IDL開始時に任意のプログラムを実行させることもできる。

現在適用されている設定一覧を確認するには、IDL上で

  1. HELP, /PREFERENCE

とする。

2列目の項目が、当該設定がどこで設定されているかを示す。CMDLINE: コマンドライン引数, ENV: 環境変数, USERFILE: ユーザー設定ファイル, DISTFILE: ディストリビューション設定ファイル, DEFAULT: IDLのデフォルト (優先順)

また設定ファイル(コマンドライン[指定された場合のみ]、ディストリビューション、ユーザー)のパスが表示される。

次のようにして設定項目の説明、設定変更が反映されるタイミング、デフォルト値を確認できる。

  1. HELP, /PREFERENCE, /FULL

ある設定項目の現在の値を取得するにはIDL上で次のようにする。

  1. PRINT, PREF_GET('IDL_CPU_TPOOL_NTHREADS')

ある設定項目を環境変数を用いて変更するにはIDL開始前に次のようにする。

  1. # csh の場合
  2. setenv IDL_CPU_TPOOL_NTHREADS 4
  3. # bash の場合
  4. export IDL_CPU_TPOOL_NTHREADS=4

ある設定項目をIDLで変更するには次のようにする。

  1. PREF_SET, 'IDL_CPU_TPOOL_NTHREADS', 4, /COMMIT

/COMMIT をつけると変更が即時に反映され、ユーザー設定ファイルにも書き込まれる。つけない場合には、変更は保留され、PREF_COMMIT を実行することで初めて反映される。ただし、IDL_STARTUP など、IDLを再起動するか、.reset_session を実行しないと反映されない設定もある。

ある設定項目をデフォルトの値に戻すにはIDL上で次のようにする。

  1. PREF_SET, 'IDL_CPU_TPOOL_NTHREADS', /DEFAULT, /COMMIT

設定の確認・変更は、統合開発環境(idlde)でWindow→Preferences (日本語ではウィンドウ→設定)でGUIでも行うことができる。設定変更の結果はユーザー設定ファイルに書き込まれる。

設定ファイル

設定名と値をコロンで区切ったテキストファイル。

  1. IDL_STARTUP : ~/.idl_startup
  2. IDL_CPU_TPOOL_NTHREADS : 4
  3. IDL_GR_X_RETAIN : 2

ディストリビューション設定ファイルにはシステム全体の、ユーザー設定ファイルにはユーザーごとの設定を記述する。設定ファイルの場所はHELP, /PREFERENCEで確認する。ユーザー設定ファイルはPREF_SETや統合開発環境(idlde)の設定画面を用いることでも変更することができる。

IDL起動時にコマンドライン引数で任意の設定ファイルを指定し、一時的に設定を変更することも可能。

ユーザー設定ファイルとディストリビューション設定ファイルはIDLのバージョンによって異なるファイルとなる。IDLのバージョンアップのことを考えると、環境変数かコマンドライン設定ファイルを用いるほうが無難かもしれない。

よく使いそうな設定

IDL_STARTUP (デフォルト: 未設定)

IDL開始時に自動的に実行するプログラムファイル(IDLバッチファイル)を指定する。ウィンドウ、グラフィックス、フォント、カレントディレクトリなどの初期設定などを行うのに便利。

例: ~/.idl_startup という名前で、バッチファイルを作成する。

  1. DEVICE, DECOMPOSED=1, RETAIN=2, TRUE_COLOR=24

次のようにして、IDL開始時に~/.idl_startup を自動的に実行するようにする。

  1. # IDL開始前に csh で環境変数を設定する場合
  2. setenv IDL_STARTUP ~/.idl_startup
  3. # IDL開始前に bash で環境変数を設定する場合
  4. export IDL_STARTUP=~/.idl_startup
  5. # IDL上で設定する場合 (ユーザー設定ファイルに保存され、次回起動時か、.reset_session で有効になる)
  6. PREF_SET, 'IDL_STARTUP', '~/.idl_startup', /COMMIT
  7. # (参考) バッチファイルなのでIDLに直接渡して実行させることもできる
  8. idl ~/.idl_startup

IDL 8.5以前で IDL_IDLBridgeで子プロセスを開始する際には、IDL_STARTUP で指定されたプログラムは自動実行されない。必要な場合、子プロセスを立ち上げた後、明示的に実行する必要がある。

  1. obj = obj_new('IDL_IDLBridge')
  2. obj->Execute, '@' + PREF_GET('IDL_STARTUP')

IDL 8.6以降では子プロセスを開始する際に IDL_STARTUP で指定されたプログラムが自動実行されるため、この操作は不要。

IDL_PATH (デフォルト: '<IDL_DEFAULT>')

IDLのプログラムを検索するパスを指定する。IDL_PATH で指定されたパスにあるプログラムは、フルパスを指定して手動コンパイルする必要はなく、自動コンパイル・実行できるようになる。

複数のパスはコロンで区切る。また、パスの前に + をつけると、サブディレクトリの中も検索対象になる。

  1. # IDL開始前に csh で環境変数を設定する場合
  2. setenv IDL_PATH '<IDL_DEFAULT>':+$HOME/lib
  3. # IDL開始前に bash で環境変数を設定する場合
  4. export IDL_PATH='<IDL_DEFAULT>':+$HOME/lib
  5. # IDL上で設定する場合 (ユーザー設定ファイルに保存され、即時反映される。!PATHシステム変数もリセットされる)
  6. PREF_SET, 'IDL_PATH', '<IDL_DEFAULT>:+$HOME/lib', /COMMIT

既に IDL_PATH が設定済みの場合には、既存の IDL_PATH の内容を保持したままに追加するようにする。

  1. # IDL開始前に csh で環境変数に追加設定する場合
  2. setenv IDL_PATH '<IDL_DEFAULT>':+$HOME/lib:$IDL_PATH
  3. # IDL開始前に bash で環境変数に追加設定する場合
  4. export IDL_PATH='<IDL_DEFAULT>':+$HOME/lib:$IDL_PATH
  5. # IDL上で設定する場合 (ユーザー設定ファイルに保存され、即時反映される。!PATHシステム変数もリセットされる)
  6. PREF_SET, 'IDL_PATH', '<IDL_DEFAULT>:+$HOME/lib:' + PREF_GET('IDL_PATH'), /COMMIT

毎回同じ設定を使う場合には、シェルの設定ファイル (~/.cshrc や ~/.bashrc) に書いておくか、PREF_SETでユーザー設定ファイルに設定を保存しておく。

IDL標準のライブラリを使うため、<IDL_DEFAULT> を含めるようにする。/usr/local/rsi/idl/lib や /usr/local/itt/idl/lib のようなIDLのインストールパスを直接指定してしまうと、IDL本体とライブラリでバージョン不一致が発生するなどのトラブルの原因になる。

IDL_PATH 設定が展開された結果は、!PATH システム変数で確認・変更できる。(!path = expand_path(pref_get('IDL_PATH')) と等価)

IDL実行中に一時的にパスを変更する場合には、!PATH システム変数の値を直接書き替える。

IDL_RBUF_SIZE (デフォルト: 500)

コマンドラインの履歴バッファの保持数を変更する。

  1. # IDL開始前に csh で環境変数を設定する場合
  2. setenv IDL_RBUF_SIZE 1000
  3. # IDL上で設定する場合 (ユーザー設定ファイルに保存され、即時反映される)
  4. PREF_SET, 'IDL_RBUF_SIZE', 1000, /COMMIT

IDL_CPU_TPOOL_NTHREADS (デフォルト: 0 [全論理コアを使用])

配列演算などのマルチスレッド動作で用いる最大スレッド数を設定する。

  1. # IDL開始前に csh で環境変数を設定する場合
  2. setenv IDL_CPU_TPOOL_NTHREADS 4
  3. # IDL上で設定する場合 (ユーザー設定ファイルに保存され、即時反映される)
  4. PREF_SET,IDL_CPU_TPOOL_NTHREADS, 4, /COMMIT

指定しない場合にはシステムの全論理コアを使用する。Hyper-Threading が有効な環境では、スレッド数を物理コア数に抑えるほうが速くなる場合がある。また、CPU・メモリが複数ノードに分かれている環境(NUMA)や、システムのコア数が非常に多い場合、複数のIDLプロセスを同時に走らせる場合などにも調整するとパフォーマンスが改善される場合がある。

複数のマシンでホームディレクトリを共有している場合等で、IDL_CPU_TPOOL_NTHREADS を 1ノードあたりの物理コア数に自動設定する例:

  1. # csh の場合
  2. if ( -x /usr/bin/lscpu ) then
  3. set num_cores=`/usr/bin/lscpu -p=CORE,NODE | grep ',0$' | sort -u | wc -l`
  4. if ($num_cores > 0) then
  5. setenv IDL_CPU_TPOOL_NTHREADS $num_cores
  6. endif
  7. unset num_cores
  8. endif
  1. # bash の場合
  2. if [ -x /usr/bin/lscpu ]; then
  3. num_cores=`/usr/bin/lscpu -p=CORE,NODE | grep ',0$' | sort -u | wc -l`
  4. if [ "$num_cores" -gt 0 ]; then
  5. IDL_CPU_TPOOL_NTHREADS=$num_cores
  6. export IDL_CPU_TPOOL_NTHREADS
  7. fi
  8. unset num_cores
  9. fi

IDL_GR_X_RETAIN (デフォルト: Server(1))

ダイレクトグラフィックスのウィンドウの再描画の方法を指定する。0: 再描画しない, 1: Xサーバーで管理, 2: IDLで管理。TVRDがうまく動かない場合や、ウィンドウが背面に隠れると描画されたグラフィックスが消えてしまう場合には、2 に変更する。IDL起動後にDEVICEWINDOWプロシージャのRETAINキーワードでも個別に指定できる。Windows では IDL_GR_WIN_RETAIN

Xvnc (vncserver) 上でLinux版IDLを利用していて、グラフィックス出力時にXvncが頻繁にクラッシュ(Segmentation Fault)する場合には、Xvnc (vncserver) の起動時に -bs オプションをつけるか、IDL_GR_X_RETAINを0か2に設定すると改善する場合がある。

IDL_GR_X_RENDERER (デフォルト: Hardware(0))

オブジェクトグラフィックスのレンダリングモードを指定する。0: ハードウェア、1: ソフトウェア。リモートログインで使う場合やWaylandを利用する場合など、ハードウェアレンダリングで不具合が生じる場合には 1 に変更する。一方、IDL 8.7.1 以前ではソフトウェアレンダリングモードで不具合が生じる。WindowsではIDL_GR_WIN_RENDERER

西田圭佑 (NISHIDA Keisuke)
nishida at kwasan.kyoto-u.ac.jp