next up previous contents
Next: 7.2.2 使用方法 Up: 7.2 サーチアクセスソフトの使用方法 Previous: 7.2 サーチアクセスソフトの使用方法

7.2.1 特長

 

前節までにも述べたように,forms ライブラリを使用することにより, ウインドウを開きマウスで操作するソフトが簡単に開発できるようになったため, ほとんどマウスのみで値の設定,検索,結果確認等ができるようになったことが, このソフトの大きな特長であり, これまでのサーチアクセスプログラム[4]からの大きな変更点である。 この特長により,コマンドラインから設定値やファイル名を入力して実行させるより, 入力間違いが少なく,設定の仕方もわかりやすくなっている。 また,値を変更して何度でも検索が可能なので, その都度コマンドラインから起動する必要がない。検索結果の確認も, これまでは別のソフトを起動してファイルの内容を見なければならなかったが, 同一ソフトですべて行えるようになっている。

以上のような特長は前節までの開発方法や次節の使用方法で詳しく述べるので, ここではその他の特長や変更点について述べる。以下にその特長をあげる。

dingautolist782

まず,検索速度について説明する。これまで使用していたプログラムでは, 関数を呼び出すときに引数が多くならないようほとんどがグローバル変数と なっていた。また,ソースファイルが分割されていなかったため, グローバル変数が多くてもそれほど混乱がなかった。

しかし,グローバル変数を用いると, このソフト使用中はそのメモリ領域が確保されているため, 使用中に他のソフトを起動すると, 起動させたソフトによっては極端に実行速度が遅くなる場合が生じた。 これまでのプログラムの場合は検索するごとに起動していたので, それほど問題が生じなかったが, このソフトの場合は起動中は何度でも検索できるようになっているので, 一度この問題が生じるとソフトを終了させるまでは解決しない。 その都度起動しなおしていたのでは,このソフトのメリットが損なわれるので, 検索中のみ変数のメモリを確保し,終了後メモリを解放するように改良した。

検索するプログラムは関数となっているので, グローバル変数をローカル変数に変更すれば, この関数が呼び出された時だけ変数のメモリが確保されることになる。 ただし,すべてローカル変数とすると, ニューロン等の計算を行う関数を呼び出すときに使用する変数を, すべて引数として渡す必要がある。そのため,引数を渡す分だけ検索にロスが生じ, 他のソフトの影響が少なくなる代わりに検索時間が遅くなる。

そこで,頻繁に呼び出される関数の引数はグローバル変数にし, その他はローカル変数とした。 ただし,検索経過を Result File(次節参照) へ書き出す関数は, 必要な時のみ行うので,これら関数には含めていない。 また,配列はメモリ領域が多く必要なため,グローバル変数にすると意味がないので, これらに関係なくローカル変数とした。 なお,ニューロンの出力を計算する関数 neuro は, これまでのプログラムではパターンの要素ごとに一つずつ計算していたため, パターン全要素の出力を計算するまでにこの関数を 100 回呼び出していた。 そのため,そのロスをなくすために 1 度呼び出すだけでパターンの全要素が 計算できるように変更した。

また,頻繁に呼び出される関数の変数は, 通常の自動変数より処理速度が速いレジスタ変数になっている。

次に,エラー発生時等における警告通知について説明する。 これまでのプログラムでは, 存在しないファイルをデータ入力ファイルとして指定したり, 存在していてもデータフォーマットが間違っている場合は, 警告を出力して終了していた。 ただし,データフォーマットが間違っているかどうかは, データファイルの内積値の有無(正確にいえば内積値を取り込む際に使用する fscanf 関数の戻り値が EOF の場合)しか調べていない。 したがって,その他の場合では, 正しくデータが取り込まれているかどうかは調べていないため, 誤ったデータで検索を開始してしまう可能性がある。 また,データを出力するファイルについてエラーが発生した場合(出力ファイルが 書き込み不可になっていたり,ディレクトリが存在しない場合等)は, 何も対策がなされていないため,強制終了させられることになる。 しかし,以前のプログラムでは検索ごとに実行させていたので, エラーの原因がわかっていれば,強制終了されてもそれほど問題はなかったが, 本プログラムは一度実行させれば何度でも続けて検索ができるので, エラーが発生するたびに強制終了させられていたのでは, この利点が損なわれる。

そこで本プログラムでは, これらの誤った検索や強制終了を避けるために警告を表示し, さらに対処できる場合はそれを行うかどうかを選択できるように改良している。 また,対処する方法がない場合や,対処をしないような選択をした場合は, 検索が終了させる。 そのため,エラーが発生しても検索のみを終了させて, プログラムの実行自体を強制終了させることを避け,場合によっては, 対策を講じることによって検索自体も終了させることもなく,また, ファイルの書き込み不可の解除や, ディレクトリの作成のコマンドを実行させる必要もなくなる。

なお,警告表示についての詳細は,第 7.2.3 節で述べる。


Deguchi Toshinori
1998年03月12日 (木) 16時16分01秒 JST