KL1 プラグマ

KL1

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/26 09:42 UTC 版)

プラグマ

GHCで記述されたプログラムを効率よく並行・並列実行させるため、KL1では以下のプラグマが導入された。プログラムの正しさに影響を与えることなく負荷分散の仕方などを変えられるように設計されている。なお、プラグマはプログラムの正しさとは分離された効率のためだけの指定であり、これに従わない方が効率がいいと処理系が判断すると、必ずしも従わない場合もある。

* ゴール分散プラグマ     Goal@node(Node)
* ゴール優先度指定プラグマ  Goal@priority(Priority)
* 節優先度指定プラグマ    alternatively.

ゴール分散プラグマは特定のゴール(プロセス)を実行するノードを指定する。ノードは個別のプロセッサ、あるいは負荷分散の対象となるプロセッサの集まりである。以下に、PEs 個のノードに対し N 個のspawnプロセスをサイクリックに割り当てる述語の例を示す。Prologと同様、英大文字や"_"で始まる項は変数を表す。%以降はコメントである。

:- module cyclic.
:- public distribute/1.
distribute(N):- true |
                current_node(_,PEs),  %ノードの総数PEsを取得
                fork(N,PEs,0).        %N個のプロセスをPEs個のノードで起動

fork(0,PEs,PE):- true | true.
otherwise.
fork(N,PEs,PE):- PeNo:=PE mod PEs |
                spawn@node(PeNo),     %PeNoのノードでspawnプロセスを起動
                NextPE:=PE+1,
                N1:=N-1,
                fork(N1,PEs,NextPE).

ゴール優先度指定プラグマはゴール(プロセス)ごとの優先順位を指定する。ただし必ず優先順位を守ろうとすると効率的な実装が難しくなり、返って効率が落ちる可能性があるため、必ず守られるとは限らない。

節優先度指定プラグマはプログラムの構成要素である節(Clause)の優先順位である。節の優先順位の指定には、最初に優先したい節を先に書き、他の節との間に "alternatively." を書く。ゴール優先度指定プラグマと同様の理由で、節の優先順位も必ず守られるとは限らない。




「KL1」の続きの解説一覧




固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「KL1」の関連用語

KL1のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



KL1のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのKL1 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS