JPS6325734A - 論理プログラム処理の方法及びシステム - Google Patents
論理プログラム処理の方法及びシステムInfo
- Publication number
- JPS6325734A JPS6325734A JP62170832A JP17083287A JPS6325734A JP S6325734 A JPS6325734 A JP S6325734A JP 62170832 A JP62170832 A JP 62170832A JP 17083287 A JP17083287 A JP 17083287A JP S6325734 A JPS6325734 A JP S6325734A
- Authority
- JP
- Japan
- Prior art keywords
- parallel
- branch
- parent
- processing
- child
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/313—Logic programming, e.g. PROLOG programming language
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4496—Unification in logic programming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Hardware Redundancy (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Multi Processors (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
発明の背景
発明の分野
本発明は、少なくとも1個のプロセッサを用いて複数の
論理プログラムを並行処理−特にプロログ(Prolo
g)様言語で−するものであって、“親”と呼ばれる既
存のプロセスによって並行−かつ遡及的−処理を行い、
前記親と並列関係に立つ“子”と呼ばれる少なくとも一
つのプロセスを生成することができる方法及びシステム
に関する。
論理プログラムを並行処理−特にプロログ(Prolo
g)様言語で−するものであって、“親”と呼ばれる既
存のプロセスによって並行−かつ遡及的−処理を行い、
前記親と並列関係に立つ“子”と呼ばれる少なくとも一
つのプロセスを生成することができる方法及びシステム
に関する。
先行技術の説明
複数の論理プログラムの並行処理−特にプロログ様言語
−における従来技術として、分割ORノードの後の旧プ
ロセスによるすべての設定を解除した後、新プロセスへ
の共通の設定をコピーすることにより逐次計算をOR並
列計算に遡及的に転換する方法がある。このようにして
、代替OR並列ブランチにより共通変数への相反する設
定を行うことが可能となる。何故ならば、各プロセスは
変数設定のために必要とされる記憶スペースの専用コピ
ーを有するからである。ところで、この方法の難点はコ
ピーのための時間と空き領域を必要とし、さらに設定を
解除するために時間を要することである。しかも、この
OR並列プロセスは幾つかのステップの後で失敗に終わ
る場合が多く、従ってその生成のために費やされた時間
の多くが無駄になるという欠点がある。
−における従来技術として、分割ORノードの後の旧プ
ロセスによるすべての設定を解除した後、新プロセスへ
の共通の設定をコピーすることにより逐次計算をOR並
列計算に遡及的に転換する方法がある。このようにして
、代替OR並列ブランチにより共通変数への相反する設
定を行うことが可能となる。何故ならば、各プロセスは
変数設定のために必要とされる記憶スペースの専用コピ
ーを有するからである。ところで、この方法の難点はコ
ピーのための時間と空き領域を必要とし、さらに設定を
解除するために時間を要することである。しかも、この
OR並列プロセスは幾つかのステップの後で失敗に終わ
る場合が多く、従ってその生成のために費やされた時間
の多くが無駄になるという欠点がある。
その(−の用語及び表現については、追って本発明の好
適な実施例の詳細な説明の初めの個所で定義する。
適な実施例の詳細な説明の初めの個所で定義する。
発明の要約
本発明は、逐次演算の並列演算へのフレキシブルな転換
や、これらの処理モードを低いオーバーヘッドで計画的
に組合わせることが可能な論理プログラムの同時処理ま
たは並行処理の方法及びシステムを提供することを主目
的とする。
や、これらの処理モードを低いオーバーヘッドで計画的
に組合わせることが可能な論理プログラムの同時処理ま
たは並行処理の方法及びシステムを提供することを主目
的とする。
この課題は、1ハ7シエ・ウィンドウ” (hash−
wrndots)と呼ばれる巾広い設定リストを新規生
成のOR並列プロセス専用に創り出す論理プログラム処
理方法を創案することにより解決される。
wrndots)と呼ばれる巾広い設定リストを新規生
成のOR並列プロセス専用に創り出す論理プログラム処
理方法を創案することにより解決される。
本発明は、少なくとも1個のプロセッサを用いて複数の
論理プログラムを並行処理−特にプロログ様言語で−す
るものであって−“親”と呼ばれる既存のプロセスによ
り並行−かつ遡及的−処理を行い、前記の親とOR並列
関係に立つ“子゛と呼ばれる少なくとも一つのプロセス
を選択的OR並列ノードで生成する方法において、新規
生成の子プロセス専用に1ハツシユ・ウィンドウ”と呼
ばれる深設定リストを創り出して、子が分岐OR並列ブ
ランチを処理しつつ、子自体と親の双方に共通にアクセ
ス可能な“共通アクセス可能変数”と呼ばれる変数の設
定を行うようにした論理プログラム処理方法である。
論理プログラムを並行処理−特にプロログ様言語で−す
るものであって−“親”と呼ばれる既存のプロセスによ
り並行−かつ遡及的−処理を行い、前記の親とOR並列
関係に立つ“子゛と呼ばれる少なくとも一つのプロセス
を選択的OR並列ノードで生成する方法において、新規
生成の子プロセス専用に1ハツシユ・ウィンドウ”と呼
ばれる深設定リストを創り出して、子が分岐OR並列ブ
ランチを処理しつつ、子自体と親の双方に共通にアクセ
ス可能な“共通アクセス可能変数”と呼ばれる変数の設
定を行うようにした論理プログラム処理方法である。
このハッシェ・ウィンドウにおいて、前記プロセスはそ
れ自体と、前記プロセスが並列関係に立つ各プロセス、
例えば親プロセスとに共通的にアクセス可能な諸変数へ
の設定を行なう、これはプロセス生成におけるオーバー
へラドが極めて低いという利点がある。プロセスの生成
は共通変数の複写や無関係な設定の解除を必要としない
。この方法により得られる節約は、旧プロセスより既に
なされた作業に依存する。すなわち、分割の発生が遅い
ほど、節約の度合が大きい。この方法においては、OR
並列スプリットのコストは低く、履歴に依存しない。
れ自体と、前記プロセスが並列関係に立つ各プロセス、
例えば親プロセスとに共通的にアクセス可能な諸変数へ
の設定を行なう、これはプロセス生成におけるオーバー
へラドが極めて低いという利点がある。プロセスの生成
は共通変数の複写や無関係な設定の解除を必要としない
。この方法により得られる節約は、旧プロセスより既に
なされた作業に依存する。すなわち、分割の発生が遅い
ほど、節約の度合が大きい。この方法においては、OR
並列スプリットのコストは低く、履歴に依存しない。
本発明に従った好ましい方法によれば、親プロセスのO
R並列ノードは“OR分岐レベル1と呼ばれるラベルで
識別される。これは変数設定の範囲を指定する、すなわ
ち、各変数設定が有効な演算の部分を指定する基準フレ
ームが得られるという利点がある。
R並列ノードは“OR分岐レベル1と呼ばれるラベルで
識別される。これは変数設定の範囲を指定する、すなわ
ち、各変数設定が有効な演算の部分を指定する基準フレ
ームが得られるという利点がある。
本発明に従った他の好ましい方法では、新規創出プロセ
ス、すなわち子プロセスは、その分岐元である親プロセ
スにおけるOR並列ノードのOR分岐レベルを示す“分
岐ラベル”と呼ばれるレベルへのアクセスを有する。こ
れは、新規生成プロセスが前記の基準フレームでみて親
の演算のどの部分に当たるかを知りうる利点がある。
ス、すなわち子プロセスは、その分岐元である親プロセ
スにおけるOR並列ノードのOR分岐レベルを示す“分
岐ラベル”と呼ばれるレベルへのアクセスを有する。こ
れは、新規生成プロセスが前記の基準フレームでみて親
の演算のどの部分に当たるかを知りうる利点がある。
本発明の他の好ましい方法によれば、旧プロセス、すな
わち所謂“親゛は、浅い設定を用いてそれ自体とOR並
列プロセスとに共通的にアクセス可能な諸変数への設定
を実行し、これらに親プロセスにおける最も若い既存の
OR並列ノードのOR分岐レベルを示す“設定ラベル”
と呼ばれるラベルのeJ識づけを行なう、浅い設定の利
点は、深い設定のリストを探す必要がないので諸変数へ
の迅速なアクセスが得られることである。設定ラベルに
より各設定の範囲の識別が可能となる。
わち所謂“親゛は、浅い設定を用いてそれ自体とOR並
列プロセスとに共通的にアクセス可能な諸変数への設定
を実行し、これらに親プロセスにおける最も若い既存の
OR並列ノードのOR分岐レベルを示す“設定ラベル”
と呼ばれるラベルのeJ識づけを行なう、浅い設定の利
点は、深い設定のリストを探す必要がないので諸変数へ
の迅速なアクセスが得られることである。設定ラベルに
より各設定の範囲の識別が可能となる。
本発明の他の好ましい方法では、−プロセスにおいて何
れかの時点で存在するOR並列ノードのOR分岐レベル
は、前記ノードの創出時点までに順序付けされたシーケ
ンスを形成する。これは、1プロセスの演算の一部が他
のプロセスの演算に含まれているかどうかのテストを容
易にする利点がある。
れかの時点で存在するOR並列ノードのOR分岐レベル
は、前記ノードの創出時点までに順序付けされたシーケ
ンスを形成する。これは、1プロセスの演算の一部が他
のプロセスの演算に含まれているかどうかのテストを容
易にする利点がある。
本発明の4hの好ましい方法では、分岐プロセスは前記
の分岐ラベルを前記設定ラベルと比較して、設定が分岐
前または分岐後に旧プロセスの目的により行われたもの
かどうが、従ってラベル付けされた設定が旧プロセスの
みならず分岐プロセスにも有効かどうかを判断する。こ
の方法の利点は、親プロセスにはあまりオーバーヘッド
を課することなく、すべてのOR並列ノードにおいて遡
及的にOR並列プロセスを創り出せることにある。親プ
ロセスでは、OR並列ノードは現在のOR分岐レベルを
増やすだけで生成される。すなわち、オーバーヘッドは
微小である。しかし、これによりこれらのすべてのポイ
ントでOR並列プロセスは遡及的に追加することが可能
となり、従って並列プロセッサ・システムの適合ローデ
ィングを確実に行なうことができる。親プロセスは直接
オーバーヘッドが低いだけでなく、間接オーバーヘッド
が皆無なので、深い設定を用いることを要しない。
の分岐ラベルを前記設定ラベルと比較して、設定が分岐
前または分岐後に旧プロセスの目的により行われたもの
かどうが、従ってラベル付けされた設定が旧プロセスの
みならず分岐プロセスにも有効かどうかを判断する。こ
の方法の利点は、親プロセスにはあまりオーバーヘッド
を課することなく、すべてのOR並列ノードにおいて遡
及的にOR並列プロセスを創り出せることにある。親プ
ロセスでは、OR並列ノードは現在のOR分岐レベルを
増やすだけで生成される。すなわち、オーバーヘッドは
微小である。しかし、これによりこれらのすべてのポイ
ントでOR並列プロセスは遡及的に追加することが可能
となり、従って並列プロセッサ・システムの適合ローデ
ィングを確実に行なうことができる。親プロセスは直接
オーバーヘッドが低いだけでなく、間接オーバーヘッド
が皆無なので、深い設定を用いることを要しない。
また、前記の課題は、複合コールの独立サブコールのA
ND並列実行の結果を増分ごとに組合わせる論理プログ
ラム並行処理の方法により解決される。これは、複合コ
ールへの解の対を可及的速やかに形成しうる利点がある
。
ND並列実行の結果を増分ごとに組合わせる論理プログ
ラム並行処理の方法により解決される。これは、複合コ
ールへの解の対を可及的速やかに形成しうる利点がある
。
本発明に従った他の好ましい方法によれば、前記の組合
わせ解は、前記のサブコールの解のポインタを含む“ジ
ョイン・セル”と呼ばれる構造体として形成、表示され
る。これは、複写を必要としないので、各対を掻めて低
コスト−時間とメモリでみて−で形成しうる利点を有す
る。これは、分散メモリの場合に特に有利である。何故
ならば、他のプロセッサのメモリを呼出すことなしにベ
アリングを行うことができるからである。
わせ解は、前記のサブコールの解のポインタを含む“ジ
ョイン・セル”と呼ばれる構造体として形成、表示され
る。これは、複写を必要としないので、各対を掻めて低
コスト−時間とメモリでみて−で形成しうる利点を有す
る。これは、分散メモリの場合に特に有利である。何故
ならば、他のプロセッサのメモリを呼出すことなしにベ
アリングを行うことができるからである。
本発明に従った特に好ましい方法は、すべての実行モー
ド、すなわち逐次、OR並列、及び/又はAND並列の
各モードを選択的に組合わせたものである。これは、本
発明の方法を実行するシステムにおいて、並列プロセス
の量を利用可能な資源に適応させることが可能となる。
ド、すなわち逐次、OR並列、及び/又はAND並列の
各モードを選択的に組合わせたものである。これは、本
発明の方法を実行するシステムにおいて、並列プロセス
の量を利用可能な資源に適応させることが可能となる。
システムが飽和状態にない場合には、OR並列ならびに
AND並列処理の有効利用により更に多くの並列プロセ
スを創出することができる。他方、システムが飽和状態
にある場合には、公知の既に開発されているの逐次プロ
ログ実行方式と比べて殆ど追加のオーバーへノドなしに
、極めて効率的な逐次処理が可能である。
AND並列処理の有効利用により更に多くの並列プロセ
スを創出することができる。他方、システムが飽和状態
にある場合には、公知の既に開発されているの逐次プロ
ログ実行方式と比べて殆ど追加のオーバーへノドなしに
、極めて効率的な逐次処理が可能である。
本発明の他の好ましい方法によれば、AND並列処理へ
の逆戻り(バックトランキング)を行うことが可能であ
る。すなわち、まず右側ブランチと呼ばれる一方のAN
D並列ブランチへの逆戻りを行い、次いで、該右側ブラ
ンチのすべての解が見い出された後、左側ブランチと呼
ばれる他方ブランチへの逆戻りを行う。これは、従来技
術による逐次プロログ処理方式と矛盾しない処理を行え
る利点がある。
の逆戻り(バックトランキング)を行うことが可能であ
る。すなわち、まず右側ブランチと呼ばれる一方のAN
D並列ブランチへの逆戻りを行い、次いで、該右側ブラ
ンチのすべての解が見い出された後、左側ブランチと呼
ばれる他方ブランチへの逆戻りを行う。これは、従来技
術による逐次プロログ処理方式と矛盾しない処理を行え
る利点がある。
本発明の他の好ましい方法では、右側ブランチへの逆戻
り解は浅い設定からい設定へ転換され、そのまま保存さ
れて、追って演算される左側前とペアに組み合わされる
。これは、最大限度の非同期演算を確実にするもので、
これにより全ての解が可及的速やかに演算されるという
利点がある。
り解は浅い設定からい設定へ転換され、そのまま保存さ
れて、追って演算される左側前とペアに組み合わされる
。これは、最大限度の非同期演算を確実にするもので、
これにより全ての解が可及的速やかに演算されるという
利点がある。
本発明の他の好ましい方法によれば、右側のすべての解
が逆戻しされた後、この逆戻しされた右側の解を追って
演算される左側の解と対にする際に、その再演算がなさ
れる。これは、極めて簡単かつスペース効率的で、しか
も従来の逐次プロログ処理方式に高度に合致した処理が
可能となる利点を有する。更にまた、深い設定のリスト
のサーチを必要としない利点を有する。
が逆戻しされた後、この逆戻しされた右側の解を追って
演算される左側の解と対にする際に、その再演算がなさ
れる。これは、極めて簡単かつスペース効率的で、しか
も従来の逐次プロログ処理方式に高度に合致した処理が
可能となる利点を有する。更にまた、深い設定のリスト
のサーチを必要としない利点を有する。
本発明の他の好ましい方法では、逆戻し解は動的プログ
ラミングにより、即ち解の保存復元により再演算される
。これは、基本的再計算方式の簡易性と深い設定の回避
という長所を残しつつ、冗長な再計算を回避しうる利点
を有する。また、再計算の都度保存される右側解の一形
態を提供してクロスプロダクトの増分形成を軽減すると
いう利点がある。
ラミングにより、即ち解の保存復元により再演算される
。これは、基本的再計算方式の簡易性と深い設定の回避
という長所を残しつつ、冗長な再計算を回避しうる利点
を有する。また、再計算の都度保存される右側解の一形
態を提供してクロスプロダクトの増分形成を軽減すると
いう利点がある。
本発明の他の好ましい方法によれば、−または複数の右
側解の再計算を必要とする左側前は、全ての右側解が次
回に逆戻しされる時までいかなる右側解とも対にされな
い。これは、再計算の際に、どの・右側解を左側前とベ
アに組合わせる必要があるか、またどれがすでに再計算
されていて改めて再計算の必要がないか等の追跡を回避
することにより、クロスプロダクトの増分構成を簡易化
する効果がある。これは、再計算に動的プログラミング
を用いない場合に特に大きな意義を有する。
側解の再計算を必要とする左側前は、全ての右側解が次
回に逆戻しされる時までいかなる右側解とも対にされな
い。これは、再計算の際に、どの・右側解を左側前とベ
アに組合わせる必要があるか、またどれがすでに再計算
されていて改めて再計算の必要がないか等の追跡を回避
することにより、クロスプロダクトの増分構成を簡易化
する効果がある。これは、再計算に動的プログラミング
を用いない場合に特に大きな意義を有する。
本発明の(tの好ましい方法によれば、プロセスの創造
は飽和状態にないプロセッサにおいてのみ行われる。こ
れは、並列プロセッサシステムへの過負荷を回避する利
点があるす並行処理のオーバーヘンドープロセス管理と
、深設定リストの生成、及び深設定リストのサーチ−は
実際に並行の実行がある場合にのみ必要である。ORノ
ードとANDノードの双方を遡及的に並列化できるため
、このような特殊化により並行処理の機会が損なわれる
ことはない。この簡単に得られる遡及的並列化と、不飽
和プロセッサのみにおける並列化により、プロセッサが
最適に実現しうる限りの量の並列プロセッサの創出が可
能となる。
は飽和状態にないプロセッサにおいてのみ行われる。こ
れは、並列プロセッサシステムへの過負荷を回避する利
点があるす並行処理のオーバーヘンドープロセス管理と
、深設定リストの生成、及び深設定リストのサーチ−は
実際に並行の実行がある場合にのみ必要である。ORノ
ードとANDノードの双方を遡及的に並列化できるため
、このような特殊化により並行処理の機会が損なわれる
ことはない。この簡単に得られる遡及的並列化と、不飽
和プロセッサのみにおける並列化により、プロセッサが
最適に実現しうる限りの量の並列プロセッサの創出が可
能となる。
本発明のイtの目的と利点は、添付図面を参照した本発
明の好適な実施例についての以下の詳細な説明から明ら
かになるであろう。
明の好適な実施例についての以下の詳細な説明から明ら
かになるであろう。
本発明のよりよい理解のため、本発明に従った論理プロ
グラム処理の方法に関して使用する言語及び述語の主な
タイプについて簡易な説明を記載する。
グラム処理の方法に関して使用する言語及び述語の主な
タイプについて簡易な説明を記載する。
この発明の演算方法またはシステムのユーザー言語は修
正プロログである。プロログ・プログラムは二つのタイ
プのモジュールに区分される。すなわち、逐次モジュー
ルと並列モジュールである。
正プロログである。プロログ・プログラムは二つのタイ
プのモジュールに区分される。すなわち、逐次モジュー
ルと並列モジュールである。
逐次モジュールはユーザー・インタフェースと他の入出
力を含み、これらは通常のプロログで書かれる。これら
は、その述1吾の一つを”bagof”、 ”5eto
f”、または”oneof”の述語を介して呼出すこと
により並列モジュールを呼出すことができる。並列モジ
ュールの言語には、”cuts’、”asserts’
又は” re Lrac ts″はなく、Iloもない
。
力を含み、これらは通常のプロログで書かれる。これら
は、その述1吾の一つを”bagof”、 ”5eto
f”、または”oneof”の述語を介して呼出すこと
により並列モジュールを呼出すことができる。並列モジ
ュールの言語には、”cuts’、”asserts’
又は” re Lrac ts″はなく、Iloもない
。
OR並列処理
並行モジュールにおける各述語の定義は、本発明に従っ
て処理を行う場合−属性の宣言が先行する。属性には次
の三種がある。
て処理を行う場合−属性の宣言が先行する。属性には次
の三種がある。
解:
述語すべての解または単一の解が計算される。
この概念は通常のプロログのcut’に代わるものであ
る。
る。
節:
この述語の節はプログラムの本文の順序で処理(順序づ
け)しなければならない場合と、順序に制限のない(非
順序づけ)の場合がある。
け)しなければならない場合と、順序に制限のない(非
順序づけ)の場合がある。
実行:
この属性は述語を実行する方法の勧告である。
“イーガー(eager)”実jテモードでは、この述
語のすべての節は同時処理、すなわち並列処理を意図し
ており、“レイジー(lazy)”実行モードでは、解
の生成は逆戻り法(バンクトラッキング)により一度に
一つづつ行う。
語のすべての節は同時処理、すなわち並列処理を意図し
ており、“レイジー(lazy)”実行モードでは、解
の生成は逆戻り法(バンクトラッキング)により一度に
一つづつ行う。
AND並列処理
AND並列処理は、プログラマ−により明確に制御され
る。二つのコール間のコンマは逐次処理の実施であり、
ハフシュ(#)はAND並列処理の実施である。
る。二つのコール間のコンマは逐次処理の実施であり、
ハフシュ(#)はAND並列処理の実施である。
フレーム編成
以下に論理プログラム処理の方法に使用するフレーム編
成について説明する。
成について説明する。
フレームの一種に起動レコードがある。コールの各呼出
について、起動レコードが作られる。その主な構成要素
は呼び出されたコールのすべてのローカル変数について
のスロットである。これらのスロットには、変数の設定
または変数が設定されていない旨のマークを含む。
について、起動レコードが作られる。その主な構成要素
は呼び出されたコールのすべてのローカル変数について
のスロットである。これらのスロットには、変数の設定
または変数が設定されていない旨のマークを含む。
そのタイプのフレーム、例えばハフシュ・ウィンドウ、
ジョイン・セル等については、追って説明する。
ジョイン・セル等については、追って説明する。
OR並列処理
OR並列処理について以下説明する。
1プロセツサの場合:
まず、1プロセツサしがない場合の処理の方法を説明す
る。
る。
各プロセッサは“主ブランチ”と呼ばれるプロセスを処
理する。最初のコールの呼び出しの際に作成された起動
レコードを実行時間スタックに配分する。次のコールの
呼び出し時に、別の起動レコードを実行時間スタックに
入れる。統一化がら生じた変数の設定を起動レコードの
スロットに記録する。生成者の起動レコードのスロット
における記録設定をい設定と呼ぶ、設定された全ての変
数のアドレスをトレールスタック(tratl 5ta
ck)に記録する。
理する。最初のコールの呼び出しの際に作成された起動
レコードを実行時間スタックに配分する。次のコールの
呼び出し時に、別の起動レコードを実行時間スタックに
入れる。統一化がら生じた変数の設定を起動レコードの
スロットに記録する。生成者の起動レコードのスロット
における記録設定をい設定と呼ぶ、設定された全ての変
数のアドレスをトレールスタック(tratl 5ta
ck)に記録する。
呼び出された述語が多数の単一化可能な節を有し、かつ
述語の実行モードが“レイジー”の場合には、該主ブラ
ンチにより直ちに実行される最初のものを除いて、これ
らの節を全てリストしている実行時間スタックに選択ポ
イントを入れる。述語が“レイジー”でなく“イーガー
”の場合には、選択ポイントの代わりに分岐ポイントを
用いる。
述語の実行モードが“レイジー”の場合には、該主ブラ
ンチにより直ちに実行される最初のものを除いて、これ
らの節を全てリストしている実行時間スタックに選択ポ
イントを入れる。述語が“レイジー”でなく“イーガー
”の場合には、選択ポイントの代わりに分岐ポイントを
用いる。
これは同様な構成であるが、それはリストされている節
の並列処理を可能とする。分岐ポイントを実行時間スタ
ックに入れる都度、プロセスの現在のOR分岐レベルが
その分拡張される。OR分岐レベル生成の際は、該レベ
ルを一定の値、例えば0に初期化する。各設定には、該
設定を行った時現在のOR分岐レベルのタグを付する。
の並列処理を可能とする。分岐ポイントを実行時間スタ
ックに入れる都度、プロセスの現在のOR分岐レベルが
その分拡張される。OR分岐レベル生成の際は、該レベ
ルを一定の値、例えば0に初期化する。各設定には、該
設定を行った時現在のOR分岐レベルのタグを付する。
あるコールについて単一化可能な節が見当たらない場合
には、最終の選択ポイントまたは分岐ポイントまでの全
ての起動レコードを、まだ試みられていない代替のもの
と共に実行時間スタックから削除し、この起動記録が削
除されたコールによってなされたすべての設定は、トレ
ールスタックを用いて“未設定”にリセットする。この
操作を逆戻しくバックトランキング)という。次の未試
みの代替節を呼び出し、その起動記録は前記のフリーに
なったスタックのスペースに配分する。
には、最終の選択ポイントまたは分岐ポイントまでの全
ての起動レコードを、まだ試みられていない代替のもの
と共に実行時間スタックから削除し、この起動記録が削
除されたコールによってなされたすべての設定は、トレ
ールスタックを用いて“未設定”にリセットする。この
操作を逆戻しくバックトランキング)という。次の未試
みの代替節を呼び出し、その起動記録は前記のフリーに
なったスタックのスペースに配分する。
変数に夫々の設定コールのOR分岐レベルのタグを付す
る場合を除き、従来の逐次プロログ処理に比較して、追
加のオーバーヘッドを要しない。
る場合を除き、従来の逐次プロログ処理に比較して、追
加のオーバーヘッドを要しない。
プロセッサ多数の場合
プログラム処理に多数のプロセッサを利用できる場合に
ついて、第1図により本発明の詳細な説明する。
ついて、第1図により本発明の詳細な説明する。
第1図は“OR並列チルドレン゛と呼ばれる二つの分割
されたプロセスを有している主ブランチを示す。各プロ
セスのコールは垂直に配列されている。各コールのそれ
ぞれの番号はそのOR分岐レベルを示すや分割プロセス
のハツシュ・ウィンドウは°H”と、更に垂直な2本の
線が付されている。これらは、夫々が属するプロセスの
右側に配され、水平の線でそれに接続されている。
されたプロセスを有している主ブランチを示す。各プロ
セスのコールは垂直に配列されている。各コールのそれ
ぞれの番号はそのOR分岐レベルを示すや分割プロセス
のハツシュ・ウィンドウは°H”と、更に垂直な2本の
線が付されている。これらは、夫々が属するプロセスの
右側に配され、水平の線でそれに接続されている。
主ブランチが多数の単一化可能の節を有する“イーガー
”と宣言された述語に到達し、利用可能な遊びプロセッ
サが十分にある場合には、最初の節を除いて各プロセッ
サに一つの節が与えられる。最初の節は元プロセッサに
止まる。新プロセッサは新たな主ブランチ、即ち、OR
並列チルドレンを起動する。
”と宣言された述語に到達し、利用可能な遊びプロセッ
サが十分にある場合には、最初の節を除いて各プロセッ
サに一つの節が与えられる。最初の節は元プロセッサに
止まる。新プロセッサは新たな主ブランチ、即ち、OR
並列チルドレンを起動する。
OR並列チルドレンが述語の一方の節についての作業を
開始すると、それらは元の主ブランチの諸変数を矛盾す
る数値に設定する場合がある。従って、チルドレンはこ
れらの変数を設定することを許されない、つまり、浅い
設定を行うことを許されない、寧ろ、それらはこれらの
変数の専用深設定リスト中で設定しなければならない、
これらの新プロセスは夫々“ハツシュ・ウィンドウ”と
呼ばれる深設定リストを有する。ハツシュ・ウィンドウ
は設定変数のアドレスを配置してその局所的数値を計算
する。各新プロセスは前述の作業を開始する。
開始すると、それらは元の主ブランチの諸変数を矛盾す
る数値に設定する場合がある。従って、チルドレンはこ
れらの変数を設定することを許されない、つまり、浅い
設定を行うことを許されない、寧ろ、それらはこれらの
変数の専用深設定リスト中で設定しなければならない、
これらの新プロセスは夫々“ハツシュ・ウィンドウ”と
呼ばれる深設定リストを有する。ハツシュ・ウィンドウ
は設定変数のアドレスを配置してその局所的数値を計算
する。各新プロセスは前述の作業を開始する。
新ブランチにより生成された変数の呼び出しは、浅い設
定が用いられるため直接的である。新ブランチ外の変数
の呼び出しは、もはや直接の1ステップ操作ではない。
定が用いられるため直接的である。新ブランチ外の変数
の呼び出しは、もはや直接の1ステップ操作ではない。
寧ろ、変数の元の位置をチェックして該変数が主ブラン
チ中の先祖により設定されたものかどうかを調べなけれ
ばならない。この場合、この設定は有効である。変数が
未設定の場合には、子のハツシュ・ウィンドウを呼び出
して該変数がOR並列チャイルド、即ち現コール前の分
割後の新設主ブランチのコールによって設定されたもの
かどうかをチェックする。ハツシュ・ウィンドウに記載
がない場合には、該変数は未設定である。
チ中の先祖により設定されたものかどうかを調べなけれ
ばならない。この場合、この設定は有効である。変数が
未設定の場合には、子のハツシュ・ウィンドウを呼び出
して該変数がOR並列チャイルド、即ち現コール前の分
割後の新設主ブランチのコールによって設定されたもの
かどうかをチェックする。ハツシュ・ウィンドウに記載
がない場合には、該変数は未設定である。
OR並列述語の一つの節は元ブロセフサにより処理され
、共通先祖の変数については浅い設定を用いる。他のプ
ロセッサにおけるOR並列子はこれらの設定を無視しな
ければならない、これは各OR分岐レベルを比較するこ
とにより達せられる。
、共通先祖の変数については浅い設定を用いる。他のプ
ロセッサにおけるOR並列子はこれらの設定を無視しな
ければならない、これは各OR分岐レベルを比較するこ
とにより達せられる。
現ブランチ外の先祖で発見された設定は、アクセスする
子孫が設定コール以後に分離したものである場合に限り
有効である。
子孫が設定コール以後に分離したものである場合に限り
有効である。
主ブランチから子が分離したポイント識別のため、第2
図に示すように、子は例えばそのハツシュ・ウィンドウ
中に子が分離した親のOR分岐レベルへのアクセスを有
する。
図に示すように、子は例えばそのハツシュ・ウィンドウ
中に子が分離した親のOR分岐レベルへのアクセスを有
する。
第2図の主ブランチでは、四つの起動レコードが夫々の
OR分岐レベルと共に示されており、レベル1の第2の
ものは単一化可能な節を一つのみ有する述語への呼び出
し、即ち“レイジー”モードのものである。このコール
は第1コールの変敗Xを“a″に設定している。この設
定はそのOR分岐レベル“1”を付されている。一つの
子プロセスはレベル0以後に分離し、他のものはレベル
1以後に分離している。前者については、主ブランチの
レベル1の段階で“1”とタグ付けされた設定がなされ
る以前のレベル0以後の段階でプロセスが派生している
ので、Xは未設定である。レベル1以後に分離した子の
場合は、プロセスがレベル1の設定後に分離しているの
で、変数は“a”に設定されてい′る。
OR分岐レベルと共に示されており、レベル1の第2の
ものは単一化可能な節を一つのみ有する述語への呼び出
し、即ち“レイジー”モードのものである。このコール
は第1コールの変敗Xを“a″に設定している。この設
定はそのOR分岐レベル“1”を付されている。一つの
子プロセスはレベル0以後に分離し、他のものはレベル
1以後に分離している。前者については、主ブランチの
レベル1の段階で“1”とタグ付けされた設定がなされ
る以前のレベル0以後の段階でプロセスが派生している
ので、Xは未設定である。レベル1以後に分離した子の
場合は、プロセスがレベル1の設定後に分離しているの
で、変数は“a”に設定されてい′る。
子が親の実行時間スタックの設定変数にアクセスする場
合には、設定するコールのOR分岐レベルと該設定のタ
グをハツシュ・ウィンドウの分離レベルと比較する。設
定レベルが分離段階のものより高くない場合に限り、設
定は有効である。
合には、設定するコールのOR分岐レベルと該設定のタ
グをハツシュ・ウィンドウの分離レベルと比較する。設
定レベルが分離段階のものより高くない場合に限り、設
定は有効である。
変数が自己のレベルで設定される一生成者により又は以
後のコールにより次のOR並列ノード以前に一場合には
、設定は常に有効である。この場合には、ハツシュ・ウ
ィンドウのチェックを要しない。
後のコールにより次のOR並列ノード以前に一場合には
、設定は常に有効である。この場合には、ハツシュ・ウ
ィンドウのチェックを要しない。
入子式OR並列処理
第3図は、二つのプロセスが同じ主ブランチから分離し
た例を示す、以下、第3図により、1プロセスが既に分
離している他のプロセスから分離して生成した入子式O
R分岐レベルについて説明する。第3図は、レベル0以
後に主ブランチから分離した第1の子プロセスと、この
第1の子のレベル2以後に該第1の子から分離した第2
の子を示す。
た例を示す、以下、第3図により、1プロセスが既に分
離している他のプロセスから分離して生成した入子式O
R分岐レベルについて説明する。第3図は、レベル0以
後に主ブランチから分離した第1の子プロセスと、この
第1の子のレベル2以後に該第1の子から分離した第2
の子を示す。
第3図から分かるように、分離した子から、更に子が分
離した場合、それらもまた専用のハツシュ・ウィンドウ
を必要とする。第3図の左側の主ブランチは、図示しな
い他のプロセスから分離したものである。従って、この
主フ゛ランチはそれ自体のハツシュ・ウィンドウHoを
有するからである。第3図の全てのハツシュ・ウィンド
ウは全て、親プロセスのハフシュ・ウィンドウを示すよ
うにチェーン接続されている。これにより、ハツシュ・
ウィンドウのトリーが生じる。現主ブランチで生成され
ておらず、しかもその発生元である主ブランチの先祖に
より設定されていない変数にアクセスする場合、該変数
の生成時に現存していた設定又はハツシュ・ウィンドウ
が見つかるまで、チェーンの全てのハツシュ・ウィンド
ウを探索しなければならない。
離した場合、それらもまた専用のハツシュ・ウィンドウ
を必要とする。第3図の左側の主ブランチは、図示しな
い他のプロセスから分離したものである。従って、この
主フ゛ランチはそれ自体のハツシュ・ウィンドウHoを
有するからである。第3図の全てのハツシュ・ウィンド
ウは全て、親プロセスのハフシュ・ウィンドウを示すよ
うにチェーン接続されている。これにより、ハツシュ・
ウィンドウのトリーが生じる。現主ブランチで生成され
ておらず、しかもその発生元である主ブランチの先祖に
より設定されていない変数にアクセスする場合、該変数
の生成時に現存していた設定又はハツシュ・ウィンドウ
が見つかるまで、チェーンの全てのハツシュ・ウィンド
ウを探索しなければならない。
第3図の場合において、第2の子が主ブランチのレベル
1により設定された変数Xにアクセスするときは、該変
数は“l”のタグを有しているので、第2の子はその専
用ハツシュ・ウィンドウである現ハツシュ・ウィンドウ
H2から始まるハツシュ・ウィンドウのチェーンを追跡
して、変数Xの設定がなされた時点現在のハフシュ・ウ
ィンドウを見つけなければならない。この場合、それは
ハツシュ・ウィンドウHoである。該第2の子によりそ
の直前に探知されたハフシュ・ウィンドウH1では、そ
れ自体の分離レベル−この場合“0以後”−が記録され
る。第1の子のハフシュ・ウィンドウH1におけるレベ
ル番号“O以後”は、第1の子が前記の変数Xの設定が
主ブランチのレベル1のコールによりなされる以前に主
ブランチから分離したことを示しており、従って該変数
は第1の子ならびに第2の子については未設定であるこ
とが分かる。一般に、手続は次のようになる。
1により設定された変数Xにアクセスするときは、該変
数は“l”のタグを有しているので、第2の子はその専
用ハツシュ・ウィンドウである現ハツシュ・ウィンドウ
H2から始まるハツシュ・ウィンドウのチェーンを追跡
して、変数Xの設定がなされた時点現在のハフシュ・ウ
ィンドウを見つけなければならない。この場合、それは
ハツシュ・ウィンドウHoである。該第2の子によりそ
の直前に探知されたハフシュ・ウィンドウH1では、そ
れ自体の分離レベル−この場合“0以後”−が記録され
る。第1の子のハフシュ・ウィンドウH1におけるレベ
ル番号“O以後”は、第1の子が前記の変数Xの設定が
主ブランチのレベル1のコールによりなされる以前に主
ブランチから分離したことを示しており、従って該変数
は第1の子ならびに第2の子については未設定であるこ
とが分かる。一般に、手続は次のようになる。
変数が浅く設定されている場合には、派生した子の更に
子は、叔父の設定値と祖父の設定値とは区別しなければ
ならない。それらの子はそれぞれの現在のハツシュ・ウ
ィンドウを用いて該当する分離レベルを見つけることは
できない。何故ならば、第3図に示されるように、これ
らのウィンドウは最後の分離における父のレベルを含ん
でいるにすぎないからである。それらの子は、そのハフ
シュ・ウィンドウ・チェーンを遡って当該設定がなされ
た時現在のハフシュ・ウィンドウ、ずなわち、当該設定
が記録されている逐次ブランチに属するハフシュ・ウィ
ンドウをつきとめなければならない。チェーン中におい
てこれの直前に探知されたハツシュ・ウィンドウは、現
ブランチの祖先が当該設定がなされたブランチから分離
した時に創り出されたものである。それには、該当する
分離レベルが記載されている。
子は、叔父の設定値と祖父の設定値とは区別しなければ
ならない。それらの子はそれぞれの現在のハツシュ・ウ
ィンドウを用いて該当する分離レベルを見つけることは
できない。何故ならば、第3図に示されるように、これ
らのウィンドウは最後の分離における父のレベルを含ん
でいるにすぎないからである。それらの子は、そのハフ
シュ・ウィンドウ・チェーンを遡って当該設定がなされ
た時現在のハフシュ・ウィンドウ、ずなわち、当該設定
が記録されている逐次ブランチに属するハフシュ・ウィ
ンドウをつきとめなければならない。チェーン中におい
てこれの直前に探知されたハツシュ・ウィンドウは、現
ブランチの祖先が当該設定がなされたブランチから分離
した時に創り出されたものである。それには、該当する
分離レベルが記載されている。
設定値が実行記録でなく、ハツシュ・ウィンドウにおい
て見いだされる場合、これは言うまでもなく、該設定が
なされた時現在のハツシュ・ウィンドウである。
て見いだされる場合、これは言うまでもなく、該設定が
なされた時現在のハツシュ・ウィンドウである。
同し逐次ブランチのOR分岐レベルのみが比較される。
子のハフシュ・ウィンドウにおけるOR分岐レベルはそ
の親のOR分岐レベルである。従って、これらの番号の
みが1ブランチ内で一意のものたるべきであり、1ブラ
ンチの芥子はそのOR分岐レベルを再初期化することが
できる。
の親のOR分岐レベルである。従って、これらの番号の
みが1ブランチ内で一意のものたるべきであり、1ブラ
ンチの芥子はそのOR分岐レベルを再初期化することが
できる。
OR分岐レベルに配分されたピントの数があふれる場合
、例えば8ビツトのタグに対して256づつの潜在的O
R並列ノードがある場合には、全てのブランチがハツシ
ュ・ウィンドウを受けねばならない。これは、主ブラン
チも新しいハフシュ・ウィンドウを得て、その現在のレ
ベルの初期値を設定し、このハフシュ・ウィンドウより
古い変数への浅い設定を行うことを許されないというこ
とであるや 遡及的OR並列処理 以上説明した論理プログラム処理の方法によれば、逐次
計算を遡及的に並列計算に転換することも極めて低コス
トで簡単に行える。主ブランチについては、それがOR
並列チルドレンを有する場合も、有しない場合も、何ら
の差異はない。従って、他のプロセッサに新規のOR並
列処理プロセスを創設する場合も、他のプロセスから分
離するブランチに何らの変更を加える必要もない。
、例えば8ビツトのタグに対して256づつの潜在的O
R並列ノードがある場合には、全てのブランチがハツシ
ュ・ウィンドウを受けねばならない。これは、主ブラン
チも新しいハフシュ・ウィンドウを得て、その現在のレ
ベルの初期値を設定し、このハフシュ・ウィンドウより
古い変数への浅い設定を行うことを許されないというこ
とであるや 遡及的OR並列処理 以上説明した論理プログラム処理の方法によれば、逐次
計算を遡及的に並列計算に転換することも極めて低コス
トで簡単に行える。主ブランチについては、それがOR
並列チルドレンを有する場合も、有しない場合も、何ら
の差異はない。従って、他のプロセッサに新規のOR並
列処理プロセスを創設する場合も、他のプロセスから分
離するブランチに何らの変更を加える必要もない。
AND並列処理
次に本発明のプログラム処理の方法に従ったAND並列
処理について説明する。AND並列処理は独立コールに
ついてのみ遂行される。書込オペレーションが読取りオ
ペレーシヨンを含む場合において、二つ以上のコールの
夫々が、他方が書込む変数を読み取れないとき、これら
のコールは独立コールである。従って、同期の問題はな
い。
処理について説明する。AND並列処理は独立コールに
ついてのみ遂行される。書込オペレーションが読取りオ
ペレーシヨンを含む場合において、二つ以上のコールの
夫々が、他方が書込む変数を読み取れないとき、これら
のコールは独立コールである。従って、同期の問題はな
い。
基本的AND並列処理
本発明に従ったAND並列処理の主な原理を説明するた
め、まず、その実行が分岐ポイントの生成を生じない二
つのコールの基本的AND並列処理について説明する。
め、まず、その実行が分岐ポイントの生成を生じない二
つのコールの基本的AND並列処理について説明する。
OR並列処理の場合と対照的に、矛盾する設定が生じな
いので、AND並列コールは、別個のハツシュ・ウィン
ドウを設けることなくそのまま並行して開始することが
できる。左側のコールはOR並列ブランチと同じメカニ
ズムを使う他の遊びプロセッサに右側コールがオファ−
される間、同じプロセッサにとどまっている。
いので、AND並列コールは、別個のハツシュ・ウィン
ドウを設けることなくそのまま並行して開始することが
できる。左側のコールはOR並列ブランチと同じメカニ
ズムを使う他の遊びプロセッサに右側コールがオファ−
される間、同じプロセッサにとどまっている。
右側コールが左側コールの完了時に放棄されていない場
合には、同じプロセッサで右側のコールを処理する。こ
の−倒プロセッサの場合、本発明の方法は通常の逐次プ
ロログの場合と同様に作用する。
合には、同じプロセッサで右側のコールを処理する。こ
の−倒プロセッサの場合、本発明の方法は通常の逐次プ
ロログの場合と同様に作用する。
左側コールの計算中に右側コールのプロセッサが利用で
きるときには、真のAND並列処理が達せられる。遠隔
プロセスのハフシュ・ウィンドウが必要でなくとも、キ
ャッシュ用に一つを用いることができる。最後に、OR
並列ブランチのジョイニングを行う。時間的に速い方は
、他方の完了を持たねばならない。
きるときには、真のAND並列処理が達せられる。遠隔
プロセスのハフシュ・ウィンドウが必要でなくとも、キ
ャッシュ用に一つを用いることができる。最後に、OR
並列ブランチのジョイニングを行う。時間的に速い方は
、他方の完了を持たねばならない。
一個の論理和並行ブランチがある場合のAND並列処理
AND並列ブづンチのうちの一つのみが分岐点を有する
場合には、OR並列処理の通常のメカニズムを使用し、
分岐したすべての子はハツシュ・ウィンドウを取得する
。これらのブランチの一つがANDの終点に達した時に
はいつでも、他側がその解を出すまで待たねばならない
。解が存在する場合には、並列ブランチはそのまま処理
を続行する。
場合には、OR並列処理の通常のメカニズムを使用し、
分岐したすべての子はハツシュ・ウィンドウを取得する
。これらのブランチの一つがANDの終点に達した時に
はいつでも、他側がその解を出すまで待たねばならない
。解が存在する場合には、並列ブランチはそのまま処理
を続行する。
この非OR並列ブランチはOR並列ブランチの夫々によ
り共有される。非OR並列ブランチは分岐点は含まない
ので、OR分岐レベルが増大することはない、すべての
設定は、分岐時点現在のレベルでタグ付けされる。従っ
て、これらの設定は、OR並列ブランチのすべての子に
ついて可視である。
り共有される。非OR並列ブランチは分岐点は含まない
ので、OR分岐レベルが増大することはない、すべての
設定は、分岐時点現在のレベルでタグ付けされる。従っ
て、これらの設定は、OR並列ブランチのすべての子に
ついて可視である。
OR並列処理を伴ったAND並列処理処理ジョイン・セ
ル AND並列スプリントの両側が分岐点を含む場合には、
両方のブランチについて多数の解が同時に存在しうる。
ル AND並列スプリントの両側が分岐点を含む場合には、
両方のブランチについて多数の解が同時に存在しうる。
この場合、左右両側の解のセントのクロスプロダクトを
形成しなければならない。
形成しなければならない。
クロスプロダクトの一つの構成要素は、左側の1プロセ
スと右側の1プロセスを祖先とするプロセスである。こ
れらの祖先の設定値へのアクセスは、ハツシュ・ウィン
ドウ方式の拡張、部ち、第4図に示すシライン・セルに
より実現される。
スと右側の1プロセスを祖先とするプロセスである。こ
れらの祖先の設定値へのアクセスは、ハツシュ・ウィン
ドウ方式の拡張、部ち、第4図に示すシライン・セルに
より実現される。
第4図において、単純なブロックはハツシュ・ウィンド
ウを示し、夫々実行されたコールの名を付されている。
ウを示し、夫々実行されたコールの名を付されている。
第4図の例では、コールpの後にAND並列コール1及
びrが呼び出され、1は代わってOR並列コールX、、
Z2を呼び出し、「はOR並列コールr工、r2を呼び
出している。
びrが呼び出され、1は代わってOR並列コールX、、
Z2を呼び出し、「はOR並列コールr工、r2を呼び
出している。
図面では、ハフシュ・ウィンドウの生成S−生vタコー
ルのみを示しである。水平2本線を付したブロックはジ
ョイン・セルである。
ルのみを示しである。水平2本線を付したブロックはジ
ョイン・セルである。
プロセスはハツシュ・ウィンドウで識別でき、各プロセ
スは正確に1個の現在のハツシュ・ウィンドウを有して
いる。従って、二つのプロセスをベアとなしうるために
は、ジョイン・セルは3ケのポインタを有する。すなわ
ち、左側解のハツシュ・ウィンドウを示す1ポインタと
、右側間のハツシュ・ウィンドウを示す「ポインタと、
第3のポインタとして、AND並列分割時点現在のハ。
スは正確に1個の現在のハツシュ・ウィンドウを有して
いる。従って、二つのプロセスをベアとなしうるために
は、ジョイン・セルは3ケのポインタを有する。すなわ
ち、左側解のハツシュ・ウィンドウを示す1ポインタと
、右側間のハツシュ・ウィンドウを示す「ポインタと、
第3のポインタとして、AND並列分割時点現在のハ。
シュ・ウィンドウを示す最終共通ハツシュ・ウィンドウ
・ポインタである。AND並列ジョイン後のコールに対
する変数の状況をみると次の如くである。“探索終了時
変数”は、対象の非局所的変数の定義コールに関連する
ハツシュ・ウィンドウのアドレスに初期設定される。ハ
ツシュ・ウィンドウの直線チェーンを通例のようにして
ジョイン・セルのところまで引く。ここでブランチが必
要である。ジョイン・セルの1ポインタと探索終了時変
数の現在数値をスタックに入れる。この探索終了時変数
の数値をジョイン・セルの最後の共通ハフシュ・ウィン
ドウにセットし、ジョイン・セルのrポインタを引く。
・ポインタである。AND並列ジョイン後のコールに対
する変数の状況をみると次の如くである。“探索終了時
変数”は、対象の非局所的変数の定義コールに関連する
ハツシュ・ウィンドウのアドレスに初期設定される。ハ
ツシュ・ウィンドウの直線チェーンを通例のようにして
ジョイン・セルのところまで引く。ここでブランチが必
要である。ジョイン・セルの1ポインタと探索終了時変
数の現在数値をスタックに入れる。この探索終了時変数
の数値をジョイン・セルの最後の共通ハフシュ・ウィン
ドウにセットし、ジョイン・セルのrポインタを引く。
この右側ブランチのサーチが好結果を得なかった場合、
すなわち変数の設定発見前に探索終了時数値に達した場
合には、最後の1ポインタはホップアップしてサーチを
再開し、探索終了時数値をスタックから取り出す、スタ
ックが空きになる場合は、変数が未設定ということにな
る。
すなわち変数の設定発見前に探索終了時数値に達した場
合には、最後の1ポインタはホップアップしてサーチを
再開し、探索終了時数値をスタックから取り出す、スタ
ックが空きになる場合は、変数が未設定ということにな
る。
第5図は、次のプログラム実行後の入子式0R−AND
並列処理におけるフレーム・レイアウトを示す。
並列処理におけるフレーム・レイアウトを示す。
pニー#j!r、s r!!: ” l: 、
。
。
rI!Il・・ Il: −、・
r : −rj!#rr、 rr: =° 3 :
−・・「 : −□ rr: −
、、s: −り節pでは、コールl、rはAND並列
関係にある。!及び「はOR並行述語であり、夫々二つ
の解を有する。説明の便宜上、これらはハフシュ・ウィ
ンドウと共に示しである。rブランチの一つには、AN
DloRが並列入子式、即ちrがrI!、rrを呼び出
した状態になっている。これらはAND並列コールであ
り、共にAND並列述語である。
−・・「 : −□ rr: −
、、s: −り節pでは、コールl、rはAND並列
関係にある。!及び「はOR並行述語であり、夫々二つ
の解を有する。説明の便宜上、これらはハフシュ・ウィ
ンドウと共に示しである。rブランチの一つには、AN
DloRが並列入子式、即ちrがrI!、rrを呼び出
した状態になっている。これらはAND並列コールであ
り、共にAND並列述語である。
OR並列ブランチも、図解のためハフシュ・ウィンドウ
を付して示しである。最後のコールSはOR並列である
。その呼びについては、ブランチの一つ(ハツシュ・ウ
ィンドウを付したちの)を第5図に示した。pに関連す
るハフシュ・ウィンドウは、グローバルな連結に使用す
るもの、すなわち、p以前の最終のOR並列スプリント
のものを示す。ハフシュ・ウィンドウは、′H″のマー
クを付しである。ジョイン・セルには平行二重線と最終
の共通ハツシュ・ウィンドウのマークを付した。
を付して示しである。最後のコールSはOR並列である
。その呼びについては、ブランチの一つ(ハツシュ・ウ
ィンドウを付したちの)を第5図に示した。pに関連す
るハフシュ・ウィンドウは、グローバルな連結に使用す
るもの、すなわち、p以前の最終のOR並列スプリント
のものを示す。ハフシュ・ウィンドウは、′H″のマー
クを付しである。ジョイン・セルには平行二重線と最終
の共通ハツシュ・ウィンドウのマークを付した。
OR分岐レベル
独立のAND並列処理の二つのブランチは同一の計算に
居するもので、従って識別を要しない。
居するもので、従って識別を要しない。
すなわち、共に同じOR分岐レベルを用いうる。
両ブランチが特別な警告なしにOR並列になったときは
、二つのプロセス、二つの主ブランチとなり、AND並
列分割前に共通のパートにこれを書込むことができる。
、二つのプロセス、二つの主ブランチとなり、AND並
列分割前に共通のパートにこれを書込むことができる。
これらは同じOR分岐レベルを使用するので、共通パー
トにおける夫々の設定値は識別できない。それらの設定
値を識別可能にするためには、右側ブランチにおける最
初のOR並列スプリントのすべての節を深設定を用いて
実行−子プロセスによると親プロセスによるとを問わす
−しなければならない。
トにおける夫々の設定値は識別できない。それらの設定
値を識別可能にするためには、右側ブランチにおける最
初のOR並列スプリントのすべての節を深設定を用いて
実行−子プロセスによると親プロセスによるとを問わす
−しなければならない。
ジョイン・セルは、クロスプロダクトのメンバーで両方
のANDブランチへの解がハフシュ・ウィンドウを含む
ものについてのみ必要である。左側解でハツシュ・ウィ
ンドウのないものが一つあってもよい、この場合には、
ジョイン・セルは、その左側解を含むクロスプロダクト
のメンバーについては必要でない。
のANDブランチへの解がハフシュ・ウィンドウを含む
ものについてのみ必要である。左側解でハツシュ・ウィ
ンドウのないものが一つあってもよい、この場合には、
ジョイン・セルは、その左側解を含むクロスプロダクト
のメンバーについては必要でない。
第6図は二つのブランチが分離されてOR並列となって
いる場合のAND並列の実行状況を示す。
いる場合のAND並列の実行状況を示す。
これは、次のプログラムの実行後のフレームのレイアウ
トを示したものである。主コールz+、、l。
トを示したものである。主コールz+、、l。
I!e’、rr’ の起動レコードは示されていない。
?−c+、−、l ’//r’+s。
1’ニー1.l A’、 l l’: −1+ 、
e 7!’: −12rニーr、rr、 rr’
ニーr1. rr’ニーr2コールCの後、AND
並列コールR”、r’ が呼び出されている。l゛ は
全での解に共通の部分lと、OR並列独立パートl11
,12からなる。r”についても同様である。太線は起
動レコードと制御流れを示す、起動レコードは、右側に
コールの名称、左側にコールのレベル番号を示しいる。
e 7!’: −12rニーr、rr、 rr’
ニーr1. rr’ニーr2コールCの後、AND
並列コールR”、r’ が呼び出されている。l゛ は
全での解に共通の部分lと、OR並列独立パートl11
,12からなる。r”についても同様である。太線は起
動レコードと制御流れを示す、起動レコードは、右側に
コールの名称、左側にコールのレベル番号を示しいる。
各プロセスのコールは垂直に整列されている。マルで囲
んだものは、生成する四つのプロセス11,12,21
゜22ヲ示す、“接地”のシンボルはプロセス終了を示
す、細線はハフシュ・ウィンドウで、′H”と二重垂直
線のマークを付している。ジョイン・セルは二重水平線
とそれらが代表する解のペアを付した。各ジョイン・セ
ルの“最終共通ハフシュ・ウィンドウ”はCを付された
ものである。水平ラインは各プロセスと夫々のハツシュ
・ウィンドウを結んでいる。ポインタの“nのあとの”
タグは“世代nのあとの分離”を示す。
んだものは、生成する四つのプロセス11,12,21
゜22ヲ示す、“接地”のシンボルはプロセス終了を示
す、細線はハフシュ・ウィンドウで、′H”と二重垂直
線のマークを付している。ジョイン・セルは二重水平線
とそれらが代表する解のペアを付した。各ジョイン・セ
ルの“最終共通ハフシュ・ウィンドウ”はCを付された
ものである。水平ラインは各プロセスと夫々のハツシュ
・ウィンドウを結んでいる。ポインタの“nのあとの”
タグは“世代nのあとの分離”を示す。
AND並列コールとその先行部へのS及びその子孫から
の変数アクセスは上記の通り行われる。
の変数アクセスは上記の通り行われる。
ただし、ジョイン・セル(プロセス2L 22)が存在
する場合には、′ハツシュ・ウィンドウ・チェーンを追
求している際にジョイン・セルに遭遇した場合には、右
側のブランチを先ず調査し、最終共通ハツシュ・ウィン
ドウを発見するまでこれを続ける。次いで、左側ブラン
チを追跡し、スプリント以遠までこれを続ける。”「に
よりなされた非局所的設定は、l以前かつCのハフシュ
・ウィンドウを含むCまでの起動レコードに記載されて
いる。これらは、lの設定と識別不能であり、従って該
設定と共に読まれることになる。r自体の設定はレベル
nのものであ゛す、従って常に有効である。最左側のジ
ョイン・セルの右側のポインタにおけるOの後の”タグ
は、rlおよびその関連ハツシュ・ウィンドウにおいて
レベル1のプロセス11のコールSによりなされた設定
をプロセス21が無視するに際して必要である。このこ
とは、「2においてプロセス12によりなされた設定を
プロセス22が無視する際にも同様である。
する場合には、′ハツシュ・ウィンドウ・チェーンを追
求している際にジョイン・セルに遭遇した場合には、右
側のブランチを先ず調査し、最終共通ハツシュ・ウィン
ドウを発見するまでこれを続ける。次いで、左側ブラン
チを追跡し、スプリント以遠までこれを続ける。”「に
よりなされた非局所的設定は、l以前かつCのハフシュ
・ウィンドウを含むCまでの起動レコードに記載されて
いる。これらは、lの設定と識別不能であり、従って該
設定と共に読まれることになる。r自体の設定はレベル
nのものであ゛す、従って常に有効である。最左側のジ
ョイン・セルの右側のポインタにおけるOの後の”タグ
は、rlおよびその関連ハツシュ・ウィンドウにおいて
レベル1のプロセス11のコールSによりなされた設定
をプロセス21が無視するに際して必要である。このこ
とは、「2においてプロセス12によりなされた設定を
プロセス22が無視する際にも同様である。
第6図の点線で示したジョイン・セルは、概念上必要な
ものにすぎず、ここでは理解の便宜上水した。実際には
、それらは存在しない、これらの場合、ジョイン・セル
(プロセス11.12)がないときは、21の設定はレ
ベルn+12のタグを付して示されるが、最初の右側ス
プリントのハフシュ・ウィンドウが通常の“レベルnl
&スプリント”のタグを含んでいる場合には、それらは
目に見えないものである0代わりに、第6図では、それ
らは並列ANDの右側の最初のOR並列スプリントとし
て特に“☆”を付して示されている。そのようなポイン
タの付されたハツシュ・ウィンドウに遭遇した場合には
、次の二つのケースがある。
ものにすぎず、ここでは理解の便宜上水した。実際には
、それらは存在しない、これらの場合、ジョイン・セル
(プロセス11.12)がないときは、21の設定はレ
ベルn+12のタグを付して示されるが、最初の右側ス
プリントのハフシュ・ウィンドウが通常の“レベルnl
&スプリント”のタグを含んでいる場合には、それらは
目に見えないものである0代わりに、第6図では、それ
らは並列ANDの右側の最初のOR並列スプリントとし
て特に“☆”を付して示されている。そのようなポイン
タの付されたハツシュ・ウィンドウに遭遇した場合には
、次の二つのケースがある。
1、 それが示す親ハフシュ・ウィンドウは探索終了ポ
インタに均しいものである。すなわち、ジョイン・セル
の発見時に使用されるスタックの頂部の最終共通ハツシ
ュ・ウィンドウに相当する。この場合、ジョイン・セル
が存在し、従ってN、(プロセス2L 22)を含むク
ロスプロダクトのメンバーではなかった。従って、左側
ブランチを通常の通り探索しなければならない。
インタに均しいものである。すなわち、ジョイン・セル
の発見時に使用されるスタックの頂部の最終共通ハツシ
ュ・ウィンドウに相当する。この場合、ジョイン・セル
が存在し、従ってN、(プロセス2L 22)を含むク
ロスプロダクトのメンバーではなかった。従って、左側
ブランチを通常の通り探索しなければならない。
2、 前記の二つのポインタは異なるものである。
つまり、ジョイン・セルは存在しないことになる。
これは、左側ブランチ7!1とペアに組まれた右側ブラ
ンチの最初の段階のことであるが、この場合、ハツシュ
・ウィンドウは不定のレベル以後に分割されたものとみ
なされた。従って、Cから11の末端までの左側ブラン
チの全ての設定は有効である。左側のサーチは不要であ
る。
ンチの最初の段階のことであるが、この場合、ハツシュ
・ウィンドウは不定のレベル以後に分割されたものとみ
なされた。従って、Cから11の末端までの左側ブラン
チの全ての設定は有効である。左側のサーチは不要であ
る。
左右両側とも同じプロセッサでスタートする場合分岐ポ
イントが選択ポイントであるかの如く実行されることが
ありうるが、同様に並列ANDが逐次プロセスであるか
の如く実行されることができ、元プロセスが左側解を有
するANDジツインに到達した場合、右側がまだ放棄さ
れていない場合がありうる。そのような場合、元プロセ
ス処理がANDの右側と共に続けられることができる。
イントが選択ポイントであるかの如く実行されることが
ありうるが、同様に並列ANDが逐次プロセスであるか
の如く実行されることができ、元プロセスが左側解を有
するANDジツインに到達した場合、右側がまだ放棄さ
れていない場合がありうる。そのような場合、元プロセ
ス処理がANDの右側と共に続けられることができる。
追加のハツシュ・ウィンドウを設ける必要はない。
しかし、OR分岐レベルは増やさなければならない、こ
のようにすれば、左側によりなされた設定は右側により
なされたものと識別することができる。この場合、プロ
セスはそれ自体が実行する右側の最初の潜在的OR並列
ノードの節に関して深設定を用いる必要はない。AND
コールは、最小数のハツシュ・ウィンドウを用いて実行
される。
のようにすれば、左側によりなされた設定は右側により
なされたものと識別することができる。この場合、プロ
セスはそれ自体が実行する右側の最初の潜在的OR並列
ノードの節に関して深設定を用いる必要はない。AND
コールは、最小数のハツシュ・ウィンドウを用いて実行
される。
真のOR並列処理のみがハツシュ・ウィンドウを必要と
する。ANDコールが単一のプロセッサのみで実行され
る場合には、ハフシュ・ウィンドウの生成は全く行われ
ない。これについては、次の項で詳細に説明する。
する。ANDコールが単一のプロセッサのみで実行され
る場合には、ハフシュ・ウィンドウの生成は全く行われ
ない。これについては、次の項で詳細に説明する。
第7図は次のプログラムのAND並列コールにおける遡
及的並列処理の概略フレーム配置構成を示す。ここでも
、ハツシュ・ウィンドウや主コールの起動レコードは示
されていない。
及的並列処理の概略フレーム配置構成を示す。ここでも
、ハツシュ・ウィンドウや主コールの起動レコードは示
されていない。
’?’C+ l ’Ir’。
1’ニー 1’、/7!’、 IlA’ニー 1
1. Jff’ニー x2r ニー r、rr
’、 rr’ニー rl!、 rr’ニー r
2コールCのあと、AND並列コールl”及びr゛が呼
び出される。l′は全ての解に共通のバート!と、独立
パートの1!1及びI!2からなる。r+も同様である
。第7図は、AND並列コールが最初逐次実行される場
合を示す。利用できるプロセッサかないため、最初の解
j!1、r+は逐次実行した。ANDコールの前に、A
NDの両側の共通の先行コールであるコールCが存在し
た。同しプロセッサで左側についてもスタートし、追っ
て潜在的分岐ポイントを生成した後、最初の解11を出
した。右側はまだ放棄されておらず、従って同しプロセ
ンサでこの処理を行うこととして、まず全ての右側解r
に共通の計算を何か行い、次いで最初の解「1を出した
。常時浅い設定を適用した。
1. Jff’ニー x2r ニー r、rr
’、 rr’ニー rl!、 rr’ニー r
2コールCのあと、AND並列コールl”及びr゛が呼
び出される。l′は全ての解に共通のバート!と、独立
パートの1!1及びI!2からなる。r+も同様である
。第7図は、AND並列コールが最初逐次実行される場
合を示す。利用できるプロセッサかないため、最初の解
j!1、r+は逐次実行した。ANDコールの前に、A
NDの両側の共通の先行コールであるコールCが存在し
た。同しプロセッサで左側についてもスタートし、追っ
て潜在的分岐ポイントを生成した後、最初の解11を出
した。右側はまだ放棄されておらず、従って同しプロセ
ンサでこの処理を行うこととして、まず全ての右側解r
に共通の計算を何か行い、次いで最初の解「1を出した
。常時浅い設定を適用した。
従って、c、j’、11、r、rlの設定は夫々のレベ
ルの番号によってのみ識別可能であり、一部はCの起動
レコードまたはハツシュ・ウィンドウにも見いでされた
。
ルの番号によってのみ識別可能であり、一部はCの起動
レコードまたはハツシュ・ウィンドウにも見いでされた
。
、 その後、プロセッサが利用可能となったので、OR
並列のチルドレン12、r2を分離して他のプロセッサ
に割り当てた。
並列のチルドレン12、r2を分離して他のプロセッサ
に割り当てた。
ANDのジョインで、1.、It2をrlと対にした。
クロスプロダクト後の変数の探索については、特別の注
意が必要である。12、r+を含むクロスプロダクトの
メンバーの後身が変数の設定を探索する場合、11によ
り行われた設定は、無視しなければならない。ジョイン
・セルのブランチ12の調査については、12はl!1
以前に主ブランチから分離したものであり、従って2.
とそのチルドレンの設定は無視されるので、特に危険は
ない、しかし、ブランチrlでは、後述のレベル番号の
追加使用を行わな(でも、11の設定が視認できる。
意が必要である。12、r+を含むクロスプロダクトの
メンバーの後身が変数の設定を探索する場合、11によ
り行われた設定は、無視しなければならない。ジョイン
・セルのブランチ12の調査については、12はl!1
以前に主ブランチから分離したものであり、従って2.
とそのチルドレンの設定は無視されるので、特に危険は
ない、しかし、ブランチrlでは、後述のレベル番号の
追加使用を行わな(でも、11の設定が視認できる。
最終共通ハツシュ・ウィンドウ・ポインタは、右側がス
タートするOR分岐レベルにより増幅される。最終共通
ハツシュ・ウィンドウと関連する深設定レベルにおける
変数設定は、左側へはね戻るまでに、この段階で、又は
、以1多の段階(例えばr設定)で調べられる。これ以
前のレベルのもの(Vllえば11設定)は調べられな
い。
タートするOR分岐レベルにより増幅される。最終共通
ハツシュ・ウィンドウと関連する深設定レベルにおける
変数設定は、左側へはね戻るまでに、この段階で、又は
、以1多の段階(例えばr設定)で調べられる。これ以
前のレベルのもの(Vllえば11設定)は調べられな
い。
11のマスキングは、11を含んでいるクロスプロダク
トのメンバーに関してのみ必要である。
トのメンバーに関してのみ必要である。
11を含まないペアはジョイン・セルを全く必要としな
い。せいぜいAND並列ブランチ(右側)がハツシュ・
ウィンドウを有するにすぎないからである。サーチはr
l又はr2〜r、 j7I、 I!及びCを介して
、これらを識別する必要なしに行われる。既に述べたよ
うに、rlは同じプロセッサで11の後で実行される場
合でも、ハツシュ・ウィンドウを必要としない。7!1
及び「1を含むクロスプロダクトのメンバーは同じプロ
セスで一段高いレベルで実行を続けることができる。
い。せいぜいAND並列ブランチ(右側)がハツシュ・
ウィンドウを有するにすぎないからである。サーチはr
l又はr2〜r、 j7I、 I!及びCを介して
、これらを識別する必要なしに行われる。既に述べたよ
うに、rlは同じプロセッサで11の後で実行される場
合でも、ハツシュ・ウィンドウを必要としない。7!1
及び「1を含むクロスプロダクトのメンバーは同じプロ
セスで一段高いレベルで実行を続けることができる。
制御
次に、本発明に従った論理プログラムの処理方法の制御
について説明する。
について説明する。
OR並列処理
多数の節を有するイーガーな述語を呼び出す場合にはい
つでも、分岐点を設定する。多数の節ををするレイジー
な述語を呼び出すと、選択ポイントが生成される。この
結果、各分岐点に始まる枝を有する逐次プロセスのトリ
ーが生成する。第8図は、そのようなトリーの一例を示
し、Cは選択ポイント、Bは分岐点を示す。分岐点の最
左側の技は同じプロセッサに止まっている。
つでも、分岐点を設定する。多数の節ををするレイジー
な述語を呼び出すと、選択ポイントが生成される。この
結果、各分岐点に始まる枝を有する逐次プロセスのトリ
ーが生成する。第8図は、そのようなトリーの一例を示
し、Cは選択ポイント、Bは分岐点を示す。分岐点の最
左側の技は同じプロセッサに止まっている。
遡及的OR並列プロセスの生成
前述のように本発明の方法の極めて重要な特色は、逐次
計算を並行計算へ極めて低いコストで遡及的に転換しう
ろことである。プロセッサは飽和状態にならないかぎり
、タスクを要求する。不飽和プロセッサは、例えばネッ
トワークの潜在時間のため、待ち状態にある遊びプロセ
ッサである。
計算を並行計算へ極めて低いコストで遡及的に転換しう
ろことである。プロセッサは飽和状態にならないかぎり
、タスクを要求する。不飽和プロセッサは、例えばネッ
トワークの潜在時間のため、待ち状態にある遊びプロセ
ッサである。
全てのプロセッサは、未処理の代替節に関して夫々の分
岐点のリストを有している。これらの−が選択されて遊
びプロセッサに与えられる。新規のプロセスを分離した
ブランチには、なんらの変更を要しない。このメカニズ
ムにより、システムが資源を提供する限り、多くのプロ
セスを発生させることが可能である。従って、並列処理
、例えばプロセス生成や深設定のオーバーヘッドは、並
行プロセスが実際にスタートした場合にのみ必要である
。
岐点のリストを有している。これらの−が選択されて遊
びプロセッサに与えられる。新規のプロセスを分離した
ブランチには、なんらの変更を要しない。このメカニズ
ムにより、システムが資源を提供する限り、多くのプロ
セスを発生させることが可能である。従って、並列処理
、例えばプロセス生成や深設定のオーバーヘッドは、並
行プロセスが実際にスタートした場合にのみ必要である
。
プロセスを生成するには、コールを現時点のノ1ッシェ
・ウィンドウのポインタと、親レベルの指示と共に伝達
することを要するだけである。更に共通変数を得るため
のプロセス間連絡であるオーバーヘッドは、変数の実際
使用の際にその要求のある場合に必要なだけである。従
って、生み出されたプロセスが例えば失敗に終わって早
々と終了していても、専用環境の創出や、これに対する
変数設定値の複写にあまり作業の無駄を生じることはな
い。他方、プロセスが古くなった場合には、更に多くの
共通変数を読み出して局部ハツシュ・ウィンドウに貯蔵
することができ、これによりプロセスの独立性を高める
ことができる。
・ウィンドウのポインタと、親レベルの指示と共に伝達
することを要するだけである。更に共通変数を得るため
のプロセス間連絡であるオーバーヘッドは、変数の実際
使用の際にその要求のある場合に必要なだけである。従
って、生み出されたプロセスが例えば失敗に終わって早
々と終了していても、専用環境の創出や、これに対する
変数設定値の複写にあまり作業の無駄を生じることはな
い。他方、プロセスが古くなった場合には、更に多くの
共通変数を読み出して局部ハツシュ・ウィンドウに貯蔵
することができ、これによりプロセスの独立性を高める
ことができる。
逆戻り(バックトラッキング)
プロセスが失敗の場合には、同プロセスにおける前段階
の選択ポイン14たは分岐点に逆戻りする。もしこれが
選択ポイントの場合は、次の代選択を実行する。分岐点
の場合は、まだ放棄されていない次の選択が実行される
。未放棄の代替のものがない場合には、当該分岐ポイン
トのすべての子の終了を待った上で該分岐ポイントに戻
る。プロセスに選択ポイントまたは分岐ポイントがない
場合は、プロセスを終了させる。
の選択ポイン14たは分岐点に逆戻りする。もしこれが
選択ポイントの場合は、次の代選択を実行する。分岐点
の場合は、まだ放棄されていない次の選択が実行される
。未放棄の代替のものがない場合には、当該分岐ポイン
トのすべての子の終了を待った上で該分岐ポイントに戻
る。プロセスに選択ポイントまたは分岐ポイントがない
場合は、プロセスを終了させる。
探索トリー全体が確実に探索されるようにするため、す
べてのブランチは最終的には失敗して元へ戻るようにし
なければならない。これは、成果を収めたブランチはそ
の解を通報した後に失敗するようにさせることにより達
せられる。
べてのブランチは最終的には失敗して元へ戻るようにし
なければならない。これは、成果を収めたブランチはそ
の解を通報した後に失敗するようにさせることにより達
せられる。
AND並列処理
AND並列プロセスの生成は、OR並列プロセスの場合
と同じメカニズムを用いて行う。潜在的AND並列スプ
リントは、未処理の代替項を有する潜在OR並列分岐点
と同じリストに入れる。このようにして、AND並列プ
ロセスは、遊びプロセッサの要求によってのみ、かつ遡
及的に創出される。
と同じメカニズムを用いて行う。潜在的AND並列スプ
リントは、未処理の代替項を有する潜在OR並列分岐点
と同じリストに入れる。このようにして、AND並列プ
ロセスは、遊びプロセッサの要求によってのみ、かつ遡
及的に創出される。
右側解と左側解のクロスプロダクトは、解の到達時に増
分的に形成される。左側解が得られたときには、直ちに
既存のすべての右側解と対にする。
分的に形成される。左側解が得られたときには、直ちに
既存のすべての右側解と対にする。
逆の場合も同様である。必要ならば、ジョイン・セルを
生成する。ジョイン・セルは、両側のANDブランチが
ハフシュ・ウィンドウを有する場合にのみ必要である。
生成する。ジョイン・セルは、両側のANDブランチが
ハフシュ・ウィンドウを有する場合にのみ必要である。
これらの各ペアについては、プロセッサが利用可能であ
れば、又、可能になればプロセスをスタートさせる。遊
びプロセッサがない場合には、元プロセッサが各ペアご
とに順次実行する。
れば、又、可能になればプロセスをスタートさせる。遊
びプロセッサがない場合には、元プロセッサが各ペアご
とに順次実行する。
OR並列、AND並列、逐次処理の組合わせANDの右
側解がクロスプロダクトが計算される点であるジヨイン
トに到達する場合には、延長可能な分岐ポイントを創出
する。これの子孫は、前記右側解と現時点までに見出さ
れた各左側解く左側の計算結果のリストからのもの)と
の集合である。
側解がクロスプロダクトが計算される点であるジヨイン
トに到達する場合には、延長可能な分岐ポイントを創出
する。これの子孫は、前記右側解と現時点までに見出さ
れた各左側解く左側の計算結果のリストからのもの)と
の集合である。
第9〜17図において、入子式AND10R並列処理へ
の逆戻りについて説明する。これらの図面で“A”はA
ND並列スプリットを示す。左側の解は小文字、例えば
a:のタグを付しである。右側解にはアラビア数字、例
えば1:のタグを付しである。B′は拡張可能な分岐ポ
イントを示し、その等価は未定である。逆戻り選択ポイ
ントはC゛のタグを付しである。括弧内の文字、例えば
右側の(a)はクロスプロダクトの当該メンバーについ
ての左1り解を示す。
の逆戻りについて説明する。これらの図面で“A”はA
ND並列スプリットを示す。左側の解は小文字、例えば
a:のタグを付しである。右側解にはアラビア数字、例
えば1:のタグを付しである。B′は拡張可能な分岐ポ
イントを示し、その等価は未定である。逆戻り選択ポイ
ントはC゛のタグを付しである。括弧内の文字、例えば
右側の(a)はクロスプロダクトの当該メンバーについ
ての左1り解を示す。
第9図は各側の最初のブランチがジゴインに達して間も
なくのAND並列処理を示す。第10図は、追加の右側
解の到達が追加の拡張可能分岐ポイントの生成につなが
る状況を示す。ANDの左側の解がジョインに到達する
と、それまでに生成された全ての右側解の拡張可能分岐
ポイントは、1111i!の追加の子孫で拡張される。
なくのAND並列処理を示す。第10図は、追加の右側
解の到達が追加の拡張可能分岐ポイントの生成につなが
る状況を示す。ANDの左側の解がジョインに到達する
と、それまでに生成された全ての右側解の拡張可能分岐
ポイントは、1111i!の追加の子孫で拡張される。
右側解の分岐ポイントと右側の結果のリスト中に見いだ
される。第11図は、追加の左側解の到達が拡張可能分
岐ポイントの拡張につながる状況を示す。
される。第11図は、追加の左側解の到達が拡張可能分
岐ポイントの拡張につながる状況を示す。
拡張回部分岐ポイントに始まる全てのブランチが失敗す
ると、並列ANDへの逆戻りが必要となる。左側はなお
まだ解の計算が可能なので、逆戻りした右側解を以後の
左側解と対にする余地を見込まねばならない。
ると、並列ANDへの逆戻りが必要となる。左側はなお
まだ解の計算が可能なので、逆戻りした右側解を以後の
左側解と対にする余地を見込まねばならない。
このための最新の逐次プロログ処理技術に即応した最も
簡単で最も空間効率的な方法は、右側の再計算を行うこ
とである。
簡単で最も空間効率的な方法は、右側の再計算を行うこ
とである。
AND並列並列ジンイン逆戻り
右側を左側の計算と非同期に繰り返し計算することによ
り、一般に、左側解を一部の右側解と、他の右側解との
場合よりも再計算1回分早く対にすることができる。し
かし、各左側解を単一の再計算による右側解のみと組み
合わせる場合には、右側解の再計算、即ち不変数の確認
は不必要である。このためには、最初の拡張可能分岐ポ
イント逆戻り時と右側の失敗後群計算した時点との間に
到達したすべての左側解を記載した2回目の左側計算結
果リストを加える。最初の結果リストを“現世代゛と呼
び、新しいものを“次世代°と呼ぶ。
り、一般に、左側解を一部の右側解と、他の右側解との
場合よりも再計算1回分早く対にすることができる。し
かし、各左側解を単一の再計算による右側解のみと組み
合わせる場合には、右側解の再計算、即ち不変数の確認
は不必要である。このためには、最初の拡張可能分岐ポ
イント逆戻り時と右側の失敗後群計算した時点との間に
到達したすべての左側解を記載した2回目の左側計算結
果リストを加える。最初の結果リストを“現世代゛と呼
び、新しいものを“次世代°と呼ぶ。
第12図では、最初の拡張可能分岐ポイントの逆戻りが
なされており、従って“次世代”の結果のリストが必要
な場合を示している。新しい左側解は、第13図に示す
ように、分岐ポイントを拡張することなく、新世代に加
えられる。第14図では、新しい右側解が現世代の各メ
ンバーについてm個の子との分岐ポイントを形成してい
る。
なされており、従って“次世代”の結果のリストが必要
な場合を示している。新しい左側解は、第13図に示す
ように、分岐ポイントを拡張することなく、新世代に加
えられる。第14図では、新しい右側解が現世代の各メ
ンバーについてm個の子との分岐ポイントを形成してい
る。
右側が失敗して論理積並行分岐ポイントへ逆戻りする場
合、3つのことが発生する。
合、3つのことが発生する。
−“現世代”のすべての左側ブランチがこれに原因して
失敗する。
失敗する。
−“次世代゛が“現世代”となる。
−右側が再計算される。
これは第15図に示す。いま、サイクルが完了してスタ
ート時と同じように実行がなされ、例えば第16図の状
態となる。
ート時と同じように実行がなされ、例えば第16図の状
態となる。
なお、まだ一つの問題がある。それは空き世代が禁じら
れていることである。右側解が拡張可焼な空き分岐ポイ
ントを形成する場合、まだ左側の解が出ていないため、
直ちには逆戻りできず、寧ろ分岐ポイントの拡張を待つ
ことになる。第17図は拡張可能な空き分岐ポイントを
待たなければならない場合の例である。
れていることである。右側解が拡張可焼な空き分岐ポイ
ントを形成する場合、まだ左側の解が出ていないため、
直ちには逆戻りできず、寧ろ分岐ポイントの拡張を待つ
ことになる。第17図は拡張可能な空き分岐ポイントを
待たなければならない場合の例である。
失敗
方便1が失敗した場合、即ち逆戻りの結果、左側解の各
世代が出され、夫々が右側の全ての解とベアに組まれて
いる場合にのみ、左側はなお前回の選択ポイントまたは
並列ANDに先行する分岐ポイントへの逆戻りを続ける
。しかし、左側の逆戻りが並列AND以遠に及ばないう
ちに、右側も失敗してAND分岐へ戻ってしまっている
。
世代が出され、夫々が右側の全ての解とベアに組まれて
いる場合にのみ、左側はなお前回の選択ポイントまたは
並列ANDに先行する分岐ポイントへの逆戻りを続ける
。しかし、左側の逆戻りが並列AND以遠に及ばないう
ちに、右側も失敗してAND分岐へ戻ってしまっている
。
全ての待機中の拡張可能な空き分岐ポイントが失敗を余
儀な(される場合、右側は結局失敗することになる。こ
れは、右側の結果のリストから発見可能である。
儀な(される場合、右側は結局失敗することになる。こ
れは、右側の結果のリストから発見可能である。
左側が一旦失敗すれば、右側解全てを再計算する4・要
はなくなる。必要なのは右側解が失敗することだけであ
る。従って、無用な作業量を減らすため何らかの方法を
加える。この方法は三つの形態をとりうる。
はなくなる。必要なのは右側解が失敗することだけであ
る。従って、無用な作業量を減らすため何らかの方法を
加える。この方法は三つの形態をとりうる。
一選択ポインドを除去できる。
一未活動ブランチをスケジューラ−の注意対象から除け
る。
る。
一活性ブランチを抹消できる。
右側の解がない場合に左側を失敗させるためには、この
ような方法を実行することも当然考えられてよい。
ような方法を実行することも当然考えられてよい。
以上、好適な実施例について説明したが、添付請求範囲
を通説することなく種々の変更や改変をこれに加えうる
ちのである。
を通説することなく種々の変更や改変をこれに加えうる
ちのである。
第1図は、プログラムのOR並列処理を示す説明図、第
2図はOR分岐レベルの使用を示す説明図、第3図は入
子構成のOR分岐レベルの使用を示す説明図、第4図は
ジツイン・セルによるクロスプロダクトの形成状況を示
す説明図、第5図は入子式A N Dlo R並列構成
を模式的に示す説明図、第6図はOR並列系をAND並
列系に入子式にした構成を示す説明図、第7図はAND
並列コールにおける遡及的並列構成を示す説明図、第8
図はOR並列構成と逆戻り法を組み合わせたサーチトリ
ー(木)を示す説明図、第9図は各側に第一の解がある
AND並列処理の実行例を示す説明図、第10図は右側
に他の解があるAND並列処理の実行例を示す説明図、
第11図は左側に他の解があるAND並列処理の実行例
を示す説明図、第12図は逆戻しは次の世代を必要とす
るAND並列処理の実行例を示す説明図、第13図は左
側に次世代の解があるAND並列処理の実行例を示す説
明図第14図は右側の新しい解に現世代のものを用いて
いるAND並列処理の実行例を示す説明図、第15図は
右側が故障の場合のAND並列処理の実行例を示す説明
図、第16図は実行が開始時の状態のまま続いているA
ND並列処理の実行例を示す説明図、第17図は待ちが
必要な状況であるAND並列処理の実行例を示す説明図
である。 特許出願人 ユーロピアン・コンピューターインダスト
リー・リサーチ・ センター・ゲーエムベーハー (フォルシュンゲスツエントラム) 代理人 弁理士 河 野 登 人工 5
図 シーケンシャル ブラント 1:B* 18 図 1:B* 第 9 図 一イーーへへへ B B 第 10 図 王 13 図 第 14 図 失敗 失敗
2図はOR分岐レベルの使用を示す説明図、第3図は入
子構成のOR分岐レベルの使用を示す説明図、第4図は
ジツイン・セルによるクロスプロダクトの形成状況を示
す説明図、第5図は入子式A N Dlo R並列構成
を模式的に示す説明図、第6図はOR並列系をAND並
列系に入子式にした構成を示す説明図、第7図はAND
並列コールにおける遡及的並列構成を示す説明図、第8
図はOR並列構成と逆戻り法を組み合わせたサーチトリ
ー(木)を示す説明図、第9図は各側に第一の解がある
AND並列処理の実行例を示す説明図、第10図は右側
に他の解があるAND並列処理の実行例を示す説明図、
第11図は左側に他の解があるAND並列処理の実行例
を示す説明図、第12図は逆戻しは次の世代を必要とす
るAND並列処理の実行例を示す説明図、第13図は左
側に次世代の解があるAND並列処理の実行例を示す説
明図第14図は右側の新しい解に現世代のものを用いて
いるAND並列処理の実行例を示す説明図、第15図は
右側が故障の場合のAND並列処理の実行例を示す説明
図、第16図は実行が開始時の状態のまま続いているA
ND並列処理の実行例を示す説明図、第17図は待ちが
必要な状況であるAND並列処理の実行例を示す説明図
である。 特許出願人 ユーロピアン・コンピューターインダスト
リー・リサーチ・ センター・ゲーエムベーハー (フォルシュンゲスツエントラム) 代理人 弁理士 河 野 登 人工 5
図 シーケンシャル ブラント 1:B* 18 図 1:B* 第 9 図 一イーーへへへ B B 第 10 図 王 13 図 第 14 図 失敗 失敗
Claims (1)
- 【特許請求の範囲】 1、少なくとも1個のプロセッサを用いて複数の論理プ
ログラムを並行処理−特にプロログ(Prolog)様
言語で−するものであって、既存のプロセス(“親”)
により若干の一可能な全ての−OR並列ノードにおいて
前記親とOR並列関係に立つ少なくとも一つのプロセス
(“子”)を並行−かつ遡及的−処理により生成する方
法において、 前記の新たに生成した子についてのみ深設 定リスト(“ハッシュ・ウィンドウ”)を創出して、子
が分岐生成されたOR並列ブランチを処理しつつ、それ
自体と親の双方に共通にアクセス可能な変数(“共通ア
クセス可能変数”)の設定を遂行し得るようにするステ
ップを特徴とする論理プログラムを並行処理する方法。 2、親における潜在的OR並列ノードにラベル(“OR
分岐レベル”)を付するステップを特徴とする特許請求
の範囲第1項に記載の方法。 3、分岐した子がその分岐元である親のOR並列ノード
のOR分岐レベル(“分岐ラベル”)へのアクセスを有
することを特徴とする特許請求の範囲第1項又は第2項
に記載の方法。 4、親が浅設定方式を用いて共通アクセス可能な変数を
設定し、これらの変数に親の最も若いOR並列ノードの
OR分岐レベルであるラベル(“設定ラベル”)を付す
ることを特徴とする特許請求の範囲第1〜3項のいずれ
かに記載の方法。 5、各プロセスに任意の時点において存在する潜在的O
R並列ノードのOR分岐レベルが前記OR並列ノードが
生成された時点までは順番づけられたシーケンスを形成
することを特徴とする特許請求の範囲第2〜4項のいず
れかに記載の方法。 6、前記の子が前記の分岐ラベルを前記の設定ラベルと
比較して、設定が分岐前又は分岐後のコールにより遂行
されるか否か、従ってラベル付けされた設定が前記の子
に関して有効か否かを確認することを特徴とする特許請
求の範囲第3〜5項のいずれかに記載の方法。 7、少なくとも1個のプロセッサを用いて複数の論理プ
ログラムを並行処理−特にプロログ様言語で一するもの
であって、既存のプロセス(“親”)により該親と独立
のAND並列関係に立つ少なくとも一つのプロセス(“
子”)を並行−かつ遡及的−処理により生成する方法に
おいて、 AND並列ブランチの結果のクロスプロダ クトが増加的に形成されることを特徴とする論理プログ
ラムを並行処理する方法。 8、前記のクロスプロダクトのメンバーがAND並列ブ
ランチの解のポインタを含む構造体(“ジョイン・セル
”)として形成されることを特徴とする特許請求の範囲
第7項記載の方法。 9、少なくとも一つの他のプロセスに対して独立のAN
D関係に立つプロセスが前記プロセスとOR並列関係に
立つ第三のプロセスの親であり得ることを特徴とする特
許請求の範囲第1〜8項のいずれかに記載の方法。 10、少なくとも一つの他のプロセスに対してOR並列
関係に立つプロセスが前記プロセスと独立のAND関係
に立つ第三のプロセスの親であり得ることを特徴とする
特許請求の範囲第1〜9項のいずれかに記載の方法。 11、逐次処理、OR並列処理、及び/又はAND並列
処理の選択的組合わせを特徴とする特許請求の範囲第1
〜10項のいずれかに記載の方法。 12、一方のAND並列ブランチ−右側−への逆戻しを
まず行い、次いで前記右側ブランチへのすべての解が見
いだされた後に他方のブランチ−左側−ヘの逆戻しを行
うことにより、並列ANDへの逆戻しを行うステップを
特徴とする特許請求の範囲第7〜11項のいずれかに記
載の方法。 13、右側の逆戻しにより潜在的に失われた解(“ 戻し解”)をい設定からい設定に 転換して存することにより、それらを追っ て計算される左側の解と対にすることを特徴とする特許
請求の範囲第12項に記載の方法。 14、右側の全ての解を逆戻しした後、この逆戻しの右
側の解を追って計算される左側の解と対にする際に再計
算することを特徴とする特許請求の範囲第12項に記載
の方法。 15、再計算を動的プログラミングにより行うことを特
徴とする特許請求の範囲第14項に記載の方法。 16、右側の一または二以上の解の再計算を必要とする
左側の解は、右側のすべての解を次回に逆戻しするまで
右側のいかなる解とも対にしないことを特徴とする特許
請求の範囲第13〜15項のいずれかに記載の方法。 17、前記のOR及び/又はAND並列プロセスのみを
未飽和プロセッサで生成することを特徴とする特許請求
の範囲第1〜16項のいずれかに記載の方法。 18、少なくとも1個のプロセッサを備えて複数の論理
プログラム−特にプロログ様言語の−を同時また並行処
理可能であり、既存のプロセス(“親”)により若干の
−可能なすべての−OR並列ノードにおいて該親とOR
並列関係に立つ少なくとも一つのプロセス(“子”)を
並行−かつ遡及的−処理により生成可能なデータ処理シ
ステムであって、 前記の新たに生成した子プロセスのみが− 分岐生成されたOR並列ブランチを処理しつつ−それ自
体と親の双方に共通にアクセス可能な変数(“共通アク
セス可能変数”)の設定を遂行するようにした深設定リ
ストが設けられていることを特徴とするデータ処理シス
テム。 19、少なくとも1個のプロセッサを備えて複数の論理
プログラム−特にプロログ様言語の−を同時または並行
処理可能であり、既存のプロセス(“親”)により前記
親と独立のAND並列関係に立つ少なくとも一つのプロ
セス(“子”)を並行−かつ遡及的−処理により生成可
能なデータ処理システムであって、 AND並列ブランチの結果のクロスプロダ クトが増加的に形成されることを特徴とするデータ処理
システム。 20、特許請求の範囲第1〜17項のいずれかに記載の
方法を使用するデータ処理システム。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| EP86109342A EP0252176B1 (en) | 1986-07-08 | 1986-07-08 | A method and a system for processing logic programs |
| EP86109342.5 | 1986-07-08 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPS6325734A true JPS6325734A (ja) | 1988-02-03 |
Family
ID=8195254
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP62170832A Pending JPS6325734A (ja) | 1986-07-08 | 1987-07-07 | 論理プログラム処理の方法及びシステム |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US4931931A (ja) |
| EP (1) | EP0252176B1 (ja) |
| JP (1) | JPS6325734A (ja) |
| AT (1) | ATE51721T1 (ja) |
| DE (1) | DE3670162D1 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0343137A (ja) * | 1989-07-10 | 1991-02-25 | Toshiba Corp | 資材所要量展開処理装置 |
Families Citing this family (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2752094B2 (ja) * | 1988-09-14 | 1998-05-18 | 株式会社東芝 | 論理型言語におけるバックトラック処理方式 |
| US5471622A (en) * | 1989-10-04 | 1995-11-28 | Paralogic, Inc. | Run-time system having nodes for identifying parallel tasks in a logic program and searching for available nodes to execute the parallel tasks |
| US5418954A (en) * | 1991-06-19 | 1995-05-23 | Cadence Design Systems, Inc. | Method for preparing and dynamically loading context files |
| US5369732A (en) * | 1993-03-29 | 1994-11-29 | Trilogy Development Group | Method and apparatus for goal processing memory management |
| US6292822B1 (en) | 1998-05-13 | 2001-09-18 | Microsoft Corporation | Dynamic load balancing among processors in a parallel computer |
| US6106575A (en) * | 1998-05-13 | 2000-08-22 | Microsoft Corporation | Nested parallel language preprocessor for converting parallel language programs into sequential code |
| US20100082636A1 (en) * | 2008-09-25 | 2010-04-01 | Nec Laboratories America, Inc. | Methods and Apparatus for Content-Defined Node Splitting |
| US11106800B1 (en) * | 2018-11-30 | 2021-08-31 | Capsule8, Inc. | Detecting kernel exploits |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4811210A (en) * | 1985-11-27 | 1989-03-07 | Texas Instruments Incorporated | A plurality of optical crossbar switches and exchange switches for parallel processor computer |
| US4775934A (en) * | 1986-06-17 | 1988-10-04 | Yeda Research And Development Co. | Method for concurrent logic program |
-
1986
- 1986-07-08 DE DE8686109342T patent/DE3670162D1/de not_active Expired - Fee Related
- 1986-07-08 AT AT86109342T patent/ATE51721T1/de not_active IP Right Cessation
- 1986-07-08 EP EP86109342A patent/EP0252176B1/en not_active Expired - Lifetime
-
1987
- 1987-07-02 US US07/070,818 patent/US4931931A/en not_active Expired - Fee Related
- 1987-07-07 JP JP62170832A patent/JPS6325734A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0343137A (ja) * | 1989-07-10 | 1991-02-25 | Toshiba Corp | 資材所要量展開処理装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| EP0252176B1 (en) | 1990-04-04 |
| ATE51721T1 (de) | 1990-04-15 |
| US4931931A (en) | 1990-06-05 |
| DE3670162D1 (de) | 1990-05-10 |
| EP0252176A1 (en) | 1988-01-13 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3354425B2 (ja) | 実行可能ファイルの実行効率を改善するための方法及びシステム | |
| US5764989A (en) | Interactive software development system | |
| US5048018A (en) | Debugging parallel programs by serialization | |
| US9081803B2 (en) | Performance of RCU-based searches and updates of cyclic data structures | |
| Wu et al. | Efficiently translating complex SQL query to mapreduce jobflow on cloud | |
| JPS6325734A (ja) | 論理プログラム処理の方法及びシステム | |
| US5555412A (en) | Complier and method for alias checking in a complier | |
| Paige | Viewing a program transformation system at work | |
| Burton | Nondeterminism with referential transparency in functional programming languages | |
| JPH0565892B2 (ja) | ||
| JPS6236577B2 (ja) | ||
| Wedekind et al. | Prefetching in realtime database applications | |
| JPH03118635A (ja) | ソースコード発展システム用増分コンパイラ | |
| Friedman et al. | An approach to fair applicative multiprogramming | |
| Bowie | Applications of graph theory in computer systems | |
| JPH0814800B2 (ja) | データベース排他制御方法 | |
| Gu et al. | Typing composable coroutines | |
| Zehendner | A module-based assembly language with parallel processing constructs and its implementation in the ASTOR architecture | |
| JP3461185B2 (ja) | ロードモジュールへのソースコード行番号登録方法および装置 | |
| JP3166699B2 (ja) | オブジェクト指向プログラム設計支援装置、方法および記録媒体 | |
| Lindstrom | Implementing logical variables on a graph reduction architecture | |
| CN112100207A (zh) | 一种子查询处理方法、装置、设备及存储介质 | |
| Florin et al. | Recursive distributed programming schemes | |
| Audenaert | Maintaining concurrency information for on-the-fly data race detection | |
| He et al. | An Optimization Method for XML Twig Query |