シードされたクイーンに取られていないことを確認する手順。 。がない。つまり、VP によって呼び出されたプロシージャから戻ったり、そこにジャンプしたりすることはありません。 。
図6.6 ベクトル化前後の手続き選択用の入力データ 非決定的手続きのベクトル化は、大まかに以下のように行うことができます。固有値解析についてはセクション 6.4.3 で説明します。標準化も、決定論的手順とまったく同じ方法で行う必要があります。 。
図6.7 ベクトル化後に非決定的な処理を行う場合のデータの流れ ベクトル化後の手順は以下のとおりです。このセクションでは、再帰呼び出しを使用した非決定的なプロシージャ定義のベクトル化方法を紹介します。 。
セクション 2 では、再帰呼び出しを含むプロシージャのマスク操作への変換のみを扱います。変換対象の手続き P の標準形式が次のとおりであるとします。カナダなど[Canada 88a] は、非決定性の場合の add プロシージャのベクトル化プロセスについて説明しました。
並列バックトラックの実現 ( 並列バックトラック化 )
注5. 組み込み述語は推論速度の計算にカウントされません。
評価
2)いずれの方法でもリスト合成の高速化率が低い。これは、第 3 章の結果と一致している。リスト バージョン N Queen は、第 2 章で示した N Queen アレイ バージョンの約半分でした。 Prolog上にシミュレータが作成されています。 。
この処理系上で図 6.1 に示す N Queen Prolog プログラムを翻訳して実行し、動作を確認しました。その結果、Eight Queen は 2.6 MLIPS の約定速度を達成しました。最適化が不十分なため、自動変換されたプログラムは手動変換されたプログラムに比べて遅くなりますが、改良を加えれば手動変換プログラムを上回る実行速度を実現できるはずです。 。
約0.2msと推定されます。これは総実行時間の約 1% です。それで平行に戻ります。
引数モード不確定のばあいへの適用拡大
別のデータは上書きされるので問題ありません。 b) 入力データの重複による問題の解決 前節で示したベクトル化手法も、図 6.13 に示した手法を最適化した手法です。ベクトル化の範囲を拡大するには、図 6.13 の方法に基づいた、無駄が少なく、大規模な方法を開発する必要があります。また、まだ実装されていない図 6.13 のメソッドも実装し、オーバーヘッドがどの程度になるかを確認する必要があります。入力データの複製に基づく独立ベクトル化手法の詳細な説明は、付録に記載されています。 1) ベクトル化前に解を見つけるための完全なプログラム。入力ベクトル In のすべての要素に対してプロシージャ append_1 を実行し、取得します。
は、任意の手順をベクトルのすべての要素に適用する手順です。 ..v_filterの定義は省略します)。付録のセクション 1 に対応します。入力ベクトル In のすべての要素に対してプロシージャ add_2 を実行します。 v_append の再帰呼び出し。 .add の 2 番目のセクションに対応します。 2) ベクトル化後のプログラム 図6.13 入力データの重複に基づく非決定的手続きのベクトル化を追加。
図 6.14 v_append の動作のパイプライン表現。
関連研究
たとえアーキテクチャを改善したとしても、このようなベクトル演算を実装するのは困難です。一方、このようなアプローチは、パイプライン型ベクトル コンピューターよりも柔軟な並列 SIMD コンピューターで成功する可能性があります。実際、Nilsson は後に Connection Machine [Nilsson 87c、Nilsson 88e] を使用した MIMD 並列処理も研究しました。 3) 専用関数による Lisp でのベクトル処理 Abe et al [Abe 90a, Abe 90b] および小林ら 処理されたプログラムのベクトル処理を可能にします。この研究では、一般的な Lisp 関数をベクトル化しませんでした。代わりに、システムへのマッピング関数のセマンティクスへの変更を最小限に抑えた vmap 関数と vmap マクロを作成しました。
無理のないベクトル処理が可能になります。 CM-Lisp (Connection Machine Lisp) アプローチ [Hillis 85、Hillis 90] も、ベクトル処理専用の関数を言語に組み込むという点で共通しています。ただし、CM-Lisp は SIMD 型並列計算機である Connection Machine 用の言語であり、パイプライン型ベクトル計算機を対象としたものではありません。 。