MPI: A Message-Passing Interface Standard
Version 2.2

Message Passing Interface Forum2009年9月4日【日本語訳】

日本語訳にあたって

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

本書はぜきぐぉ〺 ぁ きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ こぴちのつちひつ ざづひびどはの 〲〮〲〢の日本語訳である．きぐぉ
うはひふねの 意 思 に よ り， 基 本 的 に 英 語 版 の 規 格 書 が 唯 一 の 公 式 版 で あ る た め， 本 書
はぜふのは『っどちぬ ぶづひびどはの〢という位置付けになっている． もし日本語訳と英語原著との間で齟齬があった場合は，原著版が常に正しいことになる．
翻訳にあたり，内容的におかしいと思われた部分に関しては，翻訳時点で最新のきぐぉ〳〮〱とつきあわせ，きぐぉ 〳〮〱で修正されている部分に関しては脚注にその旨を明記した．
また，原文の意味や解釈に疑問が生じた部分に関しては全て きぐぉ うはひふねに確認をとっている．同時に，翻訳作業中に見つけた原文の（がAごぅじの使い方を含む）おかしな部分や表現の問題に関してはきぐぉ うはひふねに報告済みである．
本翻訳以前にきぐぉ 〱〮〳の日本語訳が存在しており，本書の翻訳にあたり，きぐぉ 〱〮〳の翻訳を参考にした．それ以外にきぐぉ 〱〮〳の翻訳と本書の翻訳において，翻訳者の重複を含め，関係はない．
翻訳にあたり，きぐぉ特有の用語に関しては基本的にカタカナ表記することとした．このため，「ゲット」や「プット」などいくつかの用語は聴き馴染みのないものとなっている．議論となったのは ぜのふぬぬ〢 の扱いである．英語の発音をカタカナ表記にすると「ナル」とすべきであるが，日本では「ヌル」が広く使われている．このため「ナル」という表記はかえって混乱を招くと考え，あえて英語表記のままぜのふぬぬ〢とした．また，例えば「ユーザ」と「ユーザー」などの日本語表記の揺れは，基本的にインターネット検索数の多いものを採用することとした．
オリジナルはばつてぬちぴづへを使っている関係から，ぃおかパッケージ（とぴぴば〺〯〯っなに〮ててどど〮はひで）を用いて日本語化した．このため日本語特有の禁則処理など一部に問題が生じている．その点に関してはご容赦を願いたい．
本翻訳は，ぐぃクラスタコンソーシアム 〨とぴぴば〺〯〯ぷぷぷ〮ばっっぬふびぴづひ〮はひで〯〩 の支援により，国立研究開発法人理化学研究所計算科学研究機構の有志ボランティアが携わった．以下，翻訳に携わった名前を記す．

〳〳

石川 裕
畑中 正行

〳〴
〳〵

小倉 崇浩
堀 敦史

亀山 豊久
山口 訓央

高木 将通
（〵〰音順）〳〶〳〷

日本語訳に関する不備等に関しては ねばど〭ぴひちのび぀ばっっぬふびぴづひ〮はひで 宛に報告されたい．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

〲〰〱〵年〱〲月きぐぉ 〲〮〲 日本語訳初版

次ページ以降の全てのページはぜきぐぉ〺 ぁ きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ こぴちのつちひつ ざづひびどはの〲〮〲〢の翻訳である．例外として，きぐぉ 〲〮〲 のぜぅひひちぴち〢 に関しては読者の便宜を優先し，本文に反映させてある．

〴〵
〴〶
〴〷
〴〸

どど

本書では，きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ（きぐぉ：メッセージ通信インターフェイス）標準バージョン〲〮〲について説明する．きぐぉ標準には〱対〱メッセージ通信，集団的通信，グループおよびコミュニケータの概念，プロセストポロジー，環境管理，プロセスの作成と管理，片方向通信，拡張集団通信，外部インターフェイス，入出力，それ以外のトピッ
ク，プロファイリングインターフェイスが含まれる．ぃ言語とうはひぴひちの言語の呼び出し形式も定義される．
技術的にはこのバージョンの標準は「きぐぉ：メッセージ通信インターフェイス標準第〲〮〱版〲〰〰〸年〶月〲〳日」に基づいている．きぐぉ うはひふねはこの標準に〷つの新しいルーチンを追加し，多数の機能強化と明確化を行った．
時系列で見ると，標準の発展はきぐぉ〭〱〮〰（〱〹〹〴年〶月）からきぐぉ〭〱〮〱（〱〹〹〵年〶月〱〲日），
きぐぉ〭〱〮〲（〱〹〹〷年〷月〱〸日）へと進む段階でいくつかの点に関する明確化と追加が行わ
れ，きぐぉ〭〲文書の一部として公開された．きぐぉ〭〲〮〰（〱〹〹〷年〷月〱〸日）では新機能が追加され，きぐぉ〭〱〮〳（〲〰〰〸年〵月〳〰日）では歴史的経緯により文書〱〮〱および 〱〮〲と訂正された文書が〱つの文書に統合され，きぐぉ〭〲〮〱（〲〰〰〸年〶月〲〳 日）ではそれまでの文書が統合された．バージョンきぐぉ〭〲〮〲（〲〰〰〹年〹 月）はきぐぉ〭〲〮〱をベースに明確化が進められ，誤りが修正され，いくつかの機能強化が行われている．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

っ 〱〹〹〳〬 〱〹〹〴〬 〱〹〹〵〬 〱〹〹〶〬 〱〹〹〷〬 〲〰〰〸〬 〲〰〰〹 さのどぶづひびどぴべ はて ごづののづびびづづ〬 かのはへぶどぬぬづ〬 ごづののづびびづづ〮
さのどぶづひびどぴべ はて ごづののづびびづづの著作権表示と本書のタイトルが記載され， さのどぶづひびどぴべ はて ごづの〭のづびびづづの許可を得てコピーしている旨が記載されている限り，無料で本書のすべてまたは一部をコピーすることができる．
どどど

〴〴
〴〵
〴〶
〴〷
〴〸

〱
〲
〳
〴
〵
〶

ざづひびどはの 〲〮〲：〲〰〰〹年〹月〴日 この文書に含まれるのは，大部分がきぐぉ〭〲〮〱文書を修正および明確化した内容である．一部，機能強化も行われているが，きぐぉ〭〲〮〱の正しいプログラムはすべてそのままきぐぉ 〲〮〲の正しいプログラムとなっている．新機能として採用されているのは，ユーザにとって必須であり，オープンソースの実装で，既存の きぐぉ実装への影響の小さい物のみである．

〷
〸
〹
〱〰
〱〱
〱〲

ざづひびどはの 〲〮〱：〲〰〰〸年〶月〲〳日 この文書はそれまでの文書きぐぉ〭〱〮〳（〲〰〰〸年〵月〳〰日）ときぐぉ〭〲〮〰（〱〹〹〷年〷月〱〸日）を統合したものである．きぐぉ〭〲〮〰の第〴章「他章に該当しない事項」
や第〷章「拡張集合操作」などの章はきぐぉ〭〱〮〳 にも組み込まれている． この文書には，きぐぉ うはひふねにより収集された修正内容や明確化された内容も反映されている．

〱〳
〱〴
〱〵
〱〶
〱〷

ざづひびどはの 〱〮〳：〲〰〰〸年〵月〳〰日 この文書はそれまでの文書きぐぉ〭〱〮〱（〱〹〹〵年〶月〱〲日）ときぐぉ〭〱〮〲の章をきぐぉ〭〲（〱〹〹〷年〷月〱〸日）に統合したものである．この文書には，きぐぉ うはひふねにより収集されたきぐぉ〭〱〮〱およびきぐぉ〭〱〮〲の修正内容も反映されている．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

ざづひびどはの 〲〮〰：〱〹〹〷年〷月〱〸日 きぐぉ〭〱〮〱のリリース後に，きぐぉ うはひふねは再び会合を開き，間違いの修正と機能強化を検討した．きぐぉ〭〲の焦点は，プロセスの作成と管理，片方向通信，拡張集団的通信，外部インターフェイス，並列入出力に置かれるようになった．「他章に該当しない事項」では別の場所に適合しない項目，特に言語の相互運用性について検討される．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

ざづひびどはの 〱〮〲：〱〹〹〷年〷月〱〸日 きぐぉ〭〲 うはひふねは〱〹〹〷年〷月〱〸日に，標準の第〳章ぜきぐぉ〭〲〺 ぅへ〭
ぴづのびどはのび ぴは ぴとづ きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ〢としてきぐぉ〭〱〮〲を導入した．このセクションではきぐぉ標準第〱〮〱版の不明瞭な点が明らかにされ，細かい間違いが訂正されている．きぐぉ〭〱〮〲の唯一の新機能は，きぐぉ標準のどのバージョンにしたがって実装を行うかを特定するためのものである．きぐぉ〭〱ときぐぉ〭〱〮〱の違いはわずかである．きぐぉ〭〱〮〱ときぐぉ〭〱〮〲の違いは非常にわずかであるが，きぐぉ〭〱〮〲ときぐぉ〭〲には大きな違いがある．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

ざづひびどはの 〱〮〱：〱〹〹〵年〶月 〱〹〹〵年〵月から，きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ うはひふねは再び会合を開くようになった．その目的は〱〹〹〵年〵月〵日付けのきぐぉ文書，すなわち下に記す第〱〮〰版として言及されているものの間違いを訂正し，不明瞭な点を明らかにすることであった．
そこでの議論の成果が本文書，第〱〮〱版である．第〱〮〰版からの変更点は比較的小さなもの
である．本文書の，すべての変更点に印をつけた版も入手できる．この段落は，変更箇所の一例である．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

ざづひびどはの 〱〮〰：〱〹〹〴年〵月 きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ うはひふね（きぐぉう）は〴〰を越える団体の参加を受けて 〱〹〹〳年〱月から会合を繰り返し，メッセージ通信のためのライブラリイン
ターフェイスの標準に関する議論と定義を行った．きぐぉうはいかなる公式標準制定組織からの認可も援助も受けていない．

〴〷
〴〸

どぶ

きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづの目標は，簡単に言うと，メッセージ通信を行プログラム書
くための，広く一般に使われる標準を作り出すことである．この目標を実現するには，
きぐぉは実際的で，可搬であり，効率が良く，かつ融通の利くメッセージ通信の標準を確立しなければならない．
本文書はきづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ うはひふねの最終報告第〱〮〰版である．本文書にはきぐぉイ
ンターフェイスのために提案されたすべての技術的項目が盛り込まれている．この草稿の版組はがAごぅじにより〱〹〹〴年〵月〵日に行った．
きぐぉに関する意見がある場合，ねばど〭っはねねづのぴび぀ねばど〭てはひふね〮はひで まで送付いただきたい．
送付された意見はきぐぉ うはひふね委員会のメンバーに転送され，検討される．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぶ

ぶど

目次
謝辞

へどど

第〱章 きぐぉの概要〱〮〱 概要と目標 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〮〲 きぐぉ〭〱〮〰の背景 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〮〳 きぐぉ〭〱〮〱〬 きぐぉ〭〱〮〲〬 および きぐぉ〭〲〮〰の背景 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〮〴 きぐぉ〭〱〮〳および きぐぉ〭〲〮〱の背景 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〮〵 きぐぉ〭〲〮〲の背景 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〮〶 この標準を利用する人々 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〮〷 この標準の実現対象となるプラットフォーム 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〮〸 標準に含まれるもの 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〮〹 標準に含まれないもの 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〮〱〰 この文書の構成 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〱
〱
〲
〳
〴
〵
〵
〵
〶
〶
〷

第〲章
〲〮〱
〲〮〲
〲〮〳
〲〮〴
〲〮〵

〱〱
〱〱
〱〱
〱〲
〱〳
〱〵
〱〵
〱〷
〱〷
〱〷
〱〹
〱〹
〱〹
〱〹
〲〰
〲〰
〲〱
〲〲

〲〮〶

きぐぉの用語と規則
文書の表記 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮命名規則 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮手続きの仕様 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮意味に関する用語 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮データ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〵〮〱 不可視オブジェクト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〵〮〲 配列引数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〵〮〳 ステート型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〵〮〴 名前付き定数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〵〮〵 選択型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〵〮〶 アドレス型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〵〮〷 ファイルのオフセット 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮言語の呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〶〮〱 廃止された名前と関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〶〮〲 うはひぴひちの言語の呼び出し形式に関する事項 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〶〮〳 ぃ言語の呼び出し形式に関する事項 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〶〮〴 ぃ〫〫言語の呼び出し形式に関する事項 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぶどど〲〮〶〮〵 関数とマクロ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〷 プロセス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〸 エラー処理 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〹 実装に関する事項 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〹〮〱 基本ランタイムルーチン独立性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〹〮〲 シグナルとの相互作用 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〮〱〰 プログラム例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮
第〳章
〳〮〱
〳〮〲

〱対〱通信
概要 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ブロッキング送信関数および受信関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〲〮〱 ブロッキング送信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〲〮〲 メッセージデータ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〲〮〳 メッセージエンベロープ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〲〮〴 ブロッキング受信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〲〮〵 リターンステータス型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〲〮〶 こぴちぴふび用のきぐぉたこごぁごさこたぉぇぎくげぅの受け渡し 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〳 データ型の一致とデータ変換 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〳〮〱 型一致規則 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮きぐぉたぃえぁげぁぃごぅげ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〳〮〲 データ変換 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〴 通信モード 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〵 〱対〱通信の意味論 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〶 バッファの割り当てと使用法 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〶〮〱 バッファモードのモデル実装 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〷 ノンブロッキング通信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〷〮〱 通信リクエストオブジェクト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〷〮〲 通信の起動 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〷〮〳 通信の完了 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〷〮〴 ノンブロッキング通信の意味論 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〷〮〵 多重完了 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〷〮〶 びぴちぴふびの非破壊なテスト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〸 プローブおよびキャンセル 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〹 持続的通信リクエスト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〱〰 送受信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〮〱〱 のふぬぬプロセス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

第〴章
〴〮〱

データ型
派生データ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〱 明確なアドレスを持つ型コンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

ぶどどど

〲〵
〲〶
〲〶
〲〸
〲〸
〲〹
〲〹
〳〱
〳〱
〳〲
〳〲
〳〲
〳〵
〳〶
〳〸
〴〰
〴〲
〴〲
〴〴
〴〴
〴〶
〵〰
〵〴
〵〵
〵〶
〵〸
〵〸
〶〱
〶〵
〶〶
〷〳
〷〴
〷〸
〸〳
〸〵
〸〷
〸〷
〸〹

〴〮〲
〴〮〳
第〵章
〵〮〱
〵〮〲

〵〮〳
〵〮〴
〵〮〵
〵〮〶
〵〮〷
〵〮〸
〵〮〹

〴〮〱〮〲 データ型コンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〳 サブ配列データ型コンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〴 分散配列データ型コンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〵 アドレス関数とサイズ関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〶 下限マーカと上限マーカ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〷 データ型の範囲と上下限 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〸 データ型の正しい範囲 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〹 コミットと解放 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〱〰 データ型の複製 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〱〱 通信時の汎用データ型の利用 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〱〲 アドレスの正しい利用 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〱〳 データ型のデコード 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〴〮〱〮〱〴 例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮パックとアンパック 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮標準のきぐぉたぐぁぃかおよびきぐぉたさぎぐぁぃか 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〸〹
〹〸
〱〰〰
〱〰〵
〱〰〷
〱〰〸
〱〰〹
〱〱〰
〱〱〱
〱〱〲
〱〱〵
〱〱〶
〱〲〴
〱〳〱
〱〳〷

集団的通信
概論と概要 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮コミュニケータ引数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〲〮〱 グループ内コミュニケータ集団操作の仕様 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〲〮〲 グループ間コミュニケータへの集団操作の適用 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〲〮〳 グループ間コミュニケータ集団操作の仕様 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮バリア同期 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ブロードキャスト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〴〮〱 きぐぉたあぃぁこごの使用例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ギャザー 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〵〮〱 きぐぉたぇぁごえぅげ〬 きぐぉたぇぁごえぅげざの使用例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮スキャッタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〶〮〱 きぐぉたこぃぁごごぅげ〬 きぐぉたこぃぁごごぅげざの使用例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮全プロセスへのギャザー 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〷〮〱 きぐぉたぁががぇぁごえぅげの使用例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮全対全スキャッタ／ギャザー 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮大域的なリデュース操作 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〹〮〱 リデュース 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〹〮〲 定義済みリデュース演算 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〹〮〳 符号付き文字とリデュース 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〹〮〴 きぉぎがくぃときぁじがくぃ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〹〮〵 ユーザ定義リデュース演算 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ユーザ定義リデュースの例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〹〮〶 オールリデュース 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〱〴〱
〱〴〱
〱〴〴
〱〴〴
〱〴〵
〱〴〷
〱〴〸
〱〴〸
〱〴〹
〱〴〹
〱〵〲
〱〵〸
〱〶〱
〱〶〴
〱〶〶
〱〶〷
〱〷〲
〱〷〲
〱〷〴
〱〷〷
〱〷〷
〱〸〱
〱〸〴
〱〸〵

どへ

〵〮〹〮〷 プロセスローカルなリデュース 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〰 リデューススキャッタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〰〮〱 きぐぉたげぅいさぃぅたこぃぁごごぅげたあがくぃか 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〰〮〲 きぐぉたげぅいさぃぅたこぃぁごごぅげ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〱 スキャン 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〱〮〱 包括的スキャン 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〱〮〲 排他的スキャン 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〱〮〳 きぐぉたこぃぁぎの使用例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〲 正当性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮
第〶章
〶〮〱

〶〮〲

〶〮〳

〶〮〴

〶〮〵

〶〮〶

グループ，コンテクスト，コミュニケータ，キャッシング
はじめに 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〱〮〱 ライブラリをサポートするのに必要な機能 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〱〮〲 きぐぉのライブラリサポート 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮基本概念 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〲〮〱 グループ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〲〮〲 コンテクスト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〲〮〳 グループ内コミュニケータ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〲〮〴 定義済みグループ内コミュニケータ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮グループ管理 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〳〮〱 グループアクセサ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〳〮〲 グループコンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〳〮〳 グループデストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮コミュニケータ管理 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〴〮〱 コミュニケータアクセサ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〴〮〲 コミュニケータコンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〴〮〳 コミュニケータデストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮例題 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〵〮〱 一般的な慣例〣〱 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〵〮〲 一般的な慣例〣〲 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〵〮〳 （おおむね）一般的な慣習〣〳 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〵〮〴 例〣〴 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〵〮〵 ライブラリの例〣〱 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〵〮〶 ライブラリの例〣〲 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮グループ間通信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〶〮〱 グループ間コミュニケータのアクセサ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〶〮〲 グループ間コミュニケータの操作 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〶〮〳 グループ間コミュニケータの使用例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮例〱〺 〳グループでの「パイプライン」 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮例〲〺 〳グループでの「リング」 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮
へ

〱〸〶
〱〸〷
〱〸〷
〱〸〸
〱〹〰
〱〹〰
〱〹〰
〱〹〱
〱〹〳
〱〹〷
〱〹〷
〱〹〷
〱〹〸
〲〰〰
〲〰〰
〲〰〱
〲〰〱
〲〰〲
〲〰〲
〲〰〲
〲〰〴
〲〰〸
〲〰〹
〲〰〹
〲〱〱
〲〱〸
〲〱〹
〲〱〹
〲〲〰
〲〲〰
〲〲〱
〲〲〲
〲〲〳
〲〲〵
〲〲〸
〲〲〹
〲〳〲
〲〳〲
〲〳〳

〶〮〷

〶〮〸
〶〮〹

第〷章
〷〮〱
〷〮〲
〷〮〳
〷〮〴
〷〮〵

〷〮〶
第〸章
〸〮〱

〸〮〲

キャッシング 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〷〮〱 機能説明 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〷〮〲 コミュニケータ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〷〮〳 ウィンドウ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〷〮〴 データ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〷〮〵 無効なかづべぶちぬに対するエラークラス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〷〮〶 属性の例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮命名オブジェクト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ゆるい同期モデルの形式化 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〹〮〱 基本説明 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〶〮〹〮〲 実行モデル 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮コミュニケータの静的割り当て 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮コミュニケータの動的割り当て 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮一般的な場合 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〲〳〴
〲〳〵
〲〳〶
〲〴〱
〲〴〴
〲〴〶
〲〴〶
〲〴〸
〲〵〲
〲〵〲
〲〵〲
〲〵〳
〲〵〳
〲〵〴

プロセストポロジー
はじめに 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮仮想トポロジー 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮きぐぉへの埋め込み 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮関数の概要 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮トポロジーコンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〷〮〵〮〱 カルテシアンコンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〷〮〵〮〲 カルテシアン支援関数〺 きぐぉたいぉきこたぃげぅぁごぅ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〷〮〵〮〳 一般（グラフ）コンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〷〮〵〮〴 分散（グラフ）コンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〷〮〵〮〵 トポロジー問い合わせ関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〷〮〵〮〶 カルテシアン座標のシフト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〷〮〵〮〷 カルテシアン構造の分割 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〷〮〵〮〸 低レベルトポロジー関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮アプリケーション例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〲〵〵
〲〵〵
〲〵〶
〲〵〶
〲〵〷
〲〵〸
〲〵〸
〲〵〹
〲〶〰
〲〶〲
〲〶〸
〲〷〵
〲〷〶
〲〷〷
〲〷〹

きぐぉ環境管理
実装情報 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〸〮〱〮〱 バージョンの問い合わせ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〸〮〱〮〲 環境の問い合わせ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮タグ値 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ホストランク 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮入出力ランク 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮クロック同期 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮メモリ割り当て 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〲〸〱
〲〸〱
〲〸〱
〲〸〲
〲〸〲
〲〸〳
〲〸〳
〲〸〳
〲〸〴

へど

〸〮〳

〸〮〴
〸〮〵
〸〮〶
〸〮〷

〸〮〸
第〹章

エラー処理 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〸〮〳〮〱 コミュニケータ用のエラーハンドラ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〸〮〳〮〲 ウィンドウ用のエラーハンドラ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〸〮〳〮〳 ファイル用のエラーハンドラ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〸〮〳〮〴 エラーハンドラの解放とエラー文字列の取得 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮エラーコードおよびクラス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮エラークラス，エラーコード，エラーハンドラ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮時刻関数と同期 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮起動 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〸〮〷〮〱 プロセス終了時のユーザ関数の実行 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〸〮〷〮〲 きぐぉが終了しているかどうかの確認 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮可搬なきぐぉプロセスの起動 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〲〸〶
〲〸〸
〲〹〰
〲〹〱
〲〹〲
〲〹〳
〲〹〶
〳〰〰
〳〰〱
〳〰〶
〳〰〶
〳〰〷

ぉのてはオブジェクト〳〱〱

第〱〰章 プロセスの生成と管理〱〰〮〱 はじめに 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〲 動的プロセスモデル 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〲〮〱 プロセスの起動 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〲〮〲 ランタイム環境 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〳 プロセスマネージャのインターフェイス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〳〮〱 きぐぉのプロセス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〳〮〲 プロセスの起動と通信の確立 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〳〮〳 複数の実行可能ファイルの起動と通信の確立 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〳〮〴 予約されたキー 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〳〮〵 スポーンの例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮きぐぉたぃくききたこぐぁしぎ を使用したきちのちでづひ〭ぷはひにづひの例 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〴 通信の確立 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〴〮〱 名前，アドレス，ポート，それら全て 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〴〮〲 サーバルーチン 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〴〮〳 クライアントルーチン 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〴〮〴 名前の公開 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〴〮〵 予約されたキー値 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〴〮〶 クライアント／サーバの例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮最もシンプルな例 ぼ 完全に可搬 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮くっづちの〯ぁぴねはびばとづひづ 〭 名前の公開に基づく 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮シンプルなクライアント／サーバの例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〵 その他の機能 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〵〮〱 ユニバースサイズ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〵〮〲 シングルトンきぐぉたぉぎぉご 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

へどど

〳〱〷
〳〱〷
〳〱〸
〳〱〸
〳〱〸
〳〲〰
〳〲〰
〳〲〰
〳〲〶
〳〲〸
〳〲〹
〳〲〹
〳〳〱
〳〳〱
〳〳〳
〳〳〴
〳〳〶
〳〳〸
〳〳〸
〳〳〸
〳〳〹
〳〳〹
〳〴〱
〳〴〱
〳〴〲

〱〰〮〵〮〳 きぐぉたぁぐぐぎさき 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〵〮〴 接続の解放 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〰〮〵〮〵 きぐぉ通信のもう〱つの確立方法 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〳〴〲
〳〴〳
〳〴〵

第〱〱章 片方向通信〱〱〮〱 はじめに 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〲 初期化 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〲〮〱 ウィンドウの生成 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〲〮〲 ウィンドウの属性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〳 通信呼び出し 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〳〮〱 プット 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〳〮〲 ゲット 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〳〮〳 例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〳〮〴 アキュムレート関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〴 同期呼び出し 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〴〮〱 フェンス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〴〮〲 一般的なアクティブターゲット同期 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〴〮〳 ロック 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〴〮〴 アサーション 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〴〮〵 その他の説明 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〵 例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〶 エラー処理 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〶〮〱 エラーハンドラ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〶〮〲 エラークラス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〷 意味論と正しさ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〷〮〱 アトミック性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〷〮〲 プログレス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〷〮〳 レジスタとコンパイラの最適化 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〳〴〷
〳〴〷
〳〴〸
〳〴〸
〳〵〰
〳〵〱
〳〵〲
〳〵〵
〳〵〵
〳〵〷
〳〵〹
〳〶〵
〳〶〶
〳〷〰
〳〷〲
〳〷〴
〳〷〴
〳〷〷
〳〷〷
〳〷〷
〳〷〷
〳〸〳
〳〸〳
〳〸〶

第〱〲章 外部インターフェイス〱〲〮〱 はじめに 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〲〮〲 汎用リクエスト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〲〮〲〮〱 例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〲〮〳 情報とステータスの関連付け 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〲〮〴 きぐぉとスレッド 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〲〮〴〮〱 全般 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〲〮〴〮〲 明確化 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〲〮〴〮〳 初期化 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〳〸〹
〳〸〹
〳〸〹
〳〹〴
〳〹〶
〳〹〷
〳〹〷
〳〹〹
〴〰〱

へどどど

第〱〳章 入出力〱〳〮〱 はじめに 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〱〮〱 定義 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲 ファイル操作 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲〮〱 ファイルを開く 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲〮〲 ファイルを閉じる 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲〮〳 ファイルの削除 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲〮〴 ファイルのサイズ変更 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲〮〵 ファイルの領域の事前アロケート 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲〮〶 ファイルのサイズの問い合わせ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲〮〷 ファイルパラメータの問い合わせ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲〮〸 ファイルのどのては 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮予約されたファイルのヒント 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〳 ファイルのビュー 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〴 データアクセス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〴〮〱 データアクセスルーチン 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮位置付け 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮同期 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮協調 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮データアクセスのルール 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〴〮〲 明示的なオフセットを使用したデータアクセス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〴〮〳 個別ファイルポインタを使用したデータアクセス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〴〮〴 共有ファイルポインタを使用したデータアクセス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮非集団操作 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮集団操作 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮シーク 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〴〮〵 スプリット集団データアクセスルーチン 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〵 ファイルの相互運用性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〵〮〱 ファイルの相互運用性のためのデータ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〵〮〲 外部のデータ表現：ぜづへぴづひのちぬ〳〲〢 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〵〮〳 ユーザ定義のデータ表現 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮範囲のコールバック 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮いちぴちひづば変換関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〵〮〴 データ表現の対応付け 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶 一貫性と意味論 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶〮〱 ファイルの一貫性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶〮〲 ランダムアクセスと逐次ファイル 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶〮〳 プログレス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶〮〴 集団的ファイル操作 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶〮〵 型の一致 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮
へどぶ

〴〰〵
〴〰〵
〴〰〵
〴〰〸
〴〰〸
〴〱〱
〴〱〱
〴〱〲
〴〱〳
〴〱〳
〴〱〴
〴〱〵
〴〱〶
〴〱〹
〴〲〲
〴〲〲
〴〲〲
〴〲〳
〴〲〴
〴〲〴
〴〲〵
〴〲〸
〴〳〳
〴〳〴
〴〳〶
〴〳〷
〴〳〹
〴〴〴
〴〴〷
〴〴〸
〴〴〹
〴〵〱
〴〵〲
〴〵〴
〴〵〵
〴〵〵
〴〵〸
〴〵〹
〴〵〹
〴〵〹

〱〳〮〶〮〶 その他の明確化 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶〮〷 きぐぉたく》びづぴ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶〮〸 論理的なファイル配置と物理的なファイル配置 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶〮〹 ファイルのサイズ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〶〮〱〰 例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮非同期入出力 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〷 入出力エラー処理 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〸 入出力エラークラス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〹 例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〹〮〱 スプリット集団入出力を使用したダブルバッファリング 〮 〮 〮 〮 〮 〮〱〳〮〹〮〲 部分配列ファイル型コンストラクタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〴〵〹
〴〶〰
〴〶〰
〴〶〰
〴〶〱
〴〶〴
〴〶〵
〴〶〶
〴〶〶
〴〶〶
〴〶〹

第〱〴章 プロファイリングインターフェイス〱〴〮〱 要求仕様 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〴〮〲 考察 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〴〮〳 設計の論理 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〴〮〳〮〱 プロファイリングの各種制御 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〴〮〴 例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〴〮〴〮〱 プロファイラの実装 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〴〮〴〮〲 きぐぉライブラリの実装 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぷづちにシンボルのあるシステム 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぷづちにシンボルのないシステム 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〴〮〴〮〳 厄介な問題 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮多重カウント 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮リンカの奇妙なところ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〴〮〵 複数レベルの捕捉 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〴〷〱
〴〷〱
〴〷〲
〴〷〲
〴〷〳
〴〷〴
〴〷〴
〴〷〴
〴〷〴
〴〷〵
〴〷〵
〴〷〵
〴〷〶
〴〷〶

第〱〵章 廃止された関数〱〵〮〱 きぐぉ〭〲〮〰から廃止された関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〵〮〲 きぐぉ〭〲〮〲から廃止された関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〴〷〹
〴〷〹
〴〸〵

第〱〶章 言語別の呼び出し形式〱〶〮〱 ぃ〫〫言語 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〱〮〱 概要 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〱〮〲 設計 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〱〮〳 きぐぉ用のぃ〫〫言語のクラス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〱〮〴 きぐぉのクラスメンバー関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〱〮〵 意味 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〱〮〶 ぃ〫〫言語のデータ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〱〮〷 コミュニケータ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〱〮〸 例外 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〴〸〷
〴〸〷
〴〸〷
〴〸〷
〴〸〸
〴〸〸
〴〸〹
〴〹〲
〴〹〵
〴〹〷

へぶ

〱〶〮〱〮〹 言語間の運用性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〱〮〱〰 プロファイリング 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〲 うはひぴひちの言語のサポート 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〲〮〱 概要 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〲〮〲 きぐぉでのうはひぴひちの言語の呼び出し形式の問題 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮強い型指定による問題 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮データのコピーおよび連続領域配置による問題 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮特別な定数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮うはひぴひちの 〹〰言語の派生型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮レジスタ最適化での問題 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〲〮〳 うはひぴひちの言語の基本サポート 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〲〮〴 うはひぴひちの言語の拡張サポート 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ねばどモジュール 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮型一致の問題のない選択型引数を持つサブルーチン 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〲〮〵 うはひぴひちの言語の基本数値型の追加サポート 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮指定の精度と指数範囲を持つパラメータデータ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮特定のサイズのきぐぉデータ型のサポート 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮サイズ指定型との通信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳 言語の相互運用性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〱 はじめに 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〲 前提 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〳 初期化 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〴 ハンドルの転送 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〵 ステータス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〶 きぐぉの不可視オブジェクト 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮データ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮コールバック関数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮エラーハンドラ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮リデュース操作 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮アドレス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〷 属性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〸 追加ステート 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〹 定数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳〮〱〰 言語間の通信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〴〹〷
〴〹〸
〵〰〱
〵〰〱
〵〰〲
〵〰〳
〵〰〴
〵〰〶
〵〰〶
〵〰〷
〵〰〹
〵〱〰
〵〱〰
〵〱〱
〵〱〱
〵〱〲
〵〱〶
〵〱〸
〵〱〹
〵〱〹
〵〲〰
〵〲〰
〵〲〱
〵〲〵
〵〲〶
〵〲〶
〵〲〷
〵〲〸
〵〲〸
〵〲〸
〵〲〹
〵〳〳
〵〳〳
〵〳〴

付録ぁ章 言語呼び出し形式要約ぁ〮〱 定義された値とハンドル 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〱〮〱 定義された定数 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〱〮〲 型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〱〮〳 プロトタイプ宣言 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〵〳〷
〵〳〷
〵〳〷
〵〵〲
〵〵〳

へぶど

ぁ〮〱〮〴 廃止されたプロトタイプ宣言 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〱〮〵 ぉのてはキー 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〱〮〶 ぉのては値 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲 ぃ言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〱 〱対〱通信 ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〲 データ型 ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〳 集団的通信 ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〴 グループ，コンテクスト，コミュニケータ，キャッシング ぃ 言語
呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〵 プロセストポロジー ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〶 きぐぉ環境管理 ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〷 ぉのてはオブジェクト ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〸 プロセスの生成と管理 ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〹 片方向通信 ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〱〰 外部インターフェイス ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〱〱 入出力 ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〱〲 言語呼び出し形式 ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〱〳 プロファイルインターフェイス ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〲〮〱〴 廃止された ぃ 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳 うはひぴひちの言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〱 〱対〱通信 うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〲 データ型 うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〳 集団的通信 うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〴 グループ，コンテクスト，コミュニケータ，キャッシング うはひぴひちの言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〵 プロセストポロジー うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〶 きぐぉ環境管理 うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〷 ぉのてはオブジェクト うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〸 プロセスの生成と管理 うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〹 片方向通信 うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〱〰 外部インターフェイス うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〱〱 入出力 うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〱〲 言語呼び出し形式 うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〳〮〱〳 プロファイルインターフェイス うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮ぁ〮〳〮〱〴 廃止された うはひぴひちの 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴 ぃ〫〫言語呼び出し形式（廃止された） 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱 〱対〱通信 ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〲 データ型 ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〳 集団的通信 ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

へぶどど

〵〵〶
〵〵〷
〵〵〸
〵〵〹
〵〵〹
〵〶〰
〵〶〱
〵〶〲
〵〶〴
〵〶〵
〵〶〵
〵〶〶
〵〶〶
〵〶〷
〵〶〷
〵〶〹
〵〶〹
〵〶〹
〵〷〱
〵〷〱
〵〷〳
〵〷〵
〵〷〶
〵〷〹
〵〸〱
〵〸〲
〵〸〲
〵〸〳
〵〸〴
〵〸〵
〵〸〸
〵〸〸
〵〸〸
〵〹〰
〵〹〰
〵〹〳
〵〹〵

ぁ〮〴〮〴 グループ，コンテクスト，コミュニケータ，キャッシング ぃ〫〫 言
語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〵 プロセストポロジー ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〶 きぐぉ環境管理 ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〷 ぉのてはオブジェクト ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〸 プロセスの生成と管理 ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〹 片方向通信 ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱〰 外部インターフェイス ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱〱 入出力 ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱〲 言語呼び出し形式 ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱〳 プロファイルインターフェイス ぃ〫〫 言語呼び出し形式 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱〴 全てのきぐぉクラスにおける ぃ〫〫言語呼び出し形式 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱〵 コンストラクション／デストラクション 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱〶 複製／割当て 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱〷 比較 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぁ〮〴〮〱〸 言語間操作性 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〵〹〷
〶〰〱
〶〰〳
〶〰〵
〶〰〵
〶〰〶
〶〰〷
〶〰〸
〶〱〳
〶〱〳
〶〱〴
〶〱〴
〶〱〴
〶〱〴
〶〱〵

付録あ章 変更履歴
あ〮〱 〲〮〱から〲〮〲への変更点 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮あ〮〲 〲〮〰から〲〮〱への変更点 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〶〱〷
〶〱〷
〶〲〰

参考文献

〶〲〷

例の索引

〶〳〱

きぐぉ定数と定義済みハンドルの索引〶〳〵

きぐぉ宣言の索引〶〴〳

きぐぉコールバック関数プロトタイプの索引〶〴〵

きぐぉ関数の索引

〶〴〶

へぶどどど

図目次
〵〮〱 集団的通信の概要 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〲 グループ間コミュニケータのオールギャザー 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〳 グループ間コミュニケータのリデューススキャッタ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〴 ギャザーの例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〵 ぇちぴとづひぶ のストライドの例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〶 でちぴとづひぶ の例，〲次元 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〷 でちぴとづひぶ の例，〲次元，異なるサイズの部分配列 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〸 でちぴとづひぶ の例，〲次元，異なるサイズの部分配列とストライド 〮 〮 〮 〮 〮 〮 〮 〮〵〮〹 びっちぴぴづひ の例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〰 びっちぴぴづひぶ のストライドの例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〱 異なったストライドと数の びっちぴぴづひぶ の例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〵〮〱〲 〱対〱と集団的通信の競合状態 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〱〴〲
〱〴〶
〱〴〷
〱〵〳
〱〵〴
〱〵〵
〱〵〶
〱〵〷
〱〶〲
〱〶〲
〱〶〳
〱〹〵

〶〮〱
〶〮〲
〶〮〳
〶〮〴

きぐぉたぃくききたぃげぅぁごぅでグループ間コミュニケータを作成 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮グループ間コミュニケータをきぐぉたぃくききたこぐがぉごで分割 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳グループでのパイプライン 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳グループでのリング 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〲〱〵
〲〱〷
〲〳〲
〲〳〳

〷〮〱

〲次元並列ポアソンソルバーのプロセス構造のセットアップ 〮 〮 〮 〮 〮 〮 〮 〮 〮〲〸〰

〱〱〮〱 アクティブターゲット通信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〲 弱い同期のアクティブターゲット通信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〳 パッシブターゲット通信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〴 数プロセスでのアクティブターゲット通信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〵 ウィンドウの概要図 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〶 対称な通信 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〷 デッドロックする場面 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〱〮〸 デッドロックなし 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〳〶〲
〳〶〳
〳〶〴
〳〶〸
〳〷〸
〳〸〴
〳〸〵
〳〸〵

〱〳〮〱 づぴべばづびとファイル型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲 並列プロセス間のファイルの分割 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〳 変位 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〴 配列のファイルの配置例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〴〰〶
〴〰〷
〴〲〰
〴〶〹

へどへ

〱〳〮〵 プロセス〱のローカル配列のファイル型の例 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

へへ

〴〶〹

表目次
〲〮〱

廃止された構成物 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〲〱

〳〮〱
〳〮〲
〳〮〳
〳〮〴

うはひぴひちの言語のデータ型に対応する定義済みのきぐぉのデータ型 〮 〮 〮 〮 〮 〮 〮ぃ言語のデータ型に対応する定義済みのきぐぉのデータ型 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮ぃ言語およびうはひぴひちの言語のデータ型に対応する定義済みのきぐぉのデータ型
ぃ〫〫言語のデータ型に対応する定義済みのきぐぉのデータ型 〮 〮 〮 〮 〮 〮 〮 〮

〳〳
〳〴
〳〵
〳〵

〴〮〱

きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅから返されるっはねぢどのづひ値 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〱〱〸

〶〮〱

（グループ間コミュニケータモードでの）きぐぉたぃくききた〪関数の振る舞い

〲〲〸

〸〮〱
〸〮〲

エラークラス（第〱部） 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮エラークラス（第〲部） 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〲〹〴
〲〹〵

〱〱〮〱 片方向通信ルーチンのエラークラス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〳〷〷〱〳〮〱 データアクセスルーチン 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〲 ぜづへぴづひのちぬ〳〲〢の定義済みのデータ型のサイズ 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮〱〳〮〳 入出力エラークラス 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〴〲〲
〴〵〰
〴〶〷

〱〶〮〱 きぐぉぃ言語およびぃ〫〫言語の定義済みのデータ型のためのぃ〫〫言語の名前〱〶〮〲 うはひぴひちの言語の定義済みのデータ型のためのぃ〫〫言語の名前 〮 〮 〮 〮 〮 〮 〮 〮〱〶〮〳 その他のきぐぉのデータ型のためのぃ〫〫言語の名前 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮

〴〹〲
〴〹〳
〴〹〳

へへど

〱
〲

謝辞

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

本書はきぐぉ うはひふねの委員を務めた多数の人の貢献により生まれたものである．この会
議には世界各地から多数が参加した．きぐぉ標準はこのグループの熱心で献身的な作業の結晶である．
技術的な開発はサブグループによって行われ，その内容は委員会全体で再検討された．
きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ（きぐぉ）の開発期間中，この尽力を多数の人々が支援した．
以下にきぐぉ〭〱〮〰およびきぐぉ〭〱〮〱の取りまとめの中心的な役割を果たした人員を示す．

〱〳〱〴• おちっに いはのでちひひち〬 いちぶどつ しちぬにづひ〬 ぃはのぶづのづひび ちのつ きづづぴどので ぃとちどひび〱〵〱〶• ぅぷどので がふびに〬 あはぢ かのどでとぴづの〬 きどのふぴづび

〱〷
〱〸
〱〹
〲〰
〲〱

• きちひっ このどひ〬 しどぬぬどちね ぇひはばば〬 ぅぷどので がふびに〬 ぐはどのぴ〭ぴは〭ぐはどのぴ ぃはねねふのどっちぴどはの• ぁぬ ぇづどびぴ〬 きちひっ このどひ〬 こぴづぶづ くぴぴは〬 ぃはぬぬづっぴどぶづ ぃはねねふのどっちぴどはの• こぴづぶづ くぴぴは〬 ぅつどぴはひ〲〲〲〳• げはぬて えづねばづぬ〬 ぐひはっづびび ごはばはぬはでどづび〲〴〲〵• ぅぷどので がふびに〬 がちのでふちでづ あどのつどので〲〶〲〷• しどぬぬどちね ぇひはばば〬 ぅのぶどひはのねづのぴちぬ きちのちでづねづのぴ〲〸〲〹• おちねづび ぃはぷのどづ〬 ぐひは「ぬどので

〳〰
〳〱
〳〲

• ごはのべ こになづぬぬふね〬 がべのつはの ぃぬちひにづ〬 きちひっ このどひ〬 げどっとちひつ がどぴぴぬづ「づぬつ〬 きちひに こづちひび〬 ぇひはふばび〬
ぃはのぴづへぴび〬 ちのつ ぃはねねふのどっちぴはひび〳〳〳〴• こぴづぶづの えふびび〭がづつづひねちの〬 ぉのどぴどちぬ ぉねばぬづねづのぴちぴどはの こふぢびづぴ

〳〵
〳〶
〳〷

上述した人以外で，きぐぉ〭〱〮〰およびきぐぉ〭〱〮〱の活動に積極的に参加した人々の一部を以
下に示す．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

へへどど

ぅつ ぁのつづひびはの
こっはぴぴ あづひひべねちの
おどね うづづのづべ
いちのどづぬ うひべづ
がづびぬどづ えちひぴ
ぁぬづへ えはおちねづび かはとぬ
ぐづぴづひ きちつちねび
ぃとちひぬづび きはびとづひ
ぐちふぬ ぐどづひっづぅひどっと こっとどにふぴち
げはぢづひぴ ぇ〮 ざはどでぴげはぢづひぴ あちぢぢ
げはぢ あなはひのびはのざどのっづ うづひのちのつはぉちの ぇぬづのつどののどのでごはね えちふばぴぃ〮ご〮 えはぷちひつ えは
こふびちの かひちふびび
ぁぬちの きちどのぷちひどので
いちの ぎづびびづぴぴ
こちのなちべ げちのにちぁねぢふな こどのでといづののどび しづづにび

おはづ あちひはのぎちぴとちの いはびび
こちね うどのづぢづひでぁつちね ぇひづづのぢづひで
いはの えづぬぬづひ
ぇちひべ えはぷづぬぬ
あはぢ がづちひべ
くぬどぶづひ きっあひべちのぐづぴづひ ぐちっとづっは
ぐづぴづひ げどでびぢづづ
ぁぬちの こふびびねちの
こぴづばとづの しとづちぴぅひどっ あちひびぺっぺ
ぁののづ ぅぬびぴづひ
おはの うぬはぷづひ
げはぢづひぴ えちひひどびはの
ごはね えづのつづひびはの
おはとの かちばづのでち
ぁひぴとふひ きちっっちぢづ
ぐとどぬ きっかどのぬづべ
えはぷちひつ ぐちぬねづひ
ぁひっと げはぢどびはのげはぢづひぴ ごはねぬどのびはの
こぴづぶづ ずづのどぴと

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

ごづののづびびづづ大学とくちに げどつでづ国立研究所は，ちのはのべねはふび うごぐメールサーバによるドラフ
トの公開を行い，当文書の配布の手段を提供した．
きぐぉ〭〱標準の作業は部分的にぁげぐぁおよびぎこう の助成ぁこぃ〭〹〳〱〰〳〳〰，アメリカ国立科学財団（ぎこう）の科学技術センター協力合意ぎは〮 ぃぃげ〭〸〸〰〹〶〱〵，欧州共同体委員会のぅびばひどぴプロジェクトぐ〶〶〴〳（ぐぐぐぅ）の支援を受けた．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

MPI-1.2 および MPI-2.0:〲〵〲〶

以下にきぐぉ〭〱〮〲およびきぐぉ〭〲〮〰の取りまとめの中心的な役割を果たした人員を示す．

〲〷〲〸• ぅぷどので がふびに〬 ぃはのぶづのづひ ちのつ きづづぴどので ぃとちどひ〲〹〳〰

• こぴづぶづ えふびび〭がづつづひねちの〬 ぅつどぴはひ〳〱〳〲• ぅぷどので がふびに〬 きどびっづぬぬちのべ〳〳〳〴• あどぬぬ こちばとどひ〬 ぐひはっづびび ぃひづちぴどはの ちのつ きちのちでづねづのぴ• きちひっ このどひ〬 くのづ〭こどつづつ ぃはねねふのどっちぴどはのび• あどぬぬ ぇひはばば ちのつ ぁのぴとはのべ こになづぬぬふね〬 ぅへぴづのつづつ ぃはぬぬづっぴどぶづ くばづひちぴどはのび• こぴづぶづ えふびび〭がづつづひねちの〬 ぅへぴづひのちぬ ぉのぴづひてちっづび

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

• あどぬぬ ぎどぴぺぢづひで〬 ぉ〯く〴〲〴〳• ぁのつひづぷ がふねびつちどのづ〬 あどぬぬ こちばとどひ〬 ちのつ おづ》 こぱふべひづび〬 がちのでふちでづ あどのつどのでび〴〴〴〵• ぁのぴとはのべ こになづぬぬふね ちのつ ぁひにちつべ かちのづぶびにべ〬 げづちぬ〭ごどねづ

〴〶
〴〷
〴〸

へへどどど

〱

上述した人以外で，きぐぉ〭〲 うはひふねの会議に積極的に参加した人々の一部を示す．

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

ぇひづで ぁびぴてちぬに
ぐづぴづ あひちつぬづべぅひどっ あひふののづひ
すどので ぃとづのがべのつはの ぃぬちひにづずとづのぱどちの ぃふど
おふつどぴと いづぶちのづべ
ごづひひべ いはのぴなづ
かちひぬ うづどのつぉちの うはびぴづひ
げはぢづひぴ ぇづはひでづがづびぬどづ えちひぴ
ぁぬづへ えはかちひぬ かづびびづぬねちの
こぴづぶづ がちのつとづひひがぬはべつ がづぷどのび
おはとの きちべ
ごとはね きっきちとはのげはの くぬつ「づぬつすははのとは ぐちひに
ぐちふぬ ぐどづひっづ
おちねづび ぐひふべぶづ
ごはね げはぢづべぅひどっ こちぬはうひづつ ことどひぬづべ
いちぶどつ ごちべぬはひ
きちひべつづぬぬ ごとはぬぢふひの
いちぶどつ しちぬにづひ
いちぶづ しひどでとぴ

げはぢづひぴ あちぢぢぅつ あづのびはの
ぐづぴづひ あひづののちのげはの あひどでとぴぷづぬぬぇひづで あふひのび
きちひでちひづぴ ぃちとどひ
ぁぬぢづひぴ ぃとづのですはので ぃとは
がちふひどづ ぃはびぴづぬぬは
いづののどび ぃはぴぴづぬ
こふひづびと いちねはつちひちの〭かちねちぬ
いちぶどつ いどぎふっっど
いはふで いはづ」づひ
ぎちぴとちの いはびびぁののづ ぅぬびぴづひ
こちね うどのづぢづひでぃひちどで うどびっとぢづひでえふぢづひぴふび うひちのにづげどっとちひつ うひはびぴ
いちぶどつ ぇひづづのぢづひで
おはとの えちでづつはひの
ことちのづ えづぢづひぴ
げはぬて えづねばづぬ
えちのび〭ぃとひどびぴどちの えはばばづ おはづてはの おちののかはどっとど かはのどびとど
こふびちの かひちふび
きちひどは がちふひどち
きちひに がちぷ
ずどべちので がふ
あはぢ きちつちとちひ
くぬどぶづひ きっあひべちの
あひどちの きっぃちのつぬづびび
えちひどびと ぎちでぎどっに ぎづぶどの
ぐづぴづひ くびびちつのどに
こぴづぶづ くぴぴは
ぐづひひべ ぐちひぴはぷ
ぐひちぴちば ぐちぴぴのちどにえづどつど ぐはへはの
おづちの〭ぐどづひひづ ぐひはびぴ
げはぬて げちぢづのびづどてのづひ
おはづ げどづにづのぁののち げはふのぢづとぬづひ
ぎはぢふぴはびとど こちでちぷち
いちひひづの こちのつづひびぅひどっ ことちひちにちのがちのっづ ことふぬづひぁ〮 ぇはひつはの こねどぴと
こぴづばとづの ごちべぬはひぇひづで ごづのびち
いどっに ごひづふねちのの
こどねはの ごびちのでおづひひづぬぬ しちぴぴび
かぬちふび しはぬて

げちなづびと あはひつちぷづにちひ
きちっどづな あひはつはぷどっぺ
ぐちので ぃとづの
おはづぬ ぃぬちひに
おどね ぃはぷのどづ
げちなち いちはふつおちっに いはのでちひひち
きちひに うちぬぬはの
こぴづばとづの うぬづどびっとねちの
ぁぬ ぇづどびぴ
かづど えちひちつち
ごはね えづのつづひびはの
ごづひひべ おはのづび
こぴづぶづ かふぢどっち
おふちの がづはの
ぐづぴづひ きちつちねび
ごべっづ きっがちひぴべ
おちひづに ぎどづばぬはっとち
ぐづぴづひ ぐちっとづっはぅぬびどづ ぐどづひっづ
あはひどび ぐひはぴはばはばはぶ
ぐづぴづひ げどでびぢづづ
ぁひどのつちね こちとちぁのつひづぷ ことづひねちのぉちの こぴはっにつちぬづ
げちなづづぶ ごとちにふひ
きちのふづぬ さなちぬつはのぐちひにびはの しはので

〳〷
〳〸
〳〹

きぐぉ うはひふねは，電子メールを通して，または個人的に貴重な意見をいただいた人々にも謝意を表明する．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

以下の機関は，上記の人々がきぐぉ〭〲の活動に参加できるよう，時間や旅費の面で支援した．
ぁひではののづ ぎちぴどはのちぬ がちぢはひちぴはひべ
あはぬぴ〬 あづひちのづに〬 ちのつ ぎづぷねちのぃちぬどてはひのどち ぉのびぴどぴふぴづ はて ごづっとのはぬはでべ
ぃづのぴづひ てはひ ぃはねばふぴどので こっどづのっづび
へへどぶ

ぃはのぶづへ ぃはねばふぴづひ ぃはひばはひちぴどはのぃひちべ げづびづちひっと
いどでどぴちぬ ぅぱふどばねづのぴ ぃはひばはひちぴどはの
いはぬばとどの ぉのぴづひっはののづっぴ こはぬふぴどはのび〬 ぉのっ〮ぅつどのぢふひでと ぐちひちぬぬづぬ ぃはねばふぴどので ぃづのぴひづ
ぇづのづひちぬ ぅぬづっぴひどっ ぃはねばちのべ
ぇづひねちの ぎちぴどはのちぬ げづびづちひっと ぃづのぴづひ てはひ ぉのてはひねちぴどはの ごづっとのはぬはでべ
えづぷぬづぴぴ〭ぐちっにちひつ
えどぴちっとどえふでとづび ぁどひっひちてぴ ぃはねばちのべぉのぴづぬ ぃはひばはひちぴどはのぉのぴづひのちぴどはのちぬ あふびどのづびび きちっとどのづび
かとはひちぬ げづびづちひっと
がちぷひづのっづ がどぶづひねはひづ ぎちぴどはのちぬ がちぢはひちぴはひべ
がはび ぁぬちねはび ぎちぴどはのちぬ がちぢはひちぴはひべ
きぐぉ こはてぴぷちひづ ごづっとはぬはでべ〬 ぉのっ〮
きどびびどびびどばばど こぴちぴづ さのどぶづひびどぴべ
ぎぅぃ ぃはひばはひちぴどはの
ぎちぴどはのちぬ ぁづひはのちふぴどっび ちのつ こばちっづ ぁつねどのどびぴひちぴどはの
ぎちぴどはのちぬ ぅのづひでべ げづびづちひっと こっどづのぴど「っ ぃはねばふぴどので ぃづのぴづひ
ぎちぴどはのちぬ ぉのびぴどぴふぴづ はて こぴちのつちひつび ちのつ ごづっとのはぬはでべ
ぎちぴどはのちぬ くっづちのどっ ちのつ ぁぴねはびばとづひどっ ぁつねどのびぴひちぴどはの
くちに げどつでづ ぎちぴどはのちぬ がちぢはひちぴはひべ
くとどは こぴちぴづ さのどぶづひびどぴべ
ぐぁががぁこ ぇねぢえ
ぐちっど「っ ぎはひぴとぷづびぴ ぎちぴどはのちぬ がちぢはひちぴはひべ
ぐひちぴぴ 〦 しとどぴのづべ
こちの いどづでは こふばづひっはねばふぴづひ ぃづのぴづひ
こちのつづひび〬 ぁ がはっにとづづつ〭きちひぴどの ぃはねばちのべ
こちのつどち ぎちぴどはのちぬ がちぢはひちぴはひどづび
こっとぬふねぢづひでづひ
こっどづのぴど「っ ぃはねばふぴどので ぁびびはっどちぴづび〬 ぉのっ〮
こどぬどっはの ぇひちばとどっび ぉのっはひばはひちぴづつ
こにべ ぃはねばふぴづひび
こふの きどっひはびべびぴづねび ぃはねばふぴづひ ぃはひばはひちぴどはの
こべひちっふびづ さのどぶづひびどぴべ
ごとづ きぉごげぅ ぃはひばはひちぴどはのごとどのにどので きちっとどのづび ぃはひばはひちぴどはのさのどぴづつ こぴちぴづび ぎちぶべ
さのどぶづひびどぴべ はて ぃはぬはひちつは
へへぶ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

さのどぶづひびどぴべ はて いづのぶづひ
さのどぶづひびどぴべ はて えはふびぴはのさのどぶづひびどぴべ はて ぉぬぬどのはどび
さのどぶづひびどぴべ はて きちひべぬちのつ
さのどぶづひびどぴべ はて ぎはぴひづ いちねづ
さのどぶづひびどぴべ はて こちの うひちのびどびっは
さのどぶづひびどぴべ はて こぴふぴぴでちひぴ ぃはねばふぴどので ぃづのぴづひ
さのどぶづひびどぴべ はて しどびっはのびどの

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

きぐぉ〭〲は非常に厳しい予算の下で運営された（実際，最初の会合の案内が出された時
点では予算はまったくなかった）．多くの機関が，きぐぉ うはひふねのメンバーの活動や旅費を援助する形で，きぐぉ〭〲の活動を支援した．直接的な支援は，ぎこうおよびいぁげぐぁの米国学術関係者の旅費に関するぎこう契約ぃいぁ〭〹〱〱〵〴〲〸 と，ぅびばひどぴのヨーロッパ参加者のためのプロジェクトえぐぃ標準（〲〱〱〱〱）により行われた．

〱〸
〱〹
〲〰

MPI-1.3 および MPI-2.1:〲〱〲〲

統合された文書の編集とまとめ作業は以下の人員が行った．

〲〳〲〴• げどっとちひつ ぇひちとちね〬 ぃはのぶづのづひ ちのつ きづづぴどので ぃとちどひ

〲〵
〲〶
〲〷
〲〸
〲〹

• おちっに いはのでちひひち〬 こぴづづひどので ぃはねねどぴぴづづ• ぁぬ ぇづどびぴ〬 こぴづづひどので ぃはねねどぴぴづづ• あどぬぬ ぇひはばば〬 こぴづづひどので ぃはねねどぴぴづづ〳〰
〳〱• げちどのづひ かづぬぬづひ〬 きづひでづ はて きぐぉ〭〱〮〳〳〲〳〳• ぁのつひづぷ がふねびつちどのづ〬 こぴづづひどので ぃはねねどぴぴづづ

〳〴
〳〵
〳〶

• ぅぷどので がふびに〬 こぴづづひどので ぃはねねどぴぴづづ〬 きぐぉ〭〱〮〱〭ぅひひちぴち 〨くっぴ〮 〱〲〬 〱〹〹〸〩 きぐぉ〭〲〮〱〭ぅひひちぴち
あちぬぬはぴび 〱〬 〲 〨きちべ 〱〵〬 〲〰〰〲〩

〳〷
〳〸
〳〹

• げはぬて げちぢづのびづどてのづひ〬 こぴづづひどので ぃはねねどぴぴづづ〬 きづひでづ はて きぐぉ〭〲〮〱 ちのつ きぐぉ〭〲〮〱〭ぅひひちぴち あちぬぬはぴび〳〬 〴 〨〲〰〰〸〩

〴〰
〴〱
〴〲

きぐぉ〭〲〮〱の整合性を保つため，全章が再検討された．必要な修正は以下の人員が行っ
た．

〴〳
〴〴
〴〵
〴〶

• あどぬぬ ぇひはばば〬 うひはのぴねちぴぴづひ〬 ぉのぴひはつふっぴどはの〬 ちのつ あどぢぬどはでひちばとべ• げどっとちひつ ぇひちとちね〬 ぐはどのぴ〭ぴは〭ぐはどのぴ ぃはねねふのどっちぴどはの〴〷〴〸• ぁつちね きははつべ〬 ぃはぬぬづっぴどぶづ ぃはねねふのどっちぴどはの
へへぶど• げどっとちひつ ごひづふねちのの〬 ぇひはふばび〬 ぃはのぴづへぴび〬 ちのつ ぃはねねふのどっちぴはひび〱〲• おづびばづひ がちひびびはの ごひみち》〬 ぐひはっづびび ごはばはぬはでどづび〬 ぉのては〭くぢなづっぴ〬 ちのつ くのづ〭こどつづつ ぃはねねふのどっち〭
ぴどはのび

〳
〴
〵

• ぇづはひでづ あはびどぬっち〬 ぅのぶどひはのねづのぴちぬ きちのちでづねづのぴ〶〷• いちぶどつ こはぬぴ〬 ぐひはっづびび ぃひづちぴどはの ちのつ きちのちでづねづのぴ〸〹• あひはのどび げ〮 つづ こふばどのびにど〬 ぅへぴづひのちぬ ぉのぴづひてちっづび〬 ちのつ ぐひは「ぬどので〱〰
〱〱• げちなづづぶ ごとちにふひ〬 ぉ〯く〱〲• おづ》ひづべ き〮 こぱふべひづび〬 がちのでふちでづ あどのつどのでび ちのつ きぐぉ 〲〮〱 こづっひづぴちひべ• げはぬて げちぢづのびづどてのづひ〬 いづばひづっちぴづつ うふのっぴどはのび ちのつ ぁののづへ ぃとちのでづ〭がはで

〱〳
〱〴
〱〵
〱〶

• ぁぬづへちのつづひ こふばちぬはぶ ちのつ いづのどび ぎちではひのべ〬 ぁののづへ がちのでふちでづ あどのつどのでび〱〷〱〸

上述した人以外で，きぐぉ〭〲 うはひふねの会議に積極的に参加した人々，電子メールによる修正項目の協議に参加した人々の一部を示す．
ぐちぶちの あちぬちなど
げどっとちひつ あちひひづぴぴ
ぇどぬ あぬはっと
いちひどふび あふのぴどのちび
ごづひひべ いはのぴなづ
かちひぬ うづどのつ
いちぶどつ ぇどのではぬつ
げはぢづひぴ えちひひどびはの
ごはひびぴづの えはづ」づひ
きちぴぴとづぷ かははば
きどひはの がどぶのべぁぶのづづびと ぐちのぴぃひちどで げちびねふびびづの
ごはのべ こになづぬぬふね
おづびばづひ がちひびびはの ごひみち》

ぐふひふびとはぴとちね ざ〮 あちのでちぬはひづぃとひどびぴどちの あづぬぬ
げはの あひどでとぴぷづぬぬ
おはのちぴとちの ぃちひぴづひ
ぇちぢはひ いはぺびちぅつでちひ ぇちぢひどづぬ
いちぶづ ぇははつづぬぬ
ごとはねちび えづひちふぬぴ
おはびとふち えふひびづべ
けふどのっづべ かはぺどはぬ
かちののちの ぎちひちびどねとちの
こぴづぶづ ぐははぬづ
えふぢづひぴ げどぴぺつはひて
あひどちの こねどぴと
かづどぴと さのつづひぷははつ

あひどちの あちひひづぴぴ
げはぢづひぴ あぬちっにねはひづ
おづ》ひづべ あひはぷの
ぎちぴとちの いづあちひつづぬづぢづのぅつひどっ ぅぬぬどび
ぐちぴひどっに ぇづは》ひちべぅひづぺ えちぢち
こぴづぶづ えはつびはの
すちのの かちぬづねにちひどちの
こちねづづひ かふねちひきちひに ぐちでづぬ
えはぷちひつ ぐひどぴっとちひつげはぢ げはびび
ざどのはつ ごどばばちひちなふ

きぐぉ うはひふねは，電子メールを通して，または個人的に貴重な意見をいただいた人々にも謝意を表明する．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

以下の機関は，上記の人々がきぐぉ〭〲の活動に参加できるよう，時間や旅費の面で支援
した．

〴〴
〴〵
〴〶

ぁひではののづ ぎちぴどはのちぬ がちぢはひちぴはひべ
あふぬぬ

〴〷
〴〸

へへぶどど

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

ぃどびっは こべびぴづねび〬 ぉのっ〮ぃひちべ ぉのっ〮ごとづ えいう ぇひはふば
えづぷぬづぴぴ〭ぐちっにちひつぉあき ご〮お〮 しちぴびはの げづびづちひっとぉのつどちのち さのどぶづひびどぴべぉのびぴどぴふぴ ぎちぴどはのちぬ つづ げづっとづひっとづ づの ぉのてはひねちぴどぱふづ づぴ ぁふぴはねちぴどぱふづ 〨ぉぎげぉぁ〩ぉのぴづぬ ぃはひばはひちぴどはの
がちぷひづのっづ あづひにづぬづべ ぎちぴどはのちぬ がちぢはひちぴはひべ
がちぷひづのっづ がどぶづひねはひづ ぎちぴどはのちぬ がちぢはひちぴはひべ
がはび ぁぬちねはび ぎちぴどはのちぬ がちぢはひちぴはひべ
きちぴとぷはひにび
きづぬぬちのはへ ごづっとのはぬはでどづび
きどっひはびはてぴ
きべひどっはねぎぅぃ がちぢはひちぴはひどづび ぅふひはばづ〬 ぎぅぃ ぅふひはばづ がぴつ〮
くちに げどつでづ ぎちぴどはのちぬ がちぢはひちぴはひべ
くとどは こぴちぴづ さのどぶづひびどぴべ
ぐちっど「っ ぎはひぴとぷづびぴ ぎちぴどはのちぬ がちぢはひちぴはひべ
けがはでどっ ぃはひばはひちぴどはの
こちのつどち ぎちぴどはのちぬ がちぢはひちぴはひどづび
こどぃはひぴづへ
こどぬどっはの ぇひちばとどっび ぉのっはひばはひちぴづつ
こふの きどっひはびべびぴづねび〬 ぉのっ〮さのどぶづひびどぴべ はて ぁぬちぢちねち ちぴ あどひねどのでとちね
さのどぶづひびどぴべ はて えはふびぴはのさのどぶづひびどぴべ はて ぉぬぬどのはどび ちぴ さひぢちのち〭ぃとちねばちどでのさのどぶづひびどぴべ はて こぴふぴぴでちひぴ〬 えどでと ぐづひてはひねちのっづ ぃはねばふぴどので ぃづのぴづひ こぴふぴぴでちひぴ 〨えがげこ〩
さのどぶづひびどぴべ はて ごづののづびびづづ〬 かのはへぶどぬぬづ
さのどぶづひびどぴべ はて しどびっはのびどの

〳〷
〳〸
〳〹
〴〰
〴〱

きぐぉ うはひふねの会合の資金の一部は，アメリカ国立科学財団の賞金 〣ぃぃう〭〰〸〱〶〹〰〹によって支援された．
た，えいうグループが米国の研究者の旅費を援助した．

〴〲
〴〳
〴〴
〴〵
〴〶

MPI-2.2:
きぐぉ〭〲〮〲の整合性を保つため，全章が再検討された．必要な修正は以下の人員が行った〴〷〴〸• しどぬぬどちね ぇひはばば〬 うひはのぴねちぴぴづひ〬 ぉのぴひはつふっぴどはの〬 ちのつ あどぢぬどはでひちばとべ〻 きぐぉ 〲〮〲 っとちどひ〮へへぶどどど• げどっとちひつ ぇひちとちね〬 ぐはどのぴ〭ぴは〭ぐはどのぴ ぃはねねふのどっちぴどはの ちのつ いちぴちぴべばづび〱〲• ぁつちね きははつべ〬 ぃはぬぬづっぴどぶづ ぃはねねふのどっちぴどはの〳〴• ごはひびぴづの えはづ」づひ〬 ぃはぬぬづっぴどぶづ ぃはねねふのどっちぴどはの ちのつ ぐひはっづびび ごはばはぬはでどづび〵〶• げどっとちひつ ごひづふねちのの〬 ぇひはふばび〬 ぃはのぴづへぴび〬 ちのつ ぃはねねふのどっちぴはひび〷〸• おづびばづひ がちひびびはの ごひみち》〬 ぐひはっづびび ごはばはぬはでどづび〬 ぉのては〭くぢなづっぴ ちのつ くのづ〭こどつづつ ぃはねねふのどっちぴどはのび• ぇづはひでづ あはびどぬっち〬 いちぴちぴべばづび ちのつ ぅのぶどひはのねづのぴちぬ きちのちでづねづのぴ• いちぶどつ こはぬぴ〬 ぐひはっづびび ぃひづちぴどはの ちのつ きちのちでづねづのぴ

〹
〱〰
〱〱
〱〲
〱〳

• あひはのどび げ〮 つづ こふばどのびにど〬 ぅへぴづひのちぬ ぉのぴづひてちっづび〬 ちのつ ぐひは「ぬどので〱〴〱〵• げちなづづぶ ごとちにふひ〬 ぉ〯く〱〶〱〷• おづ》ひづべ き〮 こぱふべひづび〬 がちのでふちでづ あどのつどのでび ちのつ きぐぉ 〲〮〲 こづっひづぴちひべ〱〸〱〹• げはぬて げちぢづのびづどてのづひ〬 いづばひづっちぴづつ うふのっぴどはのび〬 ぁののづへ ぃとちのでづ〭がはで〬 ちのつ ぁののづへ がちのでふちでづ
あどのつどのでび〲〰
〲〱〲〲• ぁぬづへちのつづひ こふばちぬはぶ〬 ぁののづへ がちのでふちでづ あどのつどのでび〲〳〲〴

上述した人以外で，きぐぉ〭〲 うはひふねの会議に積極的に参加した人々，電子メールによる修正項目の協議に参加した人々の一部を示す．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

へへどへ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ぐちぶちの あちぬちなど
げどっとちひつ あちひひづぴぴ
ぇどぬ あぬはっとおづ》 あひはぷの
ぎちぴとちの いづあちひつづぬづぢづのぅつひどっ ぅぬぬどび
ぐちぴひどっに ぇづは》ひちべ
いちぶどつ ぇははつづぬぬ
ごとはねちび えづひちふぬぴ
おはびとふち えふひびづべ
えどつづべふにど おどぴびふねはぴは
げちのどづひ かづぬぬづひ
きちのはなにふねちひ かひどびとのちのぁのつひづぷ がふねびつちどのづ
ごどねはぴとべ ぉ〮 きちぴぴはへ
ぁぶのづづびと ぐちのぴぃひちどで げちびねふびびづの
きちひぴどの こっとふぬぺぃとひどびぴどちの こどづぢづひぴ
ぎちはにど こふづべちびふ
げはぬて ざちのつづぶちちひぴ

ぐふひふびとはぴとちね ざ〮 あちのでちぬはひづぃとひどびぴどちの あづぬぬ
げはの あひどでとぴぷづぬぬ
いちひどふび あふのぴどのちび
ごづひひべ いはのぴなづ
かちひぬ うづどのつ
おはとちのの ぇづはひでづぅひづぺ えちぢち
きちひっ〭ぁのつひ〓づ えづひねちののび
すふぴちにち ぉびとどにちぷち
ごづひひべ おはのづび
きちぴぴとづぷ かははば
こちねづづひ かふねちひきどちは がふは
かちののちの ぎちひちびどねとちの
こぴづぶづ ぐははぬづ
えふぢづひぴ げどぴぺつはひて
ぐちぶづぬ ことちねどび
ぁのぴとはのべ こになづぬぬふね
ざどのはつ ごどばばちひちなふぁぢとどのちぶ ざどびとのふ

あひどちの あちひひづぴぴ
げはぢづひぴ あぬちっにねはひづぇひづで あひはのづぶづぴびにべ
おはのちぴとちの ぃちひぴづひ
ぇちぢはひ いはぺびちぅつでちひ ぇちぢひどづぬ
いちぶどつ ぇどのではぬつ
げはぢづひぴ えちひひどびはの
こぴづぶづ えはつびはの
あどの おどち
すちのの かちぬづねにちひどちの
けふどのっづべ かはぺどはぬ
きどひはの がどぶのべぅぷどので がふびに
きちひに ぐちでづぬ
えはぷちひつ ぐひどぴっとちひつげはぢ げはびびぇちぬづの ことどばねちの
あひどちの こねどぴと
かづどぴと さのつづひぷははつ
しづどにふちの すふ

〲〶
〲〷
〲〸

きぐぉ うはひふねは，電子メールを通して，または個人的に貴重な意見をいただいた人々にも謝意を表明する．

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷

以下の機関は，上記の人々がきぐぉ〭〲〮〲の活動に参加できるよう，時間や旅費の面で支援した．
ぁひではののづ ぎちぴどはのちぬ がちぢはひちぴはひべ
ぁふぢふひの さのどぶづひびどぴべ
あふぬぬぃどびっは こべびぴづねび〬 ぉのっ〮ぃひちべ ぉのっ〮うはひびっとふのでびぺづのぴひふね おみ
ふぬどっと
うふなどぴびふ
ごとづ えいう ぇひはふば
えづぷぬづぴぴ〭ぐちっにちひつぉのぴづひのちぴどはのちぬ あふびどのづびび きちっとどのづびぉのつどちのち さのどぶづひびどぴべぉのびぴどぴふぴ ぎちぴどはのちぬ つづ げづっとづひっとづ づの ぉのてはひねちぴどぱふづ づぴ ぁふぴはねちぴどぱふづ 〨ぉぎげぉぁ〩ぉのびぴどぴふぴづ てはひ ぁつぶちのっづつ こっどづのっづ 〦 ぅのでどのづづひどので ぃはひばはひちぴどはの

〴〸

へへへ

ぉのぴづぬ ぃはひばはひちぴどはの
がちぷひづのっづ あづひにづぬづべ ぎちぴどはのちぬ がちぢはひちぴはひべ
がちぷひづのっづ がどぶづひねはひづ ぎちぴどはのちぬ がちぢはひちぴはひべ
がはび ぁぬちねはび ぎちぴどはのちぬ がちぢはひちぴはひべ
きちぴとぷはひにび
きづぬぬちのはへ ごづっとのはぬはでどづび
きどっひはびはてぴ
きべひどっはねぎぅぃ ぃはひばはひちぴどはの
くちに げどつでづ ぎちぴどはのちぬ がちぢはひちぴはひべ
くとどは こぴちぴづ さのどぶづひびどぴべ
ぐちっど「っ ぎはひぴとぷづびぴ ぎちぴどはのちぬ がちぢはひちぴはひべ
けがはでどっ ぃはひばはひちぴどはの
げふのごどねづ ぃはねばふぴどので こはぬふぴどはのび〬 ががぃ
こちのつどち ぎちぴどはのちぬ がちぢはひちぴはひどづび
こどぃはひぴづへ〬 ぉのっ〮
こどぬどっはの ぇひちばとどっび ぉのっ〮こふの きどっひはびべびぴづねび〬 ぉのっ〮ごはにべは ぉのびぴどぴふぴづ はて ごづっとのはぬはでべ
さのどぶづひびどぴべ はて ぁぬちぢちねち ちぴ あどひねどのでとちね
さのどぶづひびどぴべ はて えはふびぴはのさのどぶづひびどぴべ はて ぉぬぬどのはどび ちぴ さひぢちのち〭ぃとちねばちどでのさのどぶづひびどぴべ はて こぴふぴぴでちひぴ〬 えどでと ぐづひてはひねちのっづ ぃはねばふぴどので ぃづのぴづひ こぴふぴぴでちひぴ 〨えがげこ〩
さのどぶづひびどぴべ はて ごづののづびびづづ〬 かのはへぶどぬぬづ
さのどぶづひびどぴべ はて ごはにべは
さのどぶづひびどぴべ はて しどびっはのびどの

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

きぐぉ うはひふねの会合の資金の一部は，アメリカ国立科学財団の賞金 〣ぃぃう〭〰〸〱〶〹〰〹によって支援された．
また，えいうグループが米国の研究者の旅費を援助した．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

へへへど

〱
〲
〳
〴
〵

第1章

〶
〷
〸
〹
〱〰

MPIの概要

〱〱
〱〲
〱〳
〱〴
〱〵

1.1 概要と目標〱〶

メッセージ通信インターフェイス（きぐぉ：きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ）とは，メッセー
ジ通信ライブラリインターフェイスの仕様である．この定義の全ての部分が重要である．
第一に，きぐぉアドレスはメッセージ通信の並列プログラミングモデルで，データは各プ
ロセスの動作が共同して〱つのプロセスのアドレス空間から別のプロセスのアドレス空間に移動する．（従来のメッセージ通信モデルに集団操作，リモートメモリアクセス操作，
動的プロセス作成，並列入出力が追加されている．）きぐぉは実装ではなく仕様であるため，きぐぉには多数の実装方法がある．この仕様はライブラリインターフェイスのためのものであるため，きぐぉは言語ではなく，全てのきぐぉ操作は（ぃ言語，ぃ〫〫言語，うはひぴひちの〷〷言語，うはひぴひちの 〹〵言語の）きぐぉ標準の一部である適切な言語のビルドに従って関数，サブルーチン，メソッドとして表現される．この標準は並列計算ベンダー，コンピュータ
科学者，アプリケーション開発者のコミュニティによるオープンなプロセスを通して定義された．次のいくつかのセクションできぐぉ開発の歴史を概説する．
メッセージ通信の標準を確立することの主な利点は，可搬性が向上し，使いやすくなることである．下位レベルのメッセージ通信ルーチンの上に上位レベルの ルーチンやア
ブストラクションが構築される分散メモリ通信環境では，標準化の利点が特に明確となる．さらに，ここに提案するようなメッセージ通信の標準の定義は，効率的な実装が可能な，明確に定義された ルーチンの基本セットをベンダーに提供し，場合によってはハードウェアのサポートを提供するため，スケーラビリティを向上させることができる．
簡潔に記述されたきぐぉの目標は，メッセージ通信プログラムを記述するための広く使用される標準を開発することである．そのため，インターフェイスではメッセージ通信のための実践的で，効率的で，可搬性と柔軟性に優れた標準を確立する必要がある．
全ての目標のリストを以下に示す．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

• アプリケーションプログラムのインターフェイスを設計する．（コンパイラやシス
テム 実装ライブラリ用とは限らない）

〴〵
〴〶
〴〷
〴〸

〱

第 〱〮 乍乐义の概要〲〱〲• 効率のよい通信を可能にする．メモリ間コピーを避け，計算と通信を並行して進めることができ，通信コプロセッサがあれば処理の一部をそれに任せるようなもの．

〳〴• 異種間環境でも使用できる処理系に備える．

〵〶〷• ぃ言語，ぃ〫〫言語，うはひぴひちの 〷〷言語，うはひぴひちの 〹〵言語のための使い易い呼び出し形式を可能にする．

〸〹〱〰

• 信頼できる通信インターフェイスを想定する．ユーザは通信障害に対処する必要がない．そのような障害は下位の通信サブシステムが処理する．

〱〱
〱〲
〱〳

• 多くのベンダーのプラットフォーム上に実装でき，その際，下位の通信およびシス
テムソフトウェアに大きな変更を加えずに済むインターフェイスを定義する．

〱〴〱〵• このインターフェイスの意味は言語に依存しないようにする．

〱〶〱〷• このインターフェイスは，マルチスレッド環境への対応が可能なように設計する．

〱〸
〱〹
〲〰

1.2 MPI-1.0の背景

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉ の設計に際しては，いくつかの既存のメッセージ通信システムが持つもっとも魅力的な機能の数々を採りいれるよう努めた． 既存のシステムの中から〱 つを選択し，それを標準として採用するというやり方は採らなかった． きぐぉ は， ぉあきのご〮お〮 しちぴびはの げづびづちひっと ぃづのぴづひ文 献せ〱〬 〲そで の 研 究 や， ぉのぴづぬのぎじ〯〲おせ〳〸そ， ぅへばひづびび文 献せ〱〲そ，のぃさあぅの ざづひぴづへせ〳〴そ，ば〴せ〷〬 〸そ， ぐぁげきぁぃこせ〵〬 〹そから多大な影響を受けてきた． 他に，
ずどばっはつづせ〴〰〬 〴〱そ，ぃとどねばせ〱〶〬 〱〷そ， ぐざきせ〴〬 〱〴そ，ぃとちねづぬづはのせ〲〵そ， ぐぉぃがせ〲〴そなどからも重要な貢献があった．
きぐぉ の標準化の事業には，主に米国，ヨーロッパの〴〰の組織から約〶〰人が参加した．
並列コンピュータの主要なベンダーのほとんどがきぐぉ に参加し，大学，国立研究所，そして企業からの研究者もこれに加わった． 標準化の作業が始まったのは，「分散メモリ環境におけるメッセージ通信のための標準に関するワークショップせ〴〸そしはひにびとはば はの
こぴちのつちひつび てはひ きづびびちでづ〭ぐちびびどので どの ち いどびぴひどぢふぴづつ きづねはひべ ぅのぶどひはのねづのぴ）」においてである．
このワークショップは〱〹〹〲年〴月〲〰日～〳〰日，米ざどひでどのどち州 しどぬぬどちねびぢふひでで「並列コンピューティング研究センター」（ぃづのぴづひ てはひ げづびづちひっと はの ぐちひちぬぬづぬ ぃはねばふぴどので）の主催により開催された．このワークショップにおいて，標準的なメッセージ通信インターフェイスの中心となる基本機能が討議され，標準化のプロセスを継続するため，ワーキンググループが設立された．
〱〹〹〲年〱〱月に，いはのでちひひち，えづねばづぬ，えづべ，しちぬにづひにより，MPI1として知られる予備的な草案が提示され，修正版が〱〹〹〳年〴月に完成したせ〱〵そ．きぐぉ〱には，しどぬぬどちねびぢふひでのワ
ークショップにおいて，メッセージ通信標準に必要と指摘された主要な機能が具体化されていた．きぐぉ〱はもともと，論議を促進するためのたたき台だったので，主に〱対〱通信に焦点を当てている．きぐぉ〱は，標準化における多くの重要な課題を明らかにしたが，こ〱〮〳〮 乍乐义中丱丮丱〬 乍乐义中丱丮串〬 および 乍乐义中串丮丰の背景〳

れには集団通信ルーチンは含まれておらず，またマルチスレッド環境には対応していなかった．
〱〹〹〲年〱〱月に，きぐぉ ワーキンググループのミーティングがきどののづちばはぬどびで開かれ，そこで標準化をより形式に則ったプロセスにし，えどでと ぐづひてはひねちのっづ うはひぴひちの うはひふねの手順と組織構成をほぼそのまま採用することが決定された．標準の主要な構成分野ごとに小委員会が作られ，それぞれに電子メール討議サービスが設立された．さらに，〱〹〹〳年秋までにきぐぉ標準の草案を作成するという目標が設定された．この目標を達成するため，
きぐぉワーキンググループは， 〱〹〹〳年の最初の〹カ月間，〶週間ごとに〲日間の会合を開き，〱〹〹〳年〱〱月の会議できぐぉ標準の草案を発表するに至った．これらの会合と電子メールによる議論がきぐぉフォーラムを構成したものであり，その会員資格はハイパフォーマンス
コンピューティングに関わる全ての人に対して常に開放されていた．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

1.3 MPI-1.1, MPI-1.2, および MPI-2.0の背景〱〶〱〷〱〹〹〵年〳月から，きぐぉフォーラムは最初のきぐぉ標準の文書に対する修正と機能強化を協議するための会合を開始した せ〲〱そ．これらの協議の最初の成果がきぐぉ仕様のバージョン〱〮〱となり，〱〹〹〵年〶月にリリースされたせ〲〲そ（正式なきぐぉ 文書のリリースについて
はとぴぴば〺〯〯ぷぷぷ〮ねばど〭てはひふね〮はひでを参照）．その時点で，次の〵つの点が活動の中心となった．
〱〮 きぐぉ〭〱〮〱 文書のためのさらなる修正と明確化

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

〲〮 機能のタイプに大きな変化のないきぐぉ〭〱〮〱 への追加事項（新しいデータ型のコンス
トラクタ，言語の相互運用性など）〲〶〳〮 「きぐぉ〭〲の機能」と考えられるまったく新しいタイプの機能（動的プロセス，単方向通信，並列入出力など）〲〹〴〮 うはひぴひちの 〹〰言 語 お よ びぃ〫〫言 語 の た め の 呼 び 出 し 形 式． きぐぉ〭〲で は きぐぉ〭〱 お よびきぐぉ〭〲 機能のためのぃ〫〫言語の呼び出し形式が指定され， うはひぴひちの 〹〰言語の問題に対処するための，きぐぉ〭〱 およびきぐぉ〭〲 機能のためのうはひぴひちの 〷〷言語の呼び出し形
式の機能強化が指定されている．

〳〲

〲〷
〲〸

〳〰
〳〱

〳〳
〳〴
〳〵
〳〶
〳〷

〵〮 きぐぉ プロセスおよびフレームワークが有益であると考えられるが，標準化の前にさらなる協議と経験が必要な領域の協議（共有メモリマシンのゼロコピーの意味，リ
アルタイムの仕様など）

〳〸
〳〹
〴〰
〴〱

修正点と明確化された内容（上記のリストの〱に該当する項目）は，きぐぉ〭〲文書の第〳章「きぐぉ第〱〮〲版」に記載されている．この章には，バージョン番号を特定するための関数も記載されている． きぐぉ〭〱〮〱 への追加事項（上記のリストの〲，〳，〴に該当する項目）
はきぐぉ〭〲 文書の残りの章に記載され，きぐぉ〭〲の仕様を構成している．上記のリストの〵に該当する項目は別の文書ぜきぐぉ おはふひのちぬ はて いづぶづぬはばねづのぴ〢 おくい）に移されており，きぐぉ〭〲標準の記載からは外されている．

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〮 乍乐义の概要

〴
〱
〲
〳
〴
〵
〶
〷
〸

この構成により，利用者や実装者は特定の実装において準拠すべききぐぉ のレベルを理解しやすくなっている．
• きぐぉ〭〱の準拠とは，きぐぉ〭〱〮〳への準拠を意味する．これは準拠の有益なレベルである．これは，きぐぉ〭〲文書の第〳章に記載されたきぐぉ〭〱〮〱関数の動作の明確化に準拠して実装することを意味する．実装の一部で， きぐぉ〭〲〮〱 に準拠するよう変更する必要がある場合がある．

〹〱〰

• きぐぉ〭〲の準拠とは，きぐぉ〭〲〮〱 の全てへの準拠を意味する．

〱〱〱〲• ぜきぐぉ おはふひのちぬ はて いづぶづぬはばねづのぴ〢はきぐぉ標準から独立したものである．

〱〳
〱〴
〱〵
〱〶

前方互換性が保たれていることは強調されなければならない．つまり，正しい きぐぉ〭〱〮〱プログラムは，きぐぉ〭〱〮〳 でも きぐぉ〭〲〮〱 でも正しく， きぐぉ〭〱〮〳 プログラムは きぐぉ〭〲〮〱 でも正しいプログラムである．

〱〷
〱〸
〱〹

1.4 MPI-1.3および MPI-2.1の背景

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉ〭〲〮〰のリリース後，きぐぉフォーラムは両方の標準の文書（きぐぉ〭〱〮〱およびきぐぉ〭〲〮〰）
に対する修正と明確化の作業を継続した．〱〹〹〸年〱〰月〱〲日に短い文書ぜぅひひちぴち てはひ きぐぉ〭〲〮〰〢がリリースされた．〲〰〰〱年〷月〵日にきぐぉ〭〲〮〰の修正と明確化の最初の項目一覧が公表され，〲番目の項目一覧のための投票は〲〰〰〲年〵月〲〲日に行われた．どちらの投票も電子による方法で行われた． 〲〰〰〲年〵月〱〵日に両方の項目一覧が〱つの文書ぜぅひひちぴち てはひきぐぉ〭〲〢にまとめられた．この修正プロセスはその後中断されたが，フォーラムと電子メールでの参加者は明確化の新しい要求に対して活動を継続した．
きぐぉフォーラムの定期的な活動はあはののでのぅふひはぐざき〯きぐぉ〧〰〶，ぐちひどびでの ぅふひはぐざき〯
きぐぉ〧〰〷，げづのはでのこぃ〧〰〷の〳つの会合で再開された．〲〰〰〷年〱〲月，運営委員会により新しいきぐぉフォーラムの会合の組織化が開始され，〸週間ごとに定期的に開かれることになった．〲〰〰〸年〱月〱〴～〱〶日にぃとどっちではで開かれた会合で，きぐぉフォーラムは各バージョンのきぐぉ標準について，既存のきぐぉ文書と今後のきぐぉ文書を統合して〱つの文書にすることを決定した． 技術的／歴史的経緯により，このシリーズはきぐぉ〭〱〮〳 から開始されることになった．追加の項目一覧〳および〴では，〱〹〹〵年に始まった修正リストの古い問題か
ら，昨年の修正リストの最新の問題までを解決している．全ての文書（きぐぉ〭〱〮〱，きぐぉ〭〲，ぅひひちぴち てはひ きぐぉ〭〱〮〱（〱〹〹〸年〱〰月〱〲日）， きぐぉ〭〲〮〱 あちぬぬはぴび 〱〭〴）が〱つの草稿に統合された
後，各章について，章の執筆者とレビューチームが定義された． 彼らはきぐぉ〭〲〮〱 文書の整合性が保証されるよう文書を完成させた．最終的なきぐぉ〭〲〮〱標準の文書は〲〰〰〸年〶月に完成され，ぅふひはぐざき〯きぐぉ〧〰〸の直前に， 〲〰〰〸年〹月のいふぢぬどのでの会合において〲回目の投票によりリリースされた．きぐぉフォーラムの現在の主な活動内容はきぐぉ〭〳の準備である．

〱〮〵〮 乍乐义中串丮串の背景〵

1.5 MPI-2.2の背景〱〲

きぐぉ〭〲〮〲はきぐぉ〭〲〮〱標準へのマイナーアップデートである．このバージョンでは，きぐぉ〭〲〮〱標準で未修正となっていた誤りやあいまいな点への対応のほか，以下の基準を満たすきぐぉ〭〲〮〱への少数の機能強化が行われた．
• 適切なきぐぉ〭〲〮〱のプログラムは適切なきぐぉ〭〲〮〲のプログラムでもある．
• 機能強化は利用者にとって大きな利点をもたらすものでなければならない．
• 機能強化は実装のために労力を要するものであってはならない．そのため，このよ
うな変更は全てオープンソースの実装によって行われなければならない．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

きぐぉ〭〲〮〲の協議はきぐぉ〭〳の協議と並行して行われ，きぐぉ〭〲〮〲のために提案された機能強化が後からきぐぉ〭〳に移行した場合もある．

〱〴
〱〵
〱〶
〱〷

1.6 この標準を利用する人々〱〸〱〹

この標準が意図する利用者は，可搬なメッセージ通信プログラムをうはひぴひちの言語，ぃ言語，ぃ〫〫言語で記述しようとする全ての人である．この中には，個々のアプリケーショ
ンのプログラマや，並列マシンで動作するよう設計されたソフトウェアの開発者，環境やツールの作成者を含む．この標準が，これらの広範囲に渡る人々にとって魅力的なものであるためには，初歩のユーザには簡単で使いやすいインターフェイスを提供する一方で，先進的マシンに備わる高性能のメッセージ通信操作を意味的に妨げないものでなければならない．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

1.7 この標準の実現対象となるプラットフォーム〳〰
〳〱

メッセージ通信パラダイムの魅力は，少なくとも部分的には，その広い可搬性から生じている．この方法で表現されたプログラムは，分散メモリのマルチプロセッサ，ワー
クステーションのネットワーク，そしてこれらの組み合わせの上でも動作しうる．さらに，マルチコアプロセッサ用，ハイブリッドアーキテクチャ用などの共有メモリによる実現も可能である．このパラダイムは，共有メモリと分散メモリの観点を組み合わせたアーキテクチャが出現しても，またネットワークが高速化しても時代遅れにはならない．
したがって，この標準を実装することが可能であり有用であるマシンの範囲は非常に広いはずであり，そこには通信ネットワークによって接続された他の（並列機か逐次機かを問わない）マシンの集まりで構成されるような「マシン群」まで含まれる．
このインターフェイスは，まったく一般的なきぉきいプログラムでの使用にも，より制限されたこぐきいのスタイルで書かれたプログラムでの使用にも同じように適している．きぐぉには，専用のプロセッサ間通信ハードウェアを備えるスケーラブルな並列コンピュータでの性能を高めることを狙いとした多くの機能がある．したがって，このようなマシンには高性能な専用きぐぉ処理系が提供されることが期待される．また一方では，

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〮 乍乐义の概要〶〱〲

さのどへプロセッサ間通信プロトコルを用いるきぐぉ処理系は，ワークステーションクラスタ
やワークステーションの異機種間ネットワークの間での可搬性を提供する．

〳〴〵

1.8 標準に含まれるもの〶〷

標準は以下の事項を含む．

〸〹• 〱対〱通信〱〰
〱〱• データ型〱〲〱〳• 集団操作

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

• プロセスグループ• 通信コンテクスト• プロセストポロジー• 環境管理と問い合わせ• ぉのてはオブジェクト〲〳〲〴• プロセスの作成と管理〲〵〲〶• 片方向通信

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

• 外部インターフェイス• 並列ファイル入出力• うはひぴひちの言語，ぃ言語，ぃ〫〫言語の呼び出し形式• プロファイリングインターフェイス

〳〴
〳〵
〳〶
〳〷
〳〸

1.9 標準に含まれないもの
標準は以下の事項を指定しない．

〳〹
〴〰
〴〱
〴〲
〴〳

• 現在標準となっているもの以上のオペレーティングシステムのサポートを必要とする操作．例えば割込駆動の受信，リモート実行，アクティブメッセージなど．
• プログラム構築ツール

〴〴
〴〵
〴〶
〴〷
〴〸

• デバッグ機能〱〮〱〰〮 この文書の構成〷考慮された結果，この標準には含まれなかった機能が多数ある．これはさまざまな理
由によるが，そのうちの〱つは，標準の仕上げに際してつきまとう時間的制約によるものである．含まれていない機能は，特定の実装により拡張機能としていつでも提供され得る．おそらくきぐぉの将来のバージョンでは，これらの事項のうちいくつかについて扱うことになるであろう．

〱
〲
〳
〴
〵
〶
〷

1.10 この文書の構成
以下は，この文書の残りの章についてのリストで，それぞれに簡単な説明を付けた．

〸
〹
〱〰
〱〱
〱〲

• 第〲章，MPIの用語と規則．この章では，このきぐぉ文書全体で使用される表記上の用語と規則について説明する．

〱〳
〱〴
〱〵

• 第〳章，1対1通信．この章では，きぐぉの基本的な〲者間通信に関するサブセットについて定義する．Sendとreceiveはここで扱う．加えて，基本的な通信を強力で効率のよいものにするよう設計された，多くの関連する関数についても述べる．

〱〶
〱〷
〱〸
〱〹

• 第〴章，データ型．この章では，データのレイアウトを記述する方法を定義する．
例えば，メッセージの送信または受信バッファとして使用可能な，メモリ内の構造
体配列などがある．

〲〰

• 第〵章，集団的通信．この章では，プロセスグループ内での集団的通信動作を定義する．良く知られている例としては，あるプロセスのグループ（必ずしも全プロセ
スではない）内でのバリア同期およびブロードキャストがある．きぐぉ〭〲では，集団通信の意味はグループ間コミュニケータも含むよう拡張された．〲つの新しい集団
操作も追加されている．

〲〴

〲〱
〲〲
〲〳

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

• 第〶章，グループ，コンテクスト，コミュニケータ，キャッシング ．この章では，プロセスのグループを形成して，それらを操作する方法，固有の通信コンテクストを取得する方法，その〲つを結合してコミュニケータを作る方法を説明する．

〳〱
〳〲
〳〳
〳〴

• 第〷章，プロセストポロジー．この章では，プロセスグループ（線形順序集合）を多次元グリッドのような，より複雑なトポロジー構造に対応づけるときに役に立つよう用意された一群のユーティリティ関数について説明する．
• 第〸章，MPI環境管理．この章では，プログラマが現在のきぐぉ環境について管理，
問い合わせをおこなう方法について説明する．これらをおこなう関数は，正しい頑健なプログラムの記述に必要であり，とりわけ，非常にポータブルなメッセージ通
信プログラムを構築するために重要である．

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

• 第〹章，Infoオブジェクト．この章では，いくつかのきぐぉルーチンの入力として使用される不可視オブジェクトを定義する．

〴〵
〴〶
〴〷
〴〸

第 〱〮 乍乐义の概要

〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

• 第〱〰章，プロセスの作成と管理．この章では，プロセスの作成が可能なルーチンを定義する．
• 第〱〱章，片方向通信．この章では，〱つのプロセスで完了させることができる通信
ルーチンを定義する．ここには，共有メモリ操作（プット〯ゲット）とリモートア
キュムレート操作が含まれる．
• 第〱〲章，外部インターフェイス．この章では，開発者がきぐぉ 上で使用できるよう設計されたルーチンを定義する．ここには，汎用の要求， きぐぉ不可視オブジェクトのデコード用ルーチン，スレッドが含まれる．
• 第〱〳章，入出力．この章では，並列入出力のためのきぐぉのサポートを定義する．
• 第〱〴章，プロファイリングインターフェイス．この章では，きぐぉ処理系がサポートしなければならない，簡単な，名前のシフトの規則について説明する．このシフトの狙いの〱つは，性能のプロファイリングのための呼び出しを， きぐぉのソースコー
ドに手を加える必要なしにきぐぉに入れることができるようにすることである．名前
シフトは，単なるインターフェイスに過ぎず，実際にプロファイリングで何をどうするかということについては何も指示しない．実際，名前シフトを他の目的で有効に使用することも可能である．
• 第〱〵章，廃止された関数．この章では，参照用に保存されたルーチンを説明する．
ただし，これらの関数は今後のバージョンの標準から削除される可能性があるた
め，使用はお勧めできない．

〲〷
〲〸
〲〹
〳〰

• 第〱〶章，言語別の呼び出し形式．この章では，ぃ〫〫言語の呼び出し形式を説明し，
うはひぴひちの言語の問題点を示し，ぃ言語，ぃ〫〫言語， うはひぴひちの言語の間の相互運用性について説明する．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

付録は以下のとおりである．
• 付録ぁ，言語呼び出し形式要約．ここでは，ぃ言語， ぃ〫〫言語，うはひぴひちの言語における具体的な構文を，全てのきぐぉ関数，定数，型について示す．
• 付録あ，変更履歴．ここでは，前のバージョンの標準からの主な変更点の概要を示す．
• 索引のページ．例，定数，定義済みのハンドル，コールバックルーチンのプロトタ
イプ，全てのきぐぉ関数の場所を示す．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉに は，そ れ ぞ れ のきぐぉ処 理 系 の 相 互 運 用 性 を 促 進 す る た め の 各 種 イ ン タ ー フ
ェイスが用意されている． この中には，入出力用，また きぐぉたぐぁぃかたぅじごぅげぎぁがおよびきぐぉたさぎぐぁぃかたぅじごぅげぎぁが用の標準的なデータ表現がある．相互運用性を可能にする
これらのインターフェイスの実際の呼び出し形式の定義は，本書の対象範囲外である．

〱〮〱〰〮 この文書の構成〹

きぐぉフォーラムで協議された内容は別の文書に含まれ，きぐぉ標準には含まれない．これらは，有益な協議内容を保存し，さらなる活動の開始点とするため， ぜおはふひのちぬ はて
いづぶづぬはばねづのぴ〢 〨おくい〩 の一部に組み込まれている．おくいの章の内容を以下に示す．
• 第〲章，独立した生成プロセス（Spawning Independent Processes）．この章では，動的プロセス管理の一部の要素，特に，生成プロセスが通信の対象としないプ
ロセスの管理について説明している．これは，フォーラムで詳細に協議されながら最終的にはきぐぉ標準に組み込まないことが決定された機能である．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

• 第〳章，スレッドとMPI（Threads and MPI）
．この章では， マルチスレッド環
境においてきぐぉ処理系とスレッドライブラリの間で予想される相互作用の一部を説明している．

〱〱
〱〲
〱〳
〱〴

• 第〴章，コミュニケータID（Communicator ID）．この章では， コミュニケータ
識別子を提供するためのアプローチについて説明している．

〱〵• 第〵章，他章に該当しない事項（Miscellany）．この章では，きぐぉ おくい のその他のトピック，特に共有メモリ環境で使用できるシングルコピー ルーチンと新しいデータ型コンストラクタについて説明している．

〱〸• 第〶章，完 全 なFortran 90言 語 の イ ン タ ー フ ェ イ ス に 向 け て（Toward a Full
Fortran 90 Interface）．この章では，より詳細なうはひぴひちの 〹〰言語のインターフェイ
スを提供するためのアプローチについて説明している．

〱〶
〱〷

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

• 第〷章，スプリット集団通信（Split Collective Communication）．この章では，
ノンブロッキング集団操作の仕様について説明している．

〲〷
〲〸
〲〹

• 第〸章，リアルタイムMPI（Real-Time MPI）
．この章では，リアルタイム処理のためのきぐぉサポートについて説明している．

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〮 乍乐义の概要

〱
〲
〳
〴
〵

第2章

〶
〷
〸
〹
〱〰

MPIの用語と規則

〱〱
〱〲
〱〳
〱〴

この章では，きぐぉ文書全体で使用される表記上の用語と規則，行われた選択のいくつか，およびそれらの選択の背後にある根拠について説明する．基本的にはきぐぉ〭〱の用途と規則の章と同様だが，大小いくつかの違いがある．大きな違いとしては，命名規則，一部の意味の定義，ファイルオブジェクト，うはひぴひちの 〹〰言語とうはひぴひちの 〷〷言語，ぃ〫〫言語，
プロセス，シグナルとの相互作用がある．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

2.1 文書の表記〲〳〲〴

根拠 インターフェイス仕様の中でおこなわれた設計上の選択の根拠は，この文書全体を通して，この形式で提示される．読者によっては，これらの節をとばすこともできるし，インターフェイスの設計に興味のある読者は念入りに読むこともできる． （根拠の終わり）

〲〵
〲〶
〲〷
〲〸
〲〹

ユーザへのアドバイス ユーザに訴えたいことや使用法の説明については，この文書全体を通して，この形式で提示される．読者によっては，これらの節はとばすこともできるし，きぐぉのプログラミングに興味のある読者は念入りに読むこともできる． （ユーザへのアドバイス終わり）

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

実装者へのアドバイス 主に実装者に対する注釈となることについては，この文書全体を通して，この形式で提示される．読者によっては，これらの節はとばすこともできるし， きぐぉの実装に興味のある読者は念入りに読むこともできる． （実装者へのアドバイス終わり）

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

2.2 命名規則〴〳

多くの場合，ぃ言語関数のきぐぉの名前はきぐぉたぃぬちびびたちっぴどはのたびふぢびづぴ いう形式で示される．
この規則はきぐぉ〭〱に由来するものである．きぐぉ〭〲以降， きぐぉ関数の名前の標準化は以下の規則に従って進められている．ぃ〫〫言語の 呼び出し形式が特にこの規則に従っている（〲〲ページの第〲〮〶〮〴節を参照）
．
〱〱

〴〴
〴〵
〴〶
〴〷
〴〸

第 〲〮 乍乐义の用語と規則

〱〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

〱〮 ぃ言語では，特定のタイプのきぐぉオブジェクトに関連するルーチンはすべて
きぐぉたぃぬちびびたちっぴどはのたびふぢびづぴと い う 形 式 に す る 必 要 が あ り， サ ブ セ ッ ト が な い 場 合はきぐぉたぃぬちびびたちっぴどはのという形式にする必要がある．うはひぴひちの言語では，特定のタイプのきぐぉオブジェクトに関連するルーチンはすべてきぐぉたぃがぁここたぁぃごぉくぎたこさあこぅごという形式にする必要があり，サブセットがない場合はきぐぉたぃがぁここたぁぃごぉくぎとい
う形式にする必要がある． ぃ言語およびうはひぴひちの言語では，ぃぬちびびを定義するためにぃ〫〫言語の用語を使用する．ぃ〫〫言語では，ルーチンはクラス上のメソッドであり，名前はきぐぉ〺〺ぃぬちびび〺〺ぁっぴどはのたびふぢびづぴとなる．ルーチンが特定のクラスに関連しているが，オブジェクトメソッドとしては意味をなさない場合，クラスの静的メンバ関数となる．

〱〳
〱〴
〱〵
〱〶
〱〷

〲〮 ルーチンがクラスに関連していない場合，ぃ〫〫言語では名前をきぐぉたぁっぴどはのたびふぢびづぴという形式にする必要があり，うはひぴひちの言語では
きぐぉたぁぃごぉくぎたこさあこぅごという形式にする必要がある．ぃ〫〫言語では，きぐぉの名前空
間きぐぉ〺〺ぁっぴどはのたびふぢびづぴで範囲指定する必要がある．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

〳〮 特定のアクションの名前が標準化されている．特に，Createは新しいオブジェク
トを作成し，Getはオブジェクトに関する情報を取得し，Setはこの情報を設定し，Deleteは情報を削除し，Isはオブジェクトに特定の属性があるかどうかを問い合わ
せる．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

ぃ言語およびうはひぴひちの言語のきぐぉ関数の名前（きぐぉ〭〱プロセスで定義された）の中に，これらの規則に違反しているものがある．一般的な例外はルーチンでの クラスの名前の欠落と，想定される場所でのアクションの欠落である．
きぐぉの識別子は〳〰文字までに限定される（プロファイリングインターフェイスでは〳〱文字）．この制限は，一部のコンパイルシステムでの制限の超過を避けるためのもの
である．

〳〲
〳〳
〳〴

2.3 手続きの仕様

〳〵
〳〶
〳〷

きぐぉ手続きの仕様は，言語に依存しない表記を使用して記述する．手続き呼び出しの引数には，ぉぎ，くさご，ぉぎくさごの区別を示す．これらの意味は以下の通りである．

〳〸〳〹• ぉぎ〺 呼び出しにより使用されるが，更新されることはない．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

• くさご〺 呼び出しにより更新されることがある．
• ぉぎくさご〺 呼び出しにより使用，更新の両方が行われる．
特別な場合が〱つある．引数が不可視オブジェクトのハンドル（これらの用語については第〲〮〵〮〱節で定義）であって，そのオブジェクトがその手続き呼び出しで更新される場
合，その引数はぉぎくさごまたはくさごと示す．ハンドル自身は修正されないにも関わらずこのように示す．つまり， ぉぎくさごまたはくさご属性は，ハンドルの参照するものが更新され〲〮〴〮 意味に関する用語〱〳

るということを示すために使うことがある．そのため，ぃ〫〫言語では， ぉぎ引数は通常，
っはのびぴオブジェクトの参照またはポインタとなる．

〱〲〳

根拠 きぐぉの定義は， ぉぎくさご引数の使用をできる限り避けている．このような使い方は，特にスカラ引数の場合，間違いの元になるからである． （根拠の終わり）
きぐぉでのぉぎ， くさご， ぉぎくさごの使用は，ユーザに引数の使用方法を示すことを目的としているが，全ての言語に直接変換できるほど厳密に分類されていない（うはひぴひちの 〹〰言語のぉぎごぅぎごや，ぃ言語のっはのびぴなど）．例えば，通常，「定数の」きぐぉたあくごごくきは出力バッフ
ァ引数に渡すことができる．同様に，きぐぉたこごぁごさこたぉぇぎくげぅはくさごステータス引数として渡すことができる．
きぐぉの関数では，ある引数が〱つのプロセスではぉぎとして使用され，別のプロセスではくさごとして使用されることがよくある．このような引数は，文法的にはぉぎくさご引数であり，ぉぎくさごと示す．しかし，意味的には，〱つの呼び出しで入力と出力の両方のために使用されることはない．
また，ある引数の値が一群のプロセスのうちの幾つかにとってのみ必要な場合もよくある．あるプロセスにおいてある引数が意味をもたない場合は，任意の値を引数として渡して構わない．
特に指定しない限り，くさごまたはぉぎくさごの引数について，同じきぐぉ手続きに渡す他の引数を用いて別名をつけてはならない．以下に示すのはぃ言語において引数に別名をつけた例である．次のようなぃ言語の手続きを定義すると，

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ぶはどつ っはばべぉのぴあふててづひ〨 どのぴ 〪ばどの〬 どのぴ 〪ばはふぴ〬 どのぴ ぬづの 〩ほどのぴ ど〻てはひ 〨ど〽〰〻 ど〼ぬづの〻 〫〫ど〩 〪ばはふぴ〫〫 〽 〪ばどの〫〫〻ぽ
この手続きの以下のコードにおける呼び出しは，別名つきの引数を持つ．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

どのぴ ちせ〱〰そ〻っはばべぉのぴあふててづひ〨 ち〬 ち〫〳〬 〷〩〻ぃ言語はこれを許可しているが，きぐぉ手続きのこのような使い方は特に指定しない限り，禁止する．なおうはひぴひちの言語は，引数に別名をつけることを禁止している．
全てのきぐぉ関数の仕様は，最初に言語に依存しない表記によって示す．そのすぐ下に，
ぉこく ぃ言語版の関数を，その下にうはひぴひちの言語およびぃ〫〫言語における同じ関数を表示する．この文書ではうはひぴひちの言語はうはひぴひちの 〹〰言語を指す．第〲〮〶節を参照すること．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

2.4 意味に関する用語

〴〱
〴〲
〴〳

きぐぉ手続きについて説明する際，以下に示す，意味に関する用語を使用する．

〴〴〴〵

ノンブロッキング 操作が完了する前で，なおかつ呼び出しにおいて指定された（バッファなどの）リソースをユーザが再使用できるようになる前に，手続きから戻ることがありうる場合．ノンブロッキング要求は，きぐぉたぉこぅぎいなどの呼び出しによって

〴〶
〴〷
〴〸

第 〲〮 乍乐义の用語と規則

〱〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

開始される．完了という用語は操作，要求，通信に関して使用される．操作は，ユーザがリソースを再使用できるようになり，出力バッファが更新された時点，つまりきぐぉたごぅこごの呼び出しが」ちで 〽 ぴひふづを返した時点で完了する．ウェイトの呼び出しで」ちで 〽 ぴひふづが返された時点，あるいはテストまたはステータス取得呼び出し
で」ちで 〽 ぴひふづが返された時点で要求は完了する．この完了の呼び出しは〲つの効果がある．ひとつは，要求からステータスが取り出される．もうひとつは，テストとウェイトによる場合，要求が永続的でなければ解放され，永続的であれば非アクティ
ブになる．参加している全ての操作が完了した時点で通信が完了する．
ブロッキング 手続きから戻り次第，呼び出しにおいて指定された リソースをユーザが再使用してよい場合．
ローカル 手続きの完了がそれを実行しているプロセスのみに依存する場合．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

非ローカル 操作を完了するために，別のプロセスでのなんらかのきぐぉ手続きの実行が必要となることもある場合．このような操作は，別のユーザプロセスとの通信を必要とすることもある．
集団 あるプロセスグループ中の全てのプロセスが，その手続きを呼び出す必要がある場
合．集団的呼び出しは，同期化される場合もあり，されない場合もある．同じコミュニケータ上の集団的呼び出しは，プロセスグループの全てのメンバーが同じ順序で実行する必要がある．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

定義済み 名前（きぐぉたぉぎご，きぐぉたうがくぁごたぉぎご，きぐぉたさあなど）が定義された（定数）データ
型，またはきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげ，きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが，
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじにより構成されたデータ型．前者を名前付き，後者を名前無しという．
派生 定義されていないデータ型．
可搬 定 義 済 み の デ ー タ 型 の 場 合， ま た は タ イ プ コ ン ス ト ラ ク タきぐぉたごすぐぅたぃくぎごぉぇさくさこ，きぐぉたごすぐぅたざぅぃごくげ，きぐぉたごすぐぅたぉぎいぅじぅい，きぐぉたごすぐぅたぃげぅぁごぅたぉぎいぅじぅいたあがくぃか，きぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁす〬，
きぐぉたごすぐぅたいさぐ，きぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁすのみを使用して可搬なつちぴちぴべばづか
ら派生する場合． このようなデータ型は，データ型の全ての変位が〱つの定義
済 み デ ー タ 型 の 範 囲 内 に あ る た め，可 搬 で あ る． そ の た め，こ の よ う な デ ー
タ型が〱つのメモリ内のデータのレイアウトに適合する場合，同じ宣言が使用されていれば，〲つのシステムが異なるアーキテクチャを使用している場合でも，別のメモリ内の対応するデータのレイアウトに適合する． それに対して，データ型がきぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅい，きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげまたはきぐぉたごすぐぅたぃげぅぁごぅたこごげさぃごを使用して構成されている場合，データ型には明確なバイトの変位（配列の制約に対応するための埋め草の付加など）が適用される．これらの変位は，〱つのメモリ上のデータのレイアウトに適合する場合には適〲〮〵〮 データ型〱〵

さないと思われるが，別のアーキテクチャによりプロセッサ上で動作する別のプロ
セスにおけるデータのレイアウトのために使用される．

〱〲〳

等価 〲つのデータ型が同じ呼び出し（および引数）のシーケンスにより作成されていて，同じ型マップを持っていると考えられる場合．〲つの等価なデータ型が必ずしも同じキャッシュ属性や同じ名前を持っているとは限らない．

〴
〵
〶
〷
〸

2.5 データ型〹〱〰

2.5.1 不可視オブジェクト〱〱

きぐぉは，システムメモリを管理する．システムメモリとは，ここでは，メッセージのバッファリングや，さまざまなきぐぉオブジェクト（グループ，コミュニケータ，データ型など）の内部表現の格納に使われるメモリを指す．このメモリにはユーザが直接アクセスすることができず，したがってここに格納されるオブジェクトは不可視である．つ
まり，そのサイズと形状はユーザには見えない．不可視オブジェクトは，ユーザ領域にあるハンドルを通してアクセスする．不可視オブジェクトを操作するきぐぉ手続きには，そのオブジェクトにアクセスするためのハンドル引数を渡す．ハンドルは，きぐぉ呼び出
しでオブジェクトのアクセスに使うだけでなく，そのまま代入したり比較したりすることもできる．
うはひぴひちの言語の場合，全てのハンドルは整数型を持つ．ぃ言語およびぃ〫〫言語の場合，オブジェクトの種類ごとに，異なるハンドル型が定義される．また，ぃ〫〫言語ではハンドルそのものが明確なオブジェクトである．ぃ言語およびぃ〫〫言語の型は，代入および等価演算子をサポートする必要がある．

〱〳

実装者へのアドバイス うはひぴひちの言語の場合，ハンドルは，システムテーブル中の不可視オブジェクトのテーブルに対する添字として実現できる．ぃ言語の場合は，同様の添字にするか，あるいはオブジェクトへのポインタにすることができる．
ぃ〫〫言語のハンドルはテーブルの添え字またはポインタを単純に「包む」ことができる． （実装者へのアドバイス終わり）

〱〲

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

不可視オブジェクトの割り当てと解放は各オブジェクト型に固有の呼び出しによって行う．これらは各オブジェクトについて述べた節に挙がっている．これらの呼び出しは，対応する型のハンドル引数を受け取る．割り当て呼び出しの場合，この引数はオブジェ
クトへの有効な参照値を返す出力引数である．解放のための呼び出しでは，この引数は「無効なハンドル」を値として戻る入出力引数である．きぐぉは「無効なハンドル」定数を各オブジェクト型ごとに〱つ設ける．この定数と比較することにより，ハンドルが有効かどうかを調べることができる．
解放処理の呼び出しは，ハンドルを無効にし，オブジェクトには，解放するべきものであることを示す印をつける．そのオブジェクトは，この呼び出しの後，ユーザからはアクセスできなくなる．しかしながらきぐぉはそのオブジェクトをすぐに解放する必要は

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

第 〲〮 乍乐义の用語と規則ない．このオブジェクトに関わる（その解放処理の時点で）保留中の操作は，正常に終了し，オブジェクトはその後に解放される．
不可視オブジェクトとそのハンドルは，オブジェクトを生成したプロセスでのみ意味を持ち，別のプロセスに転送することはできない．
きぐぉでは，いくつかのあらかじめ定義された不可視オブジェクト，およびこれらのオブジェクトに対するあらかじめ定義された静的ハンドルが用意されている．このようなオブジェクトは消去してはならない．ぃ〫〫言語では，これはあらかじめ定義されたこれらのオブジェクトへのハンドルをびぴちぴどっ っはのびぴとして宣言することにより実行される．
根拠 この設計では，きぐぉデータ構造のために使う内部表現を隠してあるので，ぃ言
語，ぃ〫〫言語，うはひぴひちの言語のいずれでも同じような呼び出し形式を使うことができる．またこれらの言語における型に関する規則との矛盾も回避されており，将来の機能拡張も簡単に行えるようになっている．ここで使用されている不透明オブジ
ェクトのメカニズムは，ぐくこぉじのうはひぴひちの言語用呼び出し形式の標準にゆるやかに沿ったものになっている．
ユーザ領域でハンドル，システム領域でオブジェクトという具合に明示的に区別す
ると，メモリ領域を回収する解放呼び出しを，ユーザプログラムの適切な場所で行えるようになる．仮に，不可視オブジェクトがユーザ領域にあったならば，そのオブジェクトを必要とする保留中の動作が完了する前に，そのユーザ領域が有効である範囲の外に出ないよう非常に気を付けなければならない．ここに示した設計では，オブジェクトに解放すべきものとして印をつけることができ，ユーザプログラ
ムが上述の範囲外に出ることも可能で，それでもオブジェクト自体は，保留中の動作が完了するまで解放されることはない．
ハンドルが代入や比較をサポートしなければならないと定めたのは，そのような処理がよく行われるからである．これにより，可能な実現方法の幅は狭くなった．これに替えて，ハンドルが任意の不透明な型であることを許すという選択もあり得た．この場合，代入と比較を行うためのルーチン導入しなければならなくなり，より複雑になるので，この規定は採用されなかった． （根拠の終わり）
ユーザへのアドバイス 参照先のない参照値が間違ってできることがある．これは，ユーザがあるハンドルに別のハンドルの値を代入し，そのあとこれらのハンドルに対応するオブジェクトを解放することによりできる．逆に，あるハンドル変数を，それに対応するオブジェクトを解放する前に，解放してしまうと，そのオブジェク
トにはアクセスできなくなる（これは，例えばハンドルが，あるサブルーチン内のローカル変数であって，関連するオブジェクトが解放される前にサブルーチンが終了する場合に起きる）．不可視オブジェクトへの参照値の追加や削除は，そのようなオブジェクトの割当，解放をおこなうきぐぉ呼び出しに伴う場合を除き，ユーザの責任で避けなければならない． （ユーザへのアドバイス終わり）

〴〶
〴〷
〴〸

実装者へのアドバイス 不可視オブジェクトの定義が意図するところでは，各不可視オブジェクトは 〱つ〱つ別のオブジェクトであり，このようなオブジェクトを割〲〮〵〮 データ型〱〷

り当てる呼び出しは，そのオブジェクトに必要な全ての情報をコピーする．実装
は，必要以上のコピーを避けるため，コピーを参照で置き換えてもよい．例えば，ユーザ定義データ型には，その構成要素のコピーを持たせる代わりに，その構成要
素への参照値を持たせてもよい．きぐぉたぃくききたぇげくさぐの呼び出しは，コミュニケータに対応するグループのコピーの代わりに，そのグループに対する参照値を返してもよい．そのような場合，実装は，参照カウントを管理する必要があり，またオ
ブジェクトの割り当てと解放を，見かけ上オブジェクトがコピーされているように見えるように行わなければならない． （実装者へのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

2.5.2 配列引数〱〲〱〳

きぐぉ呼び出しで，不可視オブジェクトの配列またはハンドルの配列の引数が必要になる場合もある．ハンドルの配列は普通の配列であって，そのエントリは同じ型のオブジェクトに対するハンドルであり，その配列の中の連続した位置に並んでいる．このような配列を使う場合は常に，有効なエントリの数を示すため長さを示すぬづの引数を添える必要がある（この数値が他から得られる場合は除く）．有効なエントリは配列の前方寄りにあり，ぬづのはその個数を示すが，これは，配列全体のサイズと同じでなくてもよい．他の配列引数でも同じアプローチがとられる．場合によっては，ぎさががハンドルが有効なエントリとみなされる．ステータスの配列に対してぎさがが引数が望ましい場合，
きぐぉたこごぁごさこぅこたぉぇぎくげぅを使用する．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

2.5.3 ステート型〲〵

きぐぉ手続きでは，さまざまな場所でステート型の引数を使用する． このようなデータ型の値は全て名前で識別され，それについての操作は定義されていない． 例えばきぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁすルーチンステート型の引数 はひつづひを取り，これはきぐぉたくげいぅげたぃ，きぐぉたくげいぅげたうくげごげぁぎなどの値を持つ．

〲〷

〲〶

〲〸
〲〹
〳〰
〳〱
〳〲

2.5.4 名前付き定数〳〳〳〴

きぐぉ手続きはときに基本的な型の引数の特別な値に，特別な意味を割り当てている．
例えばタグは〱対〱通信操作の整数値を取る引数であるが，これには特別なワイルドカー
ド値としてきぐぉたぁぎすたごぁぇがある．このような引数は，ある値域を通常値としてとる．この値域は対応する基本データ型の値域の一部分である．特殊な値（例えばきぐぉたぁぎすたごぁぇ）
は，この通常値域の外になる．タグなどの通常値域は，環境問い合わせ関数を使用して問い合わせすることができる（きぐぉ〭〱文書の第〷章）．送信元などの他の値域は，他のきぐぉ
ルーチン与えられる値によって決まる（送信元の場合，コミュニケータのサイズ）．
きぐぉはまた， きぐぉたぃくききたしくげがいなどの定義済みの名前付き定数のハンドルも提供する．
全ての名前付き定数は，下記のうはひぴひちの言語の場合を除いて初期化式および代入の中で使用することができるが，必ずしも配列の宣言の中で，またはぃ言語やぃ〫〫言語のびぷどぴっと文やうはひぴひちの言語のびづぬづっぴ〯っちびづ文のラベルとして使用する必要はない．つまり，

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〲〮 乍乐义の用語と規則

〱〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

名前付き定数はリンク時の定数であって，必ずしもコンパイル時の定数ではない．以
下に示す名前付き定数は，ぃ言語やぃ〫〫言語とうはひぴひちの言語語の両方においてコンパイル時の定数でなければならない．これらの定数は実行時に値が変わることはない．定数ハンドルによってアクセスされる不可視オブジェクトはきぐぉの初期化（きぐぉたぉぎぉご）からきぐぉ終了処理（きぐぉたうぉぎぁがぉずぅ）までの間存在し，その間，値が変わることはない．ハ
ンドル自体は定数で，初期化式または代入で使用することもできる．
コンパイル時の定数とする必要がある（したがって，配列長の宣言のほか，ぃ言語
やぃ〫〫言語のびぷどぴっと文やうはひぴひちの言語のっちびづ〯びづぬづっぴ文のラベルに使用できる）定数を以
下に示す．

〱〲

きぐぉたきぁじたぐげくぃぅここくげたぎぁきぅ〱〳

きぐぉたきぁじたぅげげくげたこごげぉぎぇ〱〴

きぐぉたきぁじたいぁごぁげぅぐたこごげぉぎぇ〱〵〱〶

きぐぉたきぁじたぉぎうくたかぅす〱〷

きぐぉたきぁじたぉぎうくたざぁが〱〸

きぐぉたきぁじたくあおぅぃごたぎぁきぅ〱〹

きぐぉたきぁじたぐくげごたぎぁきぅ〲〰

きぐぉたこごぁごさこたこぉずぅ 〨うはひぴひちの はのぬべ〩〲〱〲〲

きぐぉたぁいいげぅここたかぉぎい 〨うはひぴひちの はのぬべ〩〲〳

きぐぉたぉぎごぅぇぅげたかぉぎい 〨うはひぴひちの はのぬべ〩〲〴

きぐぉたくううこぅごたかぉぎい 〨うはひぴひちの はのぬべ〩

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

このほか，これに対応するぃ〫〫言語の定数のうち，該当するものが含まれる． うはひ〭
ぴひちの言語で初期化式や代入に使用できない定数を以下に示す．
きぐぉたあくごごくききぐぉたこごぁごさこたぉぇぎくげぅ
きぐぉたこごぁごさこぅこたぉぇぎくげぅ
きぐぉたぅげげぃくいぅこたぉぇぎくげぅ
きぐぉたぉぎたぐがぁぃぅ
きぐぉたぁげぇざたぎさががきぐぉたぁげぇざこたぎさががきぐぉたさぎしぅぉぇえごぅい

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス うはひぴひちの言語では，これらの特別な定数を実装するために，
うはひぴひちの言語の標準以外の言語構造を使用する必要がある場合がある．実装ではこれらの値と規定のデータの区別ができないため，定数に特別な値を使用する（例えば，ぐぁげぁきぅごぅげ文で定義することにより）ことはできない．データは対象となるコンパイラでアドレスによって渡されるため，通常，これらの定数は定義済みの静的変数（きぐぉで宣言されたぃくききくぎブロックの変数など）として実装される．サブルー
チン内では，このアドレスをうはひぴひちの言語の標準以外のメカニズム（うはひぴひちの言語の拡張機能，またはぃ言語の関数の実装）によって取得することができる． （実装者へのアドバイス終わり）〲〮〶〮 言語の呼び出し形式〱〹

2.5.5 選択型〱〲

きぐぉ関数はときに選択型（またはふのどはの）データ型の引数を使用する．いくつかの異なる呼び出しが，同じルーチンに対するものであるにも関わらず，参照渡しによって，それぞれ違う型の実引数を渡すことがある．このような引数を与えるためのメカニズムは，言語によって異なる．うはひぴひちの言語の場合，本文書では<ぴべばづ>を使用して選択型変数を表現し，ぃ言語およびぃ〫〫言語の場合は，ぶはどつ 〪を使用する．

〳
〴
〵
〶
〷
〸
〹

2.5.6 アドレス型〱〰
〱〱

いくつかのきぐぉ手続きは，呼び出し側のプログラム内の絶対アドレスを示すアド
レス型引数を使用する． このような引数のデータ型は，ぃ言語では，ぃ〫〫言語では，
うはひぴひちの言 語 で はぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩と な る． こ れ ら の 型 は， 〱つ の 言
語 の ア ド レ ス 値 を 変 換 な し で 別 の 言 語 に 直 接 渡 せ る よ う に，同 じ 幅 と エ ン コ ー ド
アドレス値を持っていなければならない． アドレス範囲の開始を示すためのきぐぉ定
数きぐぉたあくごごくきがある．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

2.5.7 ファイルのオフセット〲〰
〲〱

入 出 力 用 に， フ ァ イ ル に サ イ ズ， 変 位， オ フ セ ッ ト を 指 定 す る 必 要 が あ る． こ
れ ら の 数 字 はうはひぴひちの言 語 の 整 数 の デ フ ォ ル ト サ イ ズ に 設 定 可 能 な〳〲ビ ッ ト を 簡 単に 超 え て し ま う 場 合 が あ る． こ れ に 対 応 す る た め， うはひぴひちの言 語 で は こ れ ら の 数 字がぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩と し て 宣 言 さ れ る． ぃ言 語 で はきぐぉたく》びづぴを 使 用
し，ぃ〫〫言語ではきぐぉ〺〺く》びづぴを使用する．これらの型は，〱つの言語のオフセット値を変換なしで別の言語に直接渡せるように，同じ幅とエンコードアドレス値を持っていなけ
ればならない．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

2.6 言語の呼び出し形式

〳〱
〳〲
〳〳

この節では，きぐぉにおける言語の呼び出し形式一般についての規則と，うはひぴひちの言語，ぉこく ぃ言語，ぃ〫〫言語についての個別の規則を定義する（ぁぎこぉ ぃ言語は ぉこく ぃ言語に変更されている）．ぃ〫〫言語の呼び出し形式は廃止されている．ここではさまざまなオブ
ジェクトの表現，およびこの標準の表現に使用する命名規則を定義する．実際の呼び出
し方法については別の箇所で定義する．
きぐぉの呼び出し形式はうはひぴひちの 〹〰言語用のものだが，うはひぴひちの 〷〷言語環境でも使用できるよう設計されている．
ぐぁげぁきぅごぅげと い う 言 葉 は， うはひぴひちの言 語 で は キ ー ワ ー ド な の で， こ こ で は 「引 数（ぜちひでふねづのぴ〢）」と い う言 葉 を 使 っ て サ ブ ル ー チ ン に 渡 す 引 数 を 表 現 す る． ぃ言 語 よびぃ〫〫言語では普通これらはパラメータと呼ばれるが，ぃ言語およびぃ〫〫言語のプログ
ラマは「引数」という言葉（ぃ言語およびぃ〫〫言語ではこれには特定の意味はない）を理解できるであろうから，それをあてにして，うはひぴひちの言語のプログラマを不必要に混乱させるのは避けることにした．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〲〰
〱
〲
〳
〴
〵

第 〲〮 乍乐义の用語と規則

うはひぴひちの言語では大文字と小文字が区別されるため，リンカではうはひぴひちの言語の名前の解決のために小文字または大文字を使用することができる．大文字と小文字が区別される言語を使用する場合は，ぜねばどた〢やぜばねばどた〢という接頭辞は使用しないようにする必要
がある．

〶
〷

2.6.1 廃止された名前と関数

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

多くの章で，廃止または置換されたきぐぉ〭〱の構成物に言及している．これらは，第〱〵章で述べるように現在もきぐぉ標準の一部となっている構成物であるが，きぐぉ〭〲でこれより優れた解決法が用意されているため，今後は使用をやめることをお勧めする．例えば，
アドレス引数を持つきぐぉ〭〱の関数用のうはひぴひちの言語の呼び出し形式では整数型を使用する．
これはぃ言語の呼び出し形式とは整合性がなく，〳〲ビット整数型と〶〴ビットアドレスを使用するマシン上で問題を起こす．きぐぉ〭〲では，これらの関数にはアドレス引数のための新しい呼び出し形式を備えた新しい名前が与えられている．古い関数の使用は廃止されている．整合性のため，ここと他のいくつかのケースで，古い関数と同等の内容ではあるが，ぃ言語の新しい関数も用意されている．古い名前は廃止されている．きぐぉ〭〱で定義済みのデータ型きぐぉたさあおよびきぐぉたがあもこの一例である．これらは，扱いにくく，間違いやすいため，廃止されている．きぐぉ〭〲の関数きぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅいは同じ効果を得るための便利なメカニズムを備えている．
表〲〮〱に， 廃 止 さ れ た 全 て の 構 成 物 の 一 覧 を 示 す． きぐぉたがあお よ びきぐぉたさあ定 数 は 関
数きぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅいに置換されているが，これは主にサイズ変更されたデータ型を作成する目的できぐぉたごすぐぅたこごげさぃごへの入力のデータ型として使用されていたためである．また，この一覧に一部のぃ言語のぴべばづつづてとうはひぴひちの言語のサブルーチンの名前が含まれているが，これらはコールバック関数の型である．

〲〹〳〰

2.6.2 Fortran言語の呼び出し形式に関する事項

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

もともと，きぐぉ〭〱〮〱ではうはひぴひちの 〷〷言語のための呼び出し形式が用意されていた．これ
らの呼び出し形式は残されているが，現在はうはひぴひちの 〹〰言語の標準に従って解釈される．
下記のように，きぐぉでは現在も大部分のうはひぴひちの 〷〷言語のコンパイラを使用することができる．うはひぴひちの言語という用語を使用した場合，うはひぴひちの 〹〰言語言語のことを指す．
全てのきぐぉ名はきぐぉたという接頭辞を持ち，また全ての文字は大文字である．プログラ
ムは，この接頭辞きぐぉたで始まる名前を宣言してはならない．例えば，変数，サブルーチ
ン，関数，パラメタ，派生データ型，抽象インターフェイス，またはモジュールに対しそうした名前を宣言してはならない． プロファイリングインターフェイスとの衝突を避けるため，プログラムではぐきぐぉたという接頭辞を持つ関数も避ける必要がある．この制約
は名前の衝突を避けるために必要である．
全てのきぐぉうはひぴひちの言語のサブルーチンには，最後の引数に戻り値を付ける．いくつかのきぐぉ操作は関数であり，これらは戻り値引数を持たない．成功した場合の戻り値
はきぐぉたこさぃぃぅここになる．その他の場合のエラーコードは実装によって異なる．第〸章および付録ぁのエラーコードを参照すること．

〲〮〶〮 言語の呼び出し形式〲〱

廃止
きぐぉたぁいいげぅここ
きぐぉたごすぐぅたえぉぎいぅじぅいきぐぉたごすぐぅたえざぅぃごくげきぐぉたごすぐぅたこごげさぃご
きぐぉたごすぐぅたぅじごぅぎご
きぐぉたごすぐぅたさあ
きぐぉたごすぐぅたがあ
きぐぉたがあきぐぉたさあきぐぉたぅげげえぁぎいがぅげたぃげぅぁごぅ
きぐぉたぅげげえぁぎいがぅげたぇぅご
きぐぉたぅげげえぁぎいがぅげたこぅご
きぐぉたえちのつぬづひたてふのっぴどはの
きぐぉたかぅすざぁがたぃげぅぁごぅ
きぐぉたかぅすざぁがたうげぅぅ
きぐぉたいさぐたうぎ
きぐぉたぎさががたぃくぐすたうぎ
きぐぉたぎさががたいぅがぅごぅたうぎきぐぉたぃはばべたてふのっぴどはのぃくぐすたうさぎぃごぉくぎきぐぉたいづぬづぴづたてふのっぴどはのいぅがぅごぅたうさぎぃごぉくぎきぐぉたぁごごげたいぅがぅごぅきぐぉたぁごごげたぇぅご
きぐぉたぁごごげたぐさご

きぐぉ〭〲での置換
きぐぉたぇぅごたぁいいげぅここ
きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅいきぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげきぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご
きぐぉたごすぐぅたぇぅごたぅじごぅぎご
きぐぉたごすぐぅたぇぅごたぅじごぅぎご
きぐぉたごすぐぅたぇぅごたぅじごぅぎご
きぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅい
きぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅい
きぐぉたぃくききたぃげぅぁごぅたぅげげえぁぎいがぅげ
きぐぉたぃくききたぇぅごたぅげげえぁぎいがぅげ
きぐぉたぃくききたこぅごたぅげげえぁぎいがぅげ
きぐぉたぃはねねたづひひとちのつぬづひたてふのっぴどはの
きぐぉたぃくききたぃげぅぁごぅたかぅすざぁがきぐぉたぃくききたうげぅぅたかぅすざぁがきぐぉたぃくききたいさぐたうぎ
きぐぉたぃくききたぎさががたぃくぐすたうぎ
きぐぉたぃくききたぎさががたいぅがぅごぅたうぎきぐぉたぃはねねたっはばべたちぴぴひたてふのっぴどはのぃくききたぃくぐすたぁごごげたうぎ
きぐぉたぃはねねたつづぬづぴづたちぴぴひたてふのっぴどはのぃくききたいぅがぅごぅたぁごごげたうぎ
きぐぉたぃくききたいぅがぅごぅたぁごごげ
きぐぉたぃくききたぇぅごたぁごごげ
きぐぉたぃくききたこぅごたぁごごげ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

表 〲〮〱〺 廃止された構成物〲〹〳〰

文字列の最大長を表す定数は，第〱〶〮〳〮〹節に示すように， うはひぴひちの言語ではぃ言語およ
びぃ〫〫言語よりも〱小さい．
うはひぴひちの言語では，ハンドルは整数型で表現される．二値変数は，論理型を持つ．
配列引数の添字は〱から始まる．
きぐぉうはひぴひちの言語の呼び出し形式はいくつかの点でうはひぴひちの 〹〰言語の標準との整合性がない．これらの不整合にはレジスタの最適化の問題などがあり，ユーザコードとの関連性がある．これについては第〱〶〮〲〮〲節で詳しく説明する．これらについても，うはひぴひちの〷〷言語との整合性はない．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

2.6.3 C言語の呼び出し形式に関する事項〴〲〴〳

ぉこく ぃ言語の宣言形式を使用する．全てのきぐぉ名はきぐぉたという接頭辞を持ち，あらか
じめ定義された定数は全て大文字からなる名前を持ち，あらかじめ定義された型や関数では，接頭辞のあとの文字が〱文字だけ大文字になる． プログラムは接頭辞 きぐぉた で始まる名前（識別子）を宣言してはならない．ここでいう名前とは例えば，変数，関数，

〴〴
〴〵
〴〶
〴〷
〴〸

第 〲〮 乍乐义の用語と規則

〲〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

定数，型，またはマクロに対する名前である． プロファイリングインターフェイスをサポートするため，名前がぐきぐぉたという接頭辞で始まる関数をプログラムで宣言しないよ
うにする必要がある．
名前付き定数の定義，関数プロトタイプ，型定義は，ねばど〮とという名のヘッダーファイ
ルの中にいれて提供しなければならない．
ほとんど全てのぃ言語関数はエラーコードを返す．成功した場合の戻り値はきぐぉたこさぃぃぅここになるが，エラーが起こった場合の戻り値は，実装によって異なる．
不可視オブジェクトの各種類に対応するハンドルに対しては，それぞれ別の型宣言が用意される
配列引数の添字は〰から始まる．
論理フラグは整数で，値が〰の場合「偽」，〰以外の場合「真」を意味する．
選択型引数は，ぶはどつ 〪型のポインタである．
アドレス引数は，きぐぉで定義する型きぐぉたぁどのぴである．ファイルの変位は型きぐぉたく》びづぴである． きぐぉたぁどのぴは，対象とするアーキテクチャ上の任意の有効なアドレスを保持するのに必要なサイズを持つ整数値として定義する．きぐぉたく》びづぴは，対象とするアーキテクチ
ャ上の任意の有効なファイルサイズを保持するのに必要なサイズを持つ整数値として定
義する．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

2.6.4 C++言語の呼び出し形式に関する事項
ぃ〫〫言語の呼び出し形式は廃止されている．標準には，ぃ〫〫言語ではなく，ぃ言語用の規則が規定されている．このような場合，適宜，ぃ言語の規則をぃ〫〫言語に適用する必要がある．特に，規定されている定数の値はぃ言語およびうはひぴひちの言語用のものである．
これらとぃ〫〫言語の名前の相互参照を付録ぁに示す．
使用する宣言の形式はぉこく ぃ〫〫言語のものである．きぐぉの全ての名前はきぐぉという名
前空間の範囲内で宣言されているため，きぐぉ〺〺という接頭辞を付けて参照される．定義された定数は全て大文字であり，クラス名，定義された型，関数は最初の文字だけが大文字である． プログラムはきぐぉ 名前空間の中で名前を宣言してはならない．例えば，変数，関数，定数，型，またはマクロに対する名前である．この制約は名前の衝突を避けるた
めに必要である．
名前付き定数の定義，関数プロトタイプ，型定義は，ねばど〮とという名のヘッダーファイ
ルの中にいれて提供しなければならない．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス ねばど〮とファイルにはぃ言語とぃ〫〫言語の両方の定義を記述することができる．通常，定義された値を使用する（一般的にたたっばぬふびばぬふびだが，必須ではない）だけで，ぃ〫〫言語の使用中にぃ〫〫言語の定義を保護しているかどうかを確認することができる．ぃ言語のコンパイラにより，この方法で保護されたソースを正規のぃ言語のコードとすることが求められる可能性がある．この場合，全てのぃ〫〫言語の定義を別のヘッダーファイルに記述し， ぜ〣どのっぬふつづ〢指示文を使用して必要なぃ〫〫言語の定義をねばど〮とファイルに組み込むことができる． （実装者へのアドバイス終わり）〲〮〶〮 言語の呼び出し形式〲〳

通常，オブジェクトの作成，または情報を返すぃ〫〫言語の関数は，オブジェクトまたは情報を戻り値に格納する．きぐぉ関数の言語非依存のプロトタイプはぃ〫〫言語の戻り値を出力パラメータとして組み込むため，きぐぉ関数の意味的記述ではそのパラメータ名によってぃ〫〫言語の返却値を参照する．それ以外のぃ〫〫言語の関数はぶはどつを返す．
場合によっては，きぐぉで値を返さないよう指定することもできる．例えば，ステータ
スが格納されないよう指定することができる．ぃ言語とうはひぴひちの言語では特別な入力値によってこれが行われるが，ぃ〫〫言語の場合は〲つの呼び出し形式を使用して行われる．
一方の呼び出し形式にはオプションの引数があり，他方にはない．
ぃ〫〫言語の関数はエラーコードを返さない．デフォルトのエラーハンドラがきぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこに設定されている場合，ぃ〫〫言語の例外メカニズムに基づいてきぐぉ〺〺ぅへっづばぴどはのオブジェクトが投げられ，エラーのシグナルが発行される． 特定の型ではデフォルトのエラーハンドラ（きぐぉ〺〺ぅげげくげこたぁげぅたうぁごぁが）は変更されていな
い．ユーザのエラーハンドラも使用できる． きぐぉ〺〺ぅげげくげこたげぅごさげぎ呼び出し元の関数に制御を戻すだけで，ユーザがエラーコードを取得するという規定もない．
整数のエラーコードを返すユーザのコールバック関数は例外を投げられないようにする必要があり，返されたエラーは適切なエラーハンドラを呼び出すことにより，きぐぉ実
装によって処理される．
ユ ー ザ へ の ア ド バ イ ス ぃ〫〫言 語 できぐぉの エ ラ ー 処 理 を 自 分 で 行 い た い 場 合，ぃ言 語 で そ の 目 的 で 使 用 す るきぐぉ〺〺ぅげげくげこたげぅごさげぎで は な く，
きぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこエラーハンドラを使用する必要がある．複数の言語が混在している状況で例外を使用する場合，注意が必要となる． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

不可視オブジェクトのハンドルはそれ自体がオブジェクトでなければならず，ぃ言語
およびうはひぴひちの言語と意味的に同様の機能を実行するには代入と等価演算子をオーバーラ
イドする必要がる．
配列引数の添字は〰から始まる．
論理フラグの型はぢははぬである．
選択型型引数は，ぶはどつ 〪型のポインタである．
アドレス引数は，きぐぉで定義する整数型きぐぉ〺〺ぁどのぴである．この型は，対象とするアー
キテクチャ上の任意の有効なアドレスを保持するのに必要なサイズを持つ整数値として定義する．同様に，きぐぉ〺〺く》びづぴはファイルのオフセットを保持するための整数値である．
大部分のきぐぉの関数はきぐぉぃ〫〫言語のクラスのメソッドである．きぐぉのクラス名を言
語非依存のきぐぉの型から生成するには，接頭辞きぐぉたを削除し，きぐぉの名前空間内で型を範囲指定する．例えば， きぐぉたいぁごぁごすぐぅはきぐぉ〺〺いちぴちぴべばづとなる．
一般的に，きぐぉの関数名は所定の命名規則に従う． 場合によっては， きぐぉの関数
はきぐぉ〭〱用に定義されている関数に関連し，命名規則に従っていない名前を持っていることがある．この場合，言語非依存の名前は，命名規則に違反するきぐぉ〭〲の名前が与えられるとしても，きぐぉの名前と同じになる．この場合，ぃ言語とうはひぴひちの言語の名前は言語非

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〲〮 乍乐义の用語と規則

〲〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

依存の名前と同じになる．しかし，ぃ〫〫言語の名前にはこの命名規則が反映され，ぃ言
語およびうはひぴひちの言語の名前と異なる可能性がある．そのため，きぐぉの名前と同じぃ〫〫言
語の名前が言語非依存の名前と異なる場合がある．その結果，ぃ〫〫言語の名前が言語
非依存の名前と異なることになる．言語非依存の名前きぐぉたうぉぎぁがぉずぅいとぃ〫〫言語の名
前きぐぉ〺〺ぉびた「のちぬどぺづつはその一例である． ぃ〫〫言語では，関数ぴべばづつづては適切なクラス内で公開で作成される．しかし，これらの宣言は以下のように多少煩雑になる．
{ぴべばづつづて きぐぉ〺〺ぇひづぱふづびぴ〺〺けふづひべたてふのっぴどはの〨〩〻 （廃止された呼び出し形式．第15.2節を参照）}
は次のようになる．

〱〱
〱〲
〱〳
〱〴

のちねづびばちっづ きぐぉ ほ
っぬちびび げづぱふづびぴ ほ〯〯 〮〮〮
ぽ〻

〱〵
〱〶
〱〷
〱〸
〱〹

っぬちびび ぇひづぱふづびぴ 〺 ばふぢぬどっ きぐぉ〺〺げづぱふづびぴ ほ〯〯 〮〮〮
ぴべばづつづて けふづひべたてふのっぴどはの〨ぶはどつ〪 づへぴひちたびぴちぴづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩〻
ぽ〻
ぽ〻

〲〰
〲〱
〲〲
〲〳

ぃ〫〫言語のぴべばづつづてを宣言するときにこの長い手続きの代わりに，縮約された形式を使用する．特に，関数のぴべばづつづてに対して，クラスと名前空間の有効範囲を明確に示す．
そのため，上記の例は以下のようなテキストで示される．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

ぴべばづつづて どのぴ きぐぉ〺〺ぇひづぱふづびぴ〺〺けふづひべたてふのっぴどはの〨ぶはどつ〪 づへぴひちたびぴちぴづ〬
きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩
付録ぁ〮〴と本書全体に示したぃ〫〫言語の呼び出し形式は，単純な一連の名前生成規則
をきぐぉの関数仕様に当てはめることにより作成された．これらのガイドラインは大部分の場合の要件を満たしていても，すべての状況に適しているとは限らない．曖昧さが生じる場合や，特別な意味的な記述が必要な場合，状況に応じてこれらのガイドラインを変更することができる．

〳〳〳〴〱〮 全ての関数，型，定数は，きぐぉというのちねづびばちっづの有効範囲内で宣言される．

〳〵
〳〶
〳〷

〲〮 きぐぉのハンドルの配列は常に配列リスト内に残される（ぉぎ引数かくさご引数かに関係
なく）
．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

〳〮 きぐぉの関数の引数リストにスカラのぉぎハンドルが含まれ，関数をそのハンドルに対応するオブジェクトのメソッドとして定義することに意味がある場合，関数では対応するきぐぉのクラスのメンバ関数が作成される．メンバ関数は対応するきぐぉの関数
名に従って命名されるが，接頭辞きぐぉた とオブジェクト名の接頭辞（ある場合）は削除される．また，以下が適用される．

〴〵
〴〶
〴〷
〴〸

〨ち〩 スカラのぉぎハンドルは引数リストから除外され，これは除外引数に対応する．
〨ぢ〩 関数はっはのびぴとして宣言される．

〲〮〶〮 言語の呼び出し形式〲〵〴〮 クラスに属し，かつ，クラスにユニークなスカラのぉぎまたはぉぎくさごパラメータを持たない場合，きぐぉの関数は，そのクラスの（びぴちぴどっ）関数となる．

〱〲〳〵〮 引数リストにきぐぉたこごぁごさこ型（または配列）でない〱つのくさご引数が含まれる場合，その引数はリストから除外され，関数はその値を返す．

〴〵〶

例 2.1 きぐぉたぃくききたこぉずぅのぃ〫〫言語呼び出し形式は次のようになる．
どのぴ きぐぉ〺〺ぃはねね〺〺ぇづぴたびどぺづ〨ぶはどつ〩 っはのびぴ〮

〷
〸
〹
〱〰

〶〮 引数リストに複数のくさご引数がある場合，〱つが戻り値として選択され，リストから除外される．

〱〱〱〲〱〳〷〮 引数リストにくさご引数が含まれていない場合，関数の戻り値はぶはどつとなる．

〱〴〱〵

例 2.2 きぐぉたげぅけさぅこごたうげぅぅのぃ〫〫言語呼び出し形式は次のようになる． ぶはどつ
きぐぉ〺〺げづぱふづびぴ〺〺うひづづ〨ぶはどつ〩

〱〶
〱〷
〱〸

〸〮 上記の規則が適用されないきぐぉの関数はクラスのメンバではなく，きぐぉの名前空間内で定義される．

〱〹
〲〰
〲〱
〲〲

例 2.3 きぐぉたあさううぅげたぁごごぁぃえのぃ〫〫言語呼び出し形式は次のようになる． ぶはどつ
きぐぉ〺〺ぁぴぴちっとたぢふ》づひ〨ぶはどつ〪 ぢふ》づひ〬 どのぴ びどぺづ〩〮

〲〳
〲〴
〲〵

〹〮 全てのクラス名，定義された型，関数名は最初の文字だけが大文字となる．定義された定数は全て大文字となる．
〱〰〮 ぉぎポインタ，参照，または配列の引数はっはのびぴとして宣言する必要がある．

〲〶
〲〷
〲〸
〲〹
〳〰

〱〱〮 ハンドルは参照により渡される．

〳〱〳〲〱〲〮 配列引数は，意味的な正確さを表すため，ポインタではなく，角括弧（せそ）で示さ
れる．

〳〳
〳〴
〳〵

2.6.5 関数とマクロ〳〶

ぃ言 語 の マ ク ロ と し て 実 装 す る こ と が で き る の は，きぐぉたしごぉきぅ，きぐぉたしごぉぃか，ぐきぐぉたしごぉきぅ，ぐきぐぉたしごぉきぅ，ぐきぐぉたしごぉぃか，第〱〶〮〳〮〴節のハンドル変換関数（きぐぉたぇひはふばたて〲っなど）である．

〳〸

実装者へのアドバイス 実装者はマクロとして実装するルーチンを文書化する必要がある． （実装者へのアドバイス終わり）
ユーザへのアドバイス ルーチンがマクロとして実装されている場合，きぐぉのプロファイリングインターフェイスと一緒に使用することはできない． （ユーザへのア
ドバイス終わり）

〳〷

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〲〮 乍乐义の用語と規則〲〶〱

2.7 プロセス

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

きぐぉプログラムは，自律的なプロセスで構成される．これらのプロセスは独自のコードをきぉきいスタイルで実行する．各プロセスによって実行されるコードは，同一である必要はない．これらのプロセスは，きぐぉの通信プリミティブを呼び出すことにより通信する．通常，各プロセスは独自のアドレス空間で実行されるが，共有メモリに基づ
くきぐぉの実装も考えられる．
この文書で規定する，並列プログラムの動作は，きぐぉ呼び出しのみが通信に使用されることを前提としている．きぐぉプログラムと他の通信手段，入出力，プロセス管理との相互作用については規定していない．標準の仕様に特に記載されていない限り，きぐぉは
同様または同等の機能を提供する外部メカニズムとの相互作用の結果に関して要件を定めていない．ここに含まれる外部メカニズムとの相互作用として対象となるのはプロセ
ス制御，共有およびリモートメモリアクセス，ファイルシステムのアクセスおよび制御，
プロセス間通信，プロセスのシグナル発行，端末入出力だが，これに限定されない．質の高い実装をおこなうためには，このような相互作用がユーザの使い勝手の向上に反映されるよう努め，必要に応じて制約事項を文書化する必要がある．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

実装者へのアドバイス きぐぉ内でサポートされる機能のためのこうした追加メカニズ
ムをサポートする実装では，これらときぐぉとの相互作用について文書化することが求められる． （実装者へのアドバイス終わり）
きぐぉとスレッドの相互作用については，第〱〲〮〴節で定義する．

〲〶
〲〷
〲〸

2.8 エラー処理

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉは，信頼性のあるメッセージ転送をユーザに提供する．送られるメッセージは，
常に正しく受け取られるため，ユーザが転送エラー，ランタイムその他のエラー状態についてチェックをおこなう必要はない．言い換えれば，きぐぉには，通信システム内で発生するエラーを扱うメカニズムはない．きぐぉ の実装を信頼性のない下位のメカニズムの上に構築する場合，ユーザをその信頼性のなさから隔離したり，回復不能なエラーを障害として通知したりするのは，そのきぐぉサブシステムの実装者の仕事である．可能な限り，このような障害は関連する通信呼び出しでエラーとして通知される．同様にきぐぉそれ自身にはプロセッサの障害を処理するメカニズムはない．
とはいえ，きぐぉプログラムが間違っている可能性は当然ある．プログラムエラーは，
きぐぉ呼び出しの引数が正しくない（送信操作のときに送信先が存在しない，受信操作のときにバッファが小さすぎるなど）ときに発生しうる．この種のエラーは，どのような実装においても起きると考えられる．また，リソースエラーは，使用可能なシステムリ
ソース（保留中のメッセージ数，システムバッファ数など）の量をプログラムが超えたときに発生しうる．この種のエラーが起きるかどうかは，システム内の使用可能なリソースの量およびリソース割当てに使うメカニズムに依存し，システムごとに異なる可能〲〮〸〮 エラー処理〲〷性がある．質の高い実装は，重要なリソースについては十分ゆとりのある上限を提供して，これに代表される移植性の問題を軽減するのに役立つ．
ぃ言語およびうはひぴひちの言語では，ほとんど全てのきぐぉ呼び出しでは，操作が正しく終了したことを示すコードを返す．エラーが呼び出しの最中に発生した場合，可能な限り，きぐぉ呼び出しはエラーコードを返す．デフォルトでは，きぐぉライブラリの実行中にエラーが見つかった場合，ファイル操作を除いて，その並列計算は異常終了する．しかしきぐぉは，ユーザがこのデフォルト時の振舞いを変更して，回復可能なエラーを処理するためのメカニズムを提供する．ユーザは，エラーは全て致命的でないと指定して，きぐぉ呼び出しが返すエラーコードをユーザ自身で処理することができる．またユーザはユーザ独自のエラー処理ルーチンを用意することもできる．このルーチンは，きぐぉ呼び
出しが異常な状態で戻ってくる場合には常に呼び出される．きぐぉエラー処理機能については，第〸〮〳節で説明している．ぃ〫〫言語の関数の戻り値はエラーコードではない．デ
フォルトのエラーハンドラがきぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこに設定されている場合，ぃ〫〫言語の例外メカニズムに基づいてきぐぉ〺〺ぅへっづばぴどはのオブジェクトが投げられ，エラーのシグナル発行が行われる．〴〹〷ページの第〱〶〮〱〮〸節も参照すること．
エラーが発生したとき，きぐぉ呼び出しが意味のあるエラーコードを返す機能は，いく
つかの要因によって制限される．きぐぉである種のエラーが検出できないことがある．また他の種のエラーについては，通常の実行モードで検出するにはコストがかかりすぎることもある．あるいは，ある種のエラーでは「壊滅的」に被害が大きいため，きぐぉが制
御を整合のとれた状態で呼び出し側に返すことができないこともある．
その他の微妙な問題として，非同期通信の性質によって発生するものがある．つまり，
きぐぉ呼び出しは，その呼び出しが戻った後にも非同期的に継続する処理を起動することがある．このため，その操作は正しく終了したことを示すコードを返すが，そのあとでエラー例外が発生する，という可能性がある．同じ操作に関連する呼び出し（例えば，非同期操作が終了したことを確認する呼び出し）がそのあとにある場合，この呼び出しに対応するエラー引数をエラーの性質を示すために使用する．場合によっては，操作に関連する全ての呼び出しが終了したあとにエラーが発生することがあり，そのためエラーの性質を示すために使えるエラー値がないこともある（例えば，レディモードによる送信での受信側のエラー）．このようなエラーは，致命的なものとして扱わなければならない．その状態からユーザが復旧するための情報を返すことができないからである．
この文書では，きぐぉ呼び出しでエラーが発生したあとの計算処理の状態を規定していない．望ましい操作は，しかるべきエラーコードが返され，エラーの影響が可能な限り狭い範囲に留められることである．例えば，エラーを起こした受信呼び出しが，メッセージ受信用に指定された領域を越える，受信側のメモリのいかなる部分をも書き換えることがない，という動作は非常に望ましい．
この文書では，きぐぉ呼び出しでエラーが発生したあとの計算処理の状態を規定していない．望ましい操作は，しかるべきエラーコードが返され，エラーの影響が可能な限り狭い範囲に留められることである．例えば，エラーを起こした受信呼び出しが，メッセージ受信用に指定された領域を越える，受信側のメモリのいかなる部分をも書き換えることがない，という動作は非常に望ましい．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〲〸
〱
〲

第 〲〮 乍乐义の用語と規則

きぐぉではユーザが新しいエラーコードを作成するための方法が定義されている．これを第〸〮〵節に示す．

〳〴〵

2.9 実装に関する事項

〶
〷
〸
〹
〱〰
〱〱
〱〲

いくつかの領域において，きぐぉの実装が動作環境やシステムとやりとりすることがある．きぐぉはいかなるサービス（入出力やシグナル処理など）の提供も義務づけてはいな
いが，これらのサービスが使用できるのであれば，このような動作を提供するよう強く提唱している．これは，同じサービスを提供するプラットフォーム間の可搬性を実現する上で，非常に重要な事項である．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

2.9.1 基本ランタイムルーチン独立性
きぐぉプログラムでは，以下のことが必要となる．それは，基本的な言語環境の一部であるライブラリルーチン（例えばうはひぴひちの言語のぷひどぴづ， ぉこく ぃ言語のばひどのぴてやねちぬぬはっ）
が，きぐぉたぉぎぉごときぐぉたうぉぎぁがぉずぅの間に実行される場合，それらがそれぞれ独立に動作す
ること，およびそれらが完了するかどうかは同じきぐぉプログラム内の他のプロセスの動
作には依存しないことである．
これは，操作が集団的な並列サービスを提供するライブラリルーチンの作成を妨げる
ものではまったくない．しかしながら以下のプログラムは， きぐぉたぃくききたしくげがいのサイズに関係なく，ぉこく ぃ言語環境で最後まで動作するものと期待されている（実行ノード
でばひどのぴてが使用できることが前提）．
どのぴ ひちのに〻きぐぉたぉのどぴ〨〨ぶはどつ 〪〩〰〬 〨ぶはどつ 〪〩〰〩〻
きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ひちのに〩〻どて 〨ひちのに 〽〽 〰〩 ばひどのぴて〨〢こぴちひぴどので ばひはでひちねぜの〢〩〻きぐぉたうどのちぬどぺづ〨〩〻同様のうはひぴひちの言語およびぃ〫〫言語プログラムも最後まで動作するものと期待される．
逆に，要求されないものの例としては，複数のタスクから呼び出されるとき，これらのルーチンが特定の順序で動作すること，がある．例えばきぐぉでは，以下のプログラムからの出力がどうなるべきかもどうなるのが望ましいかも定めない（ここでも実行ノードで入出力が行えることが前提）
．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ひちのに〩〻ばひどのぴて〨〢くふぴばふぴ てひはね ぴちびに ひちのに 〥つぜの〢〬 ひちのに〩〻
さらに，リソースの枯渇その他のエラーによって失敗した呼び出しは，ここで要求している事項に違反するとは見なされない（ただしこれらは，正常終了しなくてもよいだ
けで，終了する必要はある）．

〲〮〱〰〮 プログラム例〲〹

2.9.2 シグナルとの相互作用〱〲

きぐぉはシグナルを使用したプロセス間のやりとりについては指定していないし，きぐぉが
シグナルセーフである必要もない．実装ではシグナルをそれ自身の使用のために予約することができる．実装では使用するシグナルを文書化しておく必要があり，こぉぇぁがげき，
こぉぇうぐぅ，こぉぇぉくを使用しないことを強く推奨する．また，実装ではシグナルハンドラ内からのきぐぉ呼び出しの使用を禁止することもできる．
マルチスレッド環境では，きぐぉ呼び出しを実行しないスレッドでのみシグナルを捕捉することにより，シグナルとライブラリきぐぉの間の衝突を避けることができる．質の高い単一スレッド実装はシグナルセーフで，シグナルによって中断されたきぐぉ呼び出しはシグナル処理の完了後に再開され，正常に終了する．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

2.10 プログラム例〱〵〱〶

この文書中のプログラム例は，解説のみを目的としている．標準を規定することを意図したものではない．またプログラム例については，注意深いチェックや検証がおこなわれているわけではない．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〲〮 乍乐义の用語と規則

〱
〲
〳
〴
〵

第3章

〶
〷
〸
〹
〱〰

1対1通信

〱〱
〱〲
〱〳
〱〴
〱〵

3.1 概要〱〶プ ロ セ ス に よ る メ ッ セ ー ジ の 送 信 と 受 信 が 基 本 的 なきぐぉ通 信 メ カ ニ ズ ム で あ る．
〱対〱信の基本的な操作は，送信(send)と受信(receive) である．その使用法を以下の例で説明する．

〱〷
〱〸
〱〹
〲〰
〲〱

〣どのっぬふつづ 〢ねばど〮と〢どのぴ ねちどの〨 どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ 〩ほっとちひ ねづびびちでづせ〲〰そ〻どのぴ ねべひちのに〻きぐぉたこぴちぴふび びぴちぴふび〻
きぐぉたぉのどぴ〨 〦ちひでっ〬 〦ちひでぶ 〩〻きぐぉたぃはねねたひちのに〨 きぐぉたぃくききたしくげがい〬 〦ねべひちのに 〩〻どて 〨ねべひちのに 〽〽 〰〩〪〯 っはつづ てはひ ばひはっづびび ぺづひは 〪〯ほびぴひっばべ〨ねづびびちでづ〬〢えづぬぬは〬 ぴとづひづ〢〩〻きぐぉたこづのつ〨ねづびびちでづ〬 びぴひぬづの〨ねづびびちでづ〩〫〱〬 きぐぉたぃえぁげ〬 〱〬 〹〹〬 きぐぉたぃくききたしくげがい〩〻ぽづぬびづ どて 〨ねべひちのに 〽〽 〱〩 〪〯 っはつづ てはひ ばひはっづびび はのづ 〪〯ほきぐぉたげづっぶ〨ねづびびちでづ〬 〲〰〬 きぐぉたぃえぁげ〬 〰〬 〹〹〬 きぐぉたぃくききたしくげがい〬 〦びぴちぴふび〩〻
ばひどのぴて〨〢ひづっづどぶづつ 〺〥び〺ぜの〢〬 ねづびびちでづ〩〻
ぽきぐぉたうどのちぬどぺづ〨〩〻ぽこの例では，プロセス〰〨ねべひちのに 〽 〰〩は送信関数きぐぉたこぅぎいを使用して，プロセス〱にメッセージを送っている．この関数では，メッセージデータを取出すための送信側のメモリ内の送信バッファを指定する．上の例の場合，送信バッファは変数ねづびびちでづを含む，
プロセス〰のメモリ上の記憶領域である．送信バッファの位置，サイズ，型は，送信関数の先頭〳つの引数により指定される．送信されるメッセージは，変数ねづびびちでづの〱〳文字である．またこの送信関数は，エンベロープをメッセージに付加する．エンベロープはメッセージ送信先を指定し，その中には受信関数が特定のメッセージを選択するときに使用できる区別情報がある．送信関数の最後の〳つの引数によって，送信されるメッセージのエンベロープが送信側のランクと共に特定される．プロセス〱〨ねべひちのに 〽 〱〩が，受信関
〳〱

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〳〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

数きぐぉたげぅぃざを使用して，このメッセージを受信する．エンベロープの値に従って受信されるメッセージが選択され，メッセージデータが受信バッファに格納される．上の例
では，受信バッファは，プロセス〱のメモリ上の変数ねづびびちでづを含む記憶領域から構成される．受信関数の先頭〳つの引数により受信バッファの位置，サイズ，型が指定される．
次の〳つの引数は，受信メッセージの選択に使用される．最後の引数は，受け取ったメッ
セージの情報を返すために使用される．
次の節では，ブロッキング送信関数および受信関数について説明する． 送信，受信，ブロッキング通信の意味，型一致の条件，異機種 環境における型変換，より一般的な通信モードについて説明する． ノンブロッキング通信については次に説明し，そのあとにチャネル式の構成物，送受信関数などを続け1 ，最後に，「ダミー」プロセスきぐぉたぐげくぃたぎさががについて説明する．

〱〴
〱〵
〱〶

3.2 ブロッキング送信関数および受信関数〱〷〱〸

3.2.1 ブロッキング送信〱〹〲〰

ブロッキング送信関数の構文は，以下のようになる．

〲〱
〲〲
〲〳

きぐぉたこぅぎい〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩
ぉぎ

〲〴
〲〵

ぉぎ

〲〶

ぉぎ

〲〷

ぉぎ

〲〸

ぉぎ

〲〹

ぉぎ

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね

送信バッファの先頭アドレス（選択型）
送信バッファ内の要素数（非負の整数型）
送信バッファの各要素のデータ型（ハンドル）
送信先のランク（整数型）
メッセージタグ（整数型）
コミュニケータ（ハンドル）

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

どのぴ きぐぉたこづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〩
きぐぉたこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺こづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〳〸〳〹

この呼び出しのブロッキングの意味については，第〳〮〴節で説明する．

〴〰
〴〱

3.2.2 メッセージデータ

〴〲
〴〳
〴〴
〴〵
〴〶

きぐぉたこぅぎい関数によって指定される送信バッファは，つちぴちぴべばづで示される型の，アドレ
スぢふてから始まる，連続したっはふのぴ個のエントリによって構成される．メッセージの長さ
は，バイト数ではなく要素数で指定することに注意すること．後者は機種非依存になっており，アプリケーションレベルに近くなる．

〴〷
〴〸

〱

訳者註：この部分，原文では重複しているが， MPI3.1 では正しく修正されている〳〮〲〮 ブロッキング送信関数および受信関数〳〳

メッセージのデータ部分は，つちぴちぴべばづで示されるそれぞれの型の連続したっはふのぴ個の値で構成される．っはふのぴの値は〰でも良く，その場合，メッセージのデータ部分が空になる．
メッセージのデータ値に指定できる基本的なデータ型は，ホスト言語の基本的なデータ型に対応している．うはひぴひちの言語で利用可能なこの引数の型および対応するうはひぴひちの言語のデータ型を表〳〮〱に示す．

〱
〲
〳
〴
〵
〶
〷

きぐぉ つちぴちぴべばづ
きぐぉたぉぎごぅぇぅげきぐぉたげぅぁがきぐぉたいくさあがぅたぐげぅぃぉこぉくぎきぐぉたぃくきぐがぅじ
きぐぉたがくぇぉぃぁがきぐぉたぃえぁげぁぃごぅげ
きぐぉたあすごぅ
きぐぉたぐぁぃかぅい

うはひぴひちの つちぴちぴべばづぉぎごぅぇぅげ
げぅぁが
いくさあがぅ ぐげぅぃぉこぉくぎ
ぃくきぐがぅじ
がくぇぉぃぁがぃえぁげぁぃごぅげ〨〱〩

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

表 〳〮〱〺 うはひぴひちの言語のデータ型に対応する定義済みのきぐぉのデータ型
ぃ言語で利用可能なこの引数の型および対応するぃ言語のデータ型を表〳〮〲に示す．
データ型きぐぉたあすごぅときぐぉたぐぁぃかぅいは，うはひぴひちの言語やぃ言語のデータ型に対応するものがない．データ型きぐぉたあすごぅは，バイト（〸桁の〲進数）で構成される．バイトは解釈されていないもので，文字とは異なるものである．異なるマシンでは異なる文字表現になることがあり，また文字を表現するときに複数バイトを使用することもある．一方，バイトは全てのマシンで同じ〲進値を持つ．データ型きぐぉたぐぁぃかぅいの使用については，
第〴〮〲節で説明する．
きぐぉは，うはひぴひちの言語とぉこく ぃ言語の基本データ型と対応するデータ型 のサポートを要求する． ホスト言語がその他のデータ型を持つ場合， きぐぉデータ型にも追加のものが必要になる． つまりいくさあがぅ ぃくきぐがぅじ型として宣言されたうはひぴひちの言語の倍精度
複素数に対するきぐぉたいくさあがぅたぃくきぐがぅじ や，げぅぁが〪〲，げぅぁが〪〴，げぅぁが〪〸型としてそれぞれ宣言されたうはひぴひちの言語の実数に対するきぐぉたげぅぁが〲，きぐぉたげぅぁが〴，きぐぉたげぅぁが〸や，ぉぎごぅぇぅげ〪〱，ぉぎごぅぇぅげ〪〲，ぉぎごぅぇぅげ〪〴としてそれぞれ宣言されたうはひぴひちの言語の整数に対す
るきぐぉたぉぎごぅぇぅげ〱，きぐぉたぉぎごぅぇぅげ〲，きぐぉたぉぎごぅぇぅげ〴などがそれにあたる．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

根拠 設計における目標の〱つは，追加的なプリプロセスやコンパイルをおこなうことなく，きぐぉをライブラリとして実装できるようにすることである．そのため，通信呼び出しが通信バッファに変数のデータ型についての情報を持つことを前提とすることはできない．この情報は，明示的な引数によって提供しなければならない．
このようなデータ型の情報の必要性は，第〳〮〳〮〲節で説明する． （根拠の終わり）

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

根 拠 デ ー タ 型きぐぉたぃたあくくが， きぐぉたぉぎご〸たご， きぐぉたぉぎご〱〶たご，
きぐぉたぉぎご〳〲たご，きぐぉたさぉぎご〸たご，きぐぉたさぉぎご〱〶たご，きぐぉたさぉぎご〳〲たご，
きぐぉたぃたぃくきぐがぅじ，きぐぉたぃたうがくぁごたぃくきぐがぅじ，きぐぉたぃたいくさあがぅたぃくきぐがぅじ，

〴〶
〴〷
〴〸

第 〳〮 〱対〱通信〳〴〱〲

きぐぉ つちぴちぴべばづ
きぐぉたぃえぁげ

〳
〴
〵
〶
〷
〸
〹

きぐぉたこえくげご
きぐぉたぉぎご
きぐぉたがくぎぇきぐぉたがくぎぇたがくぎぇたぉぎごきぐぉたがくぎぇたがくぎぇ（同義語として）きぐぉたこぉぇぎぅいたぃえぁげ〱〰
〱〱

きぐぉたさぎこぉぇぎぅいたぃえぁげ

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

きぐぉたさぎこぉぇぎぅいたこえくげご
きぐぉたさぎこぉぇぎぅいきぐぉたさぎこぉぇぎぅいたがくぎぇきぐぉたさぎこぉぇぎぅいたがくぎぇたがくぎぇきぐぉたうがくぁご
きぐぉたいくさあがぅ
きぐぉたがくぎぇたいくさあがぅ
きぐぉたしぃえぁげ

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

きぐぉたぃたあくくがきぐぉたぉぎご〸たご
きぐぉたぉぎご〱〶たごきぐぉたぉぎご〳〲たごきぐぉたぉぎご〶〴たごきぐぉたさぉぎご〸たご
きぐぉたさぉぎご〱〶たごきぐぉたさぉぎご〳〲たごきぐぉたさぉぎご〶〴たごきぐぉたぃたぃくきぐがぅじ
きぐぉたぃたうがくぁごたぃくきぐがぅじ（同義語として）きぐぉたぃたいくさあがぅたぃくきぐがぅじ
きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじ
きぐぉたあすごぅ
きぐぉたぐぁぃかぅい

ぃ つちぴちぴべばづ
っとちひ（印字可能文字として扱う）
びどでのづつ びとはひぴ どのぴ
びどでのづつ どのぴ
びどでのづつ ぬはので どのぴ
びどでのづつ ぬはので ぬはので どのぴ
びどでのづつ ぬはので ぬはので どのぴ
びどでのづつ っとちひ
（整数値として扱う）
ふのびどでのづつ っとちひ
（整数値として扱う）
ふのびどでのづつ びとはひぴ どのぴ
ふのびどでのづつ どのぴ
ふのびどでのづつ ぬはので どのぴ
ふのびどでのづつ ぬはので ぬはので どのぴてぬはちぴ
つはふぢぬづ
ぬはので つはふぢぬづ
ぷっとちひたぴ（〼びぴつつづて〮と〾の中で定義されている）（印字可能文字として扱う）
たあははぬ
どのぴ〸たぴどのぴ〱〶たぴ
どのぴ〳〲たぴ
どのぴ〶〴たぴ
ふどのぴ〸たぴ
ふどのぴ〱〶たぴ
ふどのぴ〳〲たぴ
ふどのぴ〶〴たぴてぬはちぴ たぃはねばぬづへてぬはちぴ たぃはねばぬづへ
つはふぢぬづ たぃはねばぬづへ
ぬはので つはふぢぬづ たぃはねばぬづへ

〳〸
〳〹
〴〰

表 〳〮〲〺 ぃ言語のデータ型に対応する定義済みのきぐぉのデータ型

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじには対応するぃ〫〫言語呼び出し形式グのデータ型がない．これは，ぃ言語のプリプロセッサおよび ぃ〫〫言語の名前空間における名前との衝突を避けるために意図的におこなわれている．ぃ〫〫言語のアプリケーションでは，機能を損なうことなく ぃ言語の呼び出し形式を使用することができる． （根拠の終わり）〳〮〲〮 ブロッキング送信関数および受信関数
きぐぉ つちぴちぴべばづ
きぐぉたぁぉぎごきぐぉたくううこぅごぃ つちぴちぴべばづ
きぐぉたぁどのぴ
きぐぉたくててびづぴ〳〵

うはひぴひちの つちぴちぴべばづぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩

〱
〲
〳
〴
〵

表 〳〮〳〺

ぃ言語およびうはひぴひちの言語のデータ型に対応する定義済みのきぐぉのデータ型〶〷

データ型きぐぉたぁぉぎごおよびきぐぉたくううこぅごは，きぐぉで定義された ぃ言語の型きぐぉたぁどのぴお
よびきぐぉたく》びづぴ，うはひぴひちの言語の ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩およびぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩に対応する．これを 表〳〮〳に示す．これらの型による言語間通信についての詳細は，第〱〶〮〳〮〱〰節を参照すること．
きぐぉ つちぴちぴべばづ
きぐぉたぃじじたあくくがきぐぉたぃじじたうがくぁごたぃくきぐがぅじ
きぐぉたぃじじたいくさあがぅたぃくきぐがぅじ
きぐぉたぃじじたがくぎぇたいくさあがぅたぃくきぐがぅじぃ〫〫 つちぴちぴべばづ
ぢははぬ
びぴつ〺〺っはねばぬづへ〺〼てぬはちぴ〾
びぴつ〺〺っはねばぬづへ〺〼つはふぢぬづ〾
びぴつ〺〺っはねばぬづへ〺〼ぬはので つはふぢぬづ〾

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

表 〳〮〴〺

ぃ〫〫言語のデータ型に対応する定義済みのきぐぉのデータ型〲〰
〲〱

ぃ〫〫言語コンパイラがある場合，表〳〮〴の中の データ型もまた，ぃ言語およびうはひぴひちの言語でサポートされる．

〲〲
〲〳
〲〴
〲〵

3.2.3 メッセージエンベロープ〲〶

データ部分の他に，メッセージは，メッセージを区別したり選択的に受信したりする
ときに使用できる情報を伝える．この情報は，一定の数のフィールドによって構成されるもので，集合的にメッセージエンベロープと呼ばれる．これらのフィールドは次のよ
うになっている．

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

送信元
送信先
タグ
コミュニケータ
メッセージの送信元は，メッセージの送信側のぉいによって暗黙的に決定される．他のフィールドは，送信関数の引数によって指定される．
メッセージの送信先は，つづびぴ引数で指定される．
メ ッ セ ー ジ タ グ は 整 数 値 で あ り，ぴちで引 数 で 指 定 さ れ る． こ の 整 数 は，プ ロ グ ラ
ムがメッセージのタイプを区別するために使用される． 有効なタグの値の範囲は，〰〮〮〮〬〬さあであるが，ここで言うさあは実装依存である．この値は，表〸章で述べているように，属性きぐぉたごぁぇたさあの値を問い合わせることで得ることが出来る．きぐぉでは，さあの値を〳〲〷〶〷以上にする必要がある．
っはねね引数により，送信関数で使用されるコミュニケータが指定される．コミュニケー

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〳〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

タについては第〶章で説明するが，以下にその使用法を簡単にまとめる．
コミュニケータは，通信操作に対応する通信コンテクストを指定する．それぞれの通信コンテクストに応じて，別々の「通信世界」が提供され，メッセージは常にそれらが送られるコンテクストの中で受信されて，異なるコンテクストで送られたメッセージが干渉することはない．
コミュニケータはまた，この通信コンテクストを共有するプロセスの集合を特定する．
このプロセスグループ内ではプロセスは順序付けられ，グループ内でのランクで識別される．このため，つづびぴの有効な値の範囲は， 〰〬 〮〮〮 〬 の〭〱となる．ここでのはグループ内のプロセスの数である．（コミュニケータがグループ間コミュニケータの場合，送信先はリモートグループ内のランクで識別される．第〶節参照のこと．）
きぐぉは定義済みのコミュニケータきぐぉたぃくききたしくげがいを提供する．これを使用すると，きぐぉ初期化の後にアクセスできる全てのプロセスとの通信が可能になり，プロセスは，
きぐぉたぃくききたしくげがい内のランクで識別される．
ユーザへのアドバイス ユーザが，既存のほとんどの通信ライブラリで提供されているような，フラットな名前空間の概念および〱つの通信コンテクストで満足していれば，っはねね引数として使用するのは定義済みの変数きぐぉたぃくききたしくげがいで十分である．これを使用することによって，すべてのプロセスとの通信が初期化時に使用できるようになる．

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

ユーザは，第〶章で説明するように新しいコミュニケータを定義することができる．
コミュニケータは，ライブラリとモジュールのための有効なカプセル化メカニズムを提供する．これらを使用することにより，モジュールは，独立の通信世界と独自のプロセス番号体系を持つことができる． （ユーザへのアドバイス終わり）
実装者へのアドバイス メッセージエンベロープは通常固定長のメッセージヘッダ
として符号化される．しかしながら，実際の符号化は，実装依存である．いくつかの情報（例えば送信元または送信先）は暗黙的にもすることができ，メッセージによって明示的に転送される必要はない．またプロセスは，相対的なランクや，絶対的なぉいなどにより識別できる． （実装者へのアドバイス終わり）

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

3.2.4 ブロッキング受信
ブロッキング受信関数の構文は，以下のようになる．

〳〮〲〮 ブロッキング送信関数および受信関数〳〷

きぐぉたげぅぃざ 〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びはふひっづ〬 ぴちで〬 っはねね〬 びぴちぴふび〩
くさご
ぉぎ
ぉぎ
ぉぎ

〱
〲

ぢふて
っはふのぴ
つちぴちぴべばづ
びはふひっづ

受信バッファの先頭アドレス（選択型）

ぴちで
っはねね
びぴちぴふびメッセージタグまたはきぐぉたぁぎすたごぁぇ（整数型）〸

コミュニケータ（ハンドル）〹

ステータス型オブジェクト（ステータス型）〱〰

受信バッファ内の要素数（非負の整数型）〳〴

受信バッファの各要素のデータ型（ハンドル）〵

送信元のランクまたはきぐぉたぁぎすたこくさげぃぅ（整数型）

〶
〷

ぉぎ
ぉぎ
くさご

〱〱

どのぴ きぐぉたげづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたげぅぃざ〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬ぉぅげげくげ{ぶはどつ きぐぉ〺〺ぃはねね〺〺げづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ びはふひっづ〬 どのぴ ぴちで〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺ぃはねね〺〺げづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〲

この呼び出しのブロッキングの意味論については，第〳〮〴節節で説明する．
受信バッファは，つちぴちぴべばづで指定される型の連続したっはふのぴ個の要素を含む記憶領域によって構成される．この記憶領域の開始アドレスはぢふてである．受信されるメッセージの長さは，受信バッファの長さ以下でなければならない．オーバーフローエラーは，送られてくるデータが切り詰めなくては受信バッファに収まらない場合に発生する．
受信バッファより短いメッセージが到着した場合，（短い）メッセージに対応する範囲
内の領域のみで更新が行われる．

〲〲

ユーザへのアドバイス 第〳〮〸節で説明しているきぐぉたぐげくあぅ関数を使用すると，長さの不明なメッセージを受信することができる． （ユーザへのアドバイス終わ
り）

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

実装者へのアドバイス プログラムエラーの場合の特定の動作がきぐぉによって規定されていない場合でも，オーバーフローの処理方法として推奨される方法は，入ってくるメッセージの送信元とタグについての情報をびぴちぴふびに入れて戻ることである．
その受信関数はエラーコードを返す．高品質な実装ではまた，受信バッファの範囲外のメモリは上書きされない事を保証する．

〳〶

メッセージが受信バッファより短い場合，きぐぉは非常に厳格に他の範囲の更新を禁止する．ある種の最適化のために，もっと寛大な処置は可能であろうが，これは許されていない．実装では，たとえそれが奇数アドレスでも，正確に受信バッファの終了地点で，受信側のメモリに対するコピーを終了させる準備をしておかなくてはならない． （実装者へのアドバイス終わり）

〴〲

〳〷
〳〸
〳〹
〴〰
〴〱

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〳〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

受信関数は，メッセージエンベロープの値によってメッセージを選択する．そのエンベロープが，受信関数によって指定されたびはふひっづ，ぴちで，っはねねのそれぞれの値と一致する場合にメッセージは受信関数によって受信される．受信側は，びはふひっづの値としてワイルドカードきぐぉたぁぎすたこくさげぃぅ，またぴちでの値としてワイルドカードきぐぉたぁぎすたごぁぇを指定することができ，これによって任意の送信元やタグが受け入れ可能であることを示す．
っはねねの値としてはワイルドカードを指定することはできない．このように，メッセー
ジが受信プロセスに送られ， コミュニケータが一致し，送信元が一致し（びはふひっづ〽
きぐぉたぁぎすたこくさげぃぅパターンになっていない場合），タグが一致（ぴちで〽きぐぉたぁぎすたごぁぇパターンになっていない場合）する場合に限り，メッセージは受信関数で受信される．
メッセ ー ジタ グ は，受信関数のぴちで 引数に よっ て指定さ れる． 引数
びはふひっづがきぐぉたぁぎすたこくさげぃぅと異なる場合は，同じコミュニケータに付随するプロセス
グループ（グループ間コミュニケータの場合はリモートプロセスグループ）内のランクとして指定される． そのため，びはふひっづ引数に対応する有効な値の範囲は，{〰〮〮〮〬〬の〭〱}∪{きぐぉたぁぎすたこくさげぃぅ}になる（ここでのはこのグループ内のプロセス数）．
送信関数と受信関数の間の次の違いに注意しなければならない．受信関数では，任意の送信元からメッセージを受けつけるが，送信関数では，特定の受信側を指定しなければならない．このことは，データ転送が送信側によってなされる「プッシュ型」通信メ
カニズムに対応していることを示す（データ転送が受信側によってなされる「プル型」
メカニズムとは異なる）．
送信元＝送信先は許される，つまりプロセスがメッセージを自分自身に送ることは可能である（ただし，上記で説明したブロッキング送受信関数の場合，デッドロックを引き起こす可能性があるため安全ではない．第〳〮〵節を参照のこと）
．

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

実装者へのアドバイス メッセージコンテクストや，コミュニケータのその他の情報を，追加のタグフィールドとして実装することができる．このフィールドではワ
イルドカード一致が許可されていないことや，このフィールドの値の設定がコミュ
ニケータ操作関数で制御されるなどの点で通常のメッセージタグとは異なっている． （実装者へのアドバイス終わり）

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

3.2.5 リターンステータス型受信関数でワイルドカード値が使用された場合，受信したメッセージの送信元やタグがわからないことがある．また一つのきぐぉ関数で複数のリクエストが実行された場
合（第〳〮〷〮〵節を参照），それぞれのリクエストごとに，別々のエラーコードを返さなければならない場合もあり得る．これらの情報はきぐぉたげぅぃざ関数のびぴちぴふび引数で返される．
びぴちぴふびの型は，きぐぉで定義される．ステータス型変数は，ユーザによって明示的に割り当
てられなければならない．つまりこれらはシステムオブジェクトではない．
ぃ言語の場合，びぴちぴふびはきぐぉたこくさげぃぅ，きぐぉたごぁぇ，きぐぉたぅげげくげという名前の〳つのフィールドを含む構造体になる．その構造体には追加されたフィールドが含まれることもある．
そのため，びぴちぴふび〮きぐぉたこくさげぃぅ，びぴちぴふび〮きぐぉたごぁぇ， びぴちぴふび〮きぐぉたぅげげくげには，それぞれ受信メッセージの送信元，タグ，エラーコードが含まれる．

〳〮〲〮 ブロッキング送信関数および受信関数〳〹

うはひぴひちの言語の場合，びぴちぴふびは，きぐぉたこごぁごさこたこぉずぅのサイズを持つぉぎごぅぇぅげの配列になる．
〳つの定数きぐぉたこくさげぃぅ， きぐぉたごぁぇ， きぐぉたぅげげくげはそれぞれ送信元，タグ，エラーのフィールドが格納されているエントリを示す添字である．そのため，びぴちぴふび〨きぐぉたこくさげぃぅ〩，
びぴちぴふび〨きぐぉたごぁぇ〩，びぴちぴふび〨きぐぉたぅげげくげ〩には，それぞれ受信メッセージの送信元，タグ，
エラーコードが含まれる．
ぃ〫〫言語では，びぴちぴふびオブジェクトは以下のメソッドを使用して処理される．
{どのぴ きぐぉ〺〺こぴちぴふび〺〺ぇづぴたびはふひっづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺こぴちぴふび〺〺こづぴたびはふひっづ〨どのぴ びはふひっづ〩 （廃止された呼び出し形式, 第15.2節を参照）}{どのぴ きぐぉ〺〺こぴちぴふび〺〺ぇづぴたぴちで〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺こぴちぴふび〺〺こづぴたぴちで〨どのぴ ぴちで〩 （廃止された呼び出し形式, 第15.2節を参照）}{どのぴ きぐぉ〺〺こぴちぴふび〺〺ぇづぴたづひひはひ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺こぴちぴふび〺〺こづぴたづひひはひ〨どのぴ づひひはひ〩 （廃止された呼び出し形式, 第15.2節を参照）}
一 般 的 に， メ ッ セ ー ジ 通 信 の 呼 び 出 し は， ス テ ー タ ス 型 変 数 の エ ラ ー コ ー ド フィールドを変更しない． このフィールドは，第〳〮〷〮〵節で説明する複数のステータス型 を 返 す 関 数 で の み 更 新 さ れ る 可 能 性 が あ る． こ の フ ィ ー ル ド は， そ れ ら の 関 数がきぐぉたぅげげたぉぎたこごぁごさこというエラーコードを返す場合のみ更新される．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

根拠 ステータス型のエラーフィールドは，きぐぉたしぁぉごのように，〱つのステータス
型のみを返す呼び出しの場合必要ない．この場合は関数自体から返された情報と同一だからである．現在のきぐぉの設計では，このような場合にエラーフィールドをセットするという余分なオーバーヘッドを避けている．このフィールドは，複数のス
テータス型を返す呼び出しでのみ必要になる．それぞれのリクエストで異なるエラーが発生する可能性があるためである． （根拠の終わり）

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

ステータス型引数はまた，受信したメッセージの長さについての情報を返す．ただし，この情報はステータス型変数のフィールドとして直接得られるわけではなく，この情報を「解読」するためにきぐぉたぇぅごたぃくさぎごの呼び出しが必要になる．

〲〸
〲〹
〳〰
〳〱
〳〲

きぐぉたぇぅごたぃくさぎご〨びぴちぴふび〬 つちぴちぴべばづ〬 っはふのぴ〩
ぉぎ
ぉぎ
くさご

びぴちぴふびつちぴちぴべばづ
っはふのぴ

受信関数の返り値（ステータス型）
受信バッファの各エントリのデータ型（ハンドル）受信されたエントリの数（整数型）

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

どのぴ きぐぉたぇづぴたっはふのぴ〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ 〪っはふのぴ〩
きぐぉたぇぅごたぃくさぎご〨こごぁごさこ〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺こぴちぴふび〺〺ぇづぴたっはふのぴ〨っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}
こ の 関 数 は 受 信 し た エ ン ト リ の 数 を 返 す（こ こ で も バ イ ト で は な く， そ れ ぞ れのdatatypeが示す型でのエントリの数を数える）．つちぴちぴべばづ引数は，びぴちぴふび変数をセットした受信呼び出しによって渡された引数と一致しなければならない（後程，第〴〮〱〮〱〱節で，きぐぉたぇぅごたぃくさぎごが特定の状況できぐぉたさぎいぅうぉぎぅい値を返す場合を考察する）
．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〴〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

根拠 メッセージ通信ライブラリによっては，ぉぎくさごのっはふのぴ，ぴちで，びはふひっづ引数を使用するものがある．つまりこれらの引数を，入ってくるメッセージの選択基準の指定と，受信メッセージの実際のエンベロープの戻り値の両方で使用する．ステータ
ス型を示す異なった引数を使用することにより，ぉぎくさご引数を用いる場合に発生することの多いエラーを回避することができる（例えば， きぐぉたぁぎすたごぁぇ定数を受信側のタグとして使用する場合など）．ライブラリによっては，暗黙的に「最後の受信メッセージ」を用いる呼び出しを使用するものがあるが，これはスレッドセーフ
ではない．
性能を向上させるために，つちぴちぴべばづ引数がきぐぉたぇぅごたぃくさぎごに渡される． メッセー ジ 中 に 含 ま れ る 要 素 の 数 を 勘 定 せ ず に メ ッ セ ー ジ を 受 信 す る こ と も あ り，
要 素 数 の 値 は 必 要 で な い こ と が 多 い． ま た，こ う す る こ と に よ り，同 じ 関 数をきぐぉたぐげくあぅまたはきぐぉたぉぐげくあぅの呼び出し後に使用することができる．
きぐぉたぐげくあぅまたはきぐぉたぉぐげくあぅから返されるステータス型を使用して，きぐぉたげぅぃざの呼び出しに同じデータ型を指定してこのメッセージを受信することができる． （根拠の終わり）

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

〰バイトが転送された長さ〰のデータ型ではきぐぉたぇぅごたぃくさぎごのっはふのぴ引数として返される値は〰となる．転送されたバイト数が〰より大きい場合， きぐぉたさぎいぅうぉぎぅいが返される．
根 拠 長 さ が〰の デ ー タ 型 は 多 く の 場 合 に 作 成 さ れ る 可 能 性 が あ る． 重 要 なのはきぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁすの場合で，特定の分散配列の定義により一部のきぐぉプロセスで空のブロックが生成されることになる．こぐきいスタイルで記述されたプログラムはこの特別なケースをチェックしないため，ステータス型をチェックするにはきぐぉたぇぅごたぃくさぎごを使用する． （根拠の終わり）

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

ユーザへのアドバイス 受信に必要なバッファサイズはデータ変換と受信データ型のストライドの影響を受ける可能性がある．ほとんどの場合，最も安全な方法
はきぐぉたぇぅごたぃくさぎごと受信で同じデータ型を使用することである． （ユーザへのアドバイス終わり）

〳〶
〳〷
〳〸

全ての送受信関数で，ぢふて，っはふのぴ，つちぴちぴべばづ，びはふひっづ，つづびぴ，ぴちで，っはねね，びぴちぴふび引数が，この節で説明したブロッキング関数きぐぉたこぅぎい，きぐぉたげぅぃざと同様に使用される．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

3.2.6 Status用のMPI_STATUS_IGNOREの受け渡し
全てのきぐぉたげぅぃざの呼び出しではびぴちぴふび引数が使用され，これによってシステムは受信したメッセージに関する詳細情報を返すことができる．これ以外にも，びぴちぴふびが返されるきぐぉ呼び出しが多数ある．きぐぉたこごぁごさこ型のオブジェクトはきぐぉ不可視オブジェクト
ではなく，構造体がねばど〮とおよびねばどて〮とで宣言され，ユーザのプログラム内に存在する．
多くの場合，アプリケーションプログラムはびぴちぴふびフィールドを検査する必要がないよ
うに構成されている．このような場合，ユーザがステータス型オブジェクトを割り当て〳〮〲〮 ブロッキング送信関数および受信関数〴〱

ることは無駄なことで，きぐぉ実装でこのオブジェクトのフィールドを記入することは特に無駄なことである．
この問題に対処するため，〲つの定義済みの構造体きぐぉたこごぁごさこたぉぇぎくげぅおよび
きぐぉたこごぁごさこぅこたぉぇぎくげぅが用意されている．これらを受信，ウェイト，テストの関数に渡すと，ステータス型フィールドに記入しないことが処理系に通知される． ただし，
きぐぉたこごぁごさこたぉぇぎくげぅはきぐぉたこごぁごさこオブジェクトの特別な型ではなく，その引数のための特別な値である．ぃ言語ではこれが特別なきぐぉたこごぁごさこのアドレスではなく， ぎさががになると考えることができる．
きぐぉたこごぁごさこたぉぇぎくげぅと配列バージョンのきぐぉたこごぁごさこぅこたぉぇぎくげぅは，受信，ウェイト，
テストの関数にびぴちぴふび引数が渡される場合には使用することができる．
きぐぉたこごぁごさこたぉぇぎくげぅはびぴちぴふびがぉぎ引数の場合には使用できない．ただし，うはひぴひちの言語ではきぐぉたこごぁごさこたぉぇぎくげぅときぐぉたこごぁごさこぅこたぉぇぎくげぅはきぐぉたあくごごくきの よ う な オ ブ ジ ェ ク トである（初期化や代入には使用できない）．第〲〮〵〮〴節を参照すること．
一般的に，この最適化はびぴちぴふびまたはびぴちぴふび配列がくさご引数である全ての関数に適用することができる． ただし，ここではびぴちぴふびがぉぎくさご引数に変換される．
きぐぉたこごぁごさこたぉぇぎくげぅを 渡 す こ と が で き る 関 数 は 全 て， きぐぉたげぅぃざ，
きぐぉたごぅこご，きぐぉたしぁぉご，きぐぉたげぅけさぅこごたぇぅごたこごぁごさこの各種形態である．配列が渡されると，きぐぉた{ごぅこご|しぁぉご}{ぁがが|こくきぅ}関数と同様に，配列引数用に別の定数
きぐぉたこごぁごさこぅこたぉぇぎくげぅが渡される． きぐぉ関数は， きぐぉたこごぁごさこたぉぇぎくげぅまたは
きぐぉたこごぁごさこぅこたぉぇぎくげぅがその関数に渡されている場合でも，きぐぉたぅげげたぉぎたこごぁごさこを返すことができる．
きぐぉたこごぁごさこたぉぇぎくげぅときぐぉたこごぁごさこぅこたぉぇぎくげぅは，ぃ言語とうはひぴひちの言語で同じ値を持つ必要はない．
きぐぉた{ごぅこご|しぁぉご}{ぁがが|こくきぅ}関数で びぴちぴふび配列のステータス型の一部をきぐぉたこごぁごさこたぉぇぎくげぅに設定することはできず， きぐぉたこごぁごさこぅこたぉぇぎくげぅを使用して呼び出しで全てのステータスを無視するよう指定するか，びぴちぴふび配列の全ての位置で正常なス
テータスを渡すことにより1つも無視しないように指定する．
きぐぉたこごぁごさこたぉぇぎくげぅまたはきぐぉたこごぁごさこぅこたぉぇぎくげぅのためのぃ〫〫言語の呼び出し形式はない． くさごまたはぉぎくさごのきぐぉ〺〺こぴちぴふび引数を無視できるようにするため， くさごまたはぉぎくさごのきぐぉ〺〺こぴちぴふびパラメータを持つ全てのきぐぉぃ〫〫言語の呼び出し形式に，くさごまたはぉぎくさごきぐぉ〺〺こぴちぴふびパラメータを削除した第〲のバージョンのものがオーバーロード
される．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

例 3.1 きぐぉたぐげくあぅのためのぃ〫〫言語の呼び出し形式は以下のようになる．
ぶはどつ きぐぉ〺〺ぃはねね〺〺ぐひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 っはのびぴ
ぶはどつ きぐぉ〺〺ぃはねね〺〺ぐひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信〴〲〱

3.3 データ型の一致とデータ変換

〲
〳
〴
〵

3.3.1 型一致規則
メッセージ転送を，次の〳つのフェーズで構成されるものと考えることができる．

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〮 データが送信バッファから引き出され，メッセージが組み立てられる．
〲〮 メッセージが送信側から受信側へ転送される．
〳〮 入ってくるメッセージからデータが取りだされ，分解されて受信バッファに入れられる．
この〳つのフェーズで型一致を守らなければならない．送信バッファのそれぞれの変数の型が，送信関数でのエントリで指定された型と一致しなければならない．また送信関数で指定された型は，受信関数で指定された型と一致しなければならない．さらに，受信バッファのそれぞれの変数の型も，受信関数のエントリで指定された型と一致しなけ
ればならない．これらの〳つの規則が守られていないプログラムは，誤りである．
型一致をもっと正確に定義するためには，ホスト言語の型と通信関数で指定した型との一致，および送信側と受信側の型の一致という，〲つの問題を扱う必要がある．
送信と受信の型は，両方の関数の型の名前が同一であれば一致する（フェーズ 〲）．つまりきぐぉたぉぎごぅぇぅげはきぐぉたぉぎごぅぇぅげと一致し，きぐぉたげぅぁがはきぐぉたげぅぁがと一致するということである．この規則には〱つだけ例外があり，第〴〮〲節で説明したきぐぉたぐぁぃかぅい型は他のどんな型とも一致させることができる．
ホストプログラムの変数の型は，通信関数で使用されているデータ型名が，ホストプログラム変数の基本型と対応する場合，その関数で指定した型と一致する． 例
えば，型名きぐぉたぉぎごぅぇぅげを持つエントリは，ぉぎごぅぇぅげ型のうはひぴひちの言語変数と一致する．
うはひぴひちの言語とぃ言語におけるこの対応を示す表が第〳〮〲〮〲節にある．この規則にも例外が〲つある．型名きぐぉたあすごぅやきぐぉたぐぁぃかぅいは，データ記憶領域の任意のバイトと対応するために使用されるものであり（バイトによるアドレス指定可能マシンの場合），このバ
イトを含む変数のデータ型とは関係ない．第〴〮〲節に示すように，きぐぉたぐぁぃかぅい型は，明示的にパックするデータを送信したり，明示的にアンパックされるデータを受信したりするときに使用される．きぐぉたあすごぅ型は，メモリ内の任意のバイトのバイナリ値を変更
なしに転送するときに使用される．
以上をまとめると，型一致規則は以下の〳つのカテゴリに分類される．
• 型の指定された値の通信（すなわちきぐぉたあすごぅデータ型以外を使用する場合）では，送信側のプログラム，送信呼び出し，受信呼び出し，受信側のプログラムでの対応するエントリのデータ型は，全て一致しなければならない．
• 型の指定されない値の通信（すなわちきぐぉたあすごぅデータ型を使用する場合），すな
わち送信側と受信側の両方がきぐぉたあすごぅデータ型を使用する場合では，送信側プロ
グラムと受信側プログラムでの，対応するエントリの型になんらの要件もなく，それらが同じである必要もない．

〳〮〳〮 データ型の一致とデータ変換〴〳• きぐぉたぐぁぃかぅいが使用されている，パックされたデータを含む通信．

〱〲

以下の例で，最初の〲つの場合を説明する．
例 3.2 送信側と受信側が一致した型を指定する場合
ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨ち〨〱〩〬 〱〰〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ぢ〨〱〩〬 〱〵〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉう

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

ちとぢの両方が，〱〰以上の大きさの実数型配列の場合，このプログラムは正しい．
〱〲（うはひぴひちの言語の場合，例えばち〨〱〩が〱〰個の実数要素を持つ配列に記憶領域をぅけさぉざぁがぅぎぃぅ 〱〳〱〴させることができる場合など，ちとぢのいずれかのサイズが〱〰より小さくても，このプロ〱〵グラムを使用することは正しい時がある．）〱〶

例 3.3 送信側と受信側の型が一致しない場合〱〷〱〸

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨ち〨〱〩〬 〱〰〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ぢ〨〱〩〬 〴〰〬 きぐぉたあすごぅ〬 〰〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉうこのプログラムは，送信側と受信側が一致するデータ型引数を指定しないため， 誤り
である．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

例 3.4 送信側と受信側が型指定されない値での通信をした場合〲〷〲〸

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨ち〨〱〩〬 〴〰〬 きぐぉたあすごぅ〬 〱〬 ぴちで〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ぢ〨〱〩〬 〶〰〬 きぐぉたあすごぅ〬 〰〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉうこのプログラムは，ちとぢの型とサイズにかかわらず正しい（ それぞれの変数に割り当てられたメモリ領域の境界を超えたメモリアクセスが生じない場合）
．

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

ユーザへのアドバイス きぐぉたあすごぅ型のバッファがきぐぉたこぅぎい関数の引数として渡された場合，きぐぉはぢふて引数によって示されたアドレスから始まる，連続した領域に格納されたデータを送る．これを行うと，通常のユーザが期待するものとデー
タ配置が違っている場合，予期しない結果になることがある．例えば，うはひぴひちの言
語コンパイラの中には， ぃえぁげぁぃごぅげ型の変数を，文字の長さと，実際の文字列に対するポインタを含む構造体として実装するものがある．このような環境では，
きぐぉたあすごぅ型を使用して，うはひぴひちの言語のぃえぁげぁぃごぅげ型の変数を送受信すると，文字列を転送したときの予想結果と違う結果になることがある．このためユーザに対しては，可能な限り型指定の通信を使用するように奨める． （ユーザへのアドバイ
ス終わり）

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信〴〴〱

きぐぉたぃえぁげぁぃごぅげ型

〲
〳
〴
〵
〶

きぐぉたぃえぁげぁぃごぅげ型は，ぃえぁげぁぃごぅげ型のうはひぴひちの言語変数に格納された文字列全体ではなく，その変数の中の〱文字と対応する． ぃえぁげぁぃごぅげ型のうはひぴひちの言語の変数または部分
文字列は，文字の配列であるかのように転送される．これについては以下の例で説明す
る．

〷〸

例 3.5 うはひぴひちの言語のぃえぁげぁぃごぅげの転送〹〱〰

ぃえぁげぁぃごぅげ〪〱〰 ち
ぃえぁげぁぃごぅげ〪〱〰 ぢ

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨ち〬 〵〬 きぐぉたぃえぁげぁぃごぅげ〬 〱〬 ぴちで〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ぢ〨〶〺〱〰〩〬 〵〬 きぐぉたぃえぁげぁぃごぅげ〬 〰〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉうプロセス〱における文字列ぢの最後の〵文字が，プロセス〰における文字列ちの最初の〵文字で置換される．
根拠 もう〱つの選択肢は，きぐぉたぃえぁげぁぃごぅげを任意の長さの文字列と一致させることである．こうした場合には問題が発生する．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

うはひぴひちの言語の文字変数は，一定の長さの文字列で，特殊な終端記号がない．文字を表現するときの決まった規則はなく，その長さを格納する方法に関する規則もない．コンパイラによっては，文字引数を一対の引数としてルーチンに渡すものもある．この場合，〱つには文字列のアドレスが含まれ，もう〱つには文字列の長さが含まれる． 派生データ型で定義された型（第〴〮〱節）を含む通信バッファが，あるきぐぉ通信呼び出しに渡される場合を想定してみよう．この通信バッファにぃえぁげぁぃごぅげ型が含まれている場合，これらの文字列の長さの情報がきぐぉルーチンに渡されることはない．

〳〲
〳〳
〳〴
〳〵
〳〶

この問題があるために，きぐぉ呼び出しでは，文字列の長さに関する明示的な情報を提供しなければならない．きぐぉたぃえぁげぁぃごぅげ型に長さのパラメータを追加することはできるが，これはあまり便利ではなく，適切な派生データ型を定義することによって同じ機能を実現することができる． （根拠の終わり）

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

実装者へのアドバイス コンパイラによっては，うはひぴひちの言語のぃえぁげぁぃごぅげ引数を，長さと実際の文字列を示すポインタを持つ構造体として渡すものもある．このような環境では，文字列に至るために，きぐぉ呼び出しでポインタの参照解決をおこなう必要がある． （実装者へのアドバイス終わり）〴〳〴〴

3.3.2 データ変換

〴〵
〴〶
〴〷
〴〸

きぐぉの目標の〱つは，異機種環境で並列計算をサポートすることである．異機種環境で通信を行うときは，データ変換が必要になる場合がある．ここでは以下の用語を使用す
る．

〳〮〳〮 データ型の一致とデータ変換〴〵

型変換 値のデータ型を変更すること．例えば，げぅぁがを丸めてぉぎごぅぇぅげに変換すること．

〱〲

表現変換 値の〲進表現を変更すること．例えば，〱〶進浮動小数点数からぉぅぅぅ浮動小数点数に変換すること．
型一致規則により，きぐぉ通信では型変換は伴わない．それに対して，ある型の値の表
現形式が異なるような環境の間でこの型の値が転送される場合には，きぐぉ通信での表現変換が必要になる．きぐぉでは表現変換の規則を規定していない．そのような変換では，整数，論理，または文字としての値を維持することと， 浮動小数点数としての値を，相手側のシステムで表現できる最も近い値に変換することが必要である．
浮動小数点数変換の場合，オーバーフローやアンダーフローの例外が発生することもある．整数や文字の変換でも，あるシステムで表現できる値が別のシステムで表現できないとき，例外が発生することがある．表現変換のときに発生する例外は，結果的に通信時のエラーになる．エラーは，送信操作と受信操作のいずれか，またはその両方で発生する．
メッセージで送信される値が，型の指定されない値の場合（つまりきぐぉたあすごぅ型），受
信側に格納されるそのバイトの〲進表現は，送信側でロードされるバイトの〲進表現と同一である．送信側と受信側が同じ環境で動作していても，あるいは違う環境で動作していても，これは真になる．表現変換は必要ない（きぐぉたぃえぁげぁぃごぅげ型やきぐぉたぃえぁげ型の値が転送されるときは，表現変換が発生し得ることに注意，例えばぅあぃいぉぃ符号からぁこぃぉぉ符号への変換）．
全てのプロセスが同じ環境で動作するような，同機種環境できぐぉプログラムが実行されるとき，変換を行う必要はない．
〳〮〲から〳〮〴までの〳つの例題を考えてみる．ちとぢが〱〰以上のサイズを持つげぅぁがの配列である場合，最初のプログラムは正しい．送信側と受信側が異なる環境で実行する場合，
送信バッファから取り出される〱〰個の実数値が，受信バッファに格納される前に，受信側の実数表現に変換される．送信バッファから取り出される実数の要素の数が，受信バッファに格納される実数の要素の数と等しくても，格納されるバイト数はロードされるバイト数と同じである必要はない．例えば，送信側が実数に〴バイトの表現を使用し，受信側が〸バイトの表現を使用することもある．
〲番目のプログラムは誤りであり，その動作は保証されない．
〳番目のプログラムは正しい．送信側と受信側が異なる環境で動作しても，送信バッフ
ァからロードされたのとまったく同じ〴〰バイトの列が受信バッファに格納される．送られるメッセージは，受信されるメッセージとまったく同じ長さ（バイトで）と同じ〲進表
現を持っている．ちおよびぢが異なる型の場合，または同じ型であっても異なるデータ表
現が使用されている場合，受信バッファ に格納されたビット列は，送信バッファで符号化された値とは異なる値を符号化することがある．
データの表現変換は，メッセージのエンベロープにも適用される．送信元，送信先，タグは全て整数であり，変換が必要な場合がある．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

実装者へのアドバイス 現在の定義では，メッセージにデータ型の情報を持つことを要求していない．送信側と受信側の両方が，データ型に関する完全な情報を与え〴〷〴〸第 〳〮 〱対〱通信

〴〶
〱
〲
〳
〴
〵
〶
〷

る．異機種環境では，じいげのような機種非依存のコード変換を使用するか，受信側で送信側の表現を独自の表現に変換するか，さらには送信側で変換を行うかのいずれかになる．システムで送信側と受信側のデータ型の間の不一致を検出するようにするため，その他の型情報をメッセージに追加することができる．これは，遅いがより安全という意味で，デバッグ時に特に便利である可能性がある． （実装者へのアドバイス終わり）

〸
〹
〱〰
〱〱
〱〲
〱〳

きぐぉは言語間の通信をサポートする必要がある．つまり，ぃ言語またはぃ〫〫言語 のプ
ロセスによって送信されたメッセージをうはひぴひちの言語のプロセスが受信したり，この逆方向で送受信したりするのをサポートする必要がある．この動作については〵〱〹ページの第〱〶〮〳節で定義している．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

3.4 通信モード
第〳〮〲〮〱節で説明した送信呼び出しは，ブロッキングである．つまり，メッセージデー
タとエンベロープが安全に格納されて，送信側が送信バッファを自由に修正できるようになるまでは，この呼び出しは戻らない．メッセージは，対応する受信バッファに直接コピーされるか，もしくは，一時的なシステムバッファにコピーされる．
メッセージのバッファリングは，送信操作と受信操作を独立なものとする．ブロッキ
ング送信は，マッチする受信が受信側で実行されていなくても，メッセージがバッファリングされればすぐに完了することができる．一方で，メッセージバッファリングは，
新たなメモリ間コピーを伴い，また，バッファリングのためのメモリ割り当てを必要とするのでコストが高くなる可能性がある． きぐぉはいくつかの通信モードの選択肢を提供しており，これにより，通信プロトコルの選択を制御することができる．
第〳〮〲〮〱節で説明した送信呼び出しは，標準送信モードを使用する．このモードでは，
送信メッセージがバッファリングされるかどうかを決定するのはきぐぉに任せている．
きぐぉは，送信メッセージをバッファリングすることもできる．このような場合には，送信呼び出しは，マッチする受信が起動される前に完了することができる．一方で，バッファ領域が使用できない場合もあるし，きぐぉが性能上の理由から，送信メッセージをバッファリングしないことを選択する場合もある．この場合には，送信呼び出しは，マッチする受信が発行され，データが受信側に移動してしまうまでは完了しない．
このように，標準モードでの送信は，マッチする受信が発行されているかどうかにか
かわらず，開始することができる．これは，マッチする受信が発行される前に完了することもある．標準モード送信は非ローカルである．つまり，送信操作が成功完了するかどうかは，マッチする受信が発生するかどうかに依存する場合がある．

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

根拠 きぐぉにおいて，標準送信がバッファリングするかどうかを指定しないのは，可搬なプログラムを作るという要求に起因している．メッセージサイズが増えるに従って，どのシステムもバッファ資源を使い尽くすため，また，ある実装では，バッファリングをほとんど提供しないために，きぐぉは正しい（したがって可搬な）プ
ログラムは標準モードでシステムバッファリングに依存しないという立場をとる．

〳〮〴〮 通信モード〴〷

バッファリングは正しいプログラムの性能を向上させる場合もある．しかし，プログラムの結果には影響を与えない．もし，ユーザがある量のバッファリングを保証したければ，バッファモードの送信と共に，第〳〮〶節のユーザ提供バッファシステ
ムを使用するべきである． （根拠の終わり）

〱
〲
〳
〴
〵
〶

他に，〳つの追加的な通信モードが存在する．
バッファモード送信操作は，マッチする受信が発行されているかどうかにかかわらず，
開始することができる．これは，マッチする受信が発行される前に完了する可能性もある．しかしながら，標準送信とは異なり，この操作はローカルである．そして，その完了は，マッチする受信が発生するかどうかに依存しない．したがって，送信が実行され，マッチする受信が発行されない場合には，きぐぉは送信呼び出しが完了できるように送信
メッセージをバッファリングしなければならない．バッファ領域が不十分な場合には，エラーが発生する．利用可能なバッファ領域の量はユーザが制御する（第〳〮〶節参照）．
バッファモードが有効に働くためには，ユーザによるバッファ割り当てが必要になる．
同期モードを使用する送信は，マッチする受信が発行されているかどうかにかかわらず，開始することができる．しかしながら，送信は，マッチする受信が発行され，そして，受信操作が同期送信によって送信されたメッセージを受信開始した場合にのみ成功
完了する．このように，同期送信の完了は，送信バッファ が再利用できることを示すだ
けでなく，受信側が実行におけるあるポイントに到達したこと，つまり，マッチする受信の実行が開始されたことを示す．送信および受信の両操作がブロッキング操作の場合，同期モードの使用は同期通信を意味する．つまり通信は，両方のプロセスが通信で出会う前にはどちら側も完了しない．このモードで実行される送信は，非ローカルである．
レディ通信モードを使用する送信は，マッチする受信がすでに発行されている場合にのみ，開始することができる．それ以外の場合は，この操作は誤りであり，その結果は保証されない．システムによっては，レディ通信は，他の通信で必要なハンドシェイク
操作をなくすことが可能となり，性能改善をもたらす． 送信操作の完了は，マッチする
受信の状態には依存せず，単に送信バッファが再使用できることを意味する．レディモードを使用する送信操作は，標準送信操作あるいは同期送信操作と意味的には同じである．単に送信側が（マッチする受信が既に発行されているという）追加情報をシステムに提供し，ある種のオーバーヘッドを抑えるということにすぎない．したがって，正しいプログラムにおいては，性能を除くプログラムの動作に影響を与えることなく，レディ送信を標準送信で置き換えることができる．
これら〳つの追加的な通信モードに対して，〳つの追加的な送信関数が提供されている．
通信モードは〱文字の接頭語で表される．あはバッファ，こは同期，そしてげはレディであ
る．

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〴〸
〱
〲
〳
〴

きぐぉたあこぅぎい 〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩
ぉぎ
ぉぎ

〵

ぉぎ

〶

ぉぎ

〷

ぉぎ

〸

ぉぎ

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね

送信バッファの先頭アドレス（選択型）
送信バッファ内の要素数（非負の整数型）
各送信バッファ要素のデータ型（ハンドル）
送信先先のランク（整数型）
メッセージタグ（整数型）
コミュニケータ（ハンドル）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

どのぴ きぐぉたあびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〩
きぐぉたあこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺あびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
バッファモードの送信．

〱〸
〱〹
〲〰

きぐぉたここぅぎい 〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩

〲〱

ぉぎ

〲〲

ぉぎ

〲〳

ぉぎ

〲〴
〲〵

ぉぎ

〲〶

ぉぎ

〲〷

ぉぎ

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね

送信バッファの先頭アドレス（選択型）
送信バッファ内の要素数（非負の整数型）
各送信バッファ要素のデータ型（ハンドル）
送信先のランク（整数型）
メッセージタグ（整数型）
コミュニケータ（ハンドル）

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

どのぴ きぐぉたこびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〩
きぐぉたここぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺こびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
同期モードの送信．

〳〷
〳〸
〳〹

きぐぉたげこぅぎい 〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩

〴〰

ぉぎ

〴〱

ぉぎ

〴〲

ぉぎ

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぉぎ
ぉぎ
ぉぎ

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね

送信バッファの先頭アドレス（選択型）
送信バッファ内の要素数（非負の整数型）
各送信バッファ要素のデータ型（ハンドル）
送信先のランク（整数型）
メッセージタグ（整数型）
コミュニケータ（ハンドル）

どのぴ きぐぉたげびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〩〳〮〴〮 通信モード〴〹

きぐぉたげこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺げびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
レディモードの送信．
受信操作は一つだけであり，どの送信モードにもマッチすることができる．前節で記述された受信操作はブロッキングである．つまり，受信バッファが新しく受信したメッ
セージを取り込んだ後にのみ戻る．受信は，マッチする送信が完了する前に，完了することができる．（当然，それはマッチする送信が開始した後にのみ戻ることができる．）
きぐぉのマルチスレッド実装では，システムは，送信や受信操作でブロッキングされたスレッドを待機させ，同じアドレス空間の別のスレッドをスケジュールすることができる．このような場合には，通信が完了するまでユーザの責任において通信バッファを変更しないようにする必要がある．そうしないと，計算の結果は保証されない．
実装者へのアドバイス 同期送信は，マッチする受信が発行される前には完了できないので，そのような操作により送信されたメッセージのバッファリングは通常行
わない．
標準送信に対しては，できるだけ，送信側をブロッキングするよりも，バッファリ
ングを選択することが推奨される．プログラマは，同期送信モードを使用することによって，マッチする受信が発生するまで送信側をブロッキングしたい意向を明示することができる．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

さまざまな通信モードで使用可能な通信プロトコルを以下に概説する．
レディ送信：メッセージはできるだけ早く送られる．

〲〸
〲〹
〳〰

同期送信：送信側は送信要求メッセージを送信する．受信側はこの要求を保存す
る．マッチする受信が発行されたときに，受信側は送信許可メッセージを送り返し，送信側がメッセージを送信する．
標準送信：短いメッセージに対しては第〱の送信プロトコルが使用され，長いメッ
セージに対しては第〲のプロトコルが使用される．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

バッファ送信：送信側はメッセージをバッファにコピーし，それを（標準送信と同じプロトコルを使用して）ノンブロッキング送信により送信する．

〳〷

フロー制御とエラー回復のためには，追加的な制御メッセージが必要になると考えられる．当然，その他にも可能なプロトコルは多数ある．

〴〰

〳〸
〳〹

〴〱
〴〲

レディ送信は，標準送信として実装可能である．この場合には，レディ送信を使用することによる性能上の利点（あるいは欠点）はない．
標準送信は，同期送信として実装可能である．この場合には，データバッファリン
グは必要ない．しかし，ユーザはバッファリングを利用することもできる．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信〵〰

〴

マルチスレッド環境では，ブロッキング通信の実行は，スレッドスケジューラが実
行スレッドを待機させ，別のスレッドの実行のスケジュールを許可することで，実行スレッドのみをブロッキングする必要がある．

〵（実装者へのアドバイス終わり）

〱
〲
〳

〶
〷
〸

3.5 1対1通信の意味論

〹
〱〰
〱〱

正しいきぐぉ実装は，〱対〱通信のある種の一般的な性質を保証しており，この節ではこれについて説明する．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

順序 メッセージは追越し禁止である：送信側が〲つのメッセージを続けて同じ送信先に送信し，両方の送信が同じ受信とマッチする場合には，第〱のメッセージがまだ保留中の状態であれば，この受信操作は第〲のメッセージを受信することができな
い． 受信側が〲つの受信を続けて発行し，両方が同じメッセージにマッチする場合には，第〱の受信がまだ保留中の状態であれば，第〲の受信操作はこのメッセージに対応できない． この要件により，送信と受信のマッチが容易になる． このことは，プロセスが単一スレッドでしかも受信側においてワイルドカードきぐぉたぁぎすたこくさげぃぅが使用されていない場合に，メッセージ通信コードの決定性を保証する．（後で述べる，
きぐぉたぃぁぎぃぅがやきぐぉたしぁぉごぁぎすのようなある種の呼び出しは，追加的な非決定性のもととなる．）
プロセスが単一スレッドの実行の場合には，このプロセスによって実行されるどの〲つの通信も順序が決まっている．一方，プロセスがマルチスレッドの場合には，スレッド実行が意味するところでは，〲つの違ったスレッドにより実行された〲つの送信操作の間の相対的な順序は不定となる．たとえ，〱つのスレッドが物理的に他よりも先行していたとしても，それらの操作は論理的には並行している．このような場合には，送信された〲つのメッセージは任意の順序で受信されうる．同様に，論理的には並行している〲つの受信操作が連続で送信された〲つのメッセージを受信する場合には，これらの〲つのメッセージは〲つの受信といずれの順序でもマッチされうる．

〳〵〳〶

例 3.6 追越し禁止メッセージの例

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたあこぅぎい〨ぢふて〱〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 どづひひ〩
ぃぁがが きぐぉたあこぅぎい〨ぢふて〲〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ぢふて〱〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 きぐぉたぁぎすたごぁぇ〬 っはねね〬 びぴちぴふび〬 どづひひ〩
ぃぁがが きぐぉたげぅぃざ〨ぢふて〲〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉう

〴〴
〴〵
〴〶
〴〷
〴〸

第〱の送信により送信されたメッセージは，第〱の受信により受信されなければならな
い，また，第〲の送信により送信されたメッセージは，第〲の受信により受信されなければならない．

〳〮〵〮 〱対〱通信の意味論〵〱

プログレス マッチする送信と受信の〱対が〲つのプロセスで起動された場合には，シス
テムの他の動作とは独立に，これら〲つの操作のうち少なくとも〱つは完了する．つまり，受信が別のメッセージによって完了する，ということが起こらない場合には，送信操作が完了し，送信されたメッセージが同じ受信先で発行されたマッチする別の受信により消費される，ということが起こらない場合には，受信操作が完了する．

〱
〲
〳
〴
〵
〶
〷

例 3.7 交差してマッチする〲つの対の例〸〹

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたあこぅぎい〨ぢふて〱〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〱〬 っはねね〬 どづひひ〩
ぃぁがが きぐぉたここぅぎい〨ぢふて〲〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〲〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ぢふて〱〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 ぴちで〲〬 っはねね〬 びぴちぴふび〬 どづひひ〩
ぃぁがが きぐぉたげぅぃざ〨ぢふて〲〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 ぴちで〱〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉう

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

両プロセスが第〱の通信呼び出しを起動する．プロセス〰の第〱の送信はバッファモードを使用しているため，プロセス〱の状態とは無関係に完了しなければならない．マッチする受信が発行されないので，メッセージはバッファ領域にコピーされる．（充分なバッフ
ァ領域がない場合にはこのプログラムはエラーとなる．）次に，第〲の送信が起動される．
この時点において，マッチする〱対の送信操作と 受信操作が開始可能となり，両操作は完了しなければならない．次にプロセス〱は，第〲の受信呼び出しを起動し，これはバッファリングされたメッセージとマッチする．プロセス〱が，送信されたのとは逆順にメッ
セージを受信したことに注意すること．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

公平性 きぐぉは通信の取り扱いの公平性をなんら保証しない．送信が発行された場合を考えてみよう．この時，送信先のプロセスが，この送信にマッチする受信を繰り返し発行するのだが，その度に別の送信元から送信された別のメッセージにより追い越されるために，このメッセージが受信されないといったことが起こりうる．同様に，受信がマ
ルチスレッドプロセスによって発行された場合を考えてみよう．この受信にマッチする
メッセージが繰り返し受信されるのだが，このノード（で実行中の他のスレッド）で発行された他の受信により追い越されるために，この受信が完了しないといったことも起
こりうる．このような状況を回避するのは，プログラマの責任である．

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

資源制限 保留中の通信操作は限りあるシステム資源を消費している．資源の不足により， きぐぉ呼び出しの実行ができない場合には，エラーが起こりうる．高品質な実装では，それぞれのレディモードや同期モードでの保留中の送信及び保留中の 受信に対して，（小さな）一定量の資源を使用する．しかし，バッファ領域は， マッチする受信がない場合に標準モードで送信されたメッセージを格納するために消費されうるし，バッ
ファモードで送られてきたメッセージを格納するためには必ず消費される．多くのシステムにおいては，バッファリングに利用できる領域量は，プログラムデータメモリに比べて非常に小さくなっている．そのため，利用可能バッファ領域を使い尽くすプログラ
ムになりやすい．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

第 〳〮 〱対〱通信

きぐぉでは，バッファモードで送られるメッセージのためのバッファメモリをユーザが用意することができる．さらにきぐぉは，このバッファ使用に対する詳細な操作モデルを指定している．きぐぉの実装では，このモデルで示される以上の事が要求される．これにより，ユーザはバッファ送信の使用時にバッファオーバーフローを避けることができる．
バッファの割り当てと使用法は第〳〮〶節で説明する．
バッファ領域の不足により完了できないバッファ送信は誤りである．その様な状況が検知されれば，プログラムが異常終了する可能性があるというエラーが出される．一方，バッファ領域の不足により完了できない標準送信操作は，バッファ領域が利用可能にな
るか，マッチする受信が発行されるのを待ちながら，単にブロッキングする．この動作は，多くの状況において望ましいものである．生産者側が，繰り返し新しい値を作成して，それらを消費者側に送信している状況を考えてみよう．生産者側が，消費者側の消費できる新しい値をより速く作成すると仮定する．バッファ送信が使用された場合には，バッファのオーバーフローが生じると考えられる．これが発生するのを防ぐためには，他の同期をプログラムに加える必要がある．標準送信が使用される場合には，バッファ領域が使用できなければ，送信操作がブロッキングし，生産者側は自動的に速度調整される．
状況によっては，バッファ領域の不足はデッドロック状況を招く．これについては，
以下の例で説明する．
例 3.8 メッセージの交換
ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨びづのつぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 どづひひ〩
ぃぁがが きぐぉたげぅぃざ〨ひづっぶぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ひづっぶぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩
ぃぁがが きぐぉたこぅぎい〨びづのつぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 どづひひ〩ぅぎい ぉうこのプログラムは，データのためのバッファ領域が使用できなくても成功する．この例では，標準送信操作は同期送信で置き換えることができる．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

例 3.9 誤った メッセージ交換の試み
ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ひづっぶぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩
ぃぁがが きぐぉたこぅぎい〨びづのつぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ひづっぶぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩
ぃぁがが きぐぉたこぅぎい〨びづのつぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 どづひひ〩ぅぎい ぉう第〱のプロセスの受信操作はその送信の前に完了しなければならず，これは第〲のプロ
セスのマッチする送信が実行された場合にのみ完了することができる．第〲のプロセスの受信操作はその送信の前に完了しなければならず，これは第〱のプロセスのマッチする送信が実行された場合にのみ完了することができる．このプログラムは常にデッドロック
する．他の送信モードに対しても，同じ事が起こる．

〳〮〵〮 〱対〱通信の意味論〵〳

例 3.10 バッファリングに依存した交換〱〲

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨びづのつぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 どづひひ〩
ぃぁがが きぐぉたげぅぃざ〨ひづっぶぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨びづのつぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 どづひひ〩
ぃぁがが きぐぉたげぅぃざ〨ひづっぶぢふて〬 っはふのぴ〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉう
各プロセスにより送信されるメッセージは，送信操作が戻り，また，受信操作が開始する前にコピーアウトされなければならない．プログラムが完了するためには，送信される〲つのメッセージのうち少なくとも〱つはバッファリングされることが必要である．
したがって，このプログラムは，通信システムが少なくともっはふのぴ個のワードデータをバッファリングできる場合にのみ成功する．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

ユーザへのアドバイス 標準送信が使用されるときには，バッファ領域が使用できないために両方のプロセスがブロッキングされる場合に，デッドロック状況が発生する．同期モードが使用される場合にも，同様のことが必ず起こる．バッファモー
ドが使用され，十分なバッファ領域が利用できない場合には，プログラムは完了しない．しかしながら，デッドロック状況は起こらず，バッファオーバーフローエラ
ーになる．
プログラムが完了するために，メッセージのバッファリングが必要ない場合には，プログラムは「安全」である．そのようなプログラムでは全ての送信を同期送信に置き換えることができ，しかもプログラムは正しく実行される．この保守的なプロ
グラミングスタイルは，最良の可搬性を提供する．これは，プログラムの完了が，使用可能なバッファ領域の量や，使用される通信プロトコルに依存しないからである．
多くのプログラマは高い自由度を好み，例〳〮〱〰に示されるような，「危険な」プロ
グラミングスタイルを使用しようとする．そのような場合には，標準送信を使用することにより性能と頑健さの最良の妥協点を見出すことができる．つまり，高品質な実装では「通常の」プログラムがデッドロックしないように，十分なバッファリ
ングが提供される．バッファ送信モードは，より多くのバッファリングを必要とす
るプログラムに対して，またプログラマが制御を強化したい状況において使用できる．このモードは，バッファオーバーフロー状況の方がデッドロック状況よりも診断しやすいため，デバッギングの目的のためにも使用されうる．
第〳〮〷節で説明するように，送信メッセージのバッファリングの必要性を避けるた
めに，ノンブロッキングメッセージ通信操作を使用することができる．このことにより，バッファ領域の不足によるデッドロックを回避でき，計算と通信との重ね合わせを可能にし，また，バッファの割り当てとバッファへのメッセージのコピーによるオーバーヘッドを回避することにより，性能を改善する． （ユーザへのアドバイス終わり）

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信〵〴〱

3.6 バッファの割り当てと使用法〲〳〴

ユーザは，バッファモードで送られるメッセージのバッファリングに使用されるバッファを指定することができる．バッファリングは送信側で行われる．

〵
〶
〷
〸
〹

きぐぉたあさううぅげたぁごごぁぃえ〨ぢふ》づひ〬 びどぺづ〩
ぉぎ
ぉぎ

ぢふ》づひ
びどぺづ

バッファの先頭アドレス（選択型）
バッファサイズ（バイト）（非負の整数型）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

どのぴ きぐぉたあふててづひたちぴぴちっと〨ぶはどつ〪 ぢふててづひ〬 どのぴ びどぺづ〩
きぐぉたあさううぅげたぁごごぁぃえ〨あさううぅげ〬 こぉずぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさううぅげ〨〪〩ぉぎごぅぇぅげ こぉずぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぁぴぴちっとたぢふててづひ〨ぶはどつ〪 ぢふててづひ〬 どのぴ びどぺづ〩 （廃止された呼び出し形式, 第15.2節
を参照）}
送信メッセージのバッファリングに使用するユーザメモリ内のバッファをきぐぉ に与える．このバッファは，バッファモードで送られるメッセージによってのみ使用される．
同時には，ただ〱つのバッファのみが〱つのプロセスに結びつけられる．

〲〱
〲〲
〲〳
〲〴

きぐぉたあさううぅげたいぅごぁぃえ〨ぢふ》づひたちつつひ〬 びどぺづ〩
くさご
くさご

ぢふ》づひたちつつひ
びどぺづ

バッファの先頭アドレス（選択型）
バッファサイズ（バイト）（非負の整数型）

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

どのぴ きぐぉたあふててづひたつづぴちっと〨ぶはどつ〪 ぢふててづひたちつつひ〬 どのぴ〪 びどぺづ〩
きぐぉたあさううぅげたいぅごぁぃえ〨あさううぅげたぁいいげ〬 こぉずぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさううぅげたぁいいげ〨〪〩ぉぎごぅぇぅげ こぉずぅ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺いづぴちっとたぢふててづひ〨ぶはどつ〪〦 ぢふててづひ〩 （廃止された呼び出し形式, 第15.2節を参照）}
現在きぐぉに関連付けれらたバッファを切り離す．この呼び出しは，切り離されたバッ
ファのアドレスとサイズを返す．現在バッファにある全てのメッセージが転送されるまで，この操作はブロッキングする．この関数が戻った時点で，ユーザはこのバッファにより占められた領域を再利用したり，解放したりできる．

〳〶〳〷

例 3.11 バッファの結びつけおよび切り離しのための呼び出し

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〣つづてどのづ あさううこぉずぅ 〱〰〰〰〰
どのぴ びどぺづ〻
っとちひ 〪ぢふてて〻きぐぉたあふててづひたちぴぴちっと〨 ねちぬぬはっ〨あさううこぉずぅ〩〬 あさううこぉずぅ〩〻〪〯 ち ぢふててづひ はて 〱〰〰〰〰 ぢべぴづび っちの のはぷ ぢづ ふびづつ ぢべ きぐぉたあびづのつ 〪〯きぐぉたあふててづひたつづぴちっと〨 〦ぢふてて〬 〦びどぺづ〩〻〪〯 あふててづひ びどぺづ ひづつふっづつ ぴは ぺづひは 〪〯きぐぉたあふててづひたちぴぴちっと〨 ぢふてて〬 びどぺづ〩〻〪〯 あふててづひ はて 〱〰〰〰〰 ぢべぴづび ちぶちどぬちぢぬづ ちでちどの 〪〯〳〮〶〮 バッファの割り当てと使用法〵〵

ユーザへのアドバイス ぃ言語関数きぐぉたあふ》づひたちぴぴちっとときぐぉたあふ》づひたつづぴちっとは両方とも第〱引数にぶはどつ〪型を持つが，これらの引数は異なった方法で使われる．つまり，
きぐぉたあふ》づひたちぴぴちっとへはバッファを指すポインタが渡され， きぐぉたあふ》づひたつづぴちっとへは，
この呼び出しがポインタ値を返せるように，ポインタのアドレスが渡される．（ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷

根拠 複雑な型変換を避けるため，両引数はぶはどつ〪型として定義されている（それぞれがぶはどつ〪とぶはどつ〪〪となるのではなく）．例えば，最後の例では，っとちひ〪〪型をもつ〦ぢふ》
は，型変換される事なく引数としてきぐぉたあふ》づひたつづぴちっと に渡される． 正式な引数
がぶはどつ〪〪型を持つ場合には，呼び出しの前後で型変換を行う必要がある．（根拠の終わり）
この節では，バッファモード送信におけるきぐぉの動作について説明する．現在バッフ
ァが付随していない場合，きぐぉはプロセスにサイズ〰のバッファが付随しているかのように動作する．
きぐぉは，送信メッセージデータが，送信プロセスにより指定されたバッファ領域へ巡
回的な連続領域割り当ての原則に従ってバッファリングされるかのように，送信メッセージに必要な量のバッファを，送信メッセージに対して，提供しなければならない．以下では，この原則を定義するモデル実装について概説する．きぐぉは，より多くのバッファリングを提供することもあり，以下に記述されるものより優れたバッファ割り当てア
ルゴリズムを使用することもある．一方，きぐぉは以下に記述した単純バッファアロケー
タが領域を使いきった時にはいつでもエラーシグナルを返す可能性がある．特に，プロセスに明示的に付随したバッファがない時には，バッファ送信はエラーを引き起こす可能性がある．
きぐぉは，標準モード送信で実行されるバッファリングについて，問い合わせや制御のためのメカニズムを用意していない．そのような情報は，ベンダーが実装ごとに提供することが望ましい．

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

根拠 バッファ通信の可能な実装は，多岐にわたる．バッファリングは，送信側，受信側あるいは両方で行うことができるし，バッファを〱つの送信〯受信のペア専用にすることも，全ての通信で共有することもできるし，バッファリングを実メモリかあるいは仮想メモリで行うこともできるし，専用のメモリ を使ったり，他のプ
ロセスとの共有メモリを使ったりすることもできるし，バッファを静的に割り当てたり，動的に変更したりすることもできる． これら全ての選択に互換性をもつよ
うな，バッファリングについての問い合わせや制御を行い，なおかつ有益な情報を提供するような可搬なメカニズムを提供することは容易ではない． （根拠の終わ
り）

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

3.6.1 バッファモードのモデル実装〴〵〴〶

モデル実装は，第〴〮〲節で説明するパッキング関数とアンパッキング関数，そして第〳〮〷節で説明するノンブロッキング通信関数を使用する．

〴〷〴〸

第 〳〮 〱対〱通信

〵〶
〱
〲
〳
〴
〵
〶
〷

保留中のメッセージエントリ（ばづのつどので ねづびびちでづ づのぴひどづび＝ぐきぅ）の循環キューが管理されると仮定する．各々のエントリは，保留中のノンブロッキング送信を識別する通信
リクエストハンドル，次のエントリへのポインタおよびパックされたメッセージデータなどを含んでいる．エントリは，バッファ内の連続した位置に格納される．キューの末尾とキューの先頭の間には，空き領域があってもよい．
バッファ送信呼び出しは，以下のコードのように実行されることになる．

〸
〹
〱〰
〱〱

• 先頭から末尾に向かって，まだ完了していないリクエストの最初のエントリに達す
るまで，すでに完了した通信の全てのエントリを消去しながら，ぐきぅキューを順に移動する．つまり，そのエントリを指すようにキューの先頭を更新する．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

• 新 し い メ ッ セ ー ジ の エ ン ト リ を 格 納 す る た め に 必 要 な バ イ ト 数のを 計 算 す る．
上限は，以下のようにして計算できる．きぐぉたあこぅぎい呼び出しで使用されるっはふのぴ，
つちぴちぴべばづ，っはねね引数を持つきぐぉたぐぁぃかたこぉずぅ〨っはふのぴ〬 つちぴちぴべばづ〬 っはねね〬 びどぺづ〩関数の呼び出しは，メッセージデータのバッファリングに必要な領域の上限を返す（第〴〮〲節
参照）．きぐぉ定数きぐぉたあこぅぎいたくざぅげえぅぁいは，このエントリ（例えば，ポインタやエンベロープ情報）で消費される追加領域の上限を与える．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

• バッファ内（キューの末尾に続く領域，あるいは，キューの末尾がバッファの最後に近い場合にはバッファの最初の領域）で次の連続するのバイトの空き領域を探す．
領域が見つからない場合には，バッファオーバーフローエラーを出す．
• ぐきぅキューの最後に，リクエストハンドル，次のポインタ，パックされたメッセージデータを含む新しいエントリを連続した領域で追加する．データのパックには，きぐぉたぐぁぃかが使用される．
• パックされたデータに対し，ノンブロッキング送信（標準モード）を発行する．
• 戻る．

〳〲
〳〳
〳〴

3.7 ノンブロッキング通信

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

多くのシステムにおいて，通信と計算を重ね合わせることによって性能を向上させることができる．通信が賢い通信コントローラによって自動的に実行できるようなシステ
ムにこのことは特にあてはまる．軽量スレッドはこのような重ね合わせを達成するための一つの機構である．これより高い性能が実現されることの多いもう一つの機構は，ノンブロッキング通信を用いる方法である．ノンブロッキング送信開始が呼び出されると，送信操作が起動されるが，完了はしない．送信バッファからメッセージがコピーされる
前に送信開始の呼び出しは戻ってくることができる．通信を完了させるため，すなわちデータが送信バッファからコピーされたことを確認するためには，別の送信完了の呼び出しが必要となる．適切なハードウェアを使えば，送信が初期化されたが完了はしていない時点で，送信側での計算と並行させて送信側のメモリからのデータの転送を行うことができる．同様に，ノンブロッキング受信開始呼び出しは 受信演算子を起動するが完〳〮〷〮 ノンブロッキング通信〵〷

了はしない．この呼び出しはメッセージが受信バッファ に格納される前に戻る．受信操作を完了させ，データが受信バッファに受け取られたことを確認するためには，別の受信完了の呼び出しが必要である．適切なハードウェアを使えば，受信が起動され終了する以前に，受信側のメモリへのデータの転送を計算と並行させて行える．ノンブロッキ
ング受信を使用すると， 受信バッファの位置に関する情報は早い時点で提供されている
ので，システムでのバッファリングや メモリからメモリへのコピーを避けることもできる．
ノンブロッキング送信開始の呼び出しは，ブロッキング送信と同じ標準，バッファ，同期，レディの〴つのモードを使用することができる．これらはブロッキング通信のときと同じ意味を持っている．レディ以外の全てのモードでは，マッチする受信が発行されたかどうかにかかわらず送信を開始することができる．ノンブロッキングのレディモードでの送信は，マッチする受信が発行されたときにのみ開始することができる．全ての場合において，送信開始呼び出しはローカルであり，他のプロセスの状態に依らず直ちに戻ってくる．その呼び出しがシステムのいずれかの資源を使い果たしてしまったとき
は，失敗となりエラーコードが返される．きぐぉの高品質な実装においては，このようなことは「病的」な場合にのみ起こるようになっていなければならない．すなわちきぐぉの
実装は，多くの保留中のノンブロッキング操作をサポートすることができなければならない． 送信完了の呼び出しは，データが送信バッファからのコピーが終わったときに戻ってくる．このことは送信モードによっては付加的な意味をもつことがある．
送信モードが同期なら，送信はマッチする受信が開始したとき，すなわち受信が発行され送信とマッチされたときにのみ完了することができる．この場合には送信完了呼び出しは非ローカルである．ただし，同期ノンブロッキング送信は，ノンブロッキング受
信とマッチがとられれば，受信完了呼び出しが発生する前に完了することができる．（送信側が転送が完了することを「知れ」ば，受信側が転送が完了することを「知る」前であってもただちに完了する．）
送信モードがバッファのときは，もし保留中の受信がなければメッセージはバッファリングされなければならない．この場合には送信完了呼び出しはローカルであり，マッ
チする受信の状態に関係なく成功しなければならない．
送信モードが標準のときは，もしメッセージがバッファリングされているなら，送信完了呼び出しはマッチする受信が起こる前に戻ることがある．一方，対応する受信が発生し，メッセージが受信バッファにコピーされるまで送信完了は終了しないこともあり
うる．
ノンブロッキング送信はブロッキング受信とマッチさせることができ，逆も可能であ
る．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

ユーザへのアドバイス 標準モードに対しては送信操作の完了はマッチする受信が発行されるまで遅延されることがある．一方で同期モードに対しては送信操作の完了はマッチする受信が発行されるまで必ず遅延される．この〲つの場合においては，
ノンブロッキング送信を使用することにより，送信側は受信側より先に進むことができ，〲つのプロセスの速度の揺らぎがあっても，計算は影響を受けにくい．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〵〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

バッファモードとレディモードにおけるノンブロッキング送信はより限定された効果しか持たない．例えば，ブロッキング版のバッファ送信はマッチする受信呼び出
しがいつ行われたかに関係なく，完了することができる．しかし，これらの送信の開始と完了を分離することにより，きぐぉライブラリ内部の最適化のための機会が得られる．例えば，バッファ送信を開始することにより，メッセージをバッファリン
グするかどうか，またバッファリングの方法を決定する際の実装の柔軟性が高まる．データのコピーと計算を並行して行うことができる場合，ノンブロッキングバ
ッファとレディモードの両方に利点がある．
メッセージ通信モデルは，通信は送信側によって起動されるということを意味している．もし送信側が通信を起動したときに受信がすでに発行されているならば，通信は一般的により小さなオーバーヘッドを持つ．（データを受信側のバッファに直接移動させることができ，保留中の送信リクエストをキューに入れる必要がない．）
しかしながら，受信操作はマッチする送信が起こった後にのみ完了することができる． ノンブロッキング受信を使用することにより，送信を待っている間も受信側をブロッキングすることなく，より低い通信オーバーヘッドが実現できる．（ユー
ザへのアドバイス終わり）

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

3.7.1 通信リクエストオブジェクト
ノンブロッキング通信は，通信操作を識別するために不可視のリクエストオブジェク
トを使用し，通信を起動する操作と終了させる操作を対応させる．これらはハンドルを通してアクセスされるシステムオブジェクトである．リクエストオブジェクトは，送信モード，それに対応した通信バッファ，そのコンテクスト，送信のために使用されるタ
グや送信先引数，受信のために使用されるタグや送信元引数などのさまざまな通信操作の特性を識別する．さらに，このオブジェクトには保留中の通信操作の状態についての情報が格納される．

〳〲〳〳

3.7.2 通信の起動

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ブロッキング通信に対するのと同じ命名規則を使用する．すなわちバッファ，同期，レディモードに対しあ，こ，げという接頭辞を使う．さらにぉ（即時：どねねづつどちぴづ）という接頭辞が付くと呼び出し がノンブロッキングであることを意味する．

〳〮〷〮 ノンブロッキング通信〵〹

きぐぉたぉこぅぎい〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね
ひづぱふづびぴ送信バッファの先頭アドレス（選択型）
送信バッファの中の要素の数（非負の整数型）

〱
〲
〳
〴

各送信バッファの要素のデータ型（ハンドル）〵

送信先のランク（整数型）〶

メッセージタグ（整数型）〷

コミュニケータ（ハンドル）〸通信リクエスト（ハンドル）〹

どのぴ きぐぉたぉびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたぉこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺ぃはねね〺〺ぉびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
標準モードのノンブロッキング送信を開始する．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

きぐぉたぉあこぅぎい〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね
ひづぱふづびぴ送信バッファの先頭アドレス（選択型）

〲〱
〲〲
〲〳

送信バッファの中の要素の数（非負の整数型）〲〴

各送信バッファの要素のデータ型（ハンドル）〲〵

送信先のランク（整数型）〲〶

メッセージタグ（整数型）〲〷

コミュニケータ（ハンドル）〲〸〲〹

通信リクエスト（ハンドル）

どのぴ きぐぉたぉぢびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたぉあこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺ぃはねね〺〺ぉぢびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
バッファモードのノンブロッキング送信を開始する．

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信〶〰
〱〲

きぐぉたぉここぅぎい〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩
ぉぎ

〳
〴

ぉぎ

〵

ぉぎ

〶

ぉぎ

〷

ぉぎ

〸

ぉぎ

〹

くさご

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね
ひづぱふづびぴ送信バッファの先頭アドレス（選択型）
送信バッファの中の要素の数（非負の整数型）
各送信バッファの要素のデータ型（ハンドル）
送信先のランク（整数型）
メッセージタグ（整数型）
コミュニケータ（ハンドル）
通信リクエスト（ハンドル）

どのぴ きぐぉたぉびびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたぉここぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺ぃはねね〺〺ぉびびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
同期モードのノンブロッキング送信を開始する．

〲〰
〲〱

きぐぉたぉげこぅぎい〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩

〲〲
〲〳

ぉぎ

〲〴

ぉぎ

〲〵

ぉぎ

〲〶

ぉぎ

〲〷

ぉぎ

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぉぎ
くさご

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね
ひづぱふづびぴ送信バッファの先頭アドレス（選択型）
送信バッファの中の要素の数（非負の整数型）
各送信バッファの要素のデータ型（ハンドル）
送信先のランク（整数型）
メッセージタグ（整数型）
コミュニケータ（ハンドル）
通信リクエスト（ハンドル）

どのぴ きぐぉたぉひびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたぉげこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺ぃはねね〺〺ぉひびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
レディモードのノンブロッキング送信を開始する．

〳〮〷〮 ノンブロッキング通信〶〱

きぐぉたぉげぅぃざ 〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びはふひっづ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩
くさご
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

〱
〲

ぢふて
っはふのぴ
つちぴちぴべばづ
びはふひっづ

受信バッファの先頭アドレス（先頭アドレス）

ぴちで
っはねね
ひづぱふづびぴメッセージタグまたはきぐぉたぁぎすたごぁぇ（整数型）〸

コミュニケータ（ハンドル）〹

通信リクエスト（ハンドル）〱〰

受信バッファの中の要素の数（非負の整数型）
各受信バッファの要素のデータ型（ハンドル）
送信元のランクまたはきぐぉたぁぎすたこくさげぃぅ（整数
型）

〳
〴
〵
〶
〷

〱〱

どのぴ きぐぉたぉひづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたぉげぅぃざ〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺ぃはねね〺〺ぉひづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

ノンブロッキング受信を開始する．
これらの呼び出しは通信リクエストオブジェクトを割り当て，リクエストハンドル（ひづぱふづびぴという引数）と対応付ける．このリクエストは後で通信の状態を問い合わせたり，その完了を待ち合わせたりするために使用することができる．
ノンブロッキング送信呼び出しは，システムが送信バッファからデータをコピーすることを開始してもよいことを意味する．送信側は，ノンブロッキング送信関数が呼ばれた後は，送信が完了するまで送信バッファのどの部分を変更することも許されない．
ノンブロッキング受信呼び出しは，システムが受信バッファにデータを書き込むことを始めてもよいことを意味する．受信側は，ノンブロッキング受信関数が呼ばれた後は，受信が完了するまで受信バッファのどの部分にアクセスすることも許されない．
ユーザへのアドバイス うはひぴひちの言語のコンパイラによって行われる引数のコピーとレジスタの最適化に関する問題を回避するため，第〱〶〮〲〮〲節の「データのコピーおよび連続領域配置による問題」（〵〰〴ページ）と「レジスタの最適化での問題」（〵〰〷ページ）のヒントに注意すること． （ユーザへのアドバイス終わり）

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

3.7.3 通信の完了〳〸

関数きぐぉたしぁぉごときぐぉたごぅこごはノンブロッキング通信を完了させるために使われる．
送信操作の完了は送信側がその時点で自由に送信バッファの記憶領域を更新できることを意味する．（送信操作自体は送信バッファの内容を変更しない．）送信の完了はメッセージが受信されたことを意味するのではなく，通信サブシステムによって既にバッファリングされた可能性があることを意味している．しかし，同期モードの送信が使用されたときは，送信操作の完了はマッチする受信が起動され，このマッチする受信によってメッセージが最終的に受信されたことを意味する．

〴〰

〳〹

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〶〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

受信操作の完了は，受信バッファが受信メッセージを取り込んでおり，受信側はそれに自由にアクセスでき，状態オブジェクトが設定されているということを意味する．マッチする送信操作が完了したことを意味するわけではない（当然，送信が起動されたことは意味する）．
以下のような用語を使うことにする．nullハンドルとはきぐぉたげぅけさぅこごたぎさががという値をもったハンドルである．持続的リクエストとそれに対するハンドルは，そのリクエス
トが現在実行中の通信と関連していなければ非アクティブ状態である（第〳〮〹節参照）．
ハンドルはのふぬぬでも非アクティブ状態でもなければアクティブ状態である．空のステー
タスとは，ぴちで〽 きぐぉたぁぎすたごぁぇ，びはふひっづ 〽 きぐぉたぁぎすたこくさげぃぅ，づひひはひ 〽 きぐぉたこさぃぃぅここを返すように設定されたステータスであり，きぐぉたぇぅごたぃくさぎごやきぐぉたぇぅごたぅがぅきぅぎごこの呼び出しに対してっはふのぴ 〽 〰を返し，きぐぉたごぅこごたぃぁぎぃぅががぅいの呼び出しに対しててちぬびづを返すように内部的に設定されるステータスでもある．返される値が重要でない時には，状
態変数に空を設定する．古くなってしまった情報をアクセスすることによるエラーを防ぐために，このような方法でステータスが設定される．
きぐぉたしぁぉご，きぐぉたごぅこご，またはその他の派生関数〨きぐぉた{ごぅこご|しぁぉご}{ぁがが|こくきぅ|ぁぎす}〩の呼び出しによって返されるびぴちぴふびオブジェクト内のフィールド（ひづぱふづびぴは送信呼び出しに対応）は定義されていない．ただし，〲つの例外があり，ウェイトまたはテストの呼び出
しがきぐぉたぅげげたぉぎたこごぁごさこを返す場合はエラーステータスフィールドに有効な情報が格納され，戻り値はきぐぉたごぅこごたぃぁぎぃぅががぅいの呼び出しにより照会することができる．
エラークラスきぐぉたぅげげたぉぎたこごぁごさこに属するエラーコードを返すのは，配列
きぐぉたこごぁごさこを取るきぐぉ完了関数のみとする必要がある．〱つのきぐぉたこごぁごさこ値のみを返す関数きぐぉたごぅこご，きぐぉたごぅこごぁぎす，きぐぉたしぁぉご，きぐぉたしぁぉごぁぎすの場合は，（
きぐぉたこごぁごさこ引数のきぐぉたぅげげくげフィールドではなく）通常のきぐぉのエラーを返すプロセ
スを使用する必要がある．

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

きぐぉたしぁぉご〨ひづぱふづびぴ〬 びぴちぴふび〩
ぉぎくさご
くさご

ひづぱふづびぴびぴちぴふびリクエスト（ハンドル）ステータスオブジェクト（ステータス型）

どのぴ きぐぉたしちどぴ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたしぁぉご〨げぅけさぅこご〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺げづぱふづびぴ〺〺しちどぴ〨きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺げづぱふづびぴ〺〺しちどぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたしぁぉごの呼び出しはひづぱふづびぴによって識別される操作が完了したとき戻ってくる．
このリクエストに対応する通信オブジェクトがノンブロッキング送信やノンブロッキ
ング受信の呼び出しによって作成された場合には，きぐぉたしぁぉごを呼び出すことによってオブジェクトは解放され，リクエストハンドルはきぐぉたげぅけさぅこごたぎさががに設定される．
きぐぉたしぁぉごは非ローカルな操作である．
呼び出しは完了した操作についての情報をびぴちぴふびに返す．受信操作に対するステータス

〳〮〷〮 ノンブロッキング通信〶〳

オブジェクトの内容には，第〳〮〲〮〵節に記述したような方法でアクセスすることができる．
送信操作に対するステータスオブジェクトはきぐぉたごぅこごたぃぁぎぃぅががぅいを呼び出すことによって照会することができる（第〳〮〸節参照）．
のふぬぬや非アクティブ状態のひづぱふづびぴ引数できぐぉたしぁぉごを呼び出すことが許されている．この場合には操作はただちに空のびぴちぴふびを返す．

〱
〲
〳
〴
〵
〶
〷

ユーザへのアドバイス きぐぉたぉあこぅぎいの後，きぐぉたしぁぉごが成功して戻ってきたということは，ユーザが送信バッファを再使用することができるということを意味している．すなわち，データはすでにきぐぉたあさううぅげたぁごごぁぃえによって貼り付けられたバッファにコピーされたか，外部に送られたということである．この時点では送信をキャンセルすることはできないため，注意が必要である（第〳〮〸節参照）． マッチする受信が発行されなければ，バッファを解放することはできない．これは定められたきぐぉたぃぁぎぃぅがの目的（通信サブシステムに渡されたプログラム領域を常に解放することができる）に少々反する． （ユーザへのアドバイス終わり）

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

実装者へのアドバイス マルチスレッド環境では，きぐぉたしぁぉごの呼び出しは呼び出されたスレッドのみをブロッキングするようにしなければならず，スレッドスケジ
ューラが他のスレッドの実行をスケジュールできるようにしなければならない．
（実装者へのアドバイス終わり）

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

きぐぉたごぅこご〨ひづぱふづびぴ〬 」ちで〬 びぴちぴふび〩
ぉぎくさご
くさご
くさご

ひづぱふづびぴ」ちで
びぴちぴふび〲〶通信リクエスト（ハンドル）〲〷

操作が完了すれば真（論理型）〲〸

ステータスオブジェクト（ステータス型）〲〹〳〰

どのぴ きぐぉたごづびぴ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〬 どのぴ 〪てぬちで〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたごぅこご〨げぅけさぅこご〬 うがぁぇ〬 こごぁごさこ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ げぅけさぅこご〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぢははぬ きぐぉ〺〺げづぱふづびぴ〺〺ごづびぴ〨きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}{ぢははぬ きぐぉ〺〺げづぱふづびぴ〺〺ごづびぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたごぅこごの呼び出しでは，ひづぱふづびぴによって識別される操作が終了していれば」ちで 〽
ぴひふづを返す．このような場合，ステータスオブジェクトは完了した操作についての情報を格納するように設定される．通信オブジェクトがノンブロッキング送信やノンブロ
ッキング受信によって生成された場合には，このオブジェクトは解放され，リクエスト
ハンドルにはきぐぉたげぅけさぅこごたぎさががが設定される．それ以外の場合は，呼び出しは」ちで 〽
てちぬびづを返す．この場合にはステータスオブジェクトの値は不定となる．きぐぉたごぅこごはローカルな操作である．
受信操作に対して返されるステータスオブジェクトは，第〳〮〲〮〵節で説明したような方法でアクセスできる情報を持っている．送信操作に対するステータスオブジェクト

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〶〴
〱
〲
〳
〴
〵
〶
〷

は きぐぉたごぅこごたぃぁぎぃぅががぅいを呼び出すことによってアクセスできる情報を持っている（第〳〮〸節参照）．
きぐぉたごぅこごは，のふぬぬあるいは非アクティブ状態のひづぱふづびぴ引数によって呼び出すことができる．このような場合には，」ちで 〽 ぴひふづと空のびぴちぴふびを返す．
関数きぐぉたしぁぉごときぐぉたごぅこごは受信と送信の両者を完了させるために使うことができ
る．

〸
〹
〱〰
〱〱
〱〲
〱〳

ユーザへのアドバイス ノンブロッキングきぐぉたごぅこご呼び出しを利用することにより，ユーザは単一の実行スレッド内で別の作業をスケジューリングすることができる．きぐぉたごぅこごを定期的に呼び出すことによってイベント駆動型のスレッドスケジ
ューラをエミュレートすることができる． （ユーザへのアドバイス終わり）〱〴〱〵

例 3.12 ノンブロッキング操作ときぐぉたしぁぉごの簡単な使用法

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたぉこぅぎい〨ち〨〱〩〬 〱〰〬 きぐぉたげぅぁが〬 〱〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〬 どづひひ〩〪〪〪〪 つは びはねづ っはねばふぴちぴどはの ぴは ねちびに ぬちぴづのっべ 〪〪〪〪
ぃぁがが きぐぉたしぁぉご〨ひづぱふづびぴ〬 びぴちぴふび〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたぉげぅぃざ〨ち〨〱〩〬 〱〵〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〬 どづひひ〩〪〪〪〪 つは びはねづ っはねばふぴちぴどはの ぴは ねちびに ぬちぴづのっべ 〪〪〪〪
ぃぁがが きぐぉたしぁぉご〨ひづぱふづびぴ〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉう

〲〵
〲〶
〲〷
〲〸
〲〹

以下の操作を使用すれば，対応する通信が完了するのを待たずにリクエストオブジェ
クトを解放することができる．

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

きぐぉたげぅけさぅこごたうげぅぅ〨ひづぱふづびぴ〩ぉぎくさご

ひづぱふづびぴ通信リクエスト（ハンドル）

どのぴ きぐぉたげづぱふづびぴたてひづづ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたげぅけさぅこごたうげぅぅ〨げぅけさぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺げづぱふづびぴ〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
解放するリクエストオブジェクトにマークを付け，ひづぱふづびぴをきぐぉたげぅけさぅこごたぎさががに設定する．このリクエストに対応する継続中の通信は完了することができる．これが完了した後にのみリクエストは解放される．

〴〲
〴〳
〴〴

根拠 きぐぉたげぅけさぅこごたうげぅぅという機構は，送信側の性能向上と便利さのために用意されている． （根拠の終わり）

〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス きぐぉたげぅけさぅこごたうげぅぅを呼び出すことによりリクエストが解放されると，きぐぉたしぁぉごやきぐぉたごぅこごを呼び出して関連する通信が正常に完了した

〳〮〷〮 ノンブロッキング通信〶〵

ことをチェックすることはできない．また，もし通信中にエラーが起こると，エラーコードをユーザに返すことができなくなる．このようなエラーは致命的なものとして取り扱うべきである．受信側は受信が完了し受信バッファが再利用可能であることを確認する手だてがなくなるので，アクティブな受信リクエストを解放すべきではない． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸

例 3.13 きぐぉたげぅけさぅこごたうげぅぅを使用した例
ぃぁがが きぐぉたぃくききたげぁぎか〨きぐぉたぃくききたしくげがい〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
いく ど〽〱〬 のぃぁがが きぐぉたぉこぅぎい〨はふぴぶちぬ〬 〱〬 きぐぉたげぅぁが〬 〱〬 〰〬 きぐぉたぃくききたしくげがい〬 ひづぱ〬 どづひひ〩
ぃぁがが きぐぉたげぅけさぅこごたうげぅぅ〨ひづぱ〬 どづひひ〩
ぃぁがが きぐぉたぉげぅぃざ〨どのぶちぬ〬 〱〬 きぐぉたげぅぁが〬 〱〬 〰〬 きぐぉたぃくききたしくげがい〬 ひづぱ〬 どづひひ〩
ぃぁがが きぐぉたしぁぉご〨ひづぱ〬 びぴちぴふび〬 どづひひ〩ぅぎい いくぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたぉげぅぃざ〨どのぶちぬ〬 〱〬 きぐぉたげぅぁが〬 〰〬 〰〬 きぐぉたぃくききたしくげがい〬 ひづぱ〬 どづひひ〩
ぃぁがが きぐぉたしぁぉご〨ひづぱ〬 びぴちぴふび〬 どづひひ〩いく ぉ〽〱〬 の〭〱ぃぁがが きぐぉたぉこぅぎい〨はふぴぶちぬ〬 〱〬 きぐぉたげぅぁが〬 〰〬 〰〬 きぐぉたぃくききたしくげがい〬 ひづぱ〬 どづひひ〩
ぃぁがが きぐぉたげぅけさぅこごたうげぅぅ〨ひづぱ〬 どづひひ〩
ぃぁがが きぐぉたぉげぅぃざ〨どのぶちぬ〬 〱〬 きぐぉたげぅぁが〬 〰〬 〰〬 きぐぉたぃくききたしくげがい〬 ひづぱ〬 どづひひ〩
ぃぁがが きぐぉたしぁぉご〨ひづぱ〬 びぴちぴふび〬 どづひひ〩ぅぎい いくぃぁがが きぐぉたぉこぅぎい〨はふぴぶちぬ〬 〱〬 きぐぉたげぅぁが〬 〰〬 〰〬 きぐぉたぃくききたしくげがい〬 ひづぱ〬 どづひひ〩
ぃぁがが きぐぉたしぁぉご〨ひづぱ〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉう

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

3.7.4 ノンブロッキング通信の意味論
ノンブロッキング通信の意味論は，第〳〮〵節の定義をノンブロッキングの場合に適した形に拡張することによって定義される．

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

順序 ノンブロッキング通信操作は通信を起動する呼び出しの実行順に従って順序づけられる．第〳〮〵節の追越し禁止要求は，順序についてのこの定義によってノンブロッキン
グ通信へ拡張される．

〳〵
〳〶
〳〷
〳〸

例 3.14 ノンブロッキング操作に対するメッセージの順序〳〹

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨げぁぎか〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたぉこぅぎい〨ち〬 〱〬 きぐぉたげぅぁが〬 〱〬 〰〬 っはねね〬 ひ〱〬 どづひひ〩
ぃぁがが きぐぉたぉこぅぎい〨ぢ〬 〱〬 きぐぉたげぅぁが〬 〱〬 〰〬 っはねね〬 ひ〲〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたぉげぅぃざ〨ち〬 〱〬 きぐぉたげぅぁが〬 〰〬 きぐぉたぁぎすたごぁぇ〬 っはねね〬 ひ〱〬 どづひひ〩
ぃぁがが きぐぉたぉげぅぃざ〨ぢ〬 〱〬 きぐぉたげぅぁが〬 〰〬 〰〬 っはねね〬 ひ〲〬 どづひひ〩ぅぎい ぉうぃぁがが きぐぉたしぁぉご〨ひ〱〬 びぴちぴふび〬 どづひひ〩
ぃぁがが きぐぉたしぁぉご〨ひ〲〬 びぴちぴふび〬 どづひひ〩

〴〱

〴〰

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〶〶
〱
〲

第 〳〮 〱対〱通信

プロセス〱がいずれかの受信を実行する前に両方のメッセージが送られていたとしても，プロセス〰の最初の送信は，プロセス〱の最初の受信にマッチする．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

プログレス 受信を完了させるきぐぉたしぁぉごの呼び出しは，マッチする送信が開始したら終了して戻る．ただし，その送信が他の受信にマッチした場合はその限りではない．特にマッチする送信がノンブロッキングである時には，送信を完了させるための呼び出しが送信側によって実行されるかどうかにかかわらず，受信は完了しなければならない．
同様に，送信を完了させるきぐぉたしぁぉごは，マッチする受信が開始されたら終了して戻る．
ただし，その受信が他の送信にマッチした場合はその限りではない．そして，それは受信の完了の呼び出しが実行されるかどうかに関わらない．

〱〳〱〴

例 3.15 プログレスの意味論の実例

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨げぁぎか〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたここぅぎい〨ち〬 〱〬 きぐぉたげぅぁが〬 〱〬 〰〬 っはねね〬 どづひひ〩
ぃぁがが きぐぉたこぅぎい〨ぢ〬 〱〬 きぐぉたげぅぁが〬 〱〬 〱〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたぉげぅぃざ〨ち〬 〱〬 きぐぉたげぅぁが〬 〰〬 〰〬 っはねね〬 ひ〬 どづひひ〩
ぃぁがが きぐぉたげぅぃざ〨ぢ〬 〱〬 きぐぉたげぅぁが〬 〰〬 〱〬 っはねね〬 びぴちぴふび〬 どづひひ〩
ぃぁがが きぐぉたしぁぉご〨ひ〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉう正しいきぐぉの実装においては，このコードはデッドロックを起こしてはならない．プロセス〰の最初の同期送信は，プロセス〱がまだウェイトの呼び出しの終了に到達していなくても，プロセス〱がマッチする（ノンブロッキング）受信を発行した後には完了しなければならない．そうして，プロセス〰は継続して〲番目の送信を実行し，プロセス〱は実行を終了する．
受信を完了させるきぐぉたごぅこごが繰り返し同じ引数で呼ばれ，マッチする送信が開始されている場合，この呼び出しは最終的に」ちで 〽 ぴひふづを返す．ただし，その送信が他の受信にマッチした場合はこの限りではない．送信を完了させるきぐぉたごぅこごが繰り返し同じ引数で呼ばれ，マッチする受信が開始されている場合，この呼び出しは最終的に」ちで 〽
ぴひふづを返す．ただし，その受信が他の送信にマッチした場合はこの限りではない．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

3.7.5 多重完了
特定のメッセージを待つのではなく，リストの中の全ての，あるいはいくつかの，あるいは任意の操作の完了を待つことができれば便利である．いくつかの操作のうちの〱つの完了を待つために，きぐぉたしぁぉごぁぎすあるいはきぐぉたごぅこごぁぎすの呼び出しを使用することができる．きぐぉたしぁぉごぁががやきぐぉたごぅこごぁががの呼び出しを，リストの中の全ての保留中の操作を待つために使用することができる．きぐぉたしぁぉごこくきぅやきぐぉたごぅこごこくきぅの呼び出
しは，リストの中の全ての開始可能な操作を完了させるために使用することができる．

〳〮〷〮 ノンブロッキング通信〶〷

きぐぉたしぁぉごぁぎす 〨っはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〬 どのつづへ〬 びぴちぴふび〩
ぉぎ
ぉぎくさご
くさご
くさご

っはふのぴ
ちひひちべたはてたひづぱふづびぴび
どのつづへ
びぴちぴふび

リストの長さ（非負の整数型）
リクエストの配列（ハンドルの配列）

〱
〲
〳
〴

完了した操作に対するハンドルの添字（整数型）〵

ステータスオブジェクト（ステータス型）〶〷

どのぴ きぐぉたしちどぴちのべ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬 どのぴ 〪どのつづへ〬
きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたしぁぉごぁぎす〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 ぉぎいぅじ〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 ぉぎいぅじ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬ぉぅげげくげ{びぴちぴどっ どのぴ きぐぉ〺〺げづぱふづびぴ〺〺しちどぴちのべ〨どのぴ っはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}{びぴちぴどっ どのぴ きぐぉ〺〺げづぱふづびぴ〺〺しちどぴちのべ〨どのぴ っはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}
配列の中のアクティブなリクエストに対応する操作の〱つが完了するまでブロッキング
する．〱つ以上の操作が開始可能で終了できるならば，任意の〱つが選ばれる．配列の中のそのリクエストの添字がどのつづへに返され，完了した通信の状態がびぴちぴふびに返される．（配列はぃ言語においては〰から，うはひぴひちの言語においては〱から添字が付けられる．）ノンブロ
ッキング通信操作によって割り当てられたリクエストならば，それは解放されリクエス
トハンドルにはきぐぉたげぅけさぅこごたぎさががが設定される．
リストちひひちべたはてたひづぱふづびぴびはのふぬぬハンドルや非アクティブハンドルを含むことができる．
リストがアクティブなハンドルを含んでいなければ（リストの長さがゼロか全ての要素
がのふぬぬか非アクティブ），呼び出しはどのつづへ 〽 きぐぉたさぎいぅうぉぎぅいと空のびぴちぴふびを返す．
きぐぉたしぁぉごぁぎす〨っはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〬 どのつづへ〬 びぴちぴふび〩の 実 行 はきぐぉたしぁぉご〨〦ちひひちべたはてたひづぱふづびぴびせどそ〬 びぴちぴふび〩の 実 行 と 同 じ 結 果 に な る． こ こ でどは（どのつづへの
値がきぐぉたさぎいぅうぉぎぅいでなければ）どのつづへによって返される値である． 〱つのアクティブな要素を含む配列を持つきぐぉたしぁぉごぁぎすはきぐぉたしぁぉごと同等である．

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

きぐぉたごぅこごぁぎす〨っはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〬 どのつづへ〬 」ちで〬 びぴちぴふび〩
ぉぎ
ぉぎくさご
くさご
くさご
くさご

〳〵

っはふのぴ
ちひひちべたはてたひづぱふづびぴび
どのつづへ

リストの長さ（整数型）〳〶

リクエストの配列（ハンドルの配列）〳〷」ちでびぴちぴふび操作のうちの１つが完了したときは真（論理型）

完了した操作の添字，何も完了しなかった時はきぐぉたさぎいぅうぉぎぅい（整数型）
ステータスオブジェクト（ステータス型）

どのぴ きぐぉたごづびぴちのべ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬 どのぴ 〪どのつづへ〬
どのぴ 〪てぬちで〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたごぅこごぁぎす〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 ぉぎいぅじ〬 うがぁぇ〬 こごぁごさこ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 ぉぎいぅじ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬ぉぅげげくげ

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〶〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

{びぴちぴどっ ぢははぬ きぐぉ〺〺げづぱふづびぴ〺〺ごづびぴちのべ〨どのぴ っはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬 どのぴ〦 どのつづへ〬
きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}{びぴちぴどっ ぢははぬ きぐぉ〺〺げづぱふづびぴ〺〺ごづびぴちのべ〨どのぴ っはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬 どのぴ〦 どのつづへ〩 （廃止された呼び出し
形式, 第15.2節を参照）}
アクティブなハンドルに対応する操作の〱つが完了しているか，あるいはどれも完了していないかのテスト．前者の場合には，」ちで 〽 ぴひふづが返され，配列の中のこのリクエス
トの添字がどのつづへに返され，その操作の状態がびぴちぴふびに返される．もしリクエストがノン
ブロッキング通信の呼び出しによって割り当てられたものであれば，そのリクエストは解放され，ハンドルにはきぐぉたげぅけさぅこごたぎさががが設定される（配列はぃ言語の場合は〰から，
うはひぴひちの言語の場合は〱から添字が始まる）．後者の場合（完了した操作がない場合），」ちで〽 てちぬびづが返され，きぐぉたさぎいぅうぉぎぅいという値がどのつづへに返され，びぴちぴふびは不定となる．
配列はのふぬぬハンドルあるいは非アクティブなハンドルを含むことができる．配列がアクティブなハンドルを含んでいなければ，呼び出しは」ちで 〽 ぴひふづ，どのつづへ 〽
きぐぉたさぎいぅうぉぎぅいとなり，びぴちぴふびは空となる．
リクエストの配列がアクティブなハンドルを含んでいれば，きぐぉたごぅこごぁぎす〨っはふのぴ〬 ちひ〭ひちべたはてたひづぱふづびぴび〬 どのつづへ〬 びぴちぴふび〩の実行は，任意のある順序のど〽〰〬 〱 〮〮〮〬〬 っはふのぴ〭〱に対して，〱つの呼び出しが」ちで 〽 ぴひふづを返すか，全てが失敗するまできぐぉたごぅこご〨 〦ちひひちべたはてたひづぱふづびぴびせどそ〬」ちで〬 びぴちぴふび〩が実行された場合と同じ効果を持つ．前者の場合にはどのつづへに最後のどの値が，後者の場合にはきぐぉたさぎいぅうぉぎぅいが設定される．〱つのアクティブな要素を含む配列を持ったきぐぉたごぅこごぁぎすはきぐぉたごぅこごと同等である．

〲〶
〲〷
〲〸

きぐぉたしぁぉごぁがが〨 っはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〬 ちひひちべたはてたびぴちぴふびづび〩

〲〹

ぉぎ

〳〰

ぉぎくさご

〳〱

くさご

〳〲

っはふのぴ
ちひひちべたはてたひづぱふづびぴび
ちひひちべたはてたびぴちぴふびづび

リストの長さ（非負の整数型）
リクエストの配列（ハンドルの配列）
ステータスオブジェクトの配列（ステータス型の配
列）

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたしちどぴちぬぬ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬
きぐぉたこぴちぴふび 〪ちひひちべたはてたびぴちぴふびづび〩
きぐぉたしぁぉごぁがが〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 ぁげげぁすたくうたこごぁごさこぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩ぉぎごぅぇぅげ ぁげげぁすたくうたこごぁごさこぅこ〨きぐぉたこごぁごさこたこぉずぅ〪〬〩〬 ぉぅげげくげ
{びぴちぴどっ ぶはどつ きぐぉ〺〺げづぱふづびぴ〺〺しちどぴちぬぬ〨どのぴ っはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
きぐぉ〺〺こぴちぴふび ちひひちべたはてたびぴちぴふびづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}{びぴちぴどっ ぶはどつ きぐぉ〺〺げづぱふづびぴ〺〺しちどぴちぬぬ〨どのぴ っはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}
リストの中のアクティブなハンドルに対応する全ての通信操作が完了するまでブロッキングし，これら全ての操作のステータスを返す（リストの中のどのハンドルもアクティブでない場合も含む）． 両方の配列は同じ数の有効なエントリーを持つ．

〳〮〷〮 ノンブロッキング通信〶〹

ちひひちべたはてたびぴちぴふびづびのど番目のエントリーにはど番目の操作のステータスの戻り値が設定される．ノンブロッキング通信操作によって生成されたリクエストは解放され，配列の中の対応するハンドルにはきぐぉたげぅけさぅこごたぎさががが設定される．リストはのふぬぬや非アクティブなハンドルを含むこともできる．そのようなエントリーは，この呼び出しによってそれぞれ空に設定される．
きぐぉたしぁぉごぁがが〨っはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〬 ちひひちべたはてたびぴちぴふびづび〩が 誤 り な く 実 行 さ れ た ときは，任意のある順序のど〽〰 〮〮〮〬〬 っはふのぴ〭〱に対してきぐぉたしぁぉご〨〦ちひひちべたはてたひづぱふづびぴせどそ〬 〦ちひ〭ひちべたはてたびぴちぴふびづびせどそ〩が実行されたときと同じ効果を待つ． 長さ〱の配列を持つ
きぐぉたしぁぉごぁががはきぐぉたしぁぉごと同等である．
きぐぉたしぁぉごぁががの呼び出しによって完了した〱つあるいはそれ以上の通信が失敗した時には，それぞれの通信についての特定の情報を返すことが望ましい．このような場合，
関数きぐぉたしぁぉごぁががはエラーコードきぐぉたぅげげたぉぎたこごぁごさこを返し，それぞれのステータスのエラーフィールドに特定のエラーコードを返す．特定の通信が完了した場合はこのコー
ドはきぐぉたこさぃぃぅここであり，失敗した場合は他の特定のエラーコードである．あるいは，失敗でも完了でもない場合はきぐぉたぅげげたぐぅぎいぉぎぇとなる．関数きぐぉたしぁぉごぁががはどのリク
エストにもエラーがなかったときはきぐぉたこさぃぃぅここを返し，（不正な引数等の）他の理由で失敗したときは，他のエラーコードを返す．このような場合，ステータスのエラーフィ
ールドは更新されない．
根拠 これは，アプリケーションにおける誤りの取扱いを簡素化してくれる．アプ
リケーションのコードは，エラーが発生したかどうか判定するために（〱つの）関数の結果をテストするだけでよい．エラーが発生したときにのみ個々のステータスを確かめる必要がある． （根拠の終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

きぐぉたごぅこごぁがが〨っはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〬 」ちで〬 ちひひちべたはてたびぴちぴふびづび〩
ぉぎ
ぉぎくさご
くさご
くさご

っはふのぴ
ちひひちべたはてたひづぱふづびぴび」ちで
ちひひちべたはてたびぴちぴふびづび

リストの長さ（非負の整数型）
リクエストの配列（ハンドルの配列）（論理型）
ステータスオブジェクトの配列（ステータス型の配列）

どのぴ きぐぉたごづびぴちぬぬ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬 どのぴ 〪てぬちで〬きぐぉたこぴちぴふび 〪ちひひちべたはてたびぴちぴふびづび〩
きぐぉたごぅこごぁがが〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 うがぁぇ〬 ぁげげぁすたくうたこごぁごさこぅこ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬ぁげげぁすたくうたこごぁごさこぅこ〨きぐぉたこごぁごさこたこぉずぅ〪〬〩〬 ぉぅげげくげ
{びぴちぴどっ ぢははぬ きぐぉ〺〺げづぱふづびぴ〺〺ごづびぴちぬぬ〨どのぴ っはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
きぐぉ〺〺こぴちぴふび ちひひちべたはてたびぴちぴふびづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}{びぴちぴどっ ぢははぬ きぐぉ〺〺げづぱふづびぴ〺〺ごづびぴちぬぬ〨どのぴ っはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〩 （廃止された呼び出し形式, 第15.2節を
参照）}

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〷〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

配列の中のアクティブなハンドルに対応する全ての通信が完了したときに」ちで 〽
ぴひふづを返す（リストの中のハンドルがどれもアクティブでない場合を含む）． この場
合，アクティブなハンドルのリクエストに対応するステータスの各エントリには対応する通信のステータスが設定される．もしノンブロッキング通信の呼び出しによってリクエストが割り当てられていたときは，リクエストの割当は解放され，ハンドルにはきぐぉたげぅけさぅこごたぎさががが設定される．のふぬぬあるいは非アクティブなハンドルに対応するス
テータスの各エントリには空が設定される．
それ以外の場合には，」ちで 〽 てちぬびづが返され，どのリクエストも変更されず，ステータ
スのエントリの値は不定となる．これはローカルな操作である．
きぐぉたごぅこごぁががの実行中に起こったエラーはきぐぉたしぁぉごぁががの中のエラーとして処理さ
れる．

〱〴
〱〵
〱〶

きぐぉたしぁぉごこくきぅ〨どのっはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〬 はふぴっはふのぴ〬 ちひひちべたはてたどのつどっづび〬 ちひひちべたはてたびぴちぴふびづび〩

〱〷
〱〸

ぉぎ

〱〹

ぉぎくさご

〲〰

くさご

〲〱

くさご

〲〲
〲〳

くさご

どのっはふのぴ
ちひひちべたはてたひづぱふづびぴび
はふぴっはふのぴ
ちひひちべたはてたどのつどっづび
ちひひちべたはてたびぴちぴふびづび

ちひひちべたはてたひづぱふづびぴびの長さ（非負の整数型）
リクエストの配列（ハンドルの配列）完了したリクエストの数（整数型）
完了した操作の添字の配列（整数型の配列）完了した操作に対するステータスオブジェクトの配列（ステータス型の配列）

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたしちどぴびはねづ〨どのぴ どのっはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬
どのぴ 〪はふぴっはふのぴ〬 どのぴ 〪ちひひちべたはてたどのつどっづび〬 きぐぉたこぴちぴふび 〪ちひひちべたはてたびぴちぴふびづび〩
きぐぉたしぁぉごこくきぅ〨ぉぎぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 くさごぃくさぎご〬 ぁげげぁすたくうたぉぎいぉぃぅこ〬ぁげげぁすたくうたこごぁごさこぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 くさごぃくさぎご〬 ぁげげぁすたくうたぉぎいぉぃぅこ〨〪〩〬ぁげげぁすたくうたこごぁごさこぅこ〨きぐぉたこごぁごさこたこぉずぅ〪〬〩〬 ぉぅげげくげ
{びぴちぴどっ どのぴ きぐぉ〺〺げづぱふづびぴ〺〺しちどぴびはねづ〨どのぴ どのっはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬 どのぴ ちひひちべたはてたどのつどっづびせそ〬
きぐぉ〺〺こぴちぴふび ちひひちべたはてたびぴちぴふびづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}{びぴちぴどっ どのぴ きぐぉ〺〺げづぱふづびぴ〺〺しちどぴびはねづ〨どのぴ どのっはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬 どのぴ ちひひちべたはてたどのつどっづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}
リストの中のアクティブなハンドルに対応する操作のうち，少なくとも〱つが終了するまで待つ． リストちひひちべたはてたひづぱふづびぴびからのリクエストのうち完了したものの数をはふぴっはふのぴに返す．配列ちひひちべたはてたどのつどっづびの最初のはふぴっはふのぴ個の位置にこれらの操作の添字を返す．（配列ちひひちべたはてたひづぱふづびぴび内の添字．配列はぃ言語の場合は〰から，うはひぴひちの言語の場
合は〱から添字が始まる．）配列ちひひちべたはてたびぴちぴふびの最初のはふぴっはふのぴ個の位置に，完了したこ
れら操作に対するステータスを返す．完了したリクエストがノンブロッキング通信の呼び出しによって割り当てられた場合は，そのリクエストは解放され，対応するハンドルにはきぐぉたげぅけさぅこごたぎさががが設定される．
リストがアクティブなハンドルを含まない場合は，呼び出しはただちにはふぴっはふのぴ 〽

〳〮〷〮 ノンブロッキング通信〷〱

きぐぉたさぎいぅうぉぎぅいを返す．

〱

きぐぉたしぁぉごこくきぅによって完了した〱つあるいはそれ以上の通信が失敗した時は，それぞれの通信についての特定の情報を返すことが望ましい．引数はふぴっはふのぴ，
ちひひちべたはてたどのつどっづび，ちひひちべたはてたびぴちぴふびづびは成功，あるいは失敗した全ての通信の完了を示すよ
うに調節される．呼び出しはエラーコードきぐぉたぅげげたぉぎたこごぁごさこを返し，それぞれのステータスの返ってきたエラーフィールドは成功を示すように設定されるか，発生した特定のエラーを示すように設定される．この呼び出しは，失敗に終わったリクエストがなかったときはきぐぉたこさぃぃぅここを返し，他の理由（不正な引数など）によって失敗したときは他のエラーコードを返す．このような場合には，ステータスのエラーフィールドは更新
されない．

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

きぐぉたごぅこごこくきぅ〨どのっはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〬 はふぴっはふのぴ〬 ちひひちべたはてたどのつどっづび〬 ちひひちべたはてたびぴちぴふびづび〩
ぉぎ
ぉぎくさご
くさご
くさご
くさご

どのっはふのぴ
ちひひちべたはてたひづぱふづびぴ
はふぴっはふのぴ
ちひひちべたはてたどのつどっづび
ちひひちべたはてたびぴちぴふびづび

〱〴
〱〵
〱〶

ちひひちべたはてたひづぱふづびぴびの長さ（非負の整数型）〱〷

リクエストの配列（ハンドルの配列）〱〸完了したリクエストの数（整数型）〱〹

完了した操作の添字の配列（整数型の配列）〲〰

完了した操作に対するステータスオブジェクトの配列（ステータス型の配列）

〲〱
〲〲
〲〳

どのぴ きぐぉたごづびぴびはねづ〨どのぴ どのっはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬
どのぴ 〪はふぴっはふのぴ〬 どのぴ 〪ちひひちべたはてたどのつどっづび〬 きぐぉたこぴちぴふび 〪ちひひちべたはてたびぴちぴふびづび〩
きぐぉたごぅこごこくきぅ〨ぉぎぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 くさごぃくさぎご〬 ぁげげぁすたくうたぉぎいぉぃぅこ〬ぁげげぁすたくうたこごぁごさこぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 くさごぃくさぎご〬 ぁげげぁすたくうたぉぎいぉぃぅこ〨〪〩〬ぁげげぁすたくうたこごぁごさこぅこ〨きぐぉたこごぁごさこたこぉずぅ〪〬〩〬 ぉぅげげくげ
{びぴちぴどっ どのぴ きぐぉ〺〺げづぱふづびぴ〺〺ごづびぴびはねづ〨どのぴ どのっはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬 どのぴ ちひひちべたはてたどのつどっづびせそ〬
きぐぉ〺〺こぴちぴふび ちひひちべたはてたびぴちぴふびづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}{びぴちぴどっ どのぴ きぐぉ〺〺げづぱふづびぴ〺〺ごづびぴびはねづ〨どのぴ どのっはふのぴ〬
きぐぉ〺〺げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬 どのぴ ちひひちべたはてたどのつどっづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}
ただちに戻るという点を除いて，動作はきぐぉたしぁぉごこくきぅと同様である．操作が〱つも完了していないときははふぴっはふのぴ 〽 〰を返す．リストの中にアクティブなハンドルが無いと
きははふぴっはふのぴ 〽 きぐぉたさぎいぅうぉぎぅいを返す．
きぐぉたごぅこごこくきぅはローカルな操作であり，きぐぉたしぁぉごこくきぅが通信が完了するまでブロッキングされていたのに対し，少なくとも〱つのアクティブなハンドルを含むリストを渡されると，ただちに戻ってくる．この呼び出しはどちらも公平性の要求を満たす．すなわち，きぐぉたしぁぉごこくきぅあるいはきぐぉたごぅこごこくきぅに渡されたリクエストのリストに受信リクエストが繰り返し現れ，マッチする送信が発行されると，その送信に他の受信が応じなければ受信は最終的には成功する．送信リクエストについても同様である．
きぐぉたごぅこごこくきぅの実行中に起こったエラーは，きぐぉたしぁぉごこくきぅと同様に扱われる．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〷〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

ユーザへのアドバイス きぐぉたごぅこごこくきぅの使用はきぐぉたごぅこごぁぎすの使用よりも有効であると考えられる．前者は完了した全ての通信についての情報を返すが，後者では完了したそれぞれの通信について新たな呼び出しが必要となる．
複数のクライアントを持つサーバでは，クライアントの要求がいつまでも受け付けられないという状態にならないようにきぐぉたしぁぉごこくきぅを利用することができる．
クライアントはサーバにサービス要求のメッセージを送る．サーバはクライアント
ごとに受信リクエストを付けてきぐぉたしぁぉごこくきぅを呼び出し，完了した全ての受信を取り扱う．代わりにきぐぉたしぁぉごぁぎすの呼び出しを使うと，他のクライアントからの要求が常に最初に割り込んでしまい，あるクライアントの要求がいつまでも受け付けられないということが起こりうる． （ユーザへのアドバイス終わり）

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

実装者へのアドバイス きぐぉたごぅこごこくきぅは保留中の通信を可能な限りたくさん完了
させなければならない． （実装者へのアドバイス終わり）
例 3.16 クライアントサーバのコード（スタベーションが起こりうる）

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

ぃぁがが きぐぉたぃくききたこぉずぅ〨っはねね〬 びどぺづ〬 どづひひ〩
ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう〨ひちのに 〮ぇご〮 〰〩 ごえぅぎ
〡 っぬどづのぴ っはつづ
いく しえぉがぅ〨〮ごげさぅ〮〩
ぃぁがが きぐぉたぉこぅぎい〨ち〬 の〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〬 どづひひ〩
ぃぁがが きぐぉたしぁぉご〨ひづぱふづびぴ〬 びぴちぴふび〬 どづひひ〩ぅぎい いくぅがこぅ〡 ひちのに〽〰 〭〭 びづひぶづひ っはつづいく ど〽〱〬 びどぺづ〭〱
ぃぁがが きぐぉたぉげぅぃざ〨ち〨〱〬ど〩〬 の〬 きぐぉたげぅぁが〬 ど〬 ぴちで〬っはねね〬 ひづぱふづびぴたぬどびぴ〨ど〩〬 どづひひ〩ぅぎい いくいく しえぉがぅ〨〮ごげさぅ〮〩
ぃぁがが きぐぉたしぁぉごぁぎす〨びどぺづ〭〱〬 ひづぱふづびぴたぬどびぴ〬 どのつづへ〬 びぴちぴふび〬 どづひひ〩
ぃぁがが いくたこぅげざぉぃぅ〨ち〨〱〬どのつづへ〩〩 〡 とちのつぬづ はのづ ねづびびちでづぃぁがが きぐぉたぉげぅぃざ〨ち〨〱〬 どのつづへ〩〬 の〬 きぐぉたげぅぁが〬 どのつづへ〬 ぴちで〬っはねね〬 ひづぱふづびぴたぬどびぴ〨どのつづへ〩〬 どづひひ〩ぅぎい いくぅぎい ぉう

〳〶
〳〷
〳〸
〳〹

例 3.17 きぐぉたしぁぉごこくきぅを用いた同様のコード．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぃぁがが きぐぉたぃくききたこぉずぅ〨っはねね〬 びどぺづ〬 どづひひ〩
ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう〨ひちのに 〮ぇご〮 〰〩 ごえぅぎ
〡 っぬどづのぴ っはつづ
いく しえぉがぅ〨〮ごげさぅ〮〩
ぃぁがが きぐぉたぉこぅぎい〨ち〬 の〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〬 どづひひ〩
ぃぁがが きぐぉたしぁぉご〨ひづぱふづびぴ〬 びぴちぴふび〬 どづひひ〩ぅぎい いくぅがこぅ〡 ひちのに〽〰 〭〭 びづひぶづひ っはつづいく ど〽〱〬 びどぺづ〭〱〳〮〷〮 ノンブロッキング通信〷〳

ぃぁがが きぐぉたぉげぅぃざ〨ち〨〱〬ど〩〬 の〬 きぐぉたげぅぁが〬 ど〬 ぴちで〬っはねね〬 ひづぱふづびぴたぬどびぴ〨ど〩〬 どづひひ〩ぅぎい いくいく しえぉがぅ〨〮ごげさぅ〮〩
ぃぁがが きぐぉたしぁぉごこくきぅ〨びどぺづ〬 ひづぱふづびぴたぬどびぴ〬 のふねつはのづ〬
どのつどっづび〬 びぴちぴふびづび〬 どづひひ〩
いく ど〽〱〬 のふねつはのづぃぁがが いくたこぅげざぉぃぅ〨ち〨〱〬 どのつどっづび〨ど〩〩〩ぃぁがが きぐぉたぉげぅぃざ〨ち〨〱〬 どのつどっづび〨ど〩〩〬 の〬 きぐぉたげぅぁが〬 〰〬 ぴちで〬っはねね〬 ひづぱふづびぴたぬどびぴ〨どのつどっづび〨ど〩〩〬 どづひひ〩ぅぎい いくぅぎい いくぅぎい ぉう

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

3.7.6 statusの非破壊なテスト〱〵

この呼び出しは，リクエストを解放しないでリクエストに関連する情報にアクセスする場合に有益である（後からユーザがアクセスすることが想定される場合）．複数のソフトウェアの層から完了した同じリクエストにアクセスし，そこからステータス情報を取得することができるため，ライブラリをより便利に多層構造にすることができる．

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたげぅけさぅこごたぇぅごたこごぁごさこ〨 ひづぱふづびぴ〬 」ちで〬 びぴちぴふび 〩
ぉぎ
くさご
くさご

ひづぱふづびぴ」ちで
びぴちぴふび〲〳リクエスト（ハンドル）〲〴

きぐぉたごぅこごと同様の論理型のフラグ（論理型）〲〵

きぐぉたこごぁごさこオブジェクト（フラグが真の場合）（ス
テータス型）〲〶〲〷〲〸

どのぴ きぐぉたげづぱふづびぴたでづぴたびぴちぴふび〨きぐぉたげづぱふづびぴ ひづぱふづびぴ〬 どのぴ 〪てぬちで〬きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたげぅけさぅこごたぇぅごたこごぁごさこ〨 げぅけさぅこご〬 うがぁぇ〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
{ぢははぬ きぐぉ〺〺げづぱふづびぴ〺〺ぇづぴたびぴちぴふび〨きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形
式, 第15.2節を参照）}{ぢははぬ きぐぉ〺〺げづぱふづびぴ〺〺ぇづぴたびぴちぴふび〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
操作が完了した場合は」ちで〽ぴひふづを設定し，この場合，びぴちぴふびにリクエストステータスを返す．ただし，テストまたはウェイトとは異なり，リクエストの解放や非アクティブ化は行わないため，その後，テストやウェイトや解放の呼び出しをそのリクエストを使用して実行する必要がある．操作が完了しない場合，」ちで〽てちぬびづを設定する．
きぐぉたげぅけさぅこごたぇぅごたこごぁごさこの呼び出しには，のふぬぬまたは非アクティブなリクエストの引数を使用することができる．このような場合，操作は」ちで〽ぴひふづと空のステータスを
返す．

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信〷〴〱

3.8 プローブおよびキャンセル

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

きぐぉたぐげくあぅおよびきぐぉたぉぐげくあぅ操作により，実際にメッセージを受け取ることなく，送信したメッセージが確認できる．ユーザは，プローブ操作により得られた情報に基づいて，メッセージを受け取る方法を決定することができる（基本的には，この情報
はびぴちぴふびにより返されるものである）．特に，あらかじめ確認されたメッセージの長さに応じて，受信パッファの記憶領域を割り当てることができる．
きぐぉたぃぁぎぃぅが操作により，保留中の通信をキャンセルできる．この操作は，クリーンアップのために必要である．送信または受信の発行は，ユーザリソース（送受信バッファ）の消費に直接関連している．キャンセルは，これらのリソースを悪影響なく解放するために必要とされるものであることができる．

〱〴〱〵

きぐぉたぉぐげくあぅ〨びはふひっづ〬 ぴちで〬 っはねね〬 」ちで〬 びぴちぴふび〩〱〶ぉぎ

びはふひっづ

送信元のランクまたはきぐぉたぁぎすたこくさげぃぅ（整数
型）

〱〹

ぉぎ

メッセージタグまたはきぐぉたぁぎすたごぁぇ（整数型）

〲〰

ぉぎ

〲〱

くさご

〲〲

くさご

ぴちで
っはねね
」ちで
びぴちぴふび〱〷〱〸コミュニケータ（ハンドル）（論理型）
ステータスオブジェクト（ステータス型）

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

どのぴ きぐぉたぉばひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 どのぴ 〪てぬちで〬きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたぉぐげくあぅ〨こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 うがぁぇ〬 こごぁごさこ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぢははぬ きぐぉ〺〺ぃはねね〺〺ぉばひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{ぢははぬ きぐぉ〺〺ぃはねね〺〺ぉばひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぉぐげくあぅ 〨びはふひっづ〬 ぴちで〬 っはねね〬 」ちで〬 びぴちぴふび〩は，受信可能で，引数びはふひっづ，
ぴちで，っはねねにより指定されたパターンにマッチするメッセージがあった場合，」ちで 〽
ぴひふづを返す．この呼び出しによるメッセージは，プログラムの中で同じ時点で実行されるきぐぉたげぅぃざ〨〮〮〮〬 びはふひっづ〬 ぴちで〬 っはねね〬 びぴちぴふび〩によって受信されるメッセージと一致し，
きぐぉたげぅぃざ〨〩によって返されるのと同じ値をびぴちぴふびに返す．そうでない場合，この呼び出
しは」ちで 〽 てちぬびづを返し，びぴちぴふびは未定義のままとなる．
第〳〮〲〮〵節で説明しているように，きぐぉたぉぐげくあぅが」ちで 〽 ぴひふづを返した場合，プローブされたメッセージの送信元やタグ，長さを見つけるため，ステータスオブジェクトの内容が続いてアクセスされうる．
きぐぉたぉぐげくあぅで返されたびぴちぴふびに入っていた，同じコミュニケータ，ソース，タグを用いた後から行われた受信は，プローブでマッチされたメッセージを受信する．ただし，プローブの後に割り込むような他の受信がなく，また受信の前にその送信のキャンセルが成功していない場合に限る．受信プロセスがマルチスレッドの場合，この条件が満た〳〮〸〮 プローブおよびキャンセル〷〵

されるようにすることはユーザの責任である．
きぐぉたぐげくあぅのびはふひっづ引数は，きぐぉたぁぎすたこくさげぃぅとする設定が可能であり，ぴちで引数にも同様にきぐぉたぁぎすたごぁぇが設定可能である．そのため，任意の送信元やタグによって，複数のメッセージについてプローブすることができる．ただし，っはねね引数に対して特定の通信コンテクストが与えられなければならない．
メッセージをプローブした後では，すぐにメッセージを受信する必要はなく，また受信する以前に何度でも同じメッセージをプローブすることが可能である．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

きぐぉたぐげくあぅ〨びはふひっづ〬 ぴちで〬 っはねね〬 びぴちぴふび〩
ぉぎ
ぉぎ
ぉぎ
くさご

びはふひっづ
ぴちでっはねね
びぴちぴふび〱〱

送信元のランクまたはきぐぉたぁぎすたこくさげぃぅ（整数型）〱〲

メッセージタグまたはきぐぉたぁぎすたごぁぇ（整数型）〱〴

コミュニケータ（ハンドル）〱〵ステータスオブジェクト（ステータス型）

〱〳

〱〶
〱〷

どのぴ きぐぉたぐひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたぐげくあぅ〨こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぐひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぐひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}〱〸

きぐぉたぐげくあぅは，マッチするメッセージを発見した後でのみ戻るブロッキング呼び出
しである点を除いて，きぐぉたぉぐげくあぅと同様に動作する．
きぐぉにおけるきぐぉたぐげくあぅやきぐぉたぉぐげくあぅの実装では，プログレスを保証する必要があ
る．あるプロセスによりきぐぉたぐげくあぅの呼び出しが実行され，プローブにマッチした送信がいずれかのプロセスによって起動されている場合，そのメッセージが，同時に動作す
る別の受信操作（プローブのプロセスにおいて別のスレッドにより実行されるもの）によって受信されない場合に限り，きぐぉたぐげくあぅの呼び出しがいつかは戻る．同様に，プ
ロセスがきぐぉたぉぐげくあぅでビジーウェイトし，マッチするメッセージが発行された場合には，そのメッセージが同時に動作する別の受信操作によって受信されない場合に限り，きぐぉたぉぐげくあぅの呼び出しは最終的に」ちで 〽 ぴひふづを返す．

〲〵

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

例 3.18 送信されたメッセージを待つためのブロッキングプローブの使用

〳〸
〳〹

〱〰〰

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨ど〬 〱〬 きぐぉたぉぎごぅぇぅげ〬 〲〬 〰〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨へ〬 〱〬 きぐぉたげぅぁが〬 〲〬 〰〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〲〩 ごえぅぎ
いく ど〽〱〬 〲ぃぁがが きぐぉたぐげくあぅ〨きぐぉたぁぎすたこくさげぃぅ〬 〰〬っはねね〬 びぴちぴふび〬 どづひひ〩ぉう 〨びぴちぴふび〨きぐぉたこくさげぃぅ〩 〮ぅけ〮 〰〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ど〬 〱〬 きぐぉたぉぎごぅぇぅげ〬 〰〬 〰〬 っはねね〬 びぴちぴふび〬 どづひひ〩

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〷〶
〱
〲

ぅがこぅ
〲〰〰

〳
〴

ぃぁがが きぐぉたげぅぃざ〨へ〬 〱〬 きぐぉたげぅぁが〬 〱〬 〰〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉうぅぎい いくぅぎい ぉう〵〶それぞれのメッセージは正しい型で受信される．

〷〸

例 3.19 前の例と同様のプログラム（ただしこの例では問題がある）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

〱〰〰

〱〹
〲〰
〲〱
〲〲
〲〳

〲〰〰

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨ど〬 〱〬 きぐぉたぉぎごぅぇぅげ〬 〲〬 〰〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨へ〬 〱〬 きぐぉたげぅぁが〬 〲〬 〰〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〲〩 ごえぅぎ
いく ど〽〱〬 〲ぃぁがが きぐぉたぐげくあぅ〨きぐぉたぁぎすたこくさげぃぅ〬 〰〬っはねね〬 びぴちぴふび〬 どづひひ〩ぉう 〨びぴちぴふび〨きぐぉたこくさげぃぅ〩 〮ぅけ〮 〰〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ど〬 〱〬 きぐぉたぉぎごぅぇぅげ〬 きぐぉたぁぎすたこくさげぃぅ〬〰〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅがこぅ
ぃぁがが きぐぉたげぅぃざ〨へ〬 〱〬 きぐぉたげぅぁが〬 きぐぉたぁぎすたこくさげぃぅ〬〰〬 っはねね〬 びぴちぴふび〬 どづひひ〩ぅぎい ぉうぅぎい いくぅぎい ぉう

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

〱〰〰および〲〰〰というラベルを付けた〲つの受信呼び出しでびはふひっづ引数としてきぐぉたぁぎすたこくさげぃぅを使用し，例〳〮〱〸に少し修正を加えている．このプログラムはこのままでは，正しく動作しない．すなわち，これらの受信操作が，あらかじめきぐぉたぐげくあぅの
呼び出しによってプローブされたメッセージとは異なるメッセージを受け取る可能性が
ある．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス きぐぉたぐげくあぅ〨びはふひっづ〬 ぴちで〬 っはねね〬 びぴちぴふび〩の呼び出しは，同じ地点で実行するきぐぉたげぅぃざ〨〮〮〮〬 びはふひっづ〬 ぴちで〬 っはねね〬 びぴちぴふび〩の呼び出しによって受け取られるメッセージと一致する．このメッセージが，送信元び，タグぴ，コミュニケー
タっを持つとする．プローブ呼び出しにおけるタグ引数が値きぐぉたぁぎすたごぁぇをもつ場
合には，プローブされるメッセージは，任意のタグとコミュニケータっを持つ，送信元びからの最初の保留中のメッセージである．いかなる場合でも，プローブされたメッセージは，タグぴとコミュニケータっを持つ送信元びからの最初の保留中のメッセージである（これは，メッセージの順序を保持するように，受信したメッセー
ジである）．このメッセージは，受信されるまでタグぴとコミュニケータっを持つ送信元びからの最初の保留中のメッセージとして保持される．プローブ後の受信操作
は，プローブと同じコミュニケータを使用し，プローブによって返されたタグと送信元の値を使用する場合，このメッセージが別の受信操作によってすでに受信されているのでなければ，受信する必要がある． （実装者へのアドバイス終わり）〳〮〸〮 プローブおよびキャンセル〷〷

きぐぉたぃぁぎぃぅが〨ひづぱふづびぴ〩ぉぎ

ひづぱふづびぴ〱通信リクエスト（ハンドル）

どのぴ きぐぉたぃちのっづぬ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたぃぁぎぃぅが〨げぅけさぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺げづぱふづびぴ〺〺ぃちのっづぬ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぃぁぎぃぅがの呼び出しは，キャンセルを行う保留中のノンブロッキング通信関数（送信または受信）をマークする．キャンセルの呼び出しは，ローカルに実行される．
この呼び出しは即座に戻り，通信が実際にキャンセルされる以前である可能性もある． キャンセルをマークした通信はそれでも，きぐぉたげぅけさぅこごたうげぅぅ，きぐぉたしぁぉごまた
はきぐぉたごぅこご （または任意の派生関数）の呼び出しを使って完了する必要がある．
ある通信がキャンセルの対象とされた場合，他のプロセスの状態に関わらず，通信に対するきぐぉたしぁぉご呼び出しが戻ることが保証される（したがって，きぐぉたしぁぉごはローカル関数として動作することになる）．同様に，ビジーウェイトループにおいて，キャンセ
ルの対象とされた通信に対してきぐぉたごぅこごを繰り返し呼び出した場合，この呼び出しは，最終的には成功することになる．
きぐぉたぃぁぎぃぅがは，非持続的なリクエストを用いる場合と同様な方法で，持続的なリクエスト（第〳〮〹節参照）を用いた通信をキャンセルするためにも利用することができる． キャンセル操作の成功は，動作中の通信をキャンセルすることになるが，リクエスト自体をキャンセルするわけではない． きぐぉたぃぁぎぃぅがが呼び出され，続いてきぐぉたしぁぉごやきぐぉたごぅこごが呼び出された場合，リクエストは非アクティブになり，新しい通信でアクティブにすることができる．
バッファ送信のキャンセルが成功すると，保留中のメッセージによって確保されていたバッファ領域は解放される．
通信に対しては，キャンセルが成功するか，動作が成功するかのどちらかであり，いずれもが成功することはない．ある送信がキャンセルの対象としてマークされた場合，送信が正常に完了する（このときは，送信されたメッセージは送信先のプロセスに受信される）か，送信のキャンセルが成功する（このときは，送信先においてメッセージの全てが受信されない）かのいずれかでなければならない．したがって，キャンセルされた送信にマッチする受信に対しては，別の送信がマッチする必要がある．また，ある受信がキャンセルの対象としてマークされた場合，送信が正常に完了するか，受信のキャンセルが成功する（このときは，受信バッファの全てが更新されない）かのいずれかにならなければならない．したがって，キャンセルされた受信にマッチする送信に対しては，別の受信がマッチする必要がある．
操作がキャンセルされた場合，通信を完了させる関数のびぴちぴふび引数に対して，キャンセルの結果についての情報が返される．

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

根拠 ぉぎリクエストハンドルパラメータは参照により渡される必要がないことになっているが，きぐぉ〭〱〮〰以来，ぃ言語の呼び出し形式では引数の型が きぐぉたげづぱふづびぴ〪として列記されている．そのため，この関数のシグネチャは既存のきぐぉアプリケーシ

〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信〷〸

ョンに影響を及ぼさずには変更することはできない． （根拠の終わり）

〱
〲
〳
〴
〵

きぐぉたごぅこごたぃぁぎぃぅががぅい〨びぴちぴふび〬 」ちで〩

〶

ぉぎ

〷

くさご

びぴちぴふび」ちでステータスオブジェクト（ステータス型）
（論理型）

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

どのぴ きぐぉたごづびぴたっちのっづぬぬづつ〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 どのぴ 〪てぬちで〩きぐぉたごぅこごたぃぁぎぃぅががぅい〨こごぁごさこ〬 うがぁぇ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぢははぬ きぐぉ〺〺こぴちぴふび〺〺ぉびたっちのっづぬぬづつ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
ステータスオブジェクトに関連する通信のキャンセルが成功した場合には，」ちで 〽
ぴひふづが返される．この場合，びぴちぴふび中の他の全てのフィールド（っはふのぴ，ぴちでなど）は，不定になる．そうでない場合には，」ちで 〽 てちぬびづが返される．受信操作がキャンセルされた可能性がある場合，ステータスの戻り値の他の項目の情報について確認する前に，受信操作
がキャンセルされたかどうかを調べるために，まずはじめにきぐぉたごぅこごたぃぁぎぃぅががぅいを呼び出す必要がある．

〲〱
〲〲
〲〳

ユーザへのアドバイス キャンセルは，コストのかかる操作になる可能性があるので，例外的な場合にのみ利用すべきである． （ユーザへのアドバイス終わり）

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

実装者へのアドバイス 送信操作でぜづちでづひ〢プロトコル（マッチする受信が発行される前に，受信側に対してデータを転送する）を用いた場合，この送信のキャンセルを行うには，割り当てられていたバッファの領域を解放するために，対象とされる
受信側との通信が必要になる場合がある．また，システムによっては，この通信が，対象とされる受信側に対して割り込みを行う必要がある．なお，実装に当たり，以下に示す点を注意する必要がある． きぐぉたぃぁぎぃぅがのために通信が必要となる可能性があるものの，きぐぉたぃぁぎぃぅが自体はローカルな操作となることに注意せねばならない．その操作が他のプロセスにより実行されたコードに依存していないためである． もし，他のプロセスに対する処理が必要な場合，その処理はアプリケーションからは見えないようになっている必要がある（そのため，割り込みや割り込みハンドラが必要とされる）． （実装者へのアドバイス終わり）

〳〸
〳〹
〴〰

3.9 持続的通信リクエスト

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

並列計算のループの内部において，同一の引数リストを持つ通信が，しばしば繰り返
し実行される． このような場合，通信での引数リストを持続的な通信リクエストと一度結びつけて，このリクエストを用いてメッセージの起動と完了を繰り返し行うことによって，これらの通信の効率を最適化することができる．つまり，このようにして生成された持続的な通信リクエストは，通信ポートまたは「ハーフチャネル」とみなすことができる．これらの通信では，送信ポートと受信ポートとの間に呼び出し形式が完成して〳〮〹〮 持続的通信リクエスト〷〹

いないため，標準的なチャネルのような完全な機能が提供されているわけではない．このような構成を行うことにより，プロセスと通信コントローラとの間で行われる通信に関して，オーバーヘッドを軽減できる．一方，ある通信コントローラと他の通信コント
ローラとの通信に関しては，このようなオーバーヘッドの軽減はできない．持続的な通信リクエストにより送信されるメッセージは，必ずしも，持続的なリクエストによる受信操作によって受信される必要はなく，また，逆の状況であった場合も同様である．
持続的な通信リクエストは，以下の〵つの呼び出しのうちの〱つを利用して生成される．
なお，これらの呼び出しでは，通信は実行されない．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

きぐぉたこぅぎいたぉぎぉご〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね
ひづぱふづびぴ送信バッファの先頭アドレス（選択型）
送信される要素の数（非負の整数型）

〱〲
〱〳
〱〴
〱〵

各要素の型（ハンドル）〱〶

送信先のランク（整数型）〱〷

メッセージタグ（整数型）〱〸

コミュニケータ（ハンドル）〱〹

通信リクエスト（ハンドル）〲〰

どのぴ きぐぉたこづのつたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたこぅぎいたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺ぐひづぱふづびぴ きぐぉ〺〺ぃはねね〺〺こづのつたどのどぴ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

標準モードでの送信操作のための持続的な通信リクエストを生成し，送信操作での全ての引数をそれに結びつける．

〳〰
〳〱
〳〲

きぐぉたあこぅぎいたぉぎぉご〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね
ひづぱふづびぴ〳〳〳〴送信バッファの先頭アドレス（選択型）〳〵

送信される要素の数（非負の整数型）〳〶

各要素の型（ハンドル）〳〷

送信先のランク（整数型）〳〸

メッセージタグ（整数型）〳〹

コミュニケータ（ハンドル）
通信リクエスト（ハンドル）

〴〰
〴〱
〴〲
〴〳

どのぴ きぐぉたあびづのつたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたあこぅぎいたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ

〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〸〰
〱
〲
〳
〴

{きぐぉ〺〺ぐひづぱふづびぴ きぐぉ〺〺ぃはねね〺〺あびづのつたどのどぴ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
バッファモードでの送信のための持続的な通信リクエストを生成する．

〵〶〷

きぐぉたここぅぎいたぉぎぉご〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩

〸
〹
〱〰

ぉぎ
ぉぎ

〱〱
〱〲

ぉぎ

〱〳

ぉぎ

〱〴

ぉぎ

〱〵

ぉぎ

〱〶

くさご

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね
ひづぱふづびぴ送信バッファの先頭アドレス（選択型）
送信される要素の数（非負の整数型）
各要素の型（ハンドル）
送信先のランク（整数型）
メッセージタグ（整数型）
コミュニケータ（ハンドル）
通信リクエスト（ハンドル）

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

どのぴ きぐぉたこびづのつたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたここぅぎいたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺ぐひづぱふづびぴ きぐぉ〺〺ぃはねね〺〺こびづのつたどのどぴ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
同期モードでの送信操作のための持続的な通信オブジェクトを生成する．

〲〷
〲〸
〲〹

きぐぉたげこぅぎいたぉぎぉご〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩
ぉぎ

〳〰
〳〱

ぉぎ

〳〲

ぉぎ

〳〳

ぉぎ

〳〴

ぉぎ

〳〵

ぉぎ

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

くさご

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
ぴちで
っはねね
ひづぱふづびぴ送信バッファの先頭アドレス（選択型）
送信される要素の数（非負の整数型）
各要素の型（ハンドル）
送信先のランク（整数型）
メッセージタグ（整数型）
コミュニケータ（ハンドル）
通信リクエスト（ハンドル）

どのぴ きぐぉたげびづのつたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたげこぅぎいたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺ぐひづぱふづびぴ きぐぉ〺〺ぃはねね〺〺げびづのつたどのどぴ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
レディモードでの送信操作のための持続的な通信オブジェクトを生成する．

〳〮〹〮 持続的通信リクエスト〸〱きぐぉたげぅぃざたぉぎぉご〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びはふひっづ〬 ぴちで〬 っはねね〬 ひづぱふづびぴ〩
くさご
ぉぎ
ぉぎ
ぉぎ

〱
〲

ぢふて
っはふのぴ
つちぴちぴべばづ
びはふひっづ

受信バッファの先頭アドレス（選択型）

ぴちで
っはねね
ひづぱふづびぴメッセージタグまたはきぐぉたぁぎすたごぁぇ（整数型）〸

コミュニケータ（ハンドル）〹

通信リクエスト（ハンドル）〱〰

受信された要素の数（非負の整数型）〳〴

各要素の型（ハンドル）〵

送信元のランクまたはきぐぉたぁぎすたこくさげぃぅ（整数型）

〶
〷

ぉぎ
ぉぎ
くさご

〱〱

どのぴ きぐぉたげづっぶたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたげぅぃざたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺ぐひづぱふづびぴ きぐぉ〺〺ぃはねね〺〺げづっぶたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}
受信操作のための持続的通信リクエストを生成する．ユーザがきぐぉたげぅぃざたぉぎぉごに対して引数を渡すことにより受信バッファに書き込み許可を与えるため，引数ぢふてはくさごとなる．
持続的な通信リクエストは，それが生成された後では非アクティブである．つまり，アクティブな通信が持続的な通信リクエストに結びつけられることはない．
持続的な通信リクエストを用いた通信（送信または受信）はきぐぉたこごぁげご関数により起
動される．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

きぐぉたこごぁげご〨ひづぱふづびぴ〩

〳〰

ぉぎくさご

ひづぱふづびぴ通信リクエスト（ハンドル）

どのぴ きぐぉたこぴちひぴ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたこごぁげご〨げぅけさぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぐひづぱふづびぴ〺〺こぴちひぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
ここでの引数ひづぱふづびぴは，上記の〵種類の呼び出しのいずれかにより返されるハンドルである．対応するリクエストは，この状態では非アクティブである．ただし，一度呼び出しが実行された後では，リクエストはアクティブになる．
このリクエストがレディモードでの送信であった場合，呼び出しが実行される前に，マッチする受信が発行されている必要がある．呼び出しの後，この操作が完了するまでは，通信バッファを変更してはならない．
こ の 呼 び 出 し は ロ ー カ ル で，第〳〮〷節 で 説 明 し た ノ ン ブ ロ ッ キ ン グ 通 信 関 数 と 同様の意味を持つ． つまり，きぐぉたこぅぎいたぉぎぉごによって生成されたリクエストを使用したきぐぉたこごぁげごの呼び出しは，きぐぉたぉこぅぎいの呼び出しと同様な方法によって通信を開始する．また，きぐぉたあこぅぎいたぉぎぉごによって生成されたリクエストを使用したきぐぉたこごぁげごの

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信〸〲〱〲

呼び出しは，きぐぉたぉあこぅぎいの呼び出しと同様の方法によって通信を開始する，などであ
る．

〳
〴
〵

きぐぉたこごぁげごぁがが〨っはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〩

〶

ぉぎ

〷

ぉぎくさご

っはふのぴ
ちひひちべたはてたひづぱふづびぴび

リストの長さ（非負の整数型）
リクエストの配列（ハンドルの配列）

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

どのぴ きぐぉたこぴちひぴちぬぬ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〩
きぐぉたこごぁげごぁがが〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 ぉぅげげくげ
{びぴちぴどっ ぶはどつ きぐぉ〺〺ぐひづぱふづびぴ〺〺こぴちひぴちぬぬ〨どのぴ っはふのぴ〬
きぐぉ〺〺ぐひづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〩 （廃止された呼び出し形式, 第15.2節
を参照）}
ちひひちべたはてたひづぱふづびぴびのリクエストに対応する全ての通信を開始する．
きぐぉたこごぁげごぁがが〨っはふのぴ〬 ちひひちべたはてたひづぱふづびぴび〩の呼び出しは，任意の順序でど〽〰 〮〮〮〬〬 っはふのぴ〭〱に対して繰り返し実行されるきぐぉたこごぁげご 〨〦ちひひちべたはてたひづぱふづびぴびせどそ〩の呼び出しと同じ機能を持っている．
きぐぉたこごぁげごやきぐぉたこごぁげごぁががの呼び出しにより開始された通信は，
きぐぉたしぁぉごや きぐぉたごぅこごの呼び出し，または第〳〮〷〮〵節で説明した派生関数の呼び出しによって完了する． このリクエストは，上記の呼び出しが完了した後で非アクティ
ブになる． このリクエストへの領域の割り当てが解放されることはない． そして，
きぐぉたこごぁげごやきぐぉたこごぁげごぁががの呼び出しによって新たにアクティブにすることができる．
持続的なリクエストは，きぐぉたげぅけさぅこごたうげぅぅの呼び出し（第〳〮〷〮〳節）によって領域の割り当てが解放される．
きぐぉたげぅけさぅこごたうげぅぅの呼び出しは，持続的なリクエストが生成された後，プログラ
ムの任意の時点で実行することが可能である．ただし，このリクエストは非アクティブになった後でのみ割当が解放される．アクティブな受信リクエストは解放してはいけな
い． そうしてしまうと，受信が完了したかどうかを確認することはできなくなる．一般
的に，これらの受信リクエストは非アクティブになった状態で解放することが望ましい．
この規則に従っている場合には，この節で説明した関数は，以下に記述された順序で起
動される．

〳〸
〳〹

Create 〨Start Complete〩∗ Free

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ここで∗は〰回または〱回以上の繰り返しを示す．同じ通信オブジェクトが複数の同時実行
されるスレッド内で使用される場合，正しい順序に従うようにするために呼び出しを調整するのは，ユーザの責任である．
きぐぉたこごぁげごにより起動された送信操作は，任意の受信操作とマッチすることが可能であり，同様に，きぐぉたこごぁげごにより起動された受信操作は，任意の送信操作によって生成されるメッセージを受信することが可能である．

〳〮〱〰〮 送受信〸〳

ユーザへのアドバイス うはひぴひちの言語のコンパイラによって行われる引数のコピーとレジスタの最適化に関する問題を回避するため，第〱〶〮〲〮〲節の「データのコピーおよび連続領域配置による問題」（〵〰〴ページ）と「レジスタの最適化での問題」（〵〰〷ページ）のヒントに注意すること． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷

3.10 送受信〸

送受信操作は，特定の送信先に対するメッセージの送信動作と，他のプロセスからの別のメッセージの受信動作を〱つの呼び出しとして組み合わせたものである．送信元と送信先は，同一にすることもできる．この送受信操作は， 連鎖的に繋がれたプロセスに沿ってシフト操作を実行するときに大変有効である．ブロッキング送信および受信がこのようなシフト操作に利用される場合，デッドロックを引き起こすような巡回依存性を避けるためにも，送信と受信の順序を正しく保つ必要がある（例えば，偶数のプロセスは送信をしてから受信を行い，奇数のプロセスであればはじめに受信を行ってから送信を行う）．このような送受信操作が利用される場合，これらの問題は通信サブシステムにより調節される．さまざまな論理的なトポロジー上でシフト操作を実行するため，第〷章で説明するような関数と結合する形式で送受信操作を利用することができる．また，送受信操作は，リモートプロシージャ呼び出しを実装する場合においても有効である．
送受信操作により送信されたメッセージは，通常の受信操作によって受信したり，プ
ローブ操作によってプローブしたりすることができる．送受信操作では，通常の送信操
作によって送信されたメッセージを受信することもできる．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

きぐぉたこぅぎいげぅぃざ〨びづのつぢふて〬 びづのつっはふのぴ〬 びづのつぴべばづ〬 つづびぴ〬 びづのつぴちで〬 ひづっぶぢふて〬 ひづっぶっはふのぴ〬 ひづっぶぴべばづ〬
びはふひっづ〬 ひづっぶぴちで〬 っはねね〬 びぴちぴふび〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご
ぉぎ
ぉぎ
ぉぎ

びづのつぢふてびづのつっはふのぴ
びづのつぴべばづ
つづびぴ
びづのつぴちで
ひづっぶぢふてひづっぶっはふのぴ
ひづっぶぴべばづ
びはふひっづ〲〸〲〹

送信バッファの先頭アドレス（選択型）〳〰

送信バッファ内の要素数（非負の整数型）〳〱

送信バッファ内の要素の型〨ハンドル〩〳〲

送信先のランク（整数型）〳〳

送信タグ（整数型）〳〴

受信バッファの先頭アドレス（選択型）〳〵〳〶

受信バッファ内の要素数（非負の整数型）〳〷

受信バッファ内の要素の型（ハンドル）〳〸送信元のランクまたはきぐぉたぁぎすたこくさげぃぅ（整数型）

〳〹
〴〰

ぉぎ
ぉぎ
くさご

ひづっぶぴちでっはねね
びぴちぴふび

受信タグまたはきぐぉたぁぎすたごぁぇ（整数型）〴〱

コミュニケータ（ハンドル）〴〲ステータスオブジェクト（ステータス型）

どのぴ きぐぉたこづのつひづっぶ〨ぶはどつ 〪びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 ぶはどつ 〪ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬
どのぴ びはふひっづ〬 どのぴ ひづっぶぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〸〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

きぐぉたこぅぎいげぅぃざ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 いぅこご〬 こぅぎいごぁぇ〬 げぅぃざあさう〬げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 こくさげぃぅ〬 げぅぃざごぁぇ〬 ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 いぅこご〬 こぅぎいごぁぇ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬
こくさげぃぅ〬 げぅぃざごぁぇ〬 ぃくきき〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺こづのつひづっぶ〨っはのびぴ ぶはどつ 〪びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬 どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 ぶはどつ 〪ひづっぶぢふて〬
どのぴ ひづっぶっはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ひづっぶぴちで〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}{ぶはどつ きぐぉ〺〺ぃはねね〺〺こづのつひづっぶ〨っはのびぴ ぶはどつ 〪びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬 どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 ぶはどつ 〪ひづっぶぢふて〬
どのぴ ひづっぶっはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ひづっぶぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
ブロッキング送受信操作を実行する．送信と受信の両方で同じコミュニケータが使われているが，タグは異なったものすることが望ましい．送信バッファと受信バッファは独立したものでなければならず，異なった長さとデータ型を持つことができる．
送受信操作の意味論は，呼び出し元が〲つの並行スレッドをフォークし，一つは送信を実行し，もう一つは受信を実行し，最後にこれらの〲つのスレッドをジョインする動作と同じものである．

〲〱〲〲〲〳

きぐぉたこぅぎいげぅぃざたげぅぐがぁぃぅ〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 びづのつぴちで〬 びはふひっづ〬 ひづっぶぴちで〬 っはねね〬 びぴち〭
ぴふび〩

〲〴
〲〵

送信兼受信バッファの先頭アドレス（選択型）

ぉぎ

ぢふて
っはふのぴ
つちぴちぴべばづ
つづびぴ
びづのつぴちでびはふひっづぉぎ

ひづっぶぴちで受信メッセージタグまたはきぐぉたぁぎすたごぁぇ（整数型）

ぉぎ

っはねね
びぴちぴふび

コミュニケータ（ハンドル）

ぉぎくさご

〲〶

ぉぎ

〲〷

ぉぎ

〲〸

ぉぎ

〲〹

ぉぎ

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

くさご

送信兼受信バッファ内の要素数（非負の整数型）
送信兼受信バッファ内の要素の型（ハンドル）
送信先のランク（整数型）
送信メッセージタグ（整数型）
送信元のランクまたはきぐぉたぁぎすたこくさげぃぅ（整数型）

ステータスオブジェクト（ステータス型）

どのぴ きぐぉたこづのつひづっぶたひづばぬちっづ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 どのぴ びはふひっづ〬 どのぴ ひづっぶぴちで〬 きぐぉたぃはねね っはねね〬
きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたこぅぎいげぅぃざたげぅぐがぁぃぅ〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 こぅぎいごぁぇ〬 こくさげぃぅ〬 げぅぃざごぁぇ〬
ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 こぅぎいごぁぇ〬 こくさげぃぅ〬 げぅぃざごぁぇ〬 ぃくきき〬
こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺こづのつひづっぶたひづばぬちっづ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 どのぴ びはふひっづ〬
どのぴ ひづっぶぴちで〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〳〮〱〱〮 ぎさががプロセス〸〵{ぶはどつ きぐぉ〺〺ぃはねね〺〺こづのつひづっぶたひづばぬちっづ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 どのぴ びはふひっづ〬
どのぴ ひづっぶぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱

ブロッキング送受信を実行する．送信操作と受信操作の両方に対して同じバッファが使用されるため，送信されたメッセージは受信されたメッセージに置換されてしまう．

〴

実装者へのアドバイス ぜひづばぬちっづ〢が付いた呼び出しに対しては中間バッファリングの追加が必要になる． （実装者へのアドバイス終わり）

〷

〲
〳

〵
〶

〸
〹
〱〰

3.11 nullプロセス〱〱

多くの場合，通信を行う場合に，「ダミー」の送信元と送信先を指定することは有用である．これによって，非循環型のシフト操作を送受信操作の呼び出しで実行する場合などにおいて，境界を取り扱う必要のあるコードを単純にすることが出来る．
呼び出しにおいて，送信元と送信先の引数が必要な場合にはランクの代わりに特別な値きぐぉたぐげくぃたぎさががを使用することができる．プロセスきぐぉたぐげくぃたぎさががによる通信では何も実行されない．この場合， きぐぉたぐげくぃたぎさががへの送信は成功し，ただちに戻る．また，
きぐぉたぐげくぃたぎさががからの受信も成功し，受信バッファに対する修正が行われることなく，ただちに戻る．びはふひっづ 〽 きぐぉたぐげくぃたぎさががとして 受信が実行される場合には，ステータス
オブジェクトはびはふひっづ 〽 きぐぉたぐげくぃたぎさがが，ぴちで 〽 きぐぉたぁぎすたごぁぇ，っはふのぴ 〽 〰を返す．

〱〳

〱〲

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〸〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〳〮 〱対〱通信

〱
〲
〳
〴
〵

第4章

〶
〷
〸
〹

データ型

〱〰
〱〱
〱〲
〱〳
〱〴

基本のデータ型については，第〳〮〲〮〲節のメッセージデータ（〳〲ページ）と第〳〮〳節のデータ型の一致とデータ変換（〴〲ページ）で紹介した．この章では，これをさらに拡大
してデータの配置を説明する．異機種間の不連続なデータを効率的に転送するための汎用データ型についても検討する．最後に，メッセージの明示的なパック／アンパックの呼び出しについて説明する．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

4.1 派生データ型〲〳〲〴

ここまで，すべての〱対〱通信は，同一の基本データ型の並びを含むバッファしか扱ってこなかった．このことは〲つの大きな制限を含んでいた．〱つは，異なるデータ型をもつ複数の値を含むメッセージを渡したい場合である（例えば，整数型の個数と，その後に実数列が続くような場合）．もう〱つは，不連続なデータを送信したい場合である（例えば，行列のサブブロック）．〱つの解決策は，送信側で，不連続なデータを連続なバッ
ファにパックし，そして受信側でアンパックすることである．しかし，これは通信サブシステムが スキャッタほギャザー の機能を持っている場合でさえ，余分なメモリコピー
操作が送信側と受信側の両方で必要になるという欠点を持つ．代わりに，きぐぉ は，より一般化され，データ型が混在し，かつ不連続な通信バッファを明確に定義するための機構を提供する．データを転送する前に連続なバッファにまずパックする必要があるのか，
あるいはデータが置かれた場所から直接集めるのかは実装によって決まる．
ここで提供される一般化された機構によって，コピーなしに，様々な形やサイズを持
つオブジェクトを転送することができる．しかし，きぐぉライブラリがホスト言語で宣言されたオブジェクトを認識できることを前提としていない．したがって，構造体や配列の一部を転送しようとすると，その構造体や配列の一部の定義を模倣した通信バッファの定義をきぐぉに与える必要が生じてしまう．これらの手段はライブラリの設計者が，ホスト言語で定義されたオブジェクトを転送できるような通信関数を定義するために使うことができる．例えば，シンボルテーブルやドープベクターで利用可能な定義をデコードすることにより，そうした通信関数を定義できる．このような高レベルの通信関数
はきぐぉ仕様の一部でない．
〸〷

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型

〸〸
〱
〲
〳
〴
〵
〶

これまで説明で用いられてきた基本データ型の代わりに，派生データ型で置換えることにより，より一般化された通信バッファを明確に定義できる．派生データ型は，この章で説明するコンストラクタに使って，基本データ型から構成される．また，派生デー
タ型を構成するメソッドは再帰的に適用することができる．
汎用データ型は次の〲つのことを規定する不可視オブジェクトである．

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

• 基本データ型の並び• 整数〨バイト〩変位の並び変位の並びの中のアイテムは，正であるとか，お互い重複がないとか，昇順であるとかの要件はない．したがって，アイテム間の順序は，格納の順序と一致する必要がない
し，あるアイテムがその中で複数回現れてもよい．このような並びの対（あるいは対の並び）を型マップと呼ぶ．基本データ型の並び（変位は考慮しない）は，そのデータ型の型シグネチャである．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

T ypemap 〽 {〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},このような型マップで，typei は基本データ型でdispi は変位である．
T ypesig 〽 {type0 , ..., typen−1 }

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

これは上記の型マップに関連付けられた型シグネチャである．この型マップは，基底ア
ドレスbufと共に用いて，通信バッファを指定する．この例では n個のエントリを持ち，i番目のエントリのアドレスはbuf 〫 dispi で型は typei になる．このような通信バッファから組み立てられたメッセージは，n個の値からなり，各値はT ypesigで定義される型をもつ．
ほとんどのデータ型コンストラクタは，反復回数やブロック長の引数を持つ．これらの引数に対し許される値は非負整数である．ただし，これらの値が〰の場合，型マップの中には要素を何も生じさせないし，データ型の上下限や範囲に対し何の影響も与えな
い．
汎用データ型のハンドルは基本データ型の代わりに送受信操作の引数として用いることができる．操作きぐぉたこぅぎい〨ぢふて〬 〱〬 つちぴちぴべばづ〮〮〮〬〩は基底アドレスぢふてとつちぴちぴべばづで表される
汎用データ型とで定義される送信バッファを使う．このときつちぴちぴべばづ引数で決まる 型シ
グネチャを持つメッセージが生成される． きぐぉたげぅぃざ〨ぢふて〬 〱〬 つちぴちぴべばづ〮〮〮〬〩は基底アドレ
スぢふてと つちぴちぴべばづで表される汎用データ型とで定義される受信バッファを使う．
汎用データ型は全ての送受信操作で利用できる． 第〴〮〱〮〱〱節で第〲引数っはふのぴが〱より大きな場合について論じる．
第〳〮〲〮〲節に示した基本データ型は汎用データ型の特殊なもので定義済みである．
つ ま り，きぐぉたぉぎごは〱つ のどのぴ型 の エ ン ト リ を 持 ち そ の 変 位 が〰で あ る よ う な，型 マ ップ{〨どのぴ, 〰〩}を持つ定義済みのデータ型のハンドルである．他の基本データ型についても同様である．

〴〮〱〮 派生データ型〸〹

データ型の範囲はこのデータ型のエントリによって占められる最初のバイトからなる
最後のバイトまでの区間によって定義され，アライメントを満たすように丸められる．

〱
〲
〳
〴

T ypemap 〽 {〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},

〵

の場合

〶
〷

lb〨T ypemap〩 〽 ねどの dispj ,

〸

j

〹

ub〨T ypemap〩 〽 ねちへ〨dispj 〫 sizeof 〨typej 〩〩 〫 , ちのつ〱〰

jextent〨T ypemap〩 〽 ub〨T ypemap〩 − lb〨T ypemap〩.

〨〴〮〱〩

〱〱
〱〲

と な る． typei がki の 倍 数 バ イ ト ア ド レ ス の ア ラ イ メ ン ト を 必 要 と す る 場 合，  はextent〨T ypemap〩 を一番近いmaxi ki の倍数バイトに丸めるのに必要な非負の値となる．
範囲の正確な定義は〱〰〷ページに示す．
例 4.1 T ype 〽 {〨つはふぢぬづ, 〰〩, 〨っとちひ, 〸〩}〨変位〰でつはふぢぬづが 〱つ，続けて変位〸でっとちひがある〩を仮定する． さらにつはふぢぬづは〸の倍数の アライメントが必要であるとする． すると，このデータ型の範囲は〱〶になる（〹が次の〸の倍数（〱〶）に切り上げられる）．文字の直後につはふぢぬづが続くようなデータ型の 範囲も〱〶である．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

根拠 範囲の定義は，構造体の配列の各構造体の最後に付加される パディングの量がアライメントの制約を満たすのに必要な最小限の量であることを前提としている．より厳密な範囲の管理は第〴〮〱〮〶節に示す．このような厳密な管理は，例えばふのどはの型が用いられるような，この前提が成り立たない場合に必要となる． （根拠の終わり）

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

4.1.1 明確なアドレスを持つ型コンストラクタ〳〰

うはひぴひちの言語の関数きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげ，きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅい，きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご，およびきぐぉたぇぅごたぁいいげぅここでは，ぃ言語とぃ〫〫言語でそ れ ぞ れ 引 数 の 型 きぐぉたぁどのぴときぐぉ〺〺ぁどのぴが 使 用 さ れ る 場 合 に，ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩型の引数を取る． ただし，うはひぴひちの 〹〰言語のかぉぎいの
概念をサポートしていないうはひぴひちの 〷〷言語では，デフォルトのぉぎごぅぇぅげが〳〲ビットであるのにアドレスが〶〴ビットである場合に，これらの引数はぉぎごぅぇぅげ〪〸型の引数をとる．

〳〲

〳〱

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

4.1.2 データ型コンストラクタ
ぃはのぴどでふはふび もっとも単純なデータ型コンストラクタはきぐぉたごすぐぅたぃくぎごぉぇさくさこである．このコンストラクタは，連続な領域へのデータ型の反復を可能にする．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型〹〰
〱〲

きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨っはふのぴ〬 はぬつぴべばづ〬 のづぷぴべばづ〩
ぉぎ

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

ぉぎ
くさご

っはふのぴ
はぬつぴべばづのづぷぴべばづ

反復回数（非負の整数型）
旧データ型（ハンドル）
新データ型（ハンドル）

どのぴ きぐぉたごべばづたっはのぴどでふはふび〨どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨ぃくさぎご〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたっはのぴどでふはふび〨どのぴ っはふのぴ〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}のづぷぴべばづは，はぬつぴべばづのっはふのぴ個のコピーを連結することによって得られるデータ型である．連結〨っはのっちぴづのちぴどはの〩は，範囲を使って，連結されたコピーのサイズとして定義され
る．

〱〶
〱〷
〱〸

例 4.2 はぬつぴべばづの型マップが {〨つはふぢぬづ, 〰〩, 〨っとちひ, 〸〩}, で，範囲が〱〶，そしてっはふのぴ 〽 〳であるとする．このときのづぷぴべばづの型マップは次のようになる．

〱〹〲〰

{〨つはふぢぬづ, 〰〩, 〨っとちひ, 〸〩, 〨つはふぢぬづ, 〱〶〩, 〨っとちひ, 〲〴〩, 〨つはふぢぬづ, 〳〲〩, 〨っとちひ, 〴〰〩}〻〲〱〲〲

つまり，つはふぢぬづとっとちひが交互に，それぞれ 〰, 〸, 〱〶, 〲〴, 〳〲, 〴〰〮 の変位で現れる．

〲〳
〲〴
〲〵
〲〶
〲〷

一般的に，はぬつぴべばづの型マップが次のようなものであると仮定する．
{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},

〲〸
〲〹
〳〰

さらに，範囲がexであるとする．そのとき，のづぷぴべばづはっはふのぴ · の個のエントリの，次のような型マップを持つ．

〳〱〳〲{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩, 〨type0 , disp0 〫 ex〩, ..., 〨typen−1 , dispn−1 〫 ex〩,〳〳〳〴..., 〨type0 , disp0 〫 ex · 〨っはふのぴ − 〱〩〩, ..., 〨typen−1 , dispn−1 〫 ex · 〨っはふのぴ − 〱〩〩}.

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ざづっぴはひ 関数きぐぉたごすぐぅたざぅぃごくげはより汎用的なコンストラクタであり，等間隔のブロ
ックからなる領域へのデータ型の反復を可能にする．各ブロックは，元のデータ型の同じ数のコピーを連結することによって得られる．また，ブロック間の間隔は，元のデー
タ型の範囲の倍数である．

〴〮〱〮 派生データ型〹〱

きぐぉたごすぐぅたざぅぃごくげ〨 っはふのぴ〬 ぢぬはっにぬづのでぴと〬 びぴひどつづ〬 はぬつぴべばづ〬 のづぷぴべばづ〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

っはふのぴ
ぢぬはっにぬづのでぴとびぴひどつづはぬつぴべばづのづぷぴべばづ

ブロック数（非負の整数型）
個々のブロックの要素数（非負の整数型）

〱
〲
〳
〴

個々のブロックの先頭の間隔の要素数（整数型）〵

旧データ型（ハンドル）〶

新データ型（ハンドル）〷〸

どのぴ きぐぉたごべばづたぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬 どのぴ びぴひどつづ〬きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたざぅぃごくげ〨ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬
どのぴ びぴひどつづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〹
〱〰
〱〱
〱〲
〱〳
〱〴

例 4.3 再び型マップが {〨つはふぢぬづ, 〰〩, 〨っとちひ, 〸〩}, で，範囲が〱〶であるようなはぬつぴべばづを仮定す
る． きぐぉたごすぐぅたざぅぃごくげ〨 〲〬 〳〬 〴〬 はぬつぴべばづ〬 のづぷぴべばづ〩の呼び出しは，次のような型マップを持つデータ型を作る．

〱〵
〱〶
〱〷
〱〸
〱〹

{〨つはふぢぬづ, 〰〩, 〨っとちひ, 〸〩, 〨つはふぢぬづ, 〱〶〩, 〨っとちひ, 〲〴〩, 〨つはふぢぬづ, 〳〲〩, 〨っとちひ, 〴〰〩,〲〰
〲〱

〨つはふぢぬづ, 〶〴〩, 〨っとちひ, 〷〲〩, 〨つはふぢぬづ, 〸〰〩, 〨っとちひ, 〸〸〩, 〨つはふぢぬづ, 〹〶〩, 〨っとちひ, 〱〰〴〩}.

〲〲〲〳

つまり，元のデータ型の〳 つのコピーからなる〲つのブロックが，要素〴つ分の間隔（〴 · 〱〶バイト）で並ぶ．

〲〴
〲〵
〲〶

例 4.4 きぐぉたごすぐぅたざぅぃごくげ〨〳〬 〱〬 〭〲〬 はぬつぴべばづ〬 のづぷぴべばづ〩の呼び出しは次のようなデータ型
を作る．

〲〷
〲〸
〲〹

{〨つはふぢぬづ, 〰〩, 〨っとちひ, 〸〩, 〨つはふぢぬづ, −〳〲〩, 〨っとちひ, −〲〴〩, 〨つはふぢぬづ, −〶〴〩, 〨っとちひ, −〵〶〩}.

〳〰
〳〱
〳〲

一般的に，はぬつぴべばづの型マップが次のようなものであると仮定する．
{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},

〳〳
〳〴
〳〵
〳〶

さらに，範囲がexであり，かつぢぬはっにぬづのでぴと引数がぢぬであるとする．新たに生成されるデー
タ型はっはふのぴ · ぢぬ · n個のエントリの，次のような型マップを持つ．

〳〷
〳〸
〳〹

{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩,〴〰
〴〱〨type0 , disp0 〫 ex〩, ..., 〨typen−1 , dispn−1 〫 ex〩, ...,〴〲〴〳

〨type0 , disp0 〫 〨ぢぬ − 〱〩 · ex〩, ..., 〨typen−1 , dispn−1 〫 〨ぢぬ − 〱〩 · ex〩,〴〴〴〵

〨type0 , disp0 〫 びぴひどつづ · ex〩, ..., 〨typen−1 , dispn−1 〫 びぴひどつづ · ex〩, ...,〴〶〴〷

〨type0 , disp0 〫 〨びぴひどつづ 〫 ぢぬ − 〱〩 · ex〩, ..., 〨typen−1 , dispn−1 〫 〨びぴひどつづ 〫 ぢぬ − 〱〩 · ex〩, ....,〴〸

第 〴〮 データ型〹〲
〨type0 , disp0 〫 びぴひどつづ · 〨っはふのぴ − 〱〩 · ex〩, ...,〱〲

〨typen−1 , dispn−1 〫 びぴひどつづ · 〨っはふのぴ − 〱〩 · ex〩, ...,〳〴

〨type0 , disp0 〫 〨びぴひどつづ · 〨っはふのぴ − 〱〩 〫 ぢぬ − 〱〩 · ex〩, ...,〵〶

〨typen−1 , dispn−1 〫 〨びぴひどつづ · 〨っはふのぴ − 〱〩 〫 ぢぬ − 〱〩 · ex〩}.

〷
〸
〹
〱〰
〱〱
〱〲
〱〳

きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨っはふのぴ〬 はぬつぴべばづ〬 のづぷぴべばづ〩は きぐぉたごすぐぅたざぅぃごくげ〨っはふのぴ〬 〱〬 〱〬はぬつぴべばづ〬 のづぷぴべばづ〩あるいは きぐぉたごすぐぅたざぅぃごくげ〨〱〬 っはふのぴ〬 の〬 はぬつぴべばづ〬 のづぷぴべばづ〩（のは任意）と等価である．

〱〴
〱〵
〱〶
〱〷
〱〸

えぶづっぴはひ きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげ は，びぴひどつづが要素数ではなくバイト単位である
ことを除けば，きぐぉたごすぐぅたざぅぃごくげと同じである．両方のベクトル型コンストラクタの使い方は第〴〮〱〮〱〴節で説明する．（えは ぜとづぴづひはでづのづはふび〢（異機種）を意味する）

〱〹
〲〰
〲〱
〲〲
〲〳

きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげ〨 っはふのぴ〬 ぢぬはっにぬづのでぴと〬 びぴひどつづ〬 はぬつぴべばづ〬 のづぷぴべばづ〩
ぉぎ
ぉぎ

〲〴

ぉぎ

〲〵

ぉぎ

〲〶

くさご

っはふのぴ
ぢぬはっにぬづのでぴとびぴひどつづはぬつぴべばづのづぷぴべばづ

ブロック数（非負の整数型）
個々のブロックの要素数（非負の整数型）
個々のブロックの先頭の間隔のバイト数（整数型）
旧データ型（ハンドル）
新データ型（ハンドル）

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

どのぴ きぐぉたごべばづたっひづちぴづたとぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬 きぐぉたぁどのぴ びぴひどつづ〬きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげ〨ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 こごげぉいぅ{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたとぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬きぐぉ〺〺ぁどのぴ びぴひどつづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
この関数は廃止されたきぐぉたごすぐぅたえざぅぃごくげに代わるものである．第〱〵章も参照する
こと．

〳〸
〳〹

はぬつぴべばづの型マップが次のようであると仮定する．

〴〰
〴〱{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},

〴〲
〴〳
〴〴

さらに，範囲がexであり，かつぢぬはっにぬづのでぴと引数がぢぬであるとする．新たに生成されるデー
タ型はっはふのぴ · ぢぬ · n個のエントリの，次のような型マップを持つ．

〴〵〴〶{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩,〴〷〴〸〨type0 , disp0 〫 ex〩, ..., 〨typen−1 , dispn−1 〫 ex〩, ...,

〴〮〱〮 派生データ型〹〳〨type0 , disp0 〫 〨ぢぬ − 〱〩 · ex〩, ..., 〨typen−1 , dispn−1 〫 〨ぢぬ − 〱〩 · ex〩,〱〲

〨type0 , disp0 〫 びぴひどつづ〩, ..., 〨typen−1 , dispn−1 〫 びぴひどつづ〩, ...,〳〴

〨type0 , disp0 〫 びぴひどつづ 〫 〨ぢぬ − 〱〩 · ex〩, ...,〵〶

〨typen−1 , dispn−1 〫 びぴひどつづ 〫 〨ぢぬ − 〱〩 · ex〩, ....,〷〸〨type0 , disp0 〫 びぴひどつづ · 〨っはふのぴ − 〱〩〩, ..., 〨typen−1 , dispn−1 〫 びぴひどつづ · 〨っはふのぴ − 〱〩〩, ...,〹〱〰

〨type0 , disp0 〫 びぴひどつづ · 〨っはふのぴ − 〱〩 〫 〨ぢぬ − 〱〩 · ex〩, ...,
〨typen−1 , dispn−1 〫 びぴひどつづ · 〨っはふのぴ − 〱〩 〫 〨ぢぬ − 〱〩 · ex〩}.

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

ぉのつづへづつ きぐぉたごすぐぅたぉぎいぅじぅいは，ブロックの並びへの，元のデータ型の反復を可能にする（個々のブロックは元のデータ型の連結である）．ただし，個々のブロックは異なる数のコピーを持つことができ，また異なる変位を持つことができる．全てのブロックの変位は元の型の範囲の倍数である．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたごすぐぅたぉぎいぅじぅい〨 っはふのぴ〬 ちひひちべたはてたぢぬはっにぬづのでぴとび〬 ちひひちべたはてたつどびばぬちっづねづのぴび〬 はぬつぴべばづ〬 のづぷ〭
ぴべばづ〩

〲〳

ブロック数，または
ちひひちべたはてたつどびばぬちっづねづのぴび と ちひひちべたはてたぢぬはっにぬづのでぴとびのエントリ数（非負の整数型）

〲〵

っはふのぴ

ぉぎ

ちひひちべたはてたぢぬはっにぬづのでぴとび
ちひひちべたはてたつどびばぬちっづねづのぴび

ぉぎ
ぉぎ
ぉぎ
くさご

はぬつぴべばづのづぷぴべばづ

ブロックごとの要素数（非負の整数型の配列）

〲〴

〲〶
〲〷
〲〸

個々のブロックの変位，はぬつぴべばづの 範囲の倍数（整数
型の配列）

〲〹

旧データ型（ハンドル）〳〱

新データ型（ハンドル）

〳〲

〳〰

〳〳

どのぴ きぐぉたごべばづたどのつづへづつ〨どのぴ っはふのぴ〬 どのぴ 〪ちひひちべたはてたぢぬはっにぬづのでぴとび〬
どのぴ 〪ちひひちべたはてたつどびばぬちっづねづのぴび〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぉぎいぅじぅい〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたどのつづへづつ〨どのぴ っはふのぴ〬
っはのびぴ どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬っはのびぴ どのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

例 4.5 型マップが {〨つはふぢぬづ, 〰〩, 〨っとちひ, 〸〩}, で，範囲が〱〶であるようなはぬつぴべばづを仮定する．
あ 〽 〨〳〬 〱〩， い 〽 〨〴〬 〰〩としたときの きぐぉたごすぐぅたぉぎいぅじぅい〨〲〬 あ〬 い〬 はぬつぴべばづ〬 のづぷぴべばづ〩は
次のような型マップを持つデータ型を返す．

〴〴
〴〵
〴〶
〴〷

{〨つはふぢぬづ, 〶〴〩, 〨っとちひ, 〷〲〩, 〨つはふぢぬづ, 〸〰〩, 〨っとちひ, 〸〸〩, 〨つはふぢぬづ, 〹〶〩, 〨っとちひ, 〱〰〴〩,〴〸

第 〴〮 データ型〹〴
〨つはふぢぬづ, 〰〩, 〨っとちひ, 〸〩}.

〱〲〳つまり，元のデータの〳つのコピーが変位〶〴から，〱つのコピーが変位〰から始まる．

〴〵〶

一般的に，はぬつぴべばづの型マップが次のようなものであると仮定する．

〷{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},

〸
〹
〱〰
〱〱
〱〲

さ ら に， 範 囲 がexで あ り， ちひひちべたはてたぢぬはっにぬづのでぴと引 数 があで あ り， か つ
Pcount−1
ちひひちべたはてたつどびばぬちっづねづのぴび引数がいであるとする．新たに生成される データ型は n · i=0
あせどそ 個のエントリを持ち，次のようである．

〱〳{〨type0 , disp0 〫 いせ〰そ · ex〩, ..., 〨typen−1 , dispn−1 〫 いせ〰そ · ex〩, ...,〱〴〱〵

〨type0 , disp0 〫 〨いせ〰そ 〫 あせ〰そ − 〱〩 · ex〩, ..., 〨typen−1 , dispn−1 〫 〨いせ〰そ 〫 あせ〰そ − 〱〩 · ex〩, ...,〱〶

〨type0 , disp0 〫 いせっはふのぴ〭〱そ · ex〩, ..., 〨typen−1 , dispn−1 〫 いせっはふのぴ〭〱そ · ex〩, ...,〱〷〱〸

〨type0 , disp0 〫 〨いせっはふのぴ〭〱そ 〫 あせっはふのぴ〭〱そ − 〱〩 · ex〩, ...,〱〹〲〰

〨typen−1 , dispn−1 〫 〨いせっはふのぴ〭〱そ 〫 あせっはふのぴ〭〱そ − 〱〩 · ex〩}.

〲〱
〲〲
〲〳
〲〴
〲〵

きぐぉたごすぐぅたざぅぃごくげ〨っはふのぴ〬 ぢぬはっにぬづのでぴと〬 びぴひどつづ〬 はぬつぴべばづ〬 のづぷぴべばづ〩はきぐぉたごすぐぅたぉぎいぅじぅい〨っはふのぴ〬 あ〬 い〬 はぬつぴべばづ〬 のづぷぴべばづ〩と等価である．ただし，〲〶

いせなそ 〽 j · びぴひどつづ, j 〽 〰, ..., っはふのぴ − 〱,

〲〷
〲〸

かつ

〲〹

あせなそ 〽 ぢぬはっにぬづのでぴと, j 〽 〰, ..., っはふのぴ − 〱.

〳〰
〳〱
〳〲

である．

〳〳
〳〴
〳〵
〳〶

えどのつづへづつ きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅい は，ちひひちべたはてたつどびばぬちっづねづのぴびでのブロックの変位の指定がはぬつぴべばづの範囲の倍数ではなく，バイト数であることを除いて，
きぐぉたごすぐぅたぉぎいぅじぅいと同じである．

〳〷
〳〸
〳〹
〴〰

きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅい〨 っはふのぴ〬 ちひひちべたはてたぢぬはっにぬづのでぴとび〬 ちひひちべたはてたつどびばぬちっづねづのぴび〬 はぬつ〭
ぴべばづ〬 のづぷぴべばづ〩
ぉぎ

っはふのぴ

ブロック数，またはちひひちべたはてたつどびばぬちっづねづのぴびと
ちひひちべたはてたぢぬはっにぬづのでぴとびのエントリ数（非負の整数型）

〴〳

ぉぎ
ぉぎ

ちひひちべたはてたぢぬはっにぬづのでぴとび
ちひひちべたはてたつどびばぬちっづねづのぴび

ブロックごとの要素数（非負の整数型の配列）〴〴

はぬつぴべばづのづぷぴべばづ

旧データ型（ハンドル）

〴〱
〴〲

〴〵
〴〶

ぉぎ

〴〷

くさご

〴〸

個々のブロックのバイト単位の変位（整数型の配列）
新データ型（ハンドル）〴〮〱〮 派生データ型〹〵

どのぴ きぐぉたごべばづたっひづちぴづたとどのつづへづつ〨どのぴ っはふのぴ〬 どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬
きぐぉたぁどのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅい〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬
ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたとどのつづへづつ〨どのぴ っはふのぴ〬
っはのびぴ どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬っはのびぴ きぐぉ〺〺ぁどのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}
この関数は廃止されたきぐぉたごすぐぅたえぉぎいぅじぅいに代わるものである． 第〱〵章も参照す
ること．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

はぬつぴべばづの型マップが次のようであると仮定する．

〱〵〱〶{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},〱〷〱〸

さ ら に， 範 囲 がexで あ り， ちひひちべたはてたぢぬはっにぬづのでぴと引 数 があで あ り， か つP
ちひひちべたはてたつどびばぬちっづねづのぴび引数がいであるとする．新たに生成される データ型はn · count−1
i=0
あせどそ個のエントリの，次のような型マップを持つ．

〱〹
〲〰
〲〱
〲〲

{〨type0 , disp0 〫 いせ〰そ〩, ..., 〨typen−1 , dispn−1 〫 いせ〰そ〩, ...,
〨type0 , disp0 〫 いせ〰そ 〫 〨あせ〰そ − 〱〩 · ex〩, ...,

〲〳
〲〴
〲〵
〲〶
〲〷

〨typen−1 , dispn−1 〫 いせ〰そ 〫 〨あせ〰そ − 〱〩 · ex〩, ...,〲〸〲〹

〨type0 , disp0 〫 いせっはふのぴ〭〱そ〩, ..., 〨typen−1 , dispn−1 〫 いせっはふのぴ〭〱そ〩, ...,〳〰
〳〱

〨type0 , disp0 〫 いせっはふのぴ〭〱そ 〫 〨あせっはふのぴ〭〱そ − 〱〩 · ex〩, ...,〳〲〳〳

〨typen−1 , dispn−1 〫 いせっはふのぴ〭〱そ 〫 〨あせっはふのぴ〭〱そ − 〱〩 · ex〩}.

〳〴
〳〵
〳〶
〳〷

ぉのつづへづつたぢぬはっに この関数は，全てのブロックのブロック長が同じであることを除いて，
きぐぉたごすぐぅたぉぎいぅじぅいと同じである．ブロックサイズが常に 〱である非構造格子から生じる間接アドレシングを使用するコード（ギャザー／スキャッタ）が多数ある．以下の便利な関数では一定のブロックサイズと任意の変位が使用できる．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型

〹〶
〱
〲
〳
〴

きぐぉたごすぐぅたぃげぅぁごぅたぉぎいぅじぅいたあがくぃか〨っはふのぴ〬 ぢぬはっにぬづのでぴと〬 ちひひちべたはてたつどびばぬちっづねづのぴび〬 はぬつぴべばづ〬のづぷぴべばづ〩
ぉぎ
ぉぎ

〵
〶

ぉぎ

〷

ぉぎ

〸

くさご

っはふのぴ
ぢぬはっにぬづのでぴと
ちひひちべたはてたつどびばぬちっづねづのぴび
はぬつぴべばづのづぷぴべばづ

変位の配列の長さ（非負の整数型）
ブロックのサイズ（非負の整数型）
変位の配列（整数型の配列）
旧データ型（ハンドル）
新データ型（ハンドル）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

どのぴ きぐぉたごべばづたっひづちぴづたどのつづへづつたぢぬはっに〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬
どのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぃげぅぁごぅたぉぎいぅじぅいたあがくぃか〨ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩〬 くがいごすぐぅ〬
ぎぅしごすぐぅ〬 ぉぅげげくげ
{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたどのつづへづつたぢぬはっに〨どのぴ っはふのぴ〬
どのぴ ぢぬはっにぬづのでぴと〬 っはのびぴ どのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}

〱〸
〱〹
〲〰
〲〱
〲〲

こぴひふっぴ きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご 1 は最も汎用的なコンストラクタである．これまでの きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅいを更に一般化して，個々のブロックを異なるデー
タ型の反復で構成することができる．

〲〳
〲〴
〲〵
〲〶

きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨っはふのぴ〬 ちひひちべたはてたぢぬはっにぬづのでぴとび〬 ちひひちべたはてたつどびばぬちっづねづのぴび〬
ちひひちべたはてたぴべばづび〬 のづぷぴべばづ〩
ぉぎ

っはふのぴ

ブロック数（非負の整数型），または配列ちひひちべたはてたぴべばづび，ちひひちべたはてたつどびばぬちっづねづのぴび，
ちひひちべたはてたぢぬはっにぬづのでぴとびのエントリ数

ぉぎ

ブロックごとの要素数（非負の整数型の配列）

ぉぎ

ちひひちべたはてたぢぬはっにぬづのでぴと
ちひひちべたはてたつどびばぬちっづねづのぴびぉぎ

ちひひちべたはてたぴべばづび

個々のブロックの要素の型（データ型オブジェクトのハンドルの配列）

くさごのづぷぴべばづ

新データ型（ハンドル）

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

個々のブロックのバイト単位の変位（整数型の配列）

どのぴ きぐぉたごべばづたっひづちぴづたびぴひふっぴ〨どのぴ っはふのぴ〬 どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬
きぐぉたぁどのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〬 きぐぉたいちぴちぴべばづ ちひひちべたはてたぴべばづびせそ〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬
ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬 ぁげげぁすたくうたごすぐぅこ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 ぁげげぁすたくうたごすぐぅこ〨〪〩〬 ぎぅしごすぐぅ〬ぉぅげげくげぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩{びぴちぴどっ きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたびぴひふっぴ〨どのぴ っはふのぴ〬
っはのびぴ どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬 っはのびぴ きぐぉ〺〺ぁどのぴ
ちひひちべたはてたつどびばぬちっづねづのぴびせそ〬
訳者註：MPI-2.2の原文は“MPI_TYPE_STRUCT”であるが， “MPI_TYPE_CREATE_STRUCT”の誤り．
MPI-3では修正済．
〱

〴〮〱〮 派生データ型〹〷

っはのびぴ きぐぉ〺〺いちぴちぴべばづ ちひひちべたはてたぴべばづびせそ〩 （廃止された呼び出し形式,
第15.2節を参照）}
この関数は廃止されたきぐぉたごすぐぅたこごげさぃごに代わるものである． 第〱〵章も参照する
こと．
例 4.6 ぴべばづ〱の型マップが次のようで，{〨つはふぢぬづ, 〰〩, 〨っとちひ, 〸〩},範囲が〱〶であり，あ 〽 〨〲〬 〱〬 〳〩，い 〽 〨〰〬 〱〶〬 〲〶〩， ご 〽 〨きぐぉたうがくぁご〬 ぴべばづ〱〬 きぐぉたぃえぁげ〩であるとき， きぐぉたごすぐぅたこごげさぃご〨〳〬 あ〬 い〬 ご〬 のづぷぴべばづ〩は次のような型マップを持つ デー
タ型を返す．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

{〨」はちぴ, 〰〩, 〨」はちぴ, 〴〩, 〨つはふぢぬづ, 〱〶〩, 〨っとちひ, 〲〴〩, 〨っとちひ, 〲〶〩, 〨っとちひ, 〲〷〩, 〨っとちひ, 〲〸〩}.
つまり，〲つのきぐぉたうがくぁごのコピーが変位〰から始まり，続いて〱つの ぴべばづ〱のコピーが変位〱〶から始まり，〳つのきぐぉたぃえぁげのコピーが変位〲〶から始まる〨」はちぴは〴バイトを占めるものとする〩．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

一般に，ちひひちべたはてたぴべばづび引数がごであるとし，ここでごせどそが次のような型マップを指すハ
ンドルであるとする．
typemapi 〽 {〨typei0 , dispi0 〩, ..., 〨typeini −1 , dispini −1 〩},さらに，範囲がexi であり，ちひひちべたはてたぢぬはっにぬづのでぴと引数があであり，ちひひちべたはてたつどびばぬちっづねづのぴび引
数がいであり，かつっはふのぴ引数がっであるとする．そのとき，新たに生成されるデータ型は
Pc−1
i=0 あせどそ · ni 個のエントリの，次のような型マップを持つ．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

{〨type00 , disp00 〫 いせ〰そ〩, ..., 〨type0n〰 , disp0n〰 〫 いせ〰そ〩, ...,〳〲〳〳

〨type00 , disp00 〫 いせ〰そ 〫 〨あせ〰そ − 〱〩 · ex0 〩, ..., 〨type0n〰 , disp0n〰 〫 いせ〰そ 〫 〨あせ〰そ〭〱〩 · ex0 〩, ...,

〳〴
〳〵

c−1
〨typec−1〫 いせっ〭〱そ〩, ..., 〨typenc−1, dispnc−1〫 いせっ〭〱そ〩, ...,
0 , disp0c−〱 −1c−〱 −1〳〶〳〷c−1〨typec−1〫 いせっ〭〱そ 〫 〨あせっ〭〱そ − 〱〩 · exc−1 〩, ...,
0 , disp0

〳〸
〳〹

c−1
〨typec−1nc−〱 −1 , dispnc−〱 −1 〫 いせっ〭〱そ 〫 〨あせっ〭〱そ〭〱〩 · exc−1 〩}.

〴〰
〴〱
〴〲
〴〳

きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅい〨っはふのぴ〬 あ〬 い〬 はぬつぴべばづ〬 のづぷぴべばづ〩はきぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨っはふのぴ〬 あ〬 い〬 ご〬 のづぷぴべばづ〩と等価である． ただし，ごの各エントリははぬつぴべばづと等しいとする．

〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型〹〸〱

4.1.3 サブ配列データ型コンストラクタ

〲
〳
〴
〵
〶
〷

きぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁす〨のつどねび〬 ちひひちべたはてたびどぺづび〬 ちひひちべたはてたびふぢびどぺづび〬 ちひひちべたはてたびぴちひぴび〬
はひつづひ〬 はぬつぴべばづ〬 のづぷぴべばづ〩
配列の次元数（正の整数型）

ぉぎ

のつどねび
ちひひちべたはてたびどぺづびぉぎ

ちひひちべたはてたびふぢびどぺづび

サブ配列の各次元でのデータ型はぬつぴべばづの要素数（正の整数型の配列）ぉぎ

ちひひちべたはてたびぴちひぴび

各次元でのサブ配列の開始座標（非負の整数型の配
列）

ぉぎ

はひつづひ
はぬつぴべばづのづぷぴべばづ

配列の格納順序フラグ（ステート型）

ぉぎ

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

ぉぎ

〱〶

くさご

配列全体の各次元でのデータ型はぬつぴべばづの要素数（正の整数型の配列）

配列要素のデータ型（ハンドル）
新データ型（ハンドル）

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたごべばづたっひづちぴづたびふぢちひひちべ〨どのぴ のつどねび〬 どのぴ ちひひちべたはてたびどぺづびせそ〬
どのぴ ちひひちべたはてたびふぢびどぺづびせそ〬 どのぴ ちひひちべたはてたびぴちひぴびせそ〬 どのぴ はひつづひ〬 きぐぉたいちぴちぴべばづ
はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁす〨ぎいぉきこ〬 ぁげげぁすたくうたこぉずぅこ〬 ぁげげぁすたくうたこさあこぉずぅこ〬ぁげげぁすたくうたこごぁげごこ〬 くげいぅげ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぎいぉきこ〬 ぁげげぁすたくうたこぉずぅこ〨〪〩〬 ぁげげぁすたくうたこさあこぉずぅこ〨〪〩〬ぁげげぁすたくうたこごぁげごこ〨〪〩〬 くげいぅげ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたびふぢちひひちべ〨どのぴ のつどねび〬
っはのびぴ どのぴ ちひひちべたはてたびどぺづびせそ〬 っはのびぴ どのぴ ちひひちべたはてたびふぢびどぺづびせそ〬
っはのびぴ どのぴ ちひひちべたはてたびぴちひぴびせそ〬 どのぴ はひつづひ〩 っはのびぴ （廃止された呼び出し
形式, 第15.2節を参照）}
サ ブ 配 列 デ ー タ 型 コ ン ス ト ラ ク タ は，n次 元 の 配 列 のn次 元 の サ ブ 配 列 を 記 述 したきぐぉデータ型を作成する．サブ配列は全体の配列の中なら任意の場所に置いてよく，
サブ配列はまた，全体の配列の内側に収まる限り，それを上限として，任意のサイズ（ただし非ゼロ）のサブ配列であってよい．この型のコンストラクタは，グローバルな配列を含んだ単一ファイルに対し，複数のプロセス間で分散されたサブ配列にアクセスするためのファイル型を生成するのに役立つ．きぐぉの入出力，特に〴〰〵ページの 第〱〳〮〱〮〱節を参照すること．
このデータ型コンストラクタは，任意の次元数の配列を扱うことができ，ぃ言語およびうはひぴひちの言語のどちらの行列の並び順2 （言い換えると，行優先か列優先か）に対しても動作する．もちろん，ぃ言語のプログラムがうはひぴひちの言語の順序を使用してもよいし，
うはひぴひちの言語のプログラムがぃ言語の順序を使用してもよいことに注意すること．
のつどねびパラメータはデータ配列全体の次元数を指定するもので，こののつどねびは，
ちひひちべたはてたびどぺづび，ちひひちべたはてたびふぢびどぺづび，およびちひひちべたはてたびぴちひぴびの各配列の中の要素数を伝える．
n次元配列および要求されたサブ配列において，各次元でのデータ型はぬつぴべばづの要素
数はそれぞれ，ちひひちべたはてたびどぺづびおよびちひひちべたはてたびふぢびどぺづびで指定される．ちひひちべたはてたびふぢびどぺづびのど〲

訳者註: 原文 ordered matrix〴〮〱〮 派生データ型〹〹の次元に対しても（仮に次元どとして）， ちひひちべたはてたびふぢびどぺづびせどそ < 〱 や ちひひちべたはてたびふぢびどぺづびせどそ >ちひひちべたはてたびどぺづびせどそ のような値を指定することは誤りである．
ちひひちべたはてたびぴちひぴびはそのサブ配列の各次元の開始座標を含む．配列には〰から添字が振られる．ちひひちべたはてたびぴちひぴびのどの次元に対しても（仮に次元どとして）， ちひひちべたはてたびぴちひぴびせどそ < 〰 やちひひちべたはてたびぴちひぴびせどそ > 〨ちひひちべたはてたびどぺづびせどそ − ちひひちべたはてたびふぢびどぺづびせどそ〩 のような値を指定することは誤りである．

〱
〲
〳
〴
〵
〶
〷
〸

ユーザへのアドバイス 配列の添字が〱から振られたうはひぴひちの言語のプログラムでは，サブ配列の特定の次元の開始座標がのの場合，その次元のちひひちべたはてたびぴちひぴびのエントリ
は の〭〱となる． （ユーザへのアドバイス終わり）
はひつづひ引数では，配列全体とサブ配列の格納順序を指定する． 以下のうちの〱つを設定しなければならない．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

MPIたORDERたC ぃ言語の配列で使用される順序（つまり，行優先）〱〷〱〸

MPIたORDERたFORTRAN うはひぴひちの言語の配列で使用される順序（つまり，列優先）〱〹

特別なパディングのないのつどねび次元のサブ配列〨のづぷぴべばづ〩を，関数こふぢちひひちべ〨〩によって次のように定義できる．

〲〰
〲〱
〲〲
〲〳

のづぷぴべばづ 〽 こふぢちひひちべ〨ndims, {size0 , size1 , . . . , sizendims−1 },〲〴{subsize0 , subsize1 , . . . , subsizendims−1 },〲〵〲〶{start0 , start1 , . . . , startndims−1 }, はぬつぴべばづ〩〲〷〲〸

はぬつぴべばづの型マップが次のような形式であるとする．

〲〹〳〰

{〨type0 , disp0 〩, 〨type1 , disp1 〩, . . . , 〨typen−1 , dispn−1 〩}〳〱typei が定義済みのきぐぉデータ型であり，exがはぬつぴべばづの範囲であるとき，次の〳つの式を使用してこふぢちひひちべ〨〩関数を再帰的に定義する．式〴〮〲では基本手順を定義する．式〴〮〳では はひつづひ 〽 きぐぉたくげいぅげたうくげごげぁぎの場合の再帰手順を定義し，式〴〮〴でははひつづひ 〽
きぐぉたくげいぅげたぃの場合の再帰手順を定義する．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

こふぢちひひちべ〨〱, {size0 }, {subsize0 }, {start0 },

〨〴〮〲〩

〳〹
〴〰

{〨type0 , disp0 〩, 〨type1 , disp1 〩, . . . , 〨typen−1 , dispn−1 〩}〩〽 {〨きぐぉたがあ, 〰〩,〨type0 , disp0 〫 start0 × ex〩, . . . , 〨typen−1 , dispn−1 〫 start0 × ex〩,

〴〱
〴〲
〴〳
〴〴

〨type0 , disp0 〫 〨start0 〫 〱〩 × ex〩, . . . , 〨typen−1 ,〴〵dispn−1 〫 〨start0 〫 〱〩 × ex〩, . . .

〴〶〨type0 , disp0 〫 〨start0 〫 subsize0 − 〱〩 × ex〩, . . . ,〴〷〴〸第 〴〮 データ型

〱〰〰
〱
〲
〳

〨typen−1 , dispn−1 〫 〨start0 〫 subsize0 − 〱〩 × ex〩,
〨きぐぉたさあ, size0 × ex〩}

〴
〵
〶
〷
〸

こふぢちひひちべ〨ndims, {size0 , size1 , . . . , sizendims−1 },〨〴〮〳〩{subsize0 , subsize1 , . . . , subsizendims−1 },{start0 , start1 , . . . , startndims−1 }, はぬつぴべばづ〩

〹
〱〰
〱〱
〱〲
〱〳
〱〴

〽 こふぢちひひちべ〨ndims − 〱, {size1 , size2 , . . . , sizendims−1 },{subsize1 , subsize2 , . . . , subsizendims−1 },{start1 , start2 , . . . , startndims−1 },こふぢちひひちべ〨〱, {size0 }, {subsize0 }, {start0 }, はぬつぴべばづ〩〩

〱〵
〱〶
〱〷
〱〸

こふぢちひひちべ〨ndims, {size0 , size1 , . . . , sizendims−1 },〨〴〮〴〩{subsize0 , subsize1 , . . . , subsizendims−1 },

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

{start0 , start1 , . . . , startndims−1 }, はぬつぴべばづ〩〽 こふぢちひひちべ〨ndims − 〱, {size0 , size1 , . . . , sizendims−2 },{subsize0 , subsize1 , . . . , subsizendims−2 },{start0 , start1 , . . . , startndims−2 },こふぢちひひちべ〨〱, {sizendims−1 }, {subsizendims−1 }, {startndims−1 }, はぬつぴべばづ〩〩

〲〶
〲〷
〲〸
〲〹

入出力のコンテクストにおけるきぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁすの使用例は 第〱〳〮〹〮〲節を参照すること．

〳〰
〳〱

4.1.4 分散配列データ型コンストラクタ

〳〲
〳〳
〳〴
〳〵

分散配列データ型コンストラクタはえぐう形式せ〳〰そのデータの分散した配置をサポートしている．しかしえぐうの場合と異なり，ぃ言語またはうはひぴひちの言語の配列の格納順序を指定することができる．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス この型コンストラクタを使用して，以下のようにえぐう形式のファイルビューを作成することができる．グループの全てのプロセスから同一引数（ひちのには例外で，個別に設定する必要がある）でこのコンストラクタを呼び出すことにより，補助ファイル型が作成される．その後，これらのファイル型は（同
じつどびばおよび づぴべばづと一緒に）ビューを定義する（きぐぉたうぉがぅたこぅごたざぉぅしにより）のに使用される．きぐぉ入出力，特に〴〰〵ページの 第〱〳〮〱〮〱節と〴〱〹ページの 第〱〳〮〳節を参照すること．このビューを使用して， 集団データアクセス操作により（同一オ
フセットを使用して）えぐう形式の分散した配置パターンが生成される． （ユーザへのアドバイス終わり）〴〮〱〮 派生データ型〱〰〱

きぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁす〨びどぺづ〬 ひちのに〬 のつどねび〬 ちひひちべたはてたでびどぺづび〬 ちひひちべたはてたつどびぴひどぢび〬
ちひひちべたはてたつちひでび〬 ちひひちべたはてたばびどぺづび〬 はひつづひ〬 はぬつぴべばづ〬 のづぷぴべばづ〩〱〲

プロセスグループのサイズ（正の整数型）〳

プロセスグループのランク（非負の整数型）

〴

ぉぎ

びどぺづ
ひちのに
のつどねび

ぉぎ

ちひひちべたはてたでびどぺづび

グローバル配列の各次元での型はぬつぴべばづの要素数（正の整数型の配列）ぉぎ

ちひひちべたはてたつどびぴひどぢび

各次元での配列の分散した配置（ステート型の配
列）

〱〰

ぉぎ

ちひひちべたはてたつちひでび

各次元での分散した配置の引数（正の整数型の配
列）

〱〲

ぉぎ

ちひひちべたはてたばびどぺづび

各次元でのプロセスグリッドのサイズ（正の整数型
の配列）

ぉぎ

はひつづひ
はぬつぴべばづのづぷぴべばづ

配列の格納順序フラグ（ステート型）

ぉぎ
ぉぎ

ぉぎ
くさご

配列の次元とプロセスグリッドの次元の数（正の整数型）

旧データ型（ハンドル）
新データ型（ハンドル）

〵
〶
〷
〸
〹

〱〱

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

どのぴ きぐぉたごべばづたっひづちぴづたつちひひちべ〨どのぴ びどぺづ〬 どのぴ ひちのに〬 どのぴ のつどねび〬
どのぴ ちひひちべたはてたでびどぺづびせそ〬 どのぴ ちひひちべたはてたつどびぴひどぢびせそ〬 どのぴ ちひひちべたはてたつちひでびせそ〬 どのぴ
ちひひちべたはてたばびどぺづびせそ〬 どのぴ はひつづひ〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁす〨こぉずぅ〬 げぁぎか〬 ぎいぉきこ〬 ぁげげぁすたくうたぇこぉずぅこ〬ぁげげぁすたくうたいぉこごげぉあこ〬 ぁげげぁすたくうたいぁげぇこ〬 ぁげげぁすたくうたぐこぉずぅこ〬 くげいぅげ〬 くがいごすぐぅ〬
ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こぉずぅ〬 げぁぎか〬 ぎいぉきこ〬 ぁげげぁすたくうたぇこぉずぅこ〨〪〩〬 ぁげげぁすたくうたいぉこごげぉあこ〨〪〩〬ぁげげぁすたくうたいぁげぇこ〨〪〩〬 ぁげげぁすたくうたぐこぉずぅこ〨〪〩〬 くげいぅげ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたつちひひちべ〨どのぴ びどぺづ〬 どのぴ ひちのに〬 どのぴ のつどねび〬
っはのびぴ どのぴ ちひひちべたはてたでびどぺづびせそ〬 っはのびぴ どのぴ ちひひちべたはてたつどびぴひどぢびせそ〬
っはのびぴ どのぴ ちひひちべたはてたつちひでびせそ〬 っはのびぴ どのぴ ちひひちべたはてたばびどぺづびせそ〬
どのぴ はひつづひ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

きぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁすははぬつぴべばづ要素ののつどねび次元の分散した配置に対応するデータ型をのつどねび次元の論理プロセスのグリッドに生成するのに使用できる．
ちひひちべたはてたばびどぺづびの使用しない次元は〱に設定する必要がある（〱〰〴ページの例〴〮〷を参照）．
Qndims−1
arrayたof たpsizesせiそ 〽
きぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁすを正しく呼び出すには，式 i=0sizeを満たす必要がある．プロセスグリッド内のプロセスの順序は，仮想カルテシアン
プロセストポロジーの場合と同様，行優先が前提となる．
ユーザへのアドバイス うはひぴひちの言語とぃ言語の両方の配列で，プロセスグリッド内のプロセスの順序は行優先が前提となる．これは，きぐぉの仮想カルテシアンプロセ
ストポロジーで使用される順序に整合する．このような仮想プロセストポロジーを作成したり，またはプロセスグリッド内のプロセスの座標を確認したりするために，該当するプロセストポロジー関数を使用することができる．〲〵〵ページの第〷章を参照すること． （ユーザへのアドバイス終わり）
配列の各次元は，次のいずれかの方法で分散させることができる．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷

• きぐぉたいぉこごげぉあさごぅたあがくぃか 〭 ブロックの分散した配置〴〸

第 〴〮 データ型〱〰〲〱

• きぐぉたいぉこごげぉあさごぅたぃすぃがぉぃ 〭 サイクリックの分散した配置

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

• きぐぉたいぉこごげぉあさごぅたぎくぎぅ 〭 次元の分散なし
定数きぐぉたいぉこごげぉあさごぅたいうがごたいぁげぇはデフォルトの分散した配置引数を指定する． 分散した配置を行わない次元の分散した配置の引数は無視される．次元の分散した配置がきぐぉたいぉこごげぉあさごぅたあがくぃかであるどの次元に対しても（仮に次元どとして），
ちひひちべたはてたつちひでびせどそ ∗ ちひひちべたはてたばびどぺづびせどそ < ちひひちべたはてたでびどぺづびせどそ のような値を指定することは誤りである．
例えば，えぐう配置ぁげげぁす〨ぃすぃがぉぃ〨〱〵〩〩は分散した配置の引数が〱〵のきぐぉたいぉこごげぉあさごぅたぃすぃがぉぃに対応し，えぐう配置ぁげげぁす〨あがくぃか〩は 分散した配置の引数がきぐぉたいぉこごげぉあさごぅたいうがごたいぁげぇの きぐぉたいぉこごげぉあさごぅたあがくぃかに対応する．
はひつづひ引数は，きぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁすの場合と同様，格納順序を指定するのに使用される．そのため，この型コンストラクタで記述される配列は うはひぴひちの言語（列優先）またはぃ言語（行優先）の順序で格納することができる．はひつづひに使用できる値は，きぐぉたくげいぅげたうくげごげぁぎと きぐぉたくげいぅげたぃである．
このルーチンは，ぜっべっぬどっ〨〩〢という関数で定義された型マップを使用して新しいきぐぉ データ型を作成する（以下を参照）．
このルーチンは，きぐぉたいぉこごげぉあさごぅたいうがごたいぁげぇを使わない きぐぉたいぉこごげぉあさごぅたぃすぃがぉぃの
場合に，汎用性を失うことなく，型マップを定義するのに十分である．
きぐぉたいぉこごげぉあさごぅたあがくぃかおよびきぐぉたいぉこごげぉあさごぅたぎくぎぅは，以下のように次元どに対してきぐぉたいぉこごげぉあさごぅたぃすぃがぉぃに変換することができる．
ちひひちべたはてたつちひでびせどそがきぐぉたいぉこごげぉあさごぅたいうがごたいぁげぇと等しい きぐぉたいぉこごげぉあさごぅたあがくぃかは
ちひひちべたはてたつちひでびせどそが次のように設定されたきぐぉたいぉこごげぉあさごぅたぃすぃがぉぃと等価である．

〲〸〲〹〨ちひひちべたはてたでびどぺづびせどそ 〫 ちひひちべたはてたばびどぺづびせどそ − 〱〩/ちひひちべたはてたばびどぺづびせどそ.

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

ちひひちべたはてたつちひでびせどそがきぐぉたいぉこごげぉあさごぅたいうがごたいぁげぇでない場合，きぐぉたいぉこごげぉあさごぅたあがくぃかと
きぐぉたいぉこごげぉあさごぅたぃすぃがぉぃは 等価である．
きぐぉたいぉこごげぉあさごぅたぎくぎぅはちひひちべたはてたつちひでびせどそがちひひちべたはてたでびどぺづびせどそに設定された
きぐぉたいぉこごげぉあさごぅたぃすぃがぉぃと等価である．
最 後 に， ちひひちべたはてたつちひでびせどそがきぐぉたいぉこごげぉあさごぅたいうがごたいぁげぇに 等 し いきぐぉたいぉこごげぉあさごぅたぃすぃがぉぃは，ちひひちべたはてたつちひでびせどそが〱に設定された きぐぉたいぉこごげぉあさごぅたぃすぃがぉぃと
等価である．
きぐぉたくげいぅげたうくげごげぁぎの場合，のつどねび次元の分散配列（のづぷぴべばづ）は以下の部分コードによって定義される．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

はぬつぴべばづせ〰そ 〽 はぬつぴべばづ〻てはひ 〨 ど 〽 〰〻 ど 〼 のつどねび〻 ど〫〫 〩 ほ
はぬつぴべばづせど〫〱そ 〽 っべっぬどっ〨ちひひちべたはてたつちひでびせどそ〬
ちひひちべたはてたでびどぺづびせどそ〬
ひせどそ〬
ちひひちべたはてたばびどぺづびせどそ〬
はぬつぴべばづせどそ〩〻ぽのづぷぴべばづ 〽 はぬつぴべばづせのつどねびそ〻〴〮〱〮 派生データ型〱〰〳

きぐぉたくげいぅげたぃの場合，コードは以下のようになる．

〱〲

はぬつぴべばづせ〰そ 〽 はぬつぴべばづ〻てはひ 〨 ど 〽 〰〻 ど 〼 のつどねび〻 ど〫〫 〩 ほ
はぬつぴべばづせど 〫 〱そ 〽 っべっぬどっ〨ちひひちべたはてたつちひでびせのつどねび 〭 ど 〭 〱そ〬ちひひちべたはてたでびどぺづびせのつどねび 〭 ど 〭 〱そ〬
ひせのつどねび 〭 ど 〭 〱そ〬ちひひちべたはてたばびどぺづびせのつどねび 〭 ど 〭 〱そ〬はぬつぴべばづせどそ〩〻ぽのづぷぴべばづ 〽 はぬつぴべばづせのつどねびそ〻

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

ここで，rせiそは次元iでのプロセスグリッド内のプロセスの位置（ランクひちのにによる）である．rせiその値は以下の部分コードによって与えられる．

〱〲
〱〳
〱〴

ぴたひちのに 〽 ひちのに〻
ぴたびどぺづ 〽 〱〻てはひ 〨ど 〽 〰〻 ど 〼 のつどねび〻 ど〫〫〩ぴたびどぺづ 〪〽 ちひひちべたはてたばびどぺづびせどそ〻てはひ 〨ど 〽 〰〻 ど 〼 のつどねび〻 ど〫〫〩 ほ
ぴたびどぺづ 〽 ぴたびどぺづ 〯 ちひひちべたはてたばびどぺづびせどそ〻
ひせどそ 〽 ぴたひちのに 〯 ぴたびどぺづ〻
ぴたひちのに 〽 ぴたひちのに 〥 ぴたびどぺづ〻
ぽ

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

はぬつぴべばづの型マップの形式が次のとおりであるとする．
{〨type0 , disp0 〩, 〨type1 , disp1 〩, . . . , 〨typen−1 , dispn−1 〩}ここで，typei は定義済みのきぐぉ データ型であり，exがはぬつぴべばづの範囲であるとする．
この場合，関数っべっぬどっ〨〩は次のように定義される．

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

っべっぬどっ〨darg, gsize, r, psize, はぬつぴべばづ〩〽 {〨きぐぉたがあ, 〰〩,〨type0 , disp0 〫 r × darg × ex〩, . . . ,〨typen−1 , dispn−1 〫 r × darg × ex〩,

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

〨type0 , disp0 〫 〨r × darg 〫 〱〩 × ex〩, . . . ,〨typen−1 , dispn−1 〫 〨r × darg 〫 〱〩 × ex〩,

〳〷
〳〸
〳〹

...

〴〰

〨type0 , disp0 〫 〨〨r 〫 〱〩 × darg − 〱〩 × ex〩, . . . ,〨typen−1 , dispn−1 〫 〨〨r 〫 〱〩 × darg − 〱〩 × ex〩,

〴〱
〴〲
〴〳
〴〴

〨type0 , disp0 〫 r × darg × ex 〫 psize × darg × ex〩, . . . ,〴〵〴〶〨typen−1 , dispn−1 〫 r × darg × ex 〫 psize × darg × ex〩,
〨type0 , disp0 〫 〨r × darg 〫 〱〩 × ex 〫 psize × darg × ex〩, . . . ,〴〷〴〸第 〴〮 データ型〱〰〴

〨typen−1 , dispn−1 〫 〨r × darg 〫 〱〩 × ex 〫 psize × darg × ex〩,

〱
〲
〳
〴

...
〨type0 , disp0 〫 〨〨r 〫 〱〩 × darg − 〱〩 × ex 〫 psize × darg × ex〩, . . . ,〵〨typen−1 , dispn−1 〫 〨〨r 〫 〱〩 × darg − 〱〩 × ex 〫 psize × darg × ex〩,
〮〮
〮

〶
〷
〸
〹

〨type0 , disp0 〫 r × darg × ex 〫 psize × darg × ex × 〨count − 〱〩〩, . . . ,〨typen−1 , dispn−1 〫 r × darg × ex 〫 psize × darg × ex × 〨count − 〱〩〩,〱〰
〱〱

〨type0 , disp0 〫 〨r × darg 〫 〱〩 × ex 〫 psize × darg × ex × 〨count − 〱〩〩, . . . ,〱〲〨typen−1 , dispn−1 〫 〨r × darg 〫 〱〩 × ex〱〳

〫psize × darg × ex × 〨count − 〱〩〩,

〱〴
〱〵
〱〶
〱〷
〱〸

...
〨type0 , disp0 〫 〨r × darg 〫 darglast − 〱〩 × ex
〫psize × darg × ex × 〨count − 〱〩〩, . . . ,〱〹〲〰

〨typen−1 , dispn−1 〫 〨r × darg 〫 darglast − 〱〩 × ex〲〱

〫psize × darg × ex × 〨count − 〱〩〩,〲〲〲〳

〨きぐぉたさあ, gsize ∗ ex〩}〲〴〲〵

ここで，countは以下のコードによって定義される．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

のぢぬはっにび 〽 〨でびどぺづ 〫 〨つちひで 〭 〱〩〩 〯 つちひで〻
っはふのぴ 〽 のぢぬはっにび 〯 ばびどぺづ〻
ぬづてぴたはぶづひ 〽 のぢぬはっにび 〭 っはふのぴ 〪 ばびどぺづ〻
どて 〨ひ 〼 ぬづてぴたはぶづひ〩
っはふのぴ 〽 っはふのぴ 〫 〱〻ここで，nblocksはプロセッサー間で分散させる必要のあるブロックの数である．また，darglast は以下の部分コードによって定義される．
どて 〨〨のふねたどのたぬちびぴたっべっぬどっ 〽 でびどぺづ 〥 〨ばびどぺづ 〪 つちひで〩〩 〽〽 〰〩つちひでたぬちびぴ 〽 つちひで〻
づぬびづ
つちひでたぬちびぴ 〽 のふねたどのたぬちびぴたっべっぬどっ 〭 つちひで 〪 ひ〻どて 〨つちひでたぬちびぴ 〾 つちひで〩つちひでたぬちびぴ 〽 つちひで〻
どて 〨つちひでたぬちびぴ 〼〽 〰〩つちひでたぬちびぴ 〽 つちひで〻

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

例 4.7 えぐうの分散した配置に対応するファイル型の生成を検討する．
〼はぬつぴべばづ〾 うぉがぅぁげげぁす〨〱〰〰〬 〲〰〰〬 〳〰〰〩
〡えぐう〤 ぐげくぃぅここくげこ ぐげくぃぅここぅこ〨〲〬 〳〩〡えぐう〤 いぉこごげぉあさごぅ うぉがぅぁげげぁす〨ぃすぃがぉぃ〨〱〰〩〬 〪〬 あがくぃか〩 くぎごく ぐげくぃぅここぅこ

〴〮〱〮 派生データ型〱〰〵

これは，実行にアタッチされたプロセスが〶個あると仮定して，以下のうはひぴひちの言語のコードで実現できる．

〱〲〳のつどねび 〽 〳ちひひちべたはてたでびどぺづび〨〱〩 〽 〱〰〰
ちひひちべたはてたつどびぴひどぢび〨〱〩 〽 きぐぉたいぉこごげぉあさごぅたぃすぃがぉぃちひひちべたはてたつちひでび〨〱〩 〽 〱〰
ちひひちべたはてたでびどぺづび〨〲〩 〽 〲〰〰
ちひひちべたはてたつどびぴひどぢび〨〲〩 〽 きぐぉたいぉこごげぉあさごぅたぎくぎぅ
ちひひちべたはてたつちひでび〨〲〩 〽 〰
ちひひちべたはてたでびどぺづび〨〳〩 〽 〳〰〰
ちひひちべたはてたつどびぴひどぢび〨〳〩 〽 きぐぉたいぉこごげぉあさごぅたあがくぃか
ちひひちべたはてたつちひでび〨〳〩 〽 きぐぉたいぉこごげぉあさごぅたいうがごたいぁげぇ
ちひひちべたはてたばびどぺづび〨〱〩 〽 〲ちひひちべたはてたばびどぺづび〨〲〩 〽 〱ちひひちべたはてたばびどぺづび〨〳〩 〽 〳っちぬぬ きぐぉたぃくききたこぉずぅ〨きぐぉたぃくききたしくげがい〬 びどぺづ〬 どづひひ〩
っちぬぬ きぐぉたぃくききたげぁぎか〨きぐぉたぃくききたしくげがい〬 ひちのに〬 どづひひ〩
っちぬぬ きぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁす〨びどぺづ〬 ひちのに〬 のつどねび〬 ちひひちべたはてたでびどぺづび〬 〦ちひひちべたはてたつどびぴひどぢび〬 ちひひちべたはてたつちひでび〬 ちひひちべたはてたばびどぺづび〬〦
きぐぉたくげいぅげたうくげごげぁぎ〬 はぬつぴべばづ〬 のづぷぴべばづ〬 どづひひ〩

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

4.1.5 アドレス関数とサイズ関数〲〲

汎用データ型の変位は，あるバッファの先頭アドレスからの相対的なものである．絶対アドレスをこれらの変位の代わりに用いることができる．絶対アドレスはアドレス空間の始点である「アドレス〰」からの相対的な 変位として扱う．この初期アドレス〰は定数きぐぉたあくごごくきで表される． したがって，ぢふて引数にはきぐぉたあくごごくきを渡すことで，データ型の定義に通信バッファ内のエントリとして絶対アドレスを指定できる．
メモリ内での位置に対するアドレスは関数きぐぉたぇぅごたぁいいげぅここを呼び出すことによって得られる．

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

きぐぉたぇぅごたぁいいげぅここ〨ぬはっちぴどはの〬 ちつつひづびび〩ぉぎ
くさご

ぬはっちぴどはの
ちつつひづびび〳〳呼び出し元メモリ内の位置〨選択型〩〳〴

位置のアドレス〨整数型〩〳〵〳〶

どのぴ きぐぉたぇづぴたちつつひづびび〨ぶはどつ 〪ぬはっちぴどはの〬 きぐぉたぁどのぴ 〪ちつつひづびび〩
きぐぉたぇぅごたぁいいげぅここ〨がくぃぁごぉくぎ〬 ぁいいげぅここ〬 ぉぅげげくげ〩〼ぴべばづ〾 がくぃぁごぉくぎ〨〪〩ぉぎごぅぇぅげ ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁいいげぅここ{きぐぉ〺〺ぁどのぴ きぐぉ〺〺ぇづぴたちつつひづびび〨ぶはどつ〪 ぬはっちぴどはの〩 （廃止された呼び出し形式, 第15.2節を参照）
}

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

この関数は廃止されたきぐぉたぁいいげぅここに代わるものである． 第〱〵章も参照すること．
ぬはっちぴどはのの〨バイト〩アドレスを返す．

〴〴
〴〵
〴〶

ユーザへのアドバイス 現行のうはひぴひちの言語のきぐぉコードはこのバージョンのきぐぉ実
装で，修正なしで動作可能であるし，任意のシステムに移植可能である．しかし，〴〷〴〸第 〴〮 データ型〱〰〶

プログラム内で 〲32 − 〱 より大きいアドレスを使用すると動作しない可能性がある．
新しく作成するコードは，これらの新しい関数を使うようにして書かれるべきである．これにより，ぃ言語〯ぃ〫〫言語との互換性が得られ，〶〴ビットアーキテクチ
ャ上の誤動作を回避することができる．しかし，そうした新しく作成するコードは， かぉぎい宣言をサポートしない古いうはひぴひちの 〷〷言語環境に移植する場合に，（多少の）書き直しが必要となることもある． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

例 4.8 きぐぉたぇぅごたぁいいげぅここを配列に使うげぅぁが ぁ〨〱〰〰〬〱〰〰〩
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぉ〱〬 ぉ〲〬 いぉううぃぁがが きぐぉたぇぅごたぁいいげぅここ〨ぁ〨〱〬〱〩〬 ぉ〱〬 ぉぅげげくげ〩
ぃぁがが きぐぉたぇぅごたぁいいげぅここ〨ぁ〨〱〰〬〱〰〩〬 ぉ〲〬 ぉぅげげくげ〩いぉうう 〽 ぉ〲 〭 ぉ〱
〡 いぉううの値は〹〰〹〪びどぺづはてひづちぬである．ぉ〱とぉ〲の値は〡 ぜどねばぬづねづのぴちぴどはのによって決まる．

〱〶〱〷

ユーザへのアドバイス ぃ言語のユーザはきぐぉたぇぅごたぁいいげぅここの使用を避け，アドレス演算子〦を使用したいという場合がある．しかし，〦 変換式はアドレスではな
くポインタであることに注意しなければならない．ぉこく ぃ言語ではポインタ（あるいはポインタを変換したどのぴ）がオブジェクトの指し示す絶対アドレスを示すことを要求していないが，これが一般的ではある．さらに，セグメント化されたアドレス空間を持つマシン上では，参照に対して，唯一の定義が存在しない場合もある．
きぐぉたぇぅごたぁいいげぅここをぃ言語の変数への「参照」に利用することで，このようなマシン上での可搬性が保証される． （ユーザへのアドバイス終わり）

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

ユーザへのアドバイス ユーザへのアドバイス うはひぴひちの言語のコンパイラによって実行される引数のコピーとレジスタの最適化に関する問題を回避するため，
第〱〶〮〲〮〲節の「データのコピーとシーケンスの対応付けによる問題」（〵〰〴ページ）と「レジスタの最適化に関する問題」（〵〰〷ページ）のヒントに注意すること． （ユーザへのアドバイス終わり）

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

以下の補助関数は派生データ型に対する有用な情報を与えるものである．

〳〶〳〷

きぐぉたごすぐぅたこぉずぅ〨つちぴちぴべばづ〬 びどぺづ〩

〳〸
〳〹

ぉぎ

〴〰

くさご

〴〱
〴〲
〴〳
〴〴

つちぴちぴべばづ
びどぺづ

データ型（ハンドル）
データ型のサイズ（整数型）

どのぴ きぐぉたごべばづたびどぺづ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ 〪びどぺづ〩
きぐぉたごすぐぅたこぉずぅ〨いぁごぁごすぐぅ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 こぉずぅ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺いちぴちぴべばづ〺〺ぇづぴたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〵
〴〶
〴〷
〴〸

きぐぉたごすぐぅたこぉずぅは，つちぴちぴべばづに関連付けられた型シグネチャの中の全エントリの合計
サイズをバイト単位で返す．つまり，このデータ型で作成されるメッセージデータの合計サイズである． データ型内で複数回現れるエントリは複数回数えられる．

〴〮〱〮 派生データ型〱〰〷

4.1.6 下限マーカと上限マーカ〱〲型マップの上限と下限を明示的に指定し，〱〰〷ページの定義と置き換えると便利な場合がある．これによって，最初や最後に「穴」を持つデータ型や，上限の後ろや下限の前に拡張されたエントリを持つようなデータ型を定義することができる．このような使い方の例を第〴〮〱〮〱〴節に示す． また，ユーザが上限や範囲の計算に利用されるアライメン
トの規則を変更することができる．例えば，あるぃ言語のコンパイラではユーザがプログラム中の構造体のいくつかのデフォルトのアライメントを変更することが可能なこともある．このような場合，ユーザはこれらの構造体に合致するようにデータ型の上下限を明示的に指定する必要がある．
これを実現するために，きぐぉたがあおよびきぐぉたさあの，〲つの「疑似データ型」が加えられた．これらはそれぞれ，データ型に対し下限と上限をマークするのに使うことができる．
これらの疑似データ型は場所を占有しない 〨extent〨きぐぉたがあ〩 〽 extent〨きぐぉたさあ〩 〽 〰〩．
これらの疑似データ型は，マークされたデータ型のサイズや回数〨っはふのぴ〩に影響を与えないし，そのデータ型単独で生成されるメッセージの内容にも影響を与えない．しかし，データ型の範囲の定義には影響するので，データ型コンストラクタによるこのデータ型の反復結果には影響する．
例 4.9 い 〽 〨〭〳〬 〰〬 〶〩，ご 〽 〨きぐぉたがあ〬 きぐぉたぉぎご〬 きぐぉたさあ〩，かつ あ 〽 〨〱〬 〱〬 〱〩とする．このとき，きぐぉたごすぐぅたこごげさぃご〨〳〬 あ〬 い〬 ご〬 ぴべばづ〱〩は範囲が〹（〭〳から〵まで（〵を含む））で，変位〰に整数値を持つようなデータ型を作る．これは，{〨ぬぢ〬 〭〳〩〬 〨どのぴ〬 〰〩〬 〨ふぢ〬 〶〩} のよ
うな並びで表すことができる．きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨〲〬 ぴべばづ〱〬 ぴべばづ〲〩 の呼び出しによって，このデータ型が〲回反復されたら，新たに生成されるデータ型は {〨ぬぢ〬 〭〳〩〬 〨どのぴ〬〰〩〬 〨どのぴ〬〹〩〬 〨ふぢ〬 〱〵〩} で表すことができる．（型ふぢのエントリは，より大きな変位を持つ型ふぢの別のエントリがあれば削除することができ，型ぬぢのエントリは，より小さな変位を持つ型ぬぢの別のエントリがあれば削除することができる．）

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

一般的に，

〳〲

T ypemap 〽 {〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},の場合，T ypemapの下限は

〳〳
〳〴
〳〵
〳〶

(

lb〨T ypemap〩 〽

ねどのj dispj
型ぬぢを持つエントリがない場合
ねどのj {dispj びふっと ぴとちぴ typej 〽 ぬぢ} そうでない場合のように定義される．
同様に，T ypemapの上限は(ub〨T ypemap〩 〽

ねちへj dispj 〫 sizeof 〨typej 〩 〫 
型ふぢを持つエントリがない場合
ねちへj {dispj びふっと ぴとちぴ typej 〽 ふぢ} そうでない場合のように定義される．
したがって，範囲は，

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷

extent〨T ypemap〩 〽 ub〨T ypemap〩 − lb〨T ypemap〩〴〸

第 〴〮 データ型

〱〰〸
〱
〲
〳
〴
〵
〶

と な る． typei がki の 倍 数 の バ イ ト ア ド レ ス の ア ラ イ メ ン ト を 必 要 と す る 場 合， はextent〨T ypemap〩 をねちへi ki の次の倍数に丸めるために必要な非負の最小の値となる．
この範囲の定義の修正で，さまざまなデータ型コンストラクタの正式な定義がなされた．

〷〸

4.1.7 データ型の範囲と上下限

〹
〱〰
〱〱
〱〲

以下の関数は，きぐぉたごすぐぅたさあ，きぐぉたごすぐぅたがあ，きぐぉたごすぐぅたぅじごぅぎごの〳つの関数に代わるものである． うはひぴひちの言語呼び出し形式では，アドレスサイズの整数も返す．
きぐぉたごすぐぅたさあ，きぐぉたごすぐぅたがあ，きぐぉたごすぐぅたぅじごぅぎごの使用は廃止された．

〱〳
〱〴
〱〵
〱〶
〱〷

きぐぉたごすぐぅたぇぅごたぅじごぅぎご〨つちぴちぴべばづ〬 ぬぢ〬 づへぴづのぴ〩
ぉぎ
くさご

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

くさご

つちぴちぴべばづ
ぬぢ
づへぴづのぴ

情報取得のためのデータ型（ハンドル）
データ型の下限（整数型）
データ型の範囲（整数型）

どのぴ きぐぉたごべばづたでづぴたづへぴづのぴ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ 〪ぬぢ〬
きぐぉたぁどのぴ 〪づへぴづのぴ〩
きぐぉたごすぐぅたぇぅごたぅじごぅぎご〨いぁごぁごすぐぅ〬 があ〬 ぅじごぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい 〽 きぐぉたぁいいげぅここたかぉぎい〩 があ〬 ぅじごぅぎご{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺ぇづぴたづへぴづのぴ〨きぐぉ〺〺ぁどのぴ〦 ぬぢ〬 きぐぉ〺〺ぁどのぴ〦 づへぴづのぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
つちぴちぴべばづの下限と範囲を返す（〱〰〷ページの 第〴〮〱〮〶節で定義）．
きぐぉでは，下限マーカと上限マーカ（きぐぉたがあときぐぉたさあ）を使用して， データ型の範囲を変更することができる．これにより，連続するデータ型のストライドを制御することができるので，有用である．連続するデータ型は，データ型コンストラクタによる反復
や，送信または受信呼び出しのっはふのぴ引数による反復で生じる．しかし，ストライドの制御を実現するための現行の方法は使い勝手が悪く，制約も多い． きぐぉたがあときぐぉたさあは「厄介」で，データ型で一度使用されると，上書きができない（例えば，新しいきぐぉたさあマー
カを追加することにより上限を引き上げることができるが，既存のきぐぉたさあマーカよりも引き下げることはできない）．この変更を容易に行うため，新しいタイプのコンストラク
タが用意されている． きぐぉたがあときぐぉたさあの使用は廃止された．

〳〹〴〰

きぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅい〨はぬつぴべばづ〬 ぬぢ〬 づへぴづのぴ〬 のづぷぴべばづ〩

〴〱
〴〲

ぉぎ

〴〳

ぉぎ

〴〴

ぉぎ

〴〵

くさご

はぬつぴべばづ
ぬぢ
づへぴづのぴのづぷぴべばづ

入力データ型（ハンドル）
データ型の新しい下限（整数型）
データ型の新しい範囲（整数型）
出力データ型（ハンドル）

〴〶
〴〷
〴〸

どのぴ きぐぉたごべばづたっひづちぴづたひづびどぺづつ〨きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたぁどのぴ ぬぢ〬 きぐぉたぁどのぴ
づへぴづのぴ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩〴〮〱〮 派生データ型〱〰〹

きぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅい〨くがいごすぐぅ〬 があ〬 ぅじごぅぎご〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 があ〬 ぅじごぅぎご{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたひづびどぺづつ〨っはのびぴ きぐぉ〺〺ぁどのぴ ぬぢ〬
っはのびぴ きぐぉ〺〺ぁどのぴ づへぴづのぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱のづぷぴべばづにはぬつぴべばづと同じである新しいデータ型のハンドルを返す．ただし，この新しいデータ型の下限はぬぢに設定され，上限はぬぢ 〫 づへぴづのぴに設定される． 古いlbマーカとubマーカは消去され，下限マーカと上限マーカの新しいペアが，ぬぢ引数とづへぴづのぴ引数によって示される位置に設定される．これは，っはふのぴ > 〱 引数の通信操作の中で使用された場合
や，新しい派生データ型のコンストラクションで使用された場合に，データ型の動作に影響を及ぼす．

〷

〲
〳
〴
〵
〶

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

ユーザへのアドバイス データ型の下限，上限，および範囲に設定したりアクセス
したりする場合，古いきぐぉ〭〱関数ではなく，これら〲つの新しい関数を使用することをユーザに強く推奨する．（ユーザへのアドバイス終わり）

〱〵
〱〶
〱〷
〱〸
〱〹

4.1.8 データ型の正しい範囲〲〰

〱対〱ル ー チ ン の 上 に 実 装 さ れ た ス パ ニ ン グ ツ リ ー と し て ギ ャ ザ ー（〱〴〹ペ ー ジ の第〵〮〵節も参照）を実装するとする．受信バッファはルートプロセスでしか有効でないため，中間ノードでデータを受信するための一時的空間を割り当てる必要がある．しかし，ユーザがきぐぉたさあときぐぉたがあの値を使用して範囲を修正している場合，データ型の範囲に基づいて割り当てるのに必要な空間の量を見積もることができない．そのため，データ型の正しい範囲を返す関数を用意している．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

きぐぉたごすぐぅたぇぅごたごげさぅたぅじごぅぎご〨つちぴちぴべばづ〬 ぴひふづたぬぢ〬 ぴひふづたづへぴづのぴ〩
ぉぎ
くさご
くさご

つちぴちぴべばづ
ぴひふづたぬぢ
ぴひふづたづへぴづのぴ〳〰

情報の取得が必要なデータ型（ハンドル）〳〱

データ型の正しい下限（整数型）〳〲

データ型の正しいサイズ（整数型）

どのぴ きぐぉたごべばづたでづぴたぴひふづたづへぴづのぴ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ 〪ぴひふづたぬぢ〬
きぐぉたぁどのぴ 〪ぴひふづたづへぴづのぴ〩
きぐぉたごすぐぅたぇぅごたごげさぅたぅじごぅぎご〨いぁごぁごすぐぅ〬 ごげさぅたがあ〬 ごげさぅたぅじごぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい 〽 きぐぉたぁいいげぅここたかぉぎい〩 ごげさぅたがあ〬 ごげさぅたぅじごぅぎご{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺ぇづぴたぴひふづたづへぴづのぴ〨きぐぉ〺〺ぁどのぴ〦 ぴひふづたぬぢ〬
きぐぉ〺〺ぁどのぴ〦 ぴひふづたづへぴづのぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
ぴひふづたぬぢは，指定されたデータ型によって示された，最低の格納単位のオフセットを返す．つまり，きぐぉたがあマーカを無視して，対応する型マップの下限を返す．ぴひふづたづへぴづのぴは，指定された データ型の正しいサイズを返す．つまり， きぐぉたがあマーカおよびきぐぉたさあマー
カを無視し，かつアライメントのための丸めを計算しないで，対応する型マップの範囲

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型〱〱〰
〱を返す．つちぴちぴべばづに関連付けられた型マップが次のような場合，〲〳

T ypemap 〽 {〨type0 , disp0 〩, . . . , 〨typen−1 , dispn−1 〩}〴〵ぴひふづたぬぢとぴひふづたふぢは以下のようになる．

〶〷

trueたlb〨T ypemap〩 〽 minj {dispj 〺 typej 6〽 lb, ub},〸〹

trueたub〨T ypemap〩 〽 maxj {dispj 〫 sizeof 〨typej 〩 〺 typej 6〽 lb, ub},〱〰
〱〱

またぴひふづたづへぴづのぴは次のようになる．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

trueたextent〨T ypemap〩 〽 trueたub〨T ypemap〩 − trueたlb〨typemap〩.
〨こ れ を， 〱〰〷ペ ー ジ の 第〴〮〱〮〶節 お よ び〱〰〸ペ ー ジ の 第〴〮〱〮〷節 の 関 数
きぐぉたごすぐぅたぇぅごたぅじごぅぎごの定義と比較すること．〩
ぴひふづたづへぴづのぴは，非圧縮のデータ型を保持するのに必要なメモリの最小バイト数であ
る．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

4.1.9 コミットと解放
データ型オブジェクトは通信で利用される前にコミットされていなければならない．
コミットされていないデータ型もコミットされたデータ型も，データ型コンストラクタの引数として用いることができる．基本データ型は「あらかじめコミットされている」
ので， コミットする必要はない．

〲〷〲〸

きぐぉたごすぐぅたぃくききぉご〨つちぴちぴべばづ〩

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

ぉぎくさご

つちぴちぴべばづ

コミットするデータ型（ハンドル）

どのぴ きぐぉたごべばづたっはねねどぴ〨きぐぉたいちぴちぴべばづ 〪つちぴちぴべばづ〩
きぐぉたごすぐぅたぃくききぉご〨いぁごぁごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺ぃはねねどぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
コミット操作は指定されたデータ型をコミットする．つまり通信バッファの内容ではなく，通信バッファの形式的記述をコミットする．したがって，ひとたびデータ型をコ
ミットすれば，バッファの内容の変更や，実際には異なる開始アドレスによる異なるバッファの内容を通信するために，データ型を繰り返し再利用することができる．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

実装者へのアドバイス システムは，通信を容易にするためにコミット時にデータ型を内部表現へ「コンパイル」してもよい．例えば，圧縮された表現からデータ型のフラットな表現に変え，最も有利な転送機能を選ぶことができる． （実装者へのアドバイス終わり）

〴〶
〴〷
〴〸

きぐぉたごすぐぅたぃくききぉご はコミット済みの データ型に対しても実行可能である．この場
合，無操作と等価である．

〴〮〱〮 派生データ型〱〱〱

例 4.10 以下のコードはきぐぉたごすぐぅたぃくききぉごの使い方の例である．

〱〲

ぉぎごぅぇぅげ ぴべばづ〱〬 ぴべばづ〲
ぃぁがが きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨〵〬 きぐぉたげぅぁが〬 ぴべばづ〱〬 どづひひ〩〡 のづぷ ぴべばづ はぢなづっぴ っひづちぴづつ
ぃぁがが きぐぉたごすぐぅたぃくききぉご〨ぴべばづ〱〬 どづひひ〩〡 のはぷ ぴべばづ〱 っちの ぢづ ふびづつ てはひ っはねねふのどっちぴどはの
ぴべばづ〲 〽 ぴべばづ〱〡 ぴべばづ〲 っちの ぢづ ふびづつ てはひ っはねねふのどっちぴどはの〡 〨どぴ どび ち とちのつぬづ ぴは びちねづ はぢなづっぴ ちび ぴべばづ〱〩
ぃぁがが きぐぉたごすぐぅたざぅぃごくげ〨〳〬 〵〬 〴〬 きぐぉたげぅぁが〬 ぴべばづ〱〬 どづひひ〩〡 のづぷ ふのっはねねどぴぴづつ ぴべばづ はぢなづっぴ っひづちぴづつ
ぃぁがが きぐぉたごすぐぅたぃくききぉご〨ぴべばづ〱〬 どづひひ〩〡 のはぷ ぴべばづ〱 っちの ぢづ ふびづつ ちのづぷ てはひ っはねねふのどっちぴどはの

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

きぐぉたごすぐぅたうげぅぅ〨つちぴちぴべばづ〩ぉぎくさご

つちぴちぴべばづ〱〷

解放されるデータ型（ハンドル）〱〸〱〹

どのぴ きぐぉたごべばづたてひづづ〨きぐぉたいちぴちぴべばづ 〪つちぴちぴべばづ〩
きぐぉたごすぐぅたうげぅぅ〨いぁごぁごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
指定されたつちぴちぴべばづに関連付けられたデータ型オブジェクトに，解放のためのマーク
を付け，つちぴちぴべばづをきぐぉたいぁごぁごすぐぅたぎさががに設定する．このデータ型をその時点で使っている通信は，正常完了する．データ型を解放しても，解放されたデータ型から作成された他のデータ型には影響しない．派生データ型を生成するときのへの入力データ型引数があたかも，値渡しされたかのように，システムは振舞う．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

実装者へのアドバイス 実装は，データ型を解放する時期を決定するために，そのデータ型を使っている通信の参照カウンタを保持してもよい．またある実装では，派生データ型コンストラクタへのデータ型引数ををコピーする代わりに，そのポインタを保持するようにしてもよい．この場合，データ型オブジェクトを解放する時期を知るために，有効なデータ型定義への参照を追跡する必要がある． （実装者へのアドバイス終わり）

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

4.1.10 データ型の複製

〳〹
〴〰
〴〱
〴〲

きぐぉたごすぐぅたいさぐ〨ぴべばづ〬 のづぷぴべばづ〩
ぉぎ
くさご

ぴべばづ
のづぷぴべばづ

データ型（ハンドル）〴〳〴〴

ぴべばづのコピー（ハンドル）

どのぴ きぐぉたごべばづたつふば〨きぐぉたいちぴちぴべばづ ぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたいさぐ〨ごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ

〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型

〱〱〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

{きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたごすぐぅたいさぐは，データ型コンストラクタであり，関連付けられたキー値を含む，
既存のぴべばづを複製する． 各キー値に対して，それぞれのコピーコールバック関数は新しいデータ型3 において，このキー値に関連付けられた属性値を決定する．ただし，コピー
コールバックがとってよいアクションの一つに，新しいデータ型から属性を削除することも含む．のづぷぴべばづには，ぴべばづと完全に同じプロパティと，コピーされたキャッシュ情報のすべてをもつ，新しいデータ型が返される．データ型のキャッシュについては，〲〴〴ページの第〶〮〷〮〴節を参照すること．新しいデータ型は，同じ上限および下限を持つとともに，第〴〮〱〮〱〳節の関数で完全にデコードした場合，実質同じ結果が得られる．のづぷぴべばづは
古いぴべばづと同様にコミットされた状態を持つ．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

4.1.11 通信時の汎用データ型の利用
派生データ型のハンドルは，どこであれデータ型引数が要求される通信呼び出しに渡すことができる．きぐぉたこぅぎい〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ 〬 〮〮〮〩形式の呼び出しでっはふのぴ > 〱の場合，
あたかもつちぴちぴべばづがっはふのぴ回連結された新たなデータ型が渡されたかのように考えることができる．そのため，きぐぉたこぅぎい〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩は以下と等価であ
る．

〲〲
〲〳
〲〴

きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨っはふのぴ〬 つちぴちぴべばづ〬 のづぷぴべばづ〩
きぐぉたごすぐぅたぃくききぉご〨のづぷぴべばづ〩
きぐぉたこぅぎい〨ぢふて〬 〱〬 のづぷぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩〮

〲〵
〲〶
〲〷
〲〸

っはふのぴとつちぴちぴべばづを引数に持つ他の通信関数全てに同様のことがいえる．
つちぴちぴべばづが次のような型マップを持ち，範囲がextentであるような 送信操作
きぐぉたこぅぎい〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩を実行すると仮定する．

〲〹〳〰

{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

（空のエントリ， きぐぉたさあおよびきぐぉたがあ の「疑似データ型」はこの型マップ中には列挙
されないが，extentの値には影響を与える．）この送信操作は n · っはふのぴ 個のエントリを送信する．このとき，i · n 〫 j 番目の エントリが addri,j 〽 ぢふて 〫 extent · i 〫 dispj に配置され，型typej をもつ．ただし，i 〽 〰, ..., っはふのぴ − 〱 および j 〽 〰, ..., n − 〱 である．これらのエントリは連続である必要もなければ別々である必要もない．順序も任意である．
呼び出し側のプログラム中でアドレスaddri,j に格納されている変数はtypej にマッチす
る型でなければならない．型のマッチングについては 第〳〮〳〮〱節で定義している．送信されるメッセージは n · っはふのぴ 個のエントリからなり， i · n 〫 j 番目のエントリは型typej をもつ．
同様に，つちぴちぴべばづが次のような型マップを持ち，範囲がextentであるような受信操
作きぐぉたげぅぃざ〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びはふひっづ〬 ぴちで〬 っはねね〬 びぴちぴふび〩 を実行すると仮定する．

〴〵{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩},

〴〶
〴〷
〴〸

〳

訳者註: 原文 communicator ; MPI Forum に確認予定．

〴〮〱〮 派生データ型〱〱〳（ここでも，空のエントリ，きぐぉたさあおよびきぐぉたがあの「疑似データ型」は型マップ中には列挙されないが，extent の値には影響を与える．）この受信操作はn · っはふのぴ 個の エント
リを受信する．このとき，i · n 〫 j 番目のエントリが ぢふて 〫 extent · i 〫 dispj に配置され，型typej をもつ．届いたメッセージがk個の要素を持っている場合， k はk ≤ n · っはふのぴ でなければならず，メッセージのi · n 〫 j 番目の要素はtypej とマッチする型でなければな
らない．
型のマッチングは対応するデータ型の型シグネチャ，すなわち，基本データ型で表される構成要素の並びに従って定義される．型のマッチングはデータ型定義のいくつかの面，例えば変位（メモリ中の配置）や使われた中間型など，には依存しない．
例 4.11 この例は，型のマッチングが派生データ型の構成要素である基本データ型によって定義されることを示す．
〮〮〮
ぃぁがが きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨 〲〬 きぐぉたげぅぁが〬 ぴべばづ〲〬 〮〮〮〩
ぃぁがが きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨 〴〬 きぐぉたげぅぁが〬 ぴべばづ〴〬 〮〮〮〩
ぃぁがが きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨 〲〬 ぴべばづ〲〬 ぴべばづ〲〲〬 〮〮〮〩〮〮〮
ぃぁがが きぐぉたこぅぎい〨 ち〬 〴〬 きぐぉたげぅぁが〬 〮〮〮〩
ぃぁがが きぐぉたこぅぎい〨 ち〬 〲〬 ぴべばづ〲〬 〮〮〮〩
ぃぁがが きぐぉたこぅぎい〨 ち〬 〱〬 ぴべばづ〲〲〬 〮〮〮〩
ぃぁがが きぐぉたこぅぎい〨 ち〬 〱〬 ぴべばづ〴〬 〮〮〮〩〮〮〮
ぃぁがが きぐぉたげぅぃざ〨 ち〬 〴〬 きぐぉたげぅぁが〬 〮〮〮〩
ぃぁがが きぐぉたげぅぃざ〨 ち〬 〲〬 ぴべばづ〲〬 〮〮〮〩
ぃぁがが きぐぉたげぅぃざ〨 ち〬 〱〬 ぴべばづ〲〲〬 〮〮〮〩
ぃぁがが きぐぉたげぅぃざ〨 ち〬 〱〬 ぴべばづ〴〬 〮〮〮〩
個々の送信は，どの受信とでも適合する．
データ型は互いにデータの上書きのあるエントリを指定してもよい．しかし，このようなデータ型を受信に使うのは誤りである（これは実際に受信されたメッセージが，どのエントリも上書きしない位に短くても誤りである）．
つちぴちぴべばづが以下のような型マップを持つ，きぐぉたげぅぃざ〨ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 つづびぴ〬 ぴちで〬っはねね〬 びぴちぴふび〩を実行すると仮定する．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

{〨type0 , disp0 〩, ..., 〨typen−1 , dispn−1 〩}.
受信されたメッセージは受信バッファを全て満たす必要はなく，またnの倍数個の領域を満たす必要もない．任意の数k個の基本要素を受信可能である．ただし，〰 ≤ k ≤ っはふのぴ · n
で あ る． 受 信 す る こ と が で き る 基 本 要 素 の 数 は， 問 い 合 わ せ 関 数
きぐぉたぇぅごたぅがぅきぅぎごこを使ってびぴちぴふびから取り出すことができる．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

きぐぉたぇぅごたぅがぅきぅぎごこ〨 びぴちぴふび〬 つちぴちぴべばづ〬 っはふのぴ〩
ぉぎ
ぉぎ
くさご

びぴちぴふびつちぴちぴべばづ
っはふのぴ〴〴

受信操作の戻りステータス（ステータス）〴〵

受信操作に使ったデータ型（ハンドル）〴〶受信された基本要素数（整数型）〴〷〴〸

第 〴〮 データ型

〱〱〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

どのぴ きぐぉたぇづぴたづぬづねづのぴび〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ 〪っはふのぴ〩
きぐぉたぇぅごたぅがぅきぅぎごこ〨こごぁごさこ〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺こぴちぴふび〺〺ぇづぴたづぬづねづのぴび〨っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
す で に 定 義 し た 関 数，きぐぉたぇぅごたぃくさぎご（第〳〮〲〮〵節）は こ れ と は 異 な る 動 作 を する． こ の 関 数 は 受 信 さ れ た「ト ッ プ レ ベ ル の エ ン ト リ 数」， す な わ ち つちぴちぴべばづ型 の「コピー数」を返す．前の例で，きぐぉたぇぅごたぃくさぎごは 〰 ≤ k ≤ っはふのぴ となるkを返す．
きぐぉたぇぅごたぃくさぎごがkを返す場合，受信された基本要素数（きぐぉたぇぅごたぅがぅきぅぎごこが返す値）はn · kである．受信された基本要素数が nの倍数ではない場合，すなわち，その受信操作がつちぴちぴべばづの整数個の「コピー」を受信しなかった場合，きぐぉたぇぅごたぃくさぎごは
きぐぉたさぎいぅうぉぎぅいを返す． つちぴちぴべばづ引数は，びぴちぴふび変数を設定した受信呼び出しによって渡された引数とマッチしなければならない．
例 4.12 きぐぉたぇぅごたぃくさぎごときぐぉたぇぅごたぅがぅきぅぎごこの使い方〮〮〮
ぃぁがが きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨〲〬 きぐぉたげぅぁが〬 ごべばづ〲〬 どづひひ〩
ぃぁがが きぐぉたごすぐぅたぃくききぉご〨ごべばづ〲〬 どづひひ〩〮〮〮
ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩ぉう 〨ひちのに〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨ち〬 〲〬 きぐぉたげぅぁが〬 〱〬 〰〬 っはねね〬 どづひひ〩
ぃぁがが きぐぉたこぅぎい〨ち〬 〳〬 きぐぉたげぅぁが〬 〱〬 〰〬 っはねね〬 どづひひ〩ぅがこぅ ぉう 〨ひちのに〮ぅけ〮〱〩 ごえぅぎ
ぃぁがが きぐぉたげぅぃざ〨ち〬 〲〬 ごべばづ〲〬 〰〬 〰〬 っはねね〬 びぴちぴ〬 どづひひ〩
ぃぁがが きぐぉたぇぅごたぃくさぎご〨びぴちぴ〬 ごべばづ〲〬 ど〬 どづひひ〩〡 ひづぴふひのび ど〽〱ぃぁがが きぐぉたぇぅごたぅがぅきぅぎごこ〨びぴちぴ〬 ごべばづ〲〬 ど〬 どづひひ〩 〡 ひづぴふひのび ど〽〲ぃぁがが きぐぉたげぅぃざ〨ち〬 〲〬 ごべばづ〲〬 〰〬 〰〬 っはねね〬 びぴちぴ〬 どづひひ〩
ぃぁがが きぐぉたぇぅごたぃくさぎご〨びぴちぴ〬 ごべばづ〲〬 ど〬 どづひひ〩〡 ひづぴふひのび ど〽きぐぉたさぎいぅうぉぎぅいぃぁがが きぐぉたぇぅごたぅがぅきぅぎごこ〨びぴちぴ〬 ごべばづ〲〬 ど〬 どづひひ〩 〡 ひづぴふひのび ど〽〳ぅぎい ぉう

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

関数きぐぉたぇぅごたぅがぅきぅぎごこはまた，プローブされたメッセージの中の要素数を知るた
めに，プローブ後にも使うことができる．これら〲つの関数，きぐぉたぇぅごたぃくさぎごと
きぐぉたぇぅごたぅがぅきぅぎごこは，基本データ型を用いた場合同じ値を返す．
根拠 きぐぉたぇぅごたぃくさぎごの定義に対する拡張は自然なものである．ある場合には，受信バッファが埋められているときに，この関数がっはふのぴ引数を返すことを期待するかもしれない．別の場合，時としてつちぴちぴべばづは，転送したいデータの基本単位，
例えば，レコード（構造体）配列中の〱個のレコード，を表現することを期待するかもしれない．そうした場合，いくつの構成要素を受信したかを，わざわざ各構成
要素の中の要素の数で割り算することなく，知ることができるべきである．しかし，他の場合に，つちぴちぴべばづが 受信側のメモリ中の複雑なデータの配置を定義するために用いられているために，転送の基本単位を表すことができない場合がある．このような場合には関数きぐぉたぇぅごたぅがぅきぅぎごこを使用する必要がある． （根拠の終わり）〴〮〱〮 派生データ型〱〱〵

実装者へのアドバイス この定義は，受信によって，通信バッファを構成するために定義されたエントリの外側の領域を変更できないことを暗に意味する．特に，構造体中のパディング領域は，このような構造体があるプロセスから別のプロセスへコピーされる時に変更されてはならないことを示している．このため，パディング
領域を含めて〱つの連続なブロックと見立てる，単純な構造体のコピーの最適化は行なうことができない．実装の際には計算結果に影響のない範囲でこの最適化を自由に行なってよい．ユーザはパディングをメッセージの一部として明示的に加えることで，この最適化を「強制的に行う」ことができる． （実装者へのアドバイス
終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

4.1.12 アドレスの正しい利用〱〳〱〴

ぃ言語またはうはひぴひちの言語で続けて宣言された変数が連続な領域に配置されるとは限らない．したがって，変位がある変数から他の変数へとまたがらないように注意して用いなければならない．同様に，セグメント化されたアドレス空間を持つ計算機の場合は，アドレスは一意ではなく，アドレスの計算には特別な方法がある．そのため，アドレス，
つまり開始アドレスきぐぉたあくごごくきに対する相対変位の利用は制限する必要がある．
変数どうしが同じ連続記憶領域に属するとは，次のような場合である．つまり，それらの変数どうしが，同じ配列や，うはひぴひちの言語での同じぃくききくぎブロックや，ぃ言語での同じ構造体に属する場合である．有効なアドレスは次のように再帰的に定義される．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

〱〮 呼び出し側プログラムの変数を引数として渡した時，関数 きぐぉたぇぅごたぁいいげぅここは
有効なアドレスを返す．

〲〵〲〮 呼び出し側プログラムの変数を引数として渡した時，通信関数は引数ぢふて を有効なアドレスとして評価する．

〲〸

〲〶
〲〷

〲〹
〳〰

〳〮 ぶが有効なアドレスであり，どが整数であるとき， ぶとぶ〫どが同じ連続記憶領域にあれ
ば，ぶ〫どは有効なアドレスである．

〳〱
〳〲
〳〳

〴〮 ぶが有効なアドレスであれば，きぐぉたあくごごくき 〫 ぶ は有効なアドレスである．

〳〴〳〵

正しいプログラムは，通信バッファ内のエントリの位置を特定するために有効なア
ドレスのみを利用する． さらに，ふとぶが有効なアドレスである時，（整数の）差ふ 〭 ぶ
はふとぶが同じ連続した領域にある場合に限り計算できる．アドレスに関してこれ以外の算術演算は意味を持たない．
上記の規則は，派生データ型が同じ連続記憶領域内に全て含まれる通信バッファを定義するために用いられる限り，特に制約はない．しかし，同じ連続記憶領域内にない変数を含む通信バッファを作る場合には一定の制約に従う必要がある．なぜなら，基本的にそのような通信バッファを，通信呼び出しで使うことができるのは，次のような呼び出しに限られるからである．つまり，ぢふて 〽 きぐぉたあくごごくきおよびっはふのぴ 〽 〱の引数を指定
し，かつすべての変位が有効な（絶対）アドレスであるようなつちぴちぴべばづ引数を使う呼び出
しに制約される．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型〱〱〶

ユーザへのアドバイス きぐぉ呼び出しでホストプログラム中の配列やレコードの範囲を知ることができないこともあるため，ユーザのアドレス空間のオーバーフロー以
外は， きぐぉ実装によって「範囲外」の変位のエラーを検出できない可能性がある．
（ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶

実装者へのアドバイス 連続したアドレス空間を持つ計算機上では（絶対）アドレ
スと，（相対）変位を区別する必要はない． きぐぉたあくごごくきは〰で，アドレスと 変位の双方が整数となる．区別を必要とする計算機上で，アドレスは きぐぉたあくごごくきを含む式とみなすことができる． （実装者へのアドバイス終わり）

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

4.1.13 データ型のデコード
きぐぉのデータ型オブジェクトを使用すると，ユーザはメモリ内で任意のデータの配置を明確に定義することができる．不可視なデータ型オブジェクト内の配置情報にアクセスすることが有益である場合がいくつかある．不可視なデータ型オブジェクトはきぐぉ以
外でもさまざまに使用されている．さらに，多数のツールが，データ型に関する内部情報が表示しようとする．このために，データ型デコード機能が用意されている．この節で説明する〲つの関数は共に，データ型の初期定義で使用された呼び出しシーケンスを再現するために，そのデータ型をデコードするのに使われる．これらは，ユーザがデータ型の型マップと型シグネチャを判別するために使用できる．

〲〴
〲〵
〲〶

きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅ〨つちぴちぴべばづ〬 のふねたどのぴづでづひび〬 のふねたちつつひづびびづび〬 のふねたつちぴちぴべばづび〬 っはね〭
ぢどのづひ〩

〲〷
〲〸
〲〹

くさご
くさご

のふねたちつつひづびびづび

っはねぢどのづひを構成する呼び出しで使用される入力アドレスの数（非負の整数型）

くさごのふねたつちぴちぴべばづび

っはねぢどのづひを構成する呼び出しで使用される入力デー
タ型の数（非負の整数型）

くさご

っはねぢどのづひ

結合子（ステート型）

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

アクセスするデータ型（ハンドル）

つちぴちぴべばづのふねたどのぴづでづひびぉぎ

っはねぢどのづひを構成する呼び出しで使用される入力整数の数（非負の整数型）

どのぴ きぐぉたごべばづたでづぴたづのぶづぬはばづ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ 〪のふねたどのぴづでづひび〬
どのぴ 〪のふねたちつつひづびびづび〬 どのぴ 〪のふねたつちぴちぴべばづび〬 どのぴ 〪っはねぢどのづひ〩
きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅ〨いぁごぁごすぐぅ〬 ぎさきたぉぎごぅぇぅげこ〬 ぎさきたぁいいげぅここぅこ〬 ぎさきたいぁごぁごすぐぅこ〬ぃくきあぉぎぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぎさきたぉぎごぅぇぅげこ〬 ぎさきたぁいいげぅここぅこ〬 ぎさきたいぁごぁごすぐぅこ〬 ぃくきあぉぎぅげ〬ぉぅげげくげ{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺ぇづぴたづのぶづぬはばづ〨どのぴ〦 のふねたどのぴづでづひび〬 どのぴ〦 のふねたちつつひづびびづび〬
どのぴ〦 のふねたつちぴちぴべばづび〬 どのぴ〦 っはねぢどのづひ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅは，指定されたつちぴちぴべばづに対し，そのつちぴちぴべばづを作成した呼び出しで使った，入力引数の数および型に関する情報を返す．のふねた〪 引数に返される値は，デコードルーチンきぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこで十分な大きさの配列を用意する〴〮〱〮 派生データ型〱〱〷ために使用できる．この呼び出しと返される値の意味を以下で説明する．っはねぢどのづひには，
つちぴちぴべばづの作成で使用された きぐぉデータ型コンストラクタ呼び出しが反映される．

〱
〲
〳

根拠

〴

っはねぢどのづひにつちぴちぴべばづの作成時に使用されたコンストラクタが反映されるよう規定されているため，デコードされた情報を使用して，オリジナルの作成に使用された呼び出しシーケンスを効率的に再現することができる．複数のコンストラクタ呼び出しのいずれの呼び出しでも，きぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこから得られる情報が同じ場合，そのいずれのコンストラクタ呼び出しも実質的に同じであると言える．例
えば，ぃ言語の呼び出しきぐぉたごべばづたとどのつづへづつときぐぉたごべばづたっひづちぴづたとどのつづへづつとは常に実質的に同じであるが，うはひぴひちの言語の呼び出しきぐぉたごすぐぅたえぉぎいぅじぅいは，きぐぉ実装に依っては，これらのいずれの呼び出しとも異なることがある．これは最も有益な情報であり，内部表現が異なっていて，オリジナルのコンストラクタの呼び出しシーケンスを記憶しておくという実装の制約があったとしても，十分な妥当性がある．

〶

デコードされた情報ではデータ型の複製も管理される．このことは，定義済みのデータ型と定義済みのデータ型の複製を区別する必要がある場合に重要である．前者は解放できない定数オブジェクトであり，後者は解放できる派生データ型である． （根拠の終わり）

〵

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

以下の表では，っはねぢどのづひに返される値を左側に，それに対応する呼び出しを右側に示す．
っはねぢどのづひがきぐぉたぃくきあぉぎぅげたぎぁきぅいの場合，つちぴちぴべばづは 定義済みの名前付きデータ型となる．
アドレス引数を持つ廃止された呼び出しの場合，呼び出しで整数の引数を使用したか，アドレスサイズの引数を使用したかを区別する必要がでてくる．例えば，とぶづっぴはひには〲つの結合子， きぐぉたぃくきあぉぎぅげたえざぅぃごくげたぉぎごぅぇぅげときぐぉたぃくきあぉぎぅげたえざぅぃごくげがある．
前者はうはひぴひちの言語からのきぐぉ〭〱呼び出しの場合に使用され，後者はぃ言語またはぃ〫〫言
語からのきぐぉ〭〱呼び出しの場合に使用される．しかし， きぐぉたぁいいげぅここたかぉぎい 〽
きぐぉたぉぎごぅぇぅげたかぉぎい （つ ま り， 整 数 の 引 数 と ア ド レ ス サ イ ズ の 引 数 が 同 じ で あ る 場合）と な る シ ス テ ム で は， うはひぴひちの言 語 か ら のきぐぉたごすぐぅたえざぅぃごくげの 呼 び 出 し に よって構成されたデータ型に対し結合子きぐぉたぃくきあぉぎぅげたえざぅぃごくげが返されることがある． 同様に，うはひぴひちの言語からのきぐぉたごすぐぅたえぉぎいぅじぅいの呼び出しによって構成されたデータ型に対しきぐぉたぃくきあぉぎぅげたえぉぎいぅじぅいが返されることがあり，うはひぴひちの言語からのきぐぉたごすぐぅたこごげさぃごの呼び出しによって構成されたデータ型に対しきぐぉたぃくきあぉぎぅげたこごげさぃごが返されることがある． このようなシステムでは，アドレスサ
イズの引数をとるコンストラクタと整数の引数をとるコンストラクタは同じであるため，区別する必要はない．望ましい呼び出しは全て，アドレスサイズの引数を使用するため，
この場合は〲つも結合子は必要ない．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型

〱〱〸
〱
〲
〳
〴
〵
〶
〷

きぐぉたぃくきあぉぎぅげたぎぁきぅいきぐぉたぃくきあぉぎぅげたいさぐ
きぐぉたぃくきあぉぎぅげたぃくぎごぉぇさくさこ
きぐぉたぃくきあぉぎぅげたざぅぃごくげきぐぉたぃくきあぉぎぅげたえざぅぃごくげたぉぎごぅぇぅげきぐぉたぃくきあぉぎぅげたえざぅぃごくげ

〸
〹
〱〰
〱〱
〱〲

きぐぉたぃくきあぉぎぅげたぉぎいぅじぅいきぐぉたぃくきあぉぎぅげたえぉぎいぅじぅいたぉぎごぅぇぅげきぐぉたぃくきあぉぎぅげたえぉぎいぅじぅい

〱〳
〱〴
〱〵
〱〶
〱〷

きぐぉたぃくきあぉぎぅげたぉぎいぅじぅいたあがくぃか
きぐぉたぃくきあぉぎぅげたこごげさぃごたぉぎごぅぇぅげきぐぉたぃくきあぉぎぅげたこごげさぃご

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

きぐぉたぃくきあぉぎぅげたこさあぁげげぁす
きぐぉたぃくきあぉぎぅげたいぁげげぁす
きぐぉたぃくきあぉぎぅげたう〹〰たげぅぁが
きぐぉたぃくきあぉぎぅげたう〹〰たぃくきぐがぅじ
きぐぉたぃくきあぉぎぅげたう〹〰たぉぎごぅぇぅげきぐぉたぃくきあぉぎぅげたげぅこぉずぅい

定義済みの名前付きデータ型
きぐぉたごすぐぅたいさぐきぐぉたごすぐぅたぃくぎごぉぇさくさこ
きぐぉたごすぐぅたざぅぃごくげきぐぉたごすぐぅたえざぅぃごくげ （うはひぴひちの言語から）きぐぉたごすぐぅたえざぅぃごくげ （ぃ言語〯ぃ〫〫言語，
うはひぴひちの言語の一部から）または きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげきぐぉたごすぐぅたぉぎいぅじぅいきぐぉたごすぐぅたえぉぎいぅじぅい （うはひぴひちの言語から）きぐぉたごすぐぅたえぉぎいぅじぅい （ぃ言語〯ぃ〫〫言語，
うはひぴひちの言語の一部から）または きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅいきぐぉたごすぐぅたぃげぅぁごぅたぉぎいぅじぅいたあがくぃか
きぐぉたごすぐぅたこごげさぃご （うはひぴひちの言語から）きぐぉたごすぐぅたこごげさぃご （ぃ言語〯ぃ〫〫言語，
うはひぴひちの言語の一部から）または きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご
きぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁす
きぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁす
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじ
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげきぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅい

〲〵
〲〶
〲〷
〲〸

表 〴〮〱〺 きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅから返されるっはねぢどのづひ値

〲〹
〳〰
〳〱
〳〲
〳〳

根拠 オリジナルの呼び出しの作成時にアドレス情報が切り詰められた可能性があるかどうかを知ることが重要である．いくつかのルーチンではうはひぴひちの言語からの廃止された呼び出しが，デフォルトのぉぎごぅぇぅげのサイズがアドレスのサイズよりも小さい場合に，切り詰めの対象となることがあった． （根拠の終わり）

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

つちぴちぴべばづの作成の呼び出しで使用された実際の引数は，以下の呼び出しから取得することができる．

〴〮〱〮 派生データ型〱〱〹

きぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこ〨つちぴちぴべばづ〬 ねちへたどのぴづでづひび〬 ねちへたちつつひづびびづび〬 ねちへたつちぴちぴべばづび〬 ちひ〭ひちべたはてたどのぴづでづひび〬 ちひひちべたはてたちつつひづびびづび〬 ちひひちべたはてたつちぴちぴべばづび〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

つちぴちぴべばづ
ねちへたどのぴづでづひび
ねちへたちつつひづびびづび
ねちへたつちぴちぴべばづび
ちひひちべたはてたどのぴづでづひび

アクセスするデータ型（ハンドル）
ちひひちべたはてたどのぴづでづひび内の要素数（非負の整数型）

〱
〲
〳
〴
〵

ちひひちべたはてたちつつひづびびづび内の要素数（非負の整数型）
ちひひちべたはてたつちぴちぴべばづび内の要素数（非負の整数型）
つちぴちぴべばづの構成に使用された整数引数を含む（整数
型の配列）

〶
〷
〸
〹

くさご

ちひひちべたはてたちつつひづびびづび

つちぴちぴべばづの 構 成 に 使 用 さ れ た ア ド レ ス 引 数 を 含 む（整数型の配列）〱〰

くさご

ちひひちべたはてたつちぴちぴべばづび

つちぴちぴべばづの 構 成 に 使 用 さ れ た デ ー タ 型 引 数 を 含 む（ハンドルの配列）〱〲

どのぴ きぐぉたごべばづたでづぴたっはのぴづのぴび〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ ねちへたどのぴづでづひび〬
どのぴ ねちへたちつつひづびびづび〬 どのぴ ねちへたつちぴちぴべばづび〬 どのぴ ちひひちべたはてたどのぴづでづひびせそ〬
きぐぉたぁどのぴ ちひひちべたはてたちつつひづびびづびせそ〬 きぐぉたいちぴちぴべばづ ちひひちべたはてたつちぴちぴべばづびせそ〩
きぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこ〨いぁごぁごすぐぅ〬 きぁじたぉぎごぅぇぅげこ〬 きぁじたぁいいげぅここぅこ〬 きぁじたいぁごぁごすぐぅこ〬
ぁげげぁすたくうたぉぎごぅぇぅげこ〬 ぁげげぁすたくうたぁいいげぅここぅこ〬 ぁげげぁすたくうたいぁごぁごすぐぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 きぁじたぉぎごぅぇぅげこ〬 きぁじたぁいいげぅここぅこ〬 きぁじたいぁごぁごすぐぅこ〬
ぁげげぁすたくうたぉぎごぅぇぅげこ〨〪〩〬 ぁげげぁすたくうたいぁごぁごすぐぅこ〨〪〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁげげぁすたくうたぁいいげぅここぅこ〨〪〩{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺ぇづぴたっはのぴづのぴび〨どのぴ ねちへたどのぴづでづひび〬 どのぴ ねちへたちつつひづびびづび〬
どのぴ ねちへたつちぴちぴべばづび〬 どのぴ ちひひちべたはてたどのぴづでづひびせそ〬
きぐぉ〺〺ぁどのぴ ちひひちべたはてたちつつひづびびづびせそ〬
きぐぉ〺〺いちぴちぴべばづ ちひひちべたはてたつちぴちぴべばづびせそ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
つちぴちぴべばづは定義済みの名前なしのデータ型，または派生データ型でなければならない．
つちぴちぴべばづが定義済みの名前付きのデータ型であったならば，その呼び出しは誤りである．
ねちへたどのぴづでづひび，ねちへたちつつひづびびづび，およびねちへたつちぴちぴべばづびに渡される値はそれぞれ，同じ
つちぴちぴべばづ引数に対する きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅ呼び出しで のふねたどのぴづでづひび，のふねたちつつひづびびづび，およびのふねたつちぴちぴべばづびに返される値と少なくとも同じ大きさでなければな
らない．

〱〱

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

根拠 引数ねちへたどのぴづでづひび，ねちへたちつつひづびびづび，ねちへたつちぴちぴべばづびは，呼び出しでエラーチェックに使用できる． （根拠の終わり）

〳〴
〳〵
〳〶

ちひひちべたはてたつちぴちぴべばづびに返されるデータ型は，オリジナルのコンストラクタ呼び出しで使用されたデータ型と等価なデータ型オブジェクトのハンドルである．これらが派生データ型である場合，返されるデータ型は新しいデータ型オブジェクトで，ユーザが責任を持ってきぐぉたごすぐぅたうげぅぅを使用してこれらのデータ型を解放する必要がある．これらが定義済みのデータ型である場合，返されるデータ型はその（定数の）定義済みのデータ型で，解放することはできない．
返される派生データ型のコミット状態は未定義である．つまり，データ型がコミットされていることもあれば，されていないこともある．さらに，返されるデータ型の属性の内容も未定義である．
きぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこはきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが，

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〲〰
〱
〲
〳
〴
〵
〶
〷
〸
〹

第 〴〮 データ型

きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげ，またはきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじ（定義済みの名前なしデータ型）を使用して構成されたつちぴちぴべばづ引数を使用して呼び出すことができる．この場合，空のちひひちべたはてたつちぴちぴべばづびが返される．
根拠 データ型の同等性の定義では，等価な定義済みデータ型どうしが等しいことを暗に意味する．同じ名前付き定義済みデータ型間で同じハンドルを使用するよう規定することで，使用されているデータ型を判断するために〽〽または〮ぅけ〮比較演
算子を使用することができる． （根拠の終わり）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

実装者へのアドバイス ちひひちべたはてたつちぴちぴべばづび で返されるデータ型は，ユーザからみて，
あたかも各データ型が型コンストラクタの呼び出しで使用されたデータ型の等価なコピーとみなせる必要がある． ちひひちべたはてたつちぴちぴべばづび用のデータ型に対し，新しくデータ型を生成するのか，それとも参照カウント機能などの別の機能を介して提供するのか，意味論が保持されている限り，実装に任されている．（実装者へのアドバ
イス終わり）

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

根拠 返されるデータ型のコミット状態と属性は，意図的にあいまいなままにされている．オリジナルの構成で使用されてたデータ型は，コンストラクタ呼び出しで使用されてから以降に変更されている可能性がある．属性が追加されたり，削除されたり，または修正されたりした可能性や，そのデータ型がコミットされた可能性もある．意味論上，これらの変更を追跡しない参照カウント実装が可能である．（根拠の終わり）

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

廃 止 さ れ た デ ー タ 型 コ ン ス ト ラ ク タ の 呼 び 出 し で， うはひぴひちの言 語 の ア ド レ ス 引 数はぉぎごぅぇぅげ型である．望ましい呼び出しでは，アドレス引数は，ぉぎごぅぇぅげ〨かぉぎい〽
きぐぉたぁいいげぅここたかぉぎい〩型の引数である．呼び出しきぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこはぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩型の引数に全て，アドレスを返す．このことは，廃止された呼び出しを使用した場合でも該当する．そのため，返される値の位置はぃ言語の呼び出し形式によって返されるものと同様に考えることができる．アドレスに関与する廃止された呼び出しのデータ型コンストラクタに対応する望ましい呼び出しを検査することによって確認することもできる．
根拠 全てのアドレス引数をちひひちべたはてたちつつひづびびづび引数に返すことにより，ぃ言語お
よびうはひぴひちの言語でのつちぴちぴべばづのデコードの結果を同じ引数に渡すことができる．
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩型の整数が，古いきぐぉ〭〱呼び出しにおけるデー
タ型構成で使用されたぉぎごぅぇぅげ引数と少なくとも同じ大きさであることが前提であれば，情報の損失は発生しない．（根拠の終わり）
以下では，つちぴちぴべばづに使われたデータ型コンストラクタに依存して，返される配列の各エントリにどんな値が置かれるかを定義する．また，以下ではそれらの配列の必要となるサイズも規定する．そのサイズは実際には，きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅによって
返される値である．うはひぴひちの言語で，次の呼び出しがなされたと仮定し，説明を行う．

〴〮〱〮 派生データ型〡〱〲〱

ぐぁげぁきぅごぅげ 〨がぁげぇぅ 〽 〱〰〰〰〩
ぉぎごぅぇぅげ ごすぐぅ〬 ぎぉ〬 ぎぁ〬 ぎい〬 ぃくきあぉぎぅげ〬 ぉ〨がぁげぇぅ〩〬 い〨がぁげぇぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁ〨がぁげぇぅ〩
ぃくぎこごげさぃご いぁごぁごすぐぅ ごすぐぅ 〨ぎくご こえくしぎ〩
ぃぁがが きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅ〨ごすぐぅ〬 ぎぉ〬 ぎぁ〬 ぎい〬 ぃくきあぉぎぅげ〬 ぉぅげげくげ〩ぉう 〨〨ぎぉ 〮ぇご〮 がぁげぇぅ〩 〮くげ〮 〨ぎぁ 〮ぇご〮 がぁげぇぅ〩 〮くげ〮 〨ぎい 〮ぇご〮 がぁげぇぅ〩〩 ごえぅぎ
しげぉごぅ 〨〪〬 〪〩 〢ぎぉ〬 ぎぁ〬 くげ ぎい 〽 〢〬 ぎぉ〬 ぎぁ〬 ぎい〬 〦〢 げぅごさげぎぅい あす きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅ ぉこ がぁげぇぅげ ごえぁぎ がぁげぇぅ 〽 〢〬 がぁげぇぅ
ぃぁがが きぐぉたぁあくげご〨きぐぉたぃくききたしくげがい〬 〹〹〬 ぉぅげげくげ〩ぅぎいぉう
ぃぁがが きぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこ〨ごすぐぅ〬 ぎぉ〬 ぎぁ〬 ぎい〬 ぉ〬 ぁ〬 い〬 ぉぅげげくげ〩

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

ぃ言語でこれに類似する呼び出しは以下のとおりである．
〣つづてどのづ がぁげぇぅ 〱〰〰〰
どのぴ のど〬 のち〬 のつ〬 っはねぢどのづひ〬 どせがぁげぇぅそ〻
きぐぉたぁどのぴ ちせがぁげぇぅそ〻
きぐぉたいちぴちぴべばづ ぴべばづ〬 つせがぁげぇぅそ〻〪〯 っはのびぴひふっぴ つちぴちぴべばづ ぴべばづ 〨のはぴ びとはぷの〩 〪〯きぐぉたごべばづたでづぴたづのぶづぬはばづ〨ぴべばづ〬 〦のど〬 〦のち〬 〦のつ〬 〦っはねぢどのづひ〩〻
どて 〨〨のど 〾 がぁげぇぅ〩 ぼぼ 〨のち 〾 がぁげぇぅ〩 ぼぼ 〨のつ 〾 がぁげぇぅ〩〩 ほてばひどのぴて〨びぴつづひひ〬 〢のど〬 のち〬 はひ のつ 〽 〥つ 〥つ 〥つ ひづぴふひのづつ ぢべ 〢〬 のど〬 のち〬 のつ〩〻てばひどのぴて〨びぴつづひひ〬 〢きぐぉたごべばづたでづぴたづのぶづぬはばづ どび ぬちひでづひ ぴとちの がぁげぇぅ 〽 〥つぜの〢〬がぁげぇぅ〩〻
きぐぉたぁぢはひぴ〨きぐぉたぃくききたしくげがい〬 〹〹〩〻
ぽ〻きぐぉたごべばづたでづぴたっはのぴづのぴび〨ぴべばづ〬 のど〬 のち〬 のつ〬 ど〬 ち〬 つ〩〻ぃ〫〫言語のコードは上記のぃ言語のコードとに類似しており，同じ値が返される．
以下の説明では，小文字の名前の引数を使用する．
結合子がきぐぉたぃくきあぉぎぅげたぎぁきぅいの場合， きぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこ呼び出しは誤りである．
結合子がきぐぉたぃくきあぉぎぅげたいさぐの場合，

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

ぃはのびぴひふっぴはひ ちひでふねづのぴ
はぬつぴべばづぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

〳〰

つせ〰そ

い〨〱〩

〳〱

となり，のど 〽 〰，のち 〽 〰，のつ 〽 〱となる．
結合子がきぐぉたぃくきあぉぎぅげたぃくぎごぉぇさくさこの場合，〳〲

ぃはのびぴひふっぴはひ ちひでふねづのぴ

〳〵

っはふのぴ
はぬつぴべばづ〳〳〳〴ぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

どせ〰そ
つせ〰そ

ぉ〨〱〩
い〨〱〩

となり，のど 〽 〱，のち 〽 〰，のつ 〽 〱となる．
結合子がきぐぉたぃくきあぉぎぅげたざぅぃごくげの場合，

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

ぃはのびぴひふっぴはひ ちひでふねづのぴ
っはふのぴ
ぢぬはっにぬづのでぴとびぴひどつづはぬつぴべばづぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

どせ〰そ
どせ〱そ
どせ〲そ
つせ〰そ

ぉ〨〱〩
ぉ〨〲〩
ぉ〨〳〩
い〨〱〩

となり，のど 〽 〳，のち 〽 〰，のつ 〽 〱となる．

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型〱〲〲〱

結合子がきぐぉたぃくきあぉぎぅげたえざぅぃごくげたぉぎごぅぇぅげまたは きぐぉたぃくきあぉぎぅげたえざぅぃごくげの場合，

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

ぃはのびぴひふっぴはひ ちひでふねづのぴ
っはふのぴ
ぢぬはっにぬづのでぴとびぴひどつづはぬつぴべばづぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

どせ〰そ
どせ〱そ
ちせ〰そ
つせ〰そ

ぉ〨〱〩
ぉ〨〲〩
ぁ〨〱〩
い〨〱〩

となり，のど 〽 〲，のち 〽 〱，のつ 〽 〱となる．
結合子がきぐぉたぃくきあぉぎぅげたぉぎいぅじぅいの場合，

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

ぃはのびぴひふっぴはひ ちひでふねづのぴぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

っはふのぴ
ちひひちべたはてたぢぬはっにぬづのでぴとび
ちひひちべたはてたつどびばぬちっづねづのぴび
はぬつぴべばづ

どせ〰そ
どせ〱そ ぴは どせどせ〰そそ
どせどせ〰そ〫〱そ ぴは どせ〲〪どせ〰そそ
つせ〰そ

ぉ〨〱〩
ぉ〨〲〩 ぴは ぉ〨ぉ〨〱〩〫〱〩
ぉ〨ぉ〨〱〩〫〲〩 ぴは ぉ〨〲〪ぉ〨〱〩〫〱〩い〨〱〩となり，のど 〽 〲〪っはふのぴ〫〱，のち 〽 〰，のつ 〽 〱となる．
結合子がきぐぉたぃくきあぉぎぅげたえぉぎいぅじぅいたぉぎごぅぇぅげまたは きぐぉたぃくきあぉぎぅげたえぉぎいぅじぅいの場合，

〲〱
〲〲
〲〳

ぃはのびぴひふっぴはひ ちひでふねづのぴぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

〲〴

っはふのぴ
ちひひちべたはてたぢぬはっにぬづのでぴとび
ちひひちべたはてたつどびばぬちっづねづのぴび
はぬつぴべばづ

どせ〰そ
どせ〱そ ぴは どせどせ〰そそ
ちせ〰そ ぴは ちせどせ〰そ〭〱そ
つせ〰そ

ぉ〨〱〩
ぉ〨〲〩 ぴは ぉ〨ぉ〨〱〩〫〱〩ぁ〨〱〩 ぴは ぁ〨ぉ〨〱〩〩
い〨〱〩

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

となり，のど 〽 っはふのぴ〫〱，のち 〽 っはふのぴ，のつ 〽 〱となる．
結合子がきぐぉたぃくきあぉぎぅげたぉぎいぅじぅいたあがくぃかの場合，〳〲ぃはのびぴひふっぴはひ ちひでふねづのぴぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

〳〳

っはふのぴ
ぢぬはっにぬづのでぴと
ちひひちべたはてたつどびばぬちっづねづのぴび
はぬつぴべばづ

どせ〰そ
どせ〱そ
どせ〲そ ぴは どせどせ〰そ〫〱そ
つせ〰そ

ぉ〨〱〩
ぉ〨〲〩
ぉ〨〳〩 ぴは ぉ〨ぉ〨〱〩〫〲〩
い〨〱〩

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

となり，のど 〽 っはふのぴ〫〲，のち 〽 〰，のつ 〽 〱となる．
結合子がきぐぉたぃくきあぉぎぅげたこごげさぃごたぉぎごぅぇぅげまたは きぐぉたぃくきあぉぎぅげたこごげさぃごの場合，〴〱ぃはのびぴひふっぴはひ ちひでふねづのぴぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

〴〲

っはふのぴ
ちひひちべたはてたぢぬはっにぬづのでぴとび
ちひひちべたはてたつどびばぬちっづねづのぴび
ちひひちべたはてたぴべばづび

どせ〰そ
どせ〱そ ぴは どせどせ〰そそ
ちせ〰そ ぴは ちせどせ〰そ〭〱そ
つせ〰そ ぴは つせどせ〰そ〭〱そぉ〨〱〩ぉ〨〲〩 ぴは ぉ〨ぉ〨〱〩〫〱〩ぁ〨〱〩 ぴは ぁ〨ぉ〨〱〩〩い〨〱〩 ぴは い〨ぉ〨〱〩〩

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

となり，のど 〽 っはふのぴ〫〱，のち 〽 っはふのぴ，のつ 〽 っはふのぴとなる．

〴〮〱〮 派生データ型〱〲〳

結合子がきぐぉたぃくきあぉぎぅげたこさあぁげげぁすの場合，〱〲ぃはのびぴひふっぴはひ ちひでふねづのぴぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはののつどねび
ちひひちべたはてたびどぺづび
ちひひちべたはてたびふぢびどぺづび
ちひひちべたはてたびぴちひぴび
はひつづひ
はぬつぴべばづ

どせ〰そ
どせ〱そ ぴは どせどせ〰そそ
どせどせ〰そ〫〱そ ぴは どせ〲〪どせ〰そそ
どせ〲〪どせ〰そ〫〱そ ぴは どせ〳〪どせ〰そそ
どせ〳〪どせ〰そ〫〱そ
つせ〰そ

ぉ〨〱〩
ぉ〨〲〩 ぴは ぉ〨ぉ〨〱〩〫〱〩
ぉ〨ぉ〨〱〩〫〲〩 ぴは ぉ〨〲〪ぉ〨〱〩〫〱〩
ぉ〨〲〪ぉ〨〱〩〫〲〩 ぴは ぉ〨〳〪ぉ〨〱〩〫〱〩
ぉ〨〳〪ぉ〨〱〩〫〲そ
い〨〱〩

びどぺづ
ひちのに
のつどねび
ちひひちべたはてたでびどぺづび
ちひひちべたはてたつどびぴひどぢび
ちひひちべたはてたつちひでび
ちひひちべたはてたばびどぺづび
はひつづひ
はぬつぴべばづ

〴
〵
〶
〷
〸
〹
〱〰
〱〱

となり，のど 〽 〳〪のつどねび〫〲，のち 〽 〰，のつ 〽 〱となる．
結合子がきぐぉたぃくきあぉぎぅげたいぁげげぁすの場合，ぃはのびぴひふっぴはひ ちひでふねづのぴ

〳

〱〲
〱〳

ぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

どせ〰そ
どせ〱そ
どせ〲そ
どせ〳そ ぴは どせどせ〲そ〫〲そ
どせどせ〲そ〫〳そ ぴは どせ〲〪どせ〲そ〫〲そどせ〲〪どせ〲そ〫〳そ ぴは どせ〳〪どせ〲そ〫〲そどせ〳〪どせ〲そ〫〳そ ぴは どせ〴〪どせ〲そ〫〲そどせ〴〪どせ〲そ〫〳そ
つせ〰そ

ぉ〨〱〩
ぉ〨〲〩
ぉ〨〳〩
ぉ〨〴〩 ぴは ぉ〨ぉ〨〳〩〫〳〩
ぉ〨ぉ〨〳〩〫〴〩 ぴは ぉ〨〲〪ぉ〨〳〩〫〳〩
ぉ〨〲〪ぉ〨〳〩〫〴〩 ぴは ぉ〨〳〪ぉ〨〳〩〫〳〩
ぉ〨〳〪ぉ〨〳〩〫〴〩 ぴは ぉ〨〴〪ぉ〨〳〩〫〳〩
ぉ〨〴〪ぉ〨〳〩〫〴〩
い〨〱〩

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

となり，のど 〽 〴〪のつどねび〫〴，のち 〽 〰，のつ 〽 〱となる．
結合子がきぐぉたぃくきあぉぎぅげたう〹〰たげぅぁがの場合，〲〶ぃはのびぴひふっぴはひ ちひでふねづのぴ

〲〹

ば
ひ

ぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

どせ〰そ
どせ〱そ

ぉ〨〱〩
ぉ〨〲〩

となり，のど 〽 〲，のち 〽 〰，のつ 〽 〰となる．
結合子がきぐぉたぃくきあぉぎぅげたう〹〰たぃくきぐがぅじの場合，

〲〷
〲〸

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

ぃはのびぴひふっぴはひ ちひでふねづのぴばひぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

どせ〰そ
どせ〱そ

ぉ〨〱〩
ぉ〨〲〩

ひ

〳〸

〴〰
〴〱

ぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

どせ〰そ

ぉ〨〱〩

となり，のど 〽 〱，のち 〽 〰，のつ 〽 〰となる．
結合子がきぐぉたぃくきあぉぎぅげたげぅこぉずぅいの場合，〳〷〳〹となり，のど 〽 〲，のち 〽 〰，のつ 〽 〰となる．
結合子がきぐぉたぃくきあぉぎぅげたう〹〰たぉぎごぅぇぅげの場合，ぃはのびぴひふっぴはひ ちひでふねづのぴ

〳〶

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型〱〲〴〱

ぃはのびぴひふっぴはひ ちひでふねづのぴ〲

ぬぢ
づへぴづのぴはぬつぴべばづ〳〴〵〶ぃ 〦 ぃ〫〫 ぬはっちぴどはの

うはひぴひちの ぬはっちぴどはの

ちせ〰そ
ちせ〱そ
つせ〰そ

ぁ〨〱〩
ぁ〨〲〩
い〨〱〩

となり，のど 〽 〰，のち 〽 〲，のつ 〽 〱となる．

〷〸〹

4.1.14 例
以下の例で派生データ型の使い方を示す．

〱〰
〱〱
〱〲
〱〳

例 4.13 〳次元配列の一部を送受信する．
げぅぁが ち〨〱〰〰〬〱〰〰〬〱〰〰〩〬 づ〨〹〬〹〬〹〩
ぉぎごぅぇぅげ はのづびぬどっづ〬 ぴぷはびぬどっづ〬 ぴとひづづびぬどっづ〬 びどぺづはてひづちぬ〬 ねべひちのに〬 どづひひぉぎごぅぇぅげ びぴちぴふび〨きぐぉたこごぁごさこたこぉずぅ〩

〱〴
〱〵
〱〶
〱〷
〱〸

ぃ
ぃ

づへぴひちっぴ ぴとづ びづっぴどはの ち〨〱〺〱〷〺〲〬 〳〺〱〱〬 〲〺〱〰〩
ちのつ びぴはひづ どぴ どの づ〨〺〬〺〬〺〩〮〱〹

ぃぁがが きぐぉたぃくききたげぁぎか〨きぐぉたぃくききたしくげがい〬 ねべひちのに〬 どづひひ〩〲〰
〲〱

ぃぁがが きぐぉたごすぐぅたぅじごぅぎご〨 きぐぉたげぅぁが〬 びどぺづはてひづちぬ〬 どづひひ〩

〲〲
〲〳

ぃ

っひづちぴづ つちぴちぴべばづ てはひ ち 〱い びづっぴどはのぃぁがが きぐぉたごすぐぅたざぅぃごくげ〨 〹〬 〱〬 〲〬 きぐぉたげぅぁが〬 はのづびぬどっづ〬 どづひひ〩ぃ

っひづちぴづ つちぴちぴべばづ てはひ ち 〲い びづっぴどはのぃぁがが きぐぉたごすぐぅたえざぅぃごくげ〨〹〬 〱〬 〱〰〰〪びどぺづはてひづちぬ〬 はのづびぬどっづ〬 ぴぷはびぬどっづ〬 どづひひ〩ぃ

っひづちぴづ つちぴちぴべばづ てはひ ぴとづ づのぴどひづ びづっぴどはのぃぁがが きぐぉたごすぐぅたえざぅぃごくげ〨 〹〬 〱〬 〱〰〰〪〱〰〰〪びどぺづはてひづちぬ〬 ぴぷはびぬどっづ〬
ぴとひづづびぬどっづ〬 どづひひ〩

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

ぃぁがが きぐぉたごすぐぅたぃくききぉご〨 ぴとひづづびぬどっづ〬 どづひひ〩
ぃぁがが きぐぉたこぅぎいげぅぃざ〨ち〨〱〬〳〬〲〩〬 〱〬 ぴとひづづびぬどっづ〬 ねべひちのに〬 〰〬 づ〬 〹〪〹〪〹〬
きぐぉたげぅぁが〬 ねべひちのに〬 〰〬 きぐぉたぃくききたしくげがい〬 びぴちぴふび〬 どづひひ〩

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

例 4.14 行列の下三角部分を〨厳密に〩コピーする．

〳〷

げぅぁが ち〨〱〰〰〬〱〰〰〩〬 ぢ〨〱〰〰〬〱〰〰〩
ぉぎごぅぇぅげ つどびば〨〱〰〰〩〬 ぢぬはっにぬづの〨〱〰〰〩〬 ぬぴべばづ〬 ねべひちのに〬 どづひひぉぎごぅぇぅげ びぴちぴふび〨きぐぉたこごぁごさこたこぉずぅ〩

〳〸
〳〹
〴〰
〴〱
〴〲

ぃ
ぃ

〴〳

っはばべ ぬはぷづひ ぴひどちのでふぬちひ ばちひぴ はて ちひひちべ ち
はのぴは ぬはぷづひ ぴひどちのでふぬちひ ばちひぴ はて ちひひちべ ぢぃぁがが きぐぉたぃくききたげぁぎか〨きぐぉたぃくききたしくげがい〬 ねべひちのに〬 どづひひ〩

〴〴
〴〵
〴〶
〴〷
〴〸

ぃ

っはねばふぴづ びぴちひぴ ちのつ びどぺづ はて づちっと っはぬふねの
いく ど〽〱〬 〱〰〰
つどびば〨ど〩 〽 〱〰〰〪〨ど〭〱〩 〫 ど
ぢぬはっにぬづの〨ど〩 〽 〱〰〰〭どぅぎい いく〴〮〱〮 派生データ型

〱〲〵
〱

ぃ

っひづちぴづ つちぴちぴべばづ てはひ ぬはぷづひ ぴひどちのでふぬちひ ばちひぴぃぁがが きぐぉたごすぐぅたぉぎいぅじぅい〨 〱〰〰〬 ぢぬはっにぬづの〬 つどびば〬 きぐぉたげぅぁが〬 ぬぴべばづ〬 どづひひ〩
ぃぁがが きぐぉたごすぐぅたぃくききぉご〨ぬぴべばづ〬 どづひひ〩
ぃぁがが きぐぉたこぅぎいげぅぃざ〨 ち〬 〱〬 ぬぴべばづ〬 ねべひちのに〬 〰〬 ぢ〬 〱〬ぬぴべばづ〬 ねべひちのに〬 〰〬 きぐぉたぃくききたしくげがい〬 びぴちぴふび〬 どづひひ〩

〲
〳
〴
〵
〶
〷
〸

例 4.15 行列を転置する．
げぅぁが ち〨〱〰〰〬〱〰〰〩〬 ぢ〨〱〰〰〬〱〰〰〩
ぉぎごぅぇぅげ ひはぷ〬 へばはびづ〬 びどぺづはてひづちぬ〬 ねべひちのに〬 どづひひぉぎごぅぇぅげ びぴちぴふび〨きぐぉたこごぁごさこたこぉずぅ〩

〹
〱〰
〱〱
〱〲
〱〳
〱〴

ぃ

ぴひちのびばはびづ ねちぴひどへ ち はのぴは ぢぃぁがが きぐぉたぃくききたげぁぎか〨きぐぉたぃくききたしくげがい〬 ねべひちのに〬 どづひひ〩

〱〵
〱〶
〱〷

ぃぁがが きぐぉたごすぐぅたぅじごぅぎご〨 きぐぉたげぅぁが〬 びどぺづはてひづちぬ〬 どづひひ〩ぃ

っひづちぴづ つちぴちぴべばづ てはひ はのづ ひはぷぃぁがが きぐぉたごすぐぅたざぅぃごくげ〨 〱〰〰〬 〱〬 〱〰〰〬 きぐぉたげぅぁが〬 ひはぷ〬 どづひひ〩

〱〸
〱〹
〲〰
〲〱

ぃ

っひづちぴづ つちぴちぴべばづ てはひ ねちぴひどへ どの ひはぷ〭ねちなはひ はひつづひぃぁがが きぐぉたごすぐぅたえざぅぃごくげ〨 〱〰〰〬 〱〬 びどぺづはてひづちぬ〬 ひはぷ〬 へばはびづ〬 どづひひ〩
ぃぁがが きぐぉたごすぐぅたぃくききぉご〨 へばはびづ〬 どづひひ〩

〲〲
〲〳
〲〴
〲〵

ぃ

びづのつ ねちぴひどへ どの ひはぷ〭ねちなはひ はひつづひ ちのつ ひづっづどぶづ どの っはぬふねの ねちなはひ はひつづひぃぁがが きぐぉたこぅぎいげぅぃざ〨 ち〬 〱〬 へばはびづ〬 ねべひちのに〬 〰〬 ぢ〬 〱〰〰〪〱〰〰〬
きぐぉたげぅぁが〬 ねべひちのに〬 〰〬 きぐぉたぃくききたしくげがい〬 びぴちぴふび〬 どづひひ〩

〲〶
〲〷
〲〸
〲〹
〳〰

例 4.16 転置の問題への別のアプローチ：〳〱〳〲

げぅぁが ち〨〱〰〰〬〱〰〰〩〬 ぢ〨〱〰〰〬〱〰〰〩
ぉぎごぅぇぅげ つどびば〨〲〩〬 ぢぬはっにぬづの〨〲〩〬 ぴべばづ〨〲〩〬 ひはぷ〬 ひはぷ〱〬 びどぺづはてひづちぬぉぎごぅぇぅげ ねべひちのに〬 どづひひぉぎごぅぇぅげ びぴちぴふび〨きぐぉたこごぁごさこたこぉずぅ〩

〳〳
〳〴
〳〵
〳〶

ぃぁがが きぐぉたぃくききたげぁぎか〨きぐぉたぃくききたしくげがい〬 ねべひちのに〬 どづひひ〩ぃ

ぴひちのびばはびづ ねちぴひどへ ち はのぴは ぢぃぁがが きぐぉたごすぐぅたぅじごぅぎご〨 きぐぉたげぅぁが〬 びどぺづはてひづちぬ〬 どづひひ〩

〳〷
〳〸
〳〹
〴〰
〴〱

ぃ

っひづちぴづ つちぴちぴべばづ てはひ はのづ ひはぷぃぁがが きぐぉたごすぐぅたざぅぃごくげ〨 〱〰〰〬 〱〬 〱〰〰〬 きぐぉたげぅぁが〬 ひはぷ〬 どづひひ〩ぃ

っひづちぴづ つちぴちぴべばづ てはひ はのづ ひはぷ〬 ぷどぴと ぴとづ づへぴづのぴ はて はのづ ひづちぬ のふねぢづひ
つどびば〨〱〩 〽 〰
つどびば〨〲〩 〽 びどぺづはてひづちぬ
ぴべばづ〨〱〩 〽 ひはぷ
ぴべばづ〨〲〩 〽 きぐぉたさあ
ぢぬはっにぬづの〨〱〩 〽 〱

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型〱〲〶〱

ぢぬはっにぬづの〨〲〩 〽 〱ぃぁがが きぐぉたごすぐぅたこごげさぃご〨 〲〬 ぢぬはっにぬづの〬 つどびば〬 ぴべばづ〬 ひはぷ〱〬 どづひひ〩〲〳

ぃぁがが きぐぉたごすぐぅたぃくききぉご〨 ひはぷ〱〬 どづひひ〩

〴
〵
〶
〷

ぃ

びづのつ 〱〰〰 ひはぷび ちのつ ひづっづどぶづ どの っはぬふねの ねちなはひ はひつづひぃぁがが きぐぉたこぅぎいげぅぃざ〨 ち〬 〱〰〰〬 ひはぷ〱〬 ねべひちのに〬 〰〬 ぢ〬 〱〰〰〪〱〰〰〬
きぐぉたげぅぁが〬 ねべひちのに〬 〰〬 きぐぉたぃくききたしくげがい〬 びぴちぴふび〬 どづひひ〩

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

例 4.17 構造体の配列を操作する．
びぴひふっぴ ぐちひぴびぴひふっぴ
ほどのぴ
っぬちびび〻
つはふぢぬづ つせ〶そ〻
っとちひ
ぢせ〷そ〻
ぽ〻

〪〯 ばちひぴどっぬづ っぬちびび 〪〪〯〯 ばちひぴどっぬづ っははひつどのちぴづび 〪〪〯〯 びはねづ ちつつどぴどはのちぬ どのてはひねちぴどはの 〪〯びぴひふっぴ ぐちひぴびぴひふっぴ

ばちひぴどっぬづせ〱〰〰〰そ〻

〱〷
〱〸
〱〹
〲〰

どのぴ
きぐぉたぃはねねど〬 つづびぴ〬 ひちのに〬 ぴちで〻
っはねね〻

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

〪〯 ぢふどぬつ つちぴちぴべばづ つづびっひどぢどので びぴひふっぴふひづ 〪〯きぐぉたいちぴちぴべばづ ぐちひぴどっぬづぴべばづ〻
きぐぉたいちぴちぴべばづ ぴべばづせ〳そ 〽 ほきぐぉたぉぎご〬 きぐぉたいくさあがぅ〬 きぐぉたぃえぁげぽ〻
どのぴ
ぢぬはっにぬづのせ〳そ 〽 ほ〱〬 〶〬 〷ぽ〻きぐぉたぁどのぴ
つどびばせ〳そ〻きぐぉたぁどのぴ
ぢちびづ〻

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

〪〯 っはねばふぴづ つどびばぬちっづねづのぴび はて びぴひふっぴふひづ っはねばはのづのぴび 〪〯きぐぉたぁつつひづびび〨 ばちひぴどっぬづ〬 つどびば〩〻
きぐぉたぁつつひづびび〨 ばちひぴどっぬづせ〰そ〮つ〬 つどびば〫〱〩〻きぐぉたぁつつひづびび〨 ばちひぴどっぬづせ〰そ〮ぢ〬 つどびば〫〲〩〻ぢちびづ 〽 つどびばせ〰そ〻てはひ 〨ど〽〰〻 ど 〼 〳〻 ど〫〫〩 つどびばせどそ 〭〽 ぢちびづ〻
きぐぉたごべばづたびぴひふっぴ〨 〳〬 ぢぬはっにぬづの〬 つどびば〬 ぴべばづ〬 〦ぐちひぴどっぬづぴべばづ〩〻

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

〪〯 ぉて っはねばどぬづひ つはづび ばちつつどので どの ねべびぴづひどはふび ぷちべび〬
ぴとづ てはぬぬはぷどので ねちべ ぢづ びちてづひ 〪〯きぐぉたいちぴちぴべばづ ぴべばづ〱せ〴そ 〽 ほきぐぉたぉぎご〬 きぐぉたいくさあがぅ〬 きぐぉたぃえぁげ〬 きぐぉたさあぽ〻
どのぴ
ぢぬはっにぬづの〱せ〴そ 〽 ほ〱〬 〶〬 〷〬 〱ぽ〻きぐぉたぁどのぴ
つどびば〱せ〴そ〻〪〯 っはねばふぴづ つどびばぬちっづねづのぴび はて びぴひふっぴふひづ っはねばはのづのぴび 〪〯

〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぁつつひづびび〨 ばちひぴどっぬづ〬 つどびば〱〩〻きぐぉたぁつつひづびび〨 ばちひぴどっぬづせ〰そ〮つ〬 つどびば〱〫〱〩〻
きぐぉたぁつつひづびび〨 ばちひぴどっぬづせ〰そ〮ぢ〬 つどびば〱〫〲〩〻
きぐぉたぁつつひづびび〨 ばちひぴどっぬづ〫〱〬 つどびば〱〫〳〩〻
ぢちびづ 〽 つどびば〱せ〰そ〻〴〮〱〮 派生データ型〱〲〷てはひ 〨ど〽〰〻 ど 〼 〴〻 ど〫〫〩 つどびば〱せどそ 〭〽 ぢちびづ〻〱〲〪〯 ぢふどぬつ つちぴちぴべばづ つづびっひどぢどので びぴひふっぴふひづ 〪〯きぐぉたごべばづたびぴひふっぴ〨 〴〬 ぢぬはっにぬづの〱〬 つどびば〱〬 ぴべばづ〱〬 〦ぐちひぴどっぬづぴべばづ〩〻

〳
〴
〵
〶

〪〯 〴〮〱〺
びづのつ ぴとづ づのぴどひづ ちひひちべ 〪〯きぐぉたごべばづたっはねねどぴ〨 〦ぐちひぴどっぬづぴべばづ〩〻
きぐぉたこづのつ〨 ばちひぴどっぬづ〬 〱〰〰〰〬 ぐちひぴどっぬづぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩〻

〷
〸
〹
〱〰
〱〱

〪〯 〴〮〲〺
びづのつ はのぬべ ぴとづ づのぴひどづび はて っぬちびび ぺづひは ばちひぴどっぬづび〬
ばひづっづつづつ ぢべ ぴとづ のふねぢづひ はて びふっと づのぴひどづび 〪〯

〱〲
〱〳
〱〴
〱〵

きぐぉたいちぴちぴべばづ ずばちひぴどっぬづび〻〪〯 つちぴちぴべばづ つづびっひどぢどので ちぬぬ ばちひぴどっぬづび
ぷどぴと っぬちびび ぺづひは 〨のづづつび ぴは ぢづ ひづっはねばふぴづつ
どて っぬちびびづび っとちのでづ〩 〪〯きぐぉたいちぴちぴべばづ ずぴべばづ〻

〱〶
〱〷
〱〸
〱〹

きぐぉたぁどのぴ
ぺつどびばせ〱〰〰〰そ〻どのぴ
ぺぢぬはっにせ〱〰〰〰そ〬 な〬 に〻
どのぴ
ぺぺぢぬはっにせ〲そ 〽 ほ〱〬〱ぽ〻きぐぉたぁどのぴ
ぺぺつどびばせ〲そ〻きぐぉたいちぴちぴべばづ ぺぺぴべばづせ〲そ〻〪〯 っはねばふぴづ つどびばぬちっづねづのぴび はて っぬちびび ぺづひは ばちひぴどっぬづび 〪〯な 〽 〰〻てはひ〨ど〽〰〻 ど 〼 〱〰〰〰〻 ど〫〫〩どて 〨ばちひぴどっぬづせどそ〮っぬちびび 〽〽 〰〩ほ
ぺつどびばせなそ 〽 ど〻
ぺぢぬはっにせなそ 〽 〱〻な〫〫〻ぽ〪〯 っひづちぴづ つちぴちぴべばづ てはひ っぬちびび ぺづひは ばちひぴどっぬづび 〪〯きぐぉたごべばづたどのつづへづつ〨 な〬 ぺぢぬはっに〬 ぺつどびば〬 ぐちひぴどっぬづぴべばづ〬 〦ずばちひぴどっぬづび〩〻

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

〪〯 ばひづばづのつ ばちひぴどっぬづ っはふのぴ 〪〯きぐぉたぁつつひづびび〨〦な〬 ぺぺつどびば〩〻
きぐぉたぁつつひづびび〨ばちひぴどっぬづ〬 ぺぺつどびば〫〱〩〻
ぺぺぴべばづせ〰そ 〽 きぐぉたぉぎご〻
ぺぺぴべばづせ〱そ 〽 ずばちひぴどっぬづび〻
きぐぉたごべばづたびぴひふっぴ〨〲〬 ぺぺぢぬはっに〬 ぺぺつどびば〬 ぺぺぴべばづ〬 〦ずぴべばづ〩〻
きぐぉたごべばづたっはねねどぴ〨 〦ずぴべばづ〩〻
きぐぉたこづのつ〨 きぐぉたあくごごくき〬 〱〬 ずぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩〻

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

〪〯 ぁ ばひはぢちぢぬべ ねはひづ づててどっどづのぴ ぷちべ はて つづてどのどので ずばちひぴどっぬづび 〪〪〯〯 っはのびづっふぴどぶづ ばちひぴどっぬづび ぷどぴと どのつづへ ぺづひは ちひづ とちのつぬづつ ちび はのづ ぢぬはっに 〪〯な〽〰〻てはひ 〨ど〽〰〻 ど 〼 〱〰〰〰〻 ど〫〫〩どて 〨ばちひぴどっぬづせどそ〮どのつづへ 〽〽 〰〩

〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型

〱〲〸
〱
〲
〳
〴
〵
〶
〷

ほ
てはひ 〨に〽ど〫〱〻 〨に 〼 〱〰〰〰〩〦〦〨ばちひぴどっぬづせにそ〮どのつづへ 〽〽 〰〩 〻 に〫〫〩〻ぺつどびばせなそ 〽 ど〻
ぺぢぬはっにせなそ 〽 に〭ど〻な〫〫〻ど 〽 に〻
ぽきぐぉたごべばづたどのつづへづつ〨 な〬 ぺぢぬはっに〬 ぺつどびば〬 ぐちひぴどっぬづぴべばづ〬 〦ずばちひぴどっぬづび〩〻〸〹〱〰

〪〯 〴〮〳〺
びづのつ ぴとづ てどひびぴ ぴぷは っははひつどのちぴづび はて ちぬぬ づのぴひどづび 〪〯

〱〱
〱〲
〱〳

きぐぉたいちぴちぴべばづ ぁぬぬばちどひび〻〪〯 つちぴちぴべばづ てはひ ちぬぬ ばちどひび はて っははひつどのちぴづび 〪〯きぐぉたぁどのぴ びどぺづはてづのぴひべ〻

〱〴
〱〵
〱〶
〱〷

きぐぉたごべばづたづへぴづのぴ〨 ぐちひぴどっぬづぴべばづ〬 〦びどぺづはてづのぴひべ〩〻〪〯 びどぺづはてづのぴひべ っちの ちぬびは ぢづ っはねばふぴづつ ぢべ びふぢぴひちっぴどので ぴとづ ちつつひづびび
はて ばちひぴどっぬづせ〰そ てひはね ぴとづ ちつつひづびび はて ばちひぴどっぬづせ〱そ 〪〯

〱〸
〱〹
〲〰

きぐぉたごべばづたとぶづっぴはひ〨 〱〰〰〰〬 〲〬 びどぺづはてづのぴひべ〬 きぐぉたいくさあがぅ〬 〦ぁぬぬばちどひび〩〻
きぐぉたごべばづたっはねねどぴ〨 〦ぁぬぬばちどひび〩〻
きぐぉたこづのつ〨 ばちひぴどっぬづせ〰そ〮つ〬 〱〬 ぁぬぬばちどひび〬 つづびぴ〬 ぴちで〬 っはねね〩〻〲〱〲〲〪〯 ちの ちぬぴづひのちぴどぶづ びはぬふぴどはの ぴは 〴〮〳 〪〯

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

きぐぉたいちぴちぴべばづ くのづばちどひ〻〪〯 つちぴちぴべばづ てはひ はのづ ばちどひ はて っははひつどのちぴづび〬 ぷどぴと
ぴとづ づへぴづのぴ はて はのづ ばちひぴどっぬづ づのぴひべ 〪〯きぐぉたぁどのぴ つどびば〲せ〳そ〻きぐぉたいちぴちぴべばづ ぴべばづ〲せ〳そ 〽 ほきぐぉたがあ〬 きぐぉたいくさあがぅ〬 きぐぉたさあぽ〻
どのぴ ぢぬはっにぬづの〲せ〳そ 〽 ほ〱〬 〲〬 〱ぽ〻きぐぉたぁつつひづびび〨 ばちひぴどっぬづ〬 つどびば〲〩〻きぐぉたぁつつひづびび〨 ばちひぴどっぬづせ〰そ〮つ〬 つどびば〲〫〱〩〻
きぐぉたぁつつひづびび〨 ばちひぴどっぬづ〫〱〬 つどびば〲〫〲〩〻
ぢちびづ 〽 つどびば〲せ〰そ〻てはひ 〨ど〽〰〻 ど〼〲〻 ど〫〫〩 つどびば〲せどそ 〭〽 ぢちびづ〻
きぐぉたごべばづたびぴひふっぴ〨 〳〬 ぢぬはっにぬづの〲〬 つどびば〲〬 ぴべばづ〲〬 〦くのづばちどひ〩〻きぐぉたごべばづたっはねねどぴ〨 〦くのづばちどひ〩〻きぐぉたこづのつ〨 ばちひぴどっぬづせ〰そ〮つ〬 〱〰〰〰〬 くのづばちどひ〬 つづびぴ〬 ぴちで〬 っはねね〩〻

〳〶
〳〷
〳〸
〳〹

例 4.18 前の例と同じ操作．ただし，データ型に絶対アドレスを使用する．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

びぴひふっぴ ぐちひぴびぴひふっぴ
ほどのぴ っぬちびび〻
つはふぢぬづ つせ〶そ〻っとちひ ぢせ〷そ〻
ぽ〻

〴〶
〴〷
〴〸

びぴひふっぴ ぐちひぴびぴひふっぴ ばちひぴどっぬづせ〱〰〰〰そ〻〪〯 ぢふどぬつ つちぴちぴべばづ つづびっひどぢどので てどひびぴ ちひひちべ づのぴひべ 〪〯〴〮〱〮 派生データ型〱〲〹〱

きぐぉたいちぴちぴべばづ ぐちひぴどっぬづぴべばづ〻
きぐぉたいちぴちぴべばづ ぴべばづせ〳そ 〽 ほきぐぉたぉぎご〬 きぐぉたいくさあがぅ〬 きぐぉたぃえぁげぽ〻
どのぴ
ぢぬはっにせ〳そ 〽 ほ〱〬 〶〬 〷ぽ〻きぐぉたぁどのぴ
つどびばせ〳そ〻〲〳〴〵きぐぉたぁつつひづびび〨 ばちひぴどっぬづ〬 つどびば〩〻
きぐぉたぁつつひづびび〨 ばちひぴどっぬづせ〰そ〮つ〬 つどびば〫〱〩〻きぐぉたぁつつひづびび〨 ばちひぴどっぬづせ〰そ〮ぢ〬 つどびば〫〲〩〻きぐぉたごべばづたびぴひふっぴ〨 〳〬 ぢぬはっに〬 つどびば〬 ぴべばづ〬 〦ぐちひぴどっぬづぴべばづ〩〻

〶
〷
〸
〹

〪〯 ぐちひぴどっぬづぴべばづ つづびっひどぢづび てどひびぴ ちひひちべ づのぴひべ 〭〭 ふびどので ちぢびはぬふぴづ
ちつつひづびびづび 〪〪〯〯 〵〮〱〺
びづのつ ぴとづ づのぴどひづ ちひひちべ 〪〯

〱〰
〱〱
〱〲
〱〳
〱〴

きぐぉたごべばづたっはねねどぴ〨 〦ぐちひぴどっぬづぴべばづ〩〻
きぐぉたこづのつ〨 きぐぉたあくごごくき〬 〱〰〰〰〬 ぐちひぴどっぬづぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩〻

〱〵
〱〶
〱〷

〪〯 〵〮〲〺
びづのつ ぴとづ づのぴひどづび はて っぬちびび ぺづひは〬
ばひづっづつづつ ぢべ ぴとづ のふねぢづひ はて びふっと づのぴひどづび 〪〯きぐぉたいちぴちぴべばづ ずばちひぴどっぬづび〬 ずぴべばづ〻

〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたぁどのぴ
ぺつどびばせ〱〰〰〰そ〻どのぴ
ぺぢぬはっにせ〱〰〰〰そ〬 ど〬 な〬 に〻
どのぴ
ぺぺぢぬはっにせ〲そ 〽 ほ〱〬〱ぽ〻きぐぉたいちぴちぴべばづ ぺぺぴべばづせ〲そ〻きぐぉたぁどのぴ
ぺぺつどびばせ〲そ〻

〲〳
〲〴
〲〵
〲〶
〲〷

な〽〰〻
てはひ 〨ど〽〰〻 ど 〼 〱〰〰〰〻 ど〫〫〩どて 〨ばちひぴどっぬづせどそ〮どのつづへ 〽〽 〰〩ほてはひ 〨に〽ど〫〱〻 〨に 〼 〱〰〰〰〩〦〦〨ばちひぴどっぬづせにそ〮どのつづへ 〽〽 〰〩 〻 に〫〫〩〻ぺつどびばせなそ 〽 ど〻
ぺぢぬはっにせなそ 〽 に〭ど〻な〫〫〻ど 〽 に〻
ぽきぐぉたごべばづたどのつづへづつ〨 な〬 ぺぢぬはっに〬 ぺつどびば〬 ぐちひぴどっぬづぴべばづ〬 〦ずばちひぴどっぬづび〩〻〪〯 ずばちひぴどっぬづび つづびっひどぢづ ばちひぴどっぬづび ぷどぴと っぬちびび ぺづひは〬 ふびどのでぴとづどひ ちぢびはぬふぴづ ちつつひづびびづび〪〯

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

〪〯 ばひづばづのつ ばちひぴどっぬづ っはふのぴ 〪〯きぐぉたぁつつひづびび〨〦な〬 ぺぺつどびば〩〻
ぺぺつどびばせ〱そ 〽 きぐぉたあくごごくき〻
ぺぺぴべばづせ〰そ 〽 きぐぉたぉぎご〻
ぺぺぴべばづせ〱そ 〽 ずばちひぴどっぬづび〻
きぐぉたごべばづたびぴひふっぴ〨〲〬 ぺぺぢぬはっに〬 ぺぺつどびば〬 ぺぺぴべばづ〬 〦ずぴべばづ〩〻
きぐぉたごべばづたっはねねどぴ〨 〦ずぴべばづ〩〻
きぐぉたこづのつ〨 きぐぉたあくごごくき〬 〱〬 ずぴべばづ〬 つづびぴ〬 ぴちで〬 っはねね〩〻

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型〱〳〰
〱

例 4.19 共用体の処理

〲
〳
〴
〵

ふのどはの ほ
どのぴ
どぶちぬ〻
てぬはちぴ
てぶちぬ〻
ぽ ふせ〱〰〰〰そ〻

〶
〷
〸
〹

どのぴ

ふぴべばづ〻〪〯 ぁぬぬ づのぴひどづび はて ふ とちぶづ どつづのぴどっちぬ ぴべばづ〻 ぶちひどちぢぬづ
ふぴべばづ にづづばび ぴひちっに はて ぴとづどひ っふひひづのぴ ぴべばづ 〪〯

〱〰
〱〱
〱〲
〱〳
〱〴

きぐぉたいちぴちぴべばづ
どのぴ
きぐぉたぁどのぴ
きぐぉたいちぴちぴべばづ
きぐぉたぁどのぴ

ぴべばづせ〲そ〻ぢぬはっにぬづのせ〲そ 〽 ほ〱〬〱ぽ〻つどびばせ〲そ〻
ねばどたふぴべばづせ〲そ〻
ど〬な〻

〱〵
〱〶

〪〯 っはねばふぴづ ちの きぐぉ つちぴちぴべばづ てはひ づちっと ばはびびどぢぬづ ふのどはの ぴべばづ〻
ちびびふねづ ぶちぬふづび ちひづ ぬづてぴ〭ちぬどでのづつ どの ふのどはの びぴはひちでづ〮 〪〯

〱〷
〱〸
〱〹
〲〰

きぐぉたぁつつひづびび〨 ふ〬 〦ど〩〻きぐぉたぁつつひづびび〨 ふ〫〱〬 〦な〩〻
つどびばせ〰そ 〽 〰〻 つどびばせ〱そ 〽 な〭ど〻
ぴべばづせ〱そ 〽 きぐぉたさあ〻

〲〱
〲〲
〲〳
〲〴
〲〵

ぴべばづせ〰そ 〽 きぐぉたぉぎご〻
きぐぉたごべばづたびぴひふっぴ〨〲〬 ぢぬはっにぬづの〬 つどびば〬 ぴべばづ〬 〦ねばどたふぴべばづせ〰そ〩〻
ぴべばづせ〰そ 〽 きぐぉたうがくぁご〻
きぐぉたごべばづたびぴひふっぴ〨〲〬 ぢぬはっにぬづの〬 つどびば〬 ぴべばづ〬 〦ねばどたふぴべばづせ〱そ〩〻

〲〶
〲〷
〲〸

てはひ〨ど〽〰〻 ど〼〲〻 ど〫〫〩 きぐぉたごべばづたっはねねどぴ〨〦ねばどたふぴべばづせどそ〩〻〪〯 ちっぴふちぬ っはねねふのどっちぴどはの 〪〯〲〹〳〰

きぐぉたこづのつ〨ふ〬 〱〰〰〰〬 ねばどたふぴべばづせふぴべばづそ〬 つづびぴ〬 ぴちで〬 っはねね〩〻

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

例 4.20 この例では，データ型のデコード方法を示す．ルーチンばひどのぴつちぴちぴべばづは デー
タ型の要素を表示する．定義済みでないデータ型については， きぐぉたごべばづたてひづづを使用す
ること．

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〪〯
ぅへちねばぬづ はて つづっはつどので ち つちぴちぴべばづ〮
げづぴふひのび 〰 どて ぴとづ つちぴちぴべばづ どび ばひづつづてどのづつ〬 〱 はぴとづひぷどびづ〪〯〣どのっぬふつづ 〼びぴつどは〮と〾〣どのっぬふつづ 〼びぴつぬどぢ〮と〾〣どのっぬふつづ 〢ねばど〮と〢
どのぴ ばひどのぴつちぴちぴべばづ〨 きぐぉたいちぴちぴべばづ つちぴちぴべばづ 〩ほどのぴ 〪ちひひちべたはてたどのぴび〻
きぐぉたぁどのぴ 〪ちひひちべたはてたちつつび〻
きぐぉたいちぴちぴべばづ 〪ちひひちべたはてたつぴべばづび〻
どのぴ のふねたどのぴび〬 のふねたちつつび〬 のふねたつぴべばづび〬 っはねぢどのづひ〻〴〮〲〮 パックとアンパック〱〳〱

どのぴ ど〻〱〲

きぐぉたごべばづたでづぴたづのぶづぬはばづ〨 つちぴちぴべばづ〬〦のふねたどのぴび〬 〦のふねたちつつび〬 〦のふねたつぴべばづび〬 〦っはねぢどのづひ 〩〻びぷどぴっと 〨っはねぢどのづひ〩 ほ
っちびづ きぐぉたぃくきあぉぎぅげたぎぁきぅい〺
ばひどのぴて〨 〢いちぴちぴべばづ どび のちねづつ〺〢 〩〻〪〯 ごは ばひどのぴ ぴとづ びばづっどてどっ ぴべばづ〬 ぷづ っちの ねちぴっと ちでちどのびぴ ぴとづ
ばひづつづてどのづつ てはひねび〮 しづ っちの ぎくご ふびづ ち びぷどぴっと びぴちぴづねづのぴ とづひづ
しづ っはふぬつ ちぬびは ふびづ きぐぉたごすぐぅたぇぅごたぎぁきぅ どて ぷづ ばひづてづひづつ ぴは ふびづ
のちねづび ぴとちぴ ぴとづ ふびづひ ねちべ とちぶづ っとちのでづつ〪〮〯どて〨つちぴちぴべばづ 〽〽 きぐぉたぉぎご〩
ばひどのぴて〨 〢きぐぉたぉぎごぜの〢 〩〻づぬびづ どて 〨つちぴちぴべばづ 〽〽 きぐぉたいくさあがぅ〩 ばひどのぴて〨 〢きぐぉたいくさあがぅぜの〢 〩〻〮〮〮 づぬびづ ぴづびぴ てはひ はぴとづひ ぴべばづび 〮〮〮ひづぴふひの 〰〻ぢひづちに〻
っちびづ きぐぉたぃくきあぉぎぅげたこごげさぃご〺
っちびづ きぐぉたぃくきあぉぎぅげたこごげさぃごたぉぎごぅぇぅげ〺
ばひどのぴて〨 〢いちぴちぴべばづ どび びぴひふっぴ っはのぴちどのどので〢 〩〻ちひひちべたはてたどのぴび〽 〨どのぴ 〪〩ねちぬぬはっ〨 のふねたどのぴび 〪 びどぺづはて〨どのぴ〩 〩〻ちひひちべたはてたちつつび〽
〨きぐぉたぁどのぴ 〪〩 ねちぬぬはっ〨 のふねたちつつび 〪 びどぺづはて〨きぐぉたぁどのぴ〩 〩〻ちひひちべたはてたつぴべばづび 〽 〨きぐぉたいちぴちぴべばづ 〪〩
ねちぬぬはっ〨 のふねたつぴべばづび 〪 びどぺづはて〨きぐぉたいちぴちぴべばづ〩 〩〻きぐぉたごべばづたでづぴたっはのぴづのぴび〨 つちぴちぴべばづ〬 のふねたどのぴび〬 のふねたちつつび〬 のふねたつぴべばづび〬
ちひひちべたはてたどのぴび〬 ちひひちべたはてたちつつび〬 ちひひちべたはてたつぴべばづび 〩〻ばひどのぴて〨 〢 〥つ つちぴちぴべばづび〺ぜの〢〬 ちひひちべたはてたどのぴびせ〰そ 〩〻てはひ 〨ど〽〰〻 ど〼ちひひちべたはてたどのぴびせ〰そ〻 ど〫〫〩 ほ
ばひどのぴて〨 〢ぢぬはっにぬづのでぴと 〥つ〬 つどびばぬちっづねづのぴ 〥ぬつ〬 ぴべばづ〺ぜの〢〬ちひひちべたはてたどのぴびせど〫〱そ〬 ちひひちべたはてたちつつびせどそ 〩〻どて 〨ばひどのぴつちぴちぴべばづ〨 ちひひちべたはてたつぴべばづびせどそ 〩〩 ほ〪〯 ぎはぴづ ぴとちぴ ぷづ てひづづ ぴとづ ぴべばづ くぎがす どて どぴ
どび のはぴ ばひづつづてどのづつ 〪〯きぐぉたごべばづたてひづづ〨 〦ちひひちべたはてたつぴべばづびせどそ 〩〻ぽぽてひづづ〨 ちひひちべたはてたどのぴび 〩〻てひづづ〨 ちひひちべたはてたちつつび 〩〻てひづづ〨 ちひひちべたはてたつぴべばづび 〩〻ぢひづちに〻〮〮〮 はぴとづひ っはねぢどのづひ ぶちぬふづび 〮〮〮つづてちふぬぴ〺
ばひどのぴて〨 〢さのひづっはでのどぺづつ っはねぢどのづひ ぴべばづぜの〢 〩〻ぽ
ひづぴふひの 〱〻
ぽ

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

4.2 パックとアンパック〴〲

既存のいくつかの通信ライブラリは不連続なデータを送信するためにパック／アンパ
ック関数を提供している．この場合，ユーザは送信前に連続なバッファに明示的にパックし，受信後に連続なバッファからアンパックする．利用者は第〴〮〱節で説明したような派生データ型を，ほとんどの場合，明示的にパック，アンパックしなくてよい． ユーザ

〴〴

〴〳

〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型

〱〳〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

は送信または受信するデータの配置を指定し，通信ライブラリが直接不連続なバッファにアクセスする．パック／アンパックルーチンは既存のライブラリとの互換性のために提供されている．また，きぐぉでは実現できないようないくつかの機能を提供する．例えば，受信内容が既に受信された部分に依存するような，複数に分かれたメッセージを受信することができる．他には，送出するメッセージをユーザが明示的に指定した場所にバッファリングすることで，システムのバッファリング規則を置き換えることができる．
つまり，パック，アンパック操作を利用することできぐぉ上に別の通信ライブラリを容易に開発できる．

〱〱
〱〲
〱〳
〱〴
〱〵

きぐぉたぐぁぃか〨どのぢふて〬 どのっはふのぴ〬 つちぴちぴべばづ〬 はふぴぢふて〬 はふぴびどぺづ〬 ばはびどぴどはの〬 っはねね〩
ぉぎ
ぉぎ

〱〶

ぉぎ

〱〷

くさご

〱〸

ぉぎ

〱〹

ぉぎくさご

〲〰
〲〱

ぉぎ

どのぢふて
どのっはふのぴ
つちぴちぴべばづ
はふぴぢふてはふぴびどぺづ
ばはびどぴどはのっはねね

入力バッファ始点（選択型）
入力データ項目数（非負の整数型）
個々の入力データ項目のデータ型（ハンドル）
出力バッファ始点（選択型）
出力バッファバイト長（非負の整数型）
バッファ中での現在のバイト位置（整数型）
パックされたメッセージのコミュニケータ（ハンド
ル）

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぐちっに〨ぶはどつ〪 どのぢふて〬 どのぴ どのっはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 ぶはどつ 〪はふぴぢふて〬
どのぴ はふぴびどぺづ〬 どのぴ 〪ばはびどぴどはの〬 きぐぉたぃはねね っはねね〩
きぐぉたぐぁぃか〨ぉぎあさう〬 ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 くさごあさう〬 くさごこぉずぅ〬 ぐくこぉごぉくぎ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 ぉぎあさう〨〪〩〬 くさごあさう〨〪〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 くさごこぉずぅ〬 ぐくこぉごぉくぎ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺ぐちっに〨っはのびぴ ぶはどつ〪 どのぢふて〬 どのぴ どのっはふのぴ〬 ぶはどつ 〪はふぴぢふて〬
どのぴ はふぴびどぺづ〬 どのぴ〦 ばはびどぴどはの〬 っはのびぴ きぐぉ〺〺ぃはねね 〦っはねね〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
どのぢふて，どのっはふのぴ，およびつちぴちぴべばづで指定される送信バッファ内のメッセージをはふぴぢふて お
よびはふぴびどぺづで指定されるバッファへパックする．入力バッファには きぐぉたこぅぎいで使うことができるバッファ指定できる．出力バッファは，アドレスはふぴぢふて から始まるはふぴびどぺづバ
イトの領域を含む，連続な領域である（長さは，きぐぉたぐぁぃかぅい型メッセージの通信バッファであるかのように，要素数ではなく，バイトで表される）．
ばはびどぴどはのの入力値は出力バッファ中の，パッキングに使われるべき書込み開始位置である．ばはびどぴどはのはパックされたメッセージのサイズ分インクリメントされる．ばはびどぴどはのの出力
値は，出力バッファ中の次の書込み開始位置，つまりパックされたメッセージが占める領域の直後の位置である．っはねね引数はパックされたメッセージを送信するために後に利用するコミュニケータである．

〴〮〲〮 パックとアンパック〱〳〳

きぐぉたさぎぐぁぃか〨どのぢふて〬 どのびどぺづ〬 ばはびどぴどはの〬 はふぴぢふて〬 はふぴっはふのぴ〬 つちぴちぴべばづ〬 っはねね〩
ぉぎ
ぉぎ
ぉぎくさご
くさご
ぉぎ
ぉぎ
ぉぎ

どのぢふて
どのびどぺづ
ばはびどぴどはの
はふぴぢふてはふぴっはふのぴ
つちぴちぴべばづ
っはねね

入力バッファ始点（選択型）
入力バッファバイト長（非負の整数型）

〱
〲
〳
〴

現在のバイト位置（整数型）〵

出力バッファ始点（選択型）〶

アンパックする項目数（整数型）〷

個々の出力データ項目のデータ型（ハンドル）〸パックされるメッセージのコミュニケータ（ハンド
ル）

〹
〱〰
〱〱

どのぴ きぐぉたさのばちっに〨ぶはどつ〪 どのぢふて〬 どのぴ どのびどぺづ〬 どのぴ 〪ばはびどぴどはの〬 ぶはどつ 〪はふぴぢふて〬
どのぴ はふぴっはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぃはねね っはねね〩
きぐぉたさぎぐぁぃか〨ぉぎあさう〬 ぉぎこぉずぅ〬 ぐくこぉごぉくぎ〬 くさごあさう〬 くさごぃくさぎご〬 いぁごぁごすぐぅ〬 ぃくきき〬ぉぅげげくげ〩〼ぴべばづ〾 ぉぎあさう〨〪〩〬 くさごあさう〨〪〩ぉぎごぅぇぅげ ぉぎこぉずぅ〬 ぐくこぉごぉくぎ〬 くさごぃくさぎご〬 いぁごぁごすぐぅ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺さのばちっに〨っはのびぴ ぶはどつ〪 どのぢふて〬 どのぴ どのびどぺづ〬 ぶはどつ 〪はふぴぢふて〬
どのぴ はふぴっはふのぴ〬 どのぴ〦 ばはびどぴどはの〬 っはのびぴ きぐぉ〺〺ぃはねね〦 っはねね〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
はふぴぢふて，はふぴっはふのぴ，およびつちぴちぴべばづで指定される受信バッファへ どのぢふて およびどのびどぺづで指定されるバッファ空間からデータをアンパックする．出力バッファにはきぐぉたげぅぃざで
利用できる，どの通信バッファでも指定できる．入力バッファは，アドレスどのぢふてで始
まるどのびどぺづバイトの領域を含む連続な記憶領域である． ばはびどぴどはのの入力値は入力バッフ
ァ中の，パックされた当該メッセージが占める領域のうちの読み出し先頭位置である． ばはびどぴどはのはパックされたメッセージのサイズ分インクリメントされる． そのため，
ばはびどぴどはのの出力値は，入力バッファ中の次の読み出し先頭位置，つまりアンパックされたメッセージが占めていた領域の直後の位置である．っはねねはパックされたメッセージを受信するのに使ったコミュニケータである．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

ユ ー ザ へ の ア ド バ イ ス ユ ー ザ へ の ア ド バ イ ス きぐぉたげぅぃざときぐぉたさぎぐぁぃかの 違
いに注意すること． きぐぉたげぅぃざではっはふのぴ引数は受信可能な最大項目数を指定する．また，実際に受信される項目数は到着メッセージの長さで決まる．一方で，きぐぉたさぎぐぁぃかではっはふのぴ引数は，実際にアンパックされる項目数である．つまり，対応するメッセージの「サイズ」はばはびどぴどはのの増分に一致する． この違いの理由
は〲つあり，〱つは，ユーザがアンパックすべき量を決定するので，「到着メッセー
ジのサイズ」が事前に決まらないこと，もう〱つは，項目数からアンパックされる
べき「メッセージサイズ」を決定するのが容易ではないことが，その理由である．
実際，異機種混在のシステムではこの数を前もって決めることはできない．（ユー
ザへのアドバイス終わり）

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

パックとアンパックの動作を理解するには，メッセージのデータ部分を，そのメッセージで送信される連続する値を連結して得られるデータの並びとして考えるとわかりや
すい．パック操作は，あたかもメッセージをバッファに送信するかのようにこの並びを

〴〵
〴〶
〴〷
〴〸

〱〳〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

第 〴〮 データ型

バッファ空間に格納する．また，アンパック操作は，あたかもメッセージがバッファから受信されるかのようにこの並びをバッファ空間から取り出す（うはひぴひちの言語の内部ファ
イルや，ぃ言語のびびっちのて等の同様の関数を考えるとわかりやすい）．
複数のメッセージが，〱個のパッキング単位の中に連続してパックされてもよい．これは，きぐぉたぐぁぃかに対する，複数の連続した同族の呼び出しによってもたらされる．この場合，最初の呼び出しはばはびどぴどはの 〽 〰で行なわれ，続くそれぞれの呼び出しは直前のばはびどぴどはのの出力値を入力値として与える．ただし，その各呼び出しではふぴぢふて，はふぴっはふのぴ，
およびっはねねには同じ値を使う．このパッキング単位は，個々の送信バッファを「連結」
した送信バッファを使用して〱回の送信操作によって，メッセージの中に格納されたのと等価の情報を含んでいる．
パッキング単位はきぐぉたぐぁぃかぅい型を使用して送信できる．任意の〱対〱通信，または集団通信関数を使用して，そのパッキング単位を形成するバイトの並びを，あるプロセス
から他のプロセスへ，移動することができる．現時点で，このパッキング単位は任意のデータ型を用いて，どのような受信操作でも受信できる．型マッチング規則は，メッセージがきぐぉたぐぁぃかぅい型で送信される場合，緩和される．
どんなデータ型（きぐぉたぐぁぃかぅいを含む）で送信されたメッセージでも，きぐぉたぐぁぃかぅい型で受信することができる．このようなメッセージは きぐぉたさぎぐぁぃか呼び
出しによってアンパックできる．
〱つのパッキング単位を，複数の連続したメッセージにアンパックすることができる（あるいは，正規の「型が決まった」送信で生成されたメッセージでも可能）．これは，きぐぉたさぎぐぁぃかに対する，複数の連続した同族の呼び出しによってもたらされる．最初の呼び出しはばはびどぴどはの 〽 〰で行なわれ，続くそれぞれの呼び出しは直前のばはびどぴどはのの出力値を入力値として与える．ただし，その各呼び出しでどのぢふて，どのびどぺづ，およびっはねねには同じ値を使う．
〲つのパッキング単位の連結は必ずしも〱つのパッキング単位になるとは限らない．またパッキング単位の一部分が〱つのパッキング単位になるとは限らない．したがって，〲つのパッキング単位を連結して，それから〱つのパッキング単位としてその連結結果をアンパックすることはできない．また，パッキング単位の一部分を，独立した〱つのパッ
キング単位としてアンパックすることはできない．一連の同族のパック呼び出し（あるいは正規の送信）によって作られた各パッキング単位は，一連の同族のアンパック呼び出しによって，〱つの単位として，アンパックされなければならない．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

根拠 パッキング単位における「アトミックな」パックとアンパックに対するこの制約は，実装が，パッキング単位の先頭に，付加情報を挿入することを可能にする．例えば，送り手のアーキテクチャの記述などの情報を付加することができる（異機種環境での型変換に使用するために）．（根拠の終わり）

〴〴
〴〵
〴〶
〴〷
〴〸

以下の呼び出しによって，ユーザはメッセージをパックするのに必要な領域を知ることができる．つまり，バッファ領域の割り当てを管理することができる．

〴〮〲〮 パックとアンパック〱〳〵

きぐぉたぐぁぃかたこぉずぅ〨どのっはふのぴ〬 つちぴちぴべばづ〬 っはねね〬 びどぺづ〩〱〲

パック呼び出しに渡すっはふのぴ引数（非負の整数型）

ぉぎ

どのっはふのぴ
つちぴちぴべばづ
っはねね

パック呼び出しに渡すっはねねふのどっちぴはひ引数 （ハンド
ル）

〵

くさご

びどぺづ

パックされたメッセージの上限値（バイト単位）（整
数型）

〷

ぉぎ
ぉぎ

パック呼び出しに渡すつちぴちぴべばづ引数（ハンドル）

どのぴ きぐぉたぐちっにたびどぺづ〨どのぴ どのっはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぃはねね っはねね〬
どのぴ 〪びどぺづ〩
きぐぉたぐぁぃかたこぉずぅ〨ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 ぃくきき〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 ぃくきき〬 こぉずぅ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺いちぴちぴべばづ〺〺ぐちっにたびどぺづ〨どのぴ どのっはふのぴ〬 っはのびぴ きぐぉ〺〺ぃはねね〦 っはねね〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぐぁぃかたこぉずぅ〨どのっはふのぴ〬 つちぴちぴべばづ〬 っはねね〬 びどぺづ〩の呼び出しは， きぐぉたぐぁぃか〨どのぢふて〬 どの〭
っはふのぴ〬 つちぴちぴべばづ〬 はふぴぢふて〬 はふぴっはふのぴ〬 ばはびどぴどはの〬 っはねね〩 の呼び出しの結果であるばはびどぴどはの引数の増加分の上限をびどぺづに返す．
根拠 この呼び出しは，厳密な値ではなく，上限を返す．なぜなら，メッセージをパックするのに要する領域の大きさは状況に依存する可能性があるからである（例
えば，パッキング単位にパックされた最初のメッセージはより多くの領域を占める可能性がある）． （根拠の終わり）

〳
〴

〶

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

例 4.21 きぐぉたぐぁぃかを使用する例

〲〵
〲〶

どのぴ
っとちひ

ばはびどぴどはの〬 ど〬 な〬 ちせ〲そ〻ぢふててせ〱〰〰〰そ〻きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ねべひちのに〩〻どて 〨ねべひちのに 〽〽 〰〩ほ〪〯 こぅぎいぅげ ぃくいぅ 〪〯ばはびどぴどはの 〽 〰〻きぐぉたぐちっに〨〦ど〬 〱〬 きぐぉたぉぎご〬 ぢふてて〬 〱〰〰〰〬 〦ばはびどぴどはの〬 きぐぉたぃくききたしくげがい〩〻
きぐぉたぐちっに〨〦な〬 〱〬 きぐぉたぉぎご〬 ぢふてて〬 〱〰〰〰〬 〦ばはびどぴどはの〬 きぐぉたぃくききたしくげがい〩〻
きぐぉたこづのつ〨 ぢふてて〬 ばはびどぴどはの〬 きぐぉたぐぁぃかぅい〬 〱〬 〰〬 きぐぉたぃくききたしくげがい〩〻ぽづぬびづ 〪〯 げぅぃぅぉざぅげ ぃくいぅ 〪〯きぐぉたげづっぶ〨 ち〬 〲〬 きぐぉたぉぎご〬 〰〬 〰〬 きぐぉたぃくききたしくげがい〩〻

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

例 4.22 詳細な例
どのぴ
ばはびどぴどはの〬 ど〻てぬはちぴ ちせ〱〰〰〰そ〻っとちひ ぢふててせ〱〰〰〰そ〻

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

きぐぉたぃはねねたひちのに〨きぐぉたぃはねねたぷはひぬつ〬 〦ねべひちのに〩〻どて 〨ねべひちのに 〽〽 〰〩
ほ

〴〷
〴〸

〱〳〶
〱

第 〴〮 データ型〪〯 こぅぎいぅげ ぃくいぅ 〪〯〲どのぴ ぬづのせ〲そ〻きぐぉたぁどのぴ つどびばせ〲そ〻きぐぉたいちぴちぴべばづ ぴべばづせ〲そ〬 のづぷぴべばづ〻〳〴〵〪〯 ぢふどぬつ つちぴちぴべばづ てはひ ど てはぬぬはぷづつ ぢべ ちせ〰そ〮〮〮ちせど〭〱そ 〪〯〶〷ぬづのせ〰そ 〽 〱〻ぬづのせ〱そ 〽 ど〻
きぐぉたぁつつひづびび〨 〦ど〬 つどびば〩〻
きぐぉたぁつつひづびび〨 ち〬 つどびば〫〱〩〻
ぴべばづせ〰そ 〽 きぐぉたぉぎご〻
ぴべばづせ〱そ 〽 きぐぉたうがくぁご〻
きぐぉたごべばづたびぴひふっぴ〨 〲〬 ぬづの〬 つどびば〬 ぴべばづ〬 〦のづぷぴべばづ〩〻
きぐぉたごべばづたっはねねどぴ〨 〦のづぷぴべばづ〩〻

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

〪〯 ぐちっに ど てはぬぬはぷづつ ぢべ ちせ〰そ〮〮〮ちせど〭〱そ〪〯〱〵〱〶ばはびどぴどはの 〽 〰〻きぐぉたぐちっに〨 きぐぉたあくごごくき〬 〱〬 のづぷぴべばづ〬 ぢふてて〬 〱〰〰〰〬 〦ばはびどぴどはの〬 きぐぉたぃくききたしくげがい〩〻〱〷〱〸〪〯 こづのつ 〪〯〱〹〲〰

きぐぉたこづのつ〨 ぢふてて〬 ばはびどぴどはの〬 きぐぉたぐぁぃかぅい〬 〱〬 〰〬きぐぉたぃくききたしくげがい〩〻

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

〪〯 〪〪〪〪〪
くのづ っちの ひづばぬちっづ ぴとづ ぬちびぴ ぴとひづづ ぬどのづび ぷどぴと
きぐぉたこづのつ〨 きぐぉたあくごごくき〬 〱〬 のづぷぴべばづ〬 〱〬 〰〬 きぐぉたぃくききたしくげがい〩〻〪〪〪〪〪 〪〯
ぽ
づぬびづ どて 〨ねべひちのに 〽〽 〱〩ほ〪〯 げぅぃぅぉざぅげ ぃくいぅ 〪〯〲〹きぐぉたこぴちぴふび びぴちぴふび〻〳〰
〳〱〪〯 げづっづどぶづ 〪〯〳〲〳〳きぐぉたげづっぶ〨 ぢふてて〬 〱〰〰〰〬 きぐぉたぐぁぃかぅい〬 〰〬 〰〬 きぐぉたぃくききたしくげがい〬 〦びぴちぴふび〩〻〳〴〪〯 さのばちっに ど 〪〯〳〵〳〶ばはびどぴどはの 〽 〰〻きぐぉたさのばちっに〨ぢふてて〬 〱〰〰〰〬 〦ばはびどぴどはの〬 〦ど〬 〱〬 きぐぉたぉぎご〬 きぐぉたぃくききたしくげがい〩〻〳〷〳〸〪〯 さのばちっに ちせ〰そ〮〮〮ちせど〭〱そ 〪〯きぐぉたさのばちっに〨ぢふてて〬 〱〰〰〰〬 〦ばはびどぴどはの〬 ち〬 ど〬 きぐぉたうがくぁご〬 きぐぉたぃくききたしくげがい〩〻

〳〹
〴〰

ぽ

〴〱
〴〲
〴〳
〴〴
〴〵

例 4.23 各プロセスからルートにっはふのぴとっはふのぴ個の文字が送信され，ルートで全ての文
字が〱つの文字列に連結される．

〴〶
〴〷
〴〸

どのぴ

っはふのぴ〬 でびどぺづ〬 っはふのぴびせ〶〴そ〬 ぴはぴちぬっはふのぴ〬 に〱〬 に〲〬 に〬
つどびばぬびせ〶〴そ〬 ばはびどぴどはの〬 っはのっちぴたばはび〻
っとちひ っとひせ〱〰〰そ〬 〪ぬぢふて〬 〪ひぢふて〬 〪っぢふて〻〴〮〳〮 標準の乍乐义_乐乁乃之および乍乐义_乕乎乐乁乃之〱〳〷〱

きぐぉたぃはねねたびどぺづ〨っはねね〬 〦でびどぺづ〩〻
きぐぉたぃはねねたひちのに〨っはねね〬 〦ねべひちのに〩〻〪〯 ちぬぬはっちぴづ ぬはっちぬ ばちっに ぢふててづひ 〪〯きぐぉたぐちっにたびどぺづ〨〱〬 きぐぉたぉぎご〬 っはねね〬 〦に〱〩〻きぐぉたぐちっにたびどぺづ〨っはふのぴ〬 きぐぉたぃえぁげ〬 っはねね〬 〦に〲〩〻に 〽 に〱〫に〲〻ぬぢふて 〽 〨っとちひ 〪〩ねちぬぬはっ〨に〩〻〪〯 ばちっに っはふのぴ〬 てはぬぬはぷづつ ぢべ っはふのぴ っとちひちっぴづひび 〪〯ばはびどぴどはの 〽 〰〻きぐぉたぐちっに〨〦っはふのぴ〬 〱〬 きぐぉたぉぎご〬 ぬぢふて〬 に〬 〦ばはびどぴどはの〬 っはねね〩〻
きぐぉたぐちっに〨っとひ〬 っはふのぴ〬 きぐぉたぃえぁげ〬 ぬぢふて〬 に〬 〦ばはびどぴどはの〬 っはねね〩〻
どて 〨ねべひちのに 〡〽 ひははぴ〩 ほ〪〯 でちぴとづひ ちぴ ひははぴ びどぺづび はて ちぬぬ ばちっにづつ ねづびびちでづび 〪〯きぐぉたぇちぴとづひ〨 〦ばはびどぴどはの〬 〱〬 きぐぉたぉぎご〬 ぎさがが〬 〰〬きぐぉたいぁごぁごすぐぅたぎさがが〬 ひははぴ〬 っはねね〩〻〪〯 でちぴとづひ ちぴ ひははぴ ばちっにづつ ねづびびちでづび 〪〯きぐぉたぇちぴとづひぶ〨 ぬぢふて〬 ばはびどぴどはの〬 きぐぉたぐぁぃかぅい〬 ぎさがが〬
ぎさがが〬 ぎさがが〬 ぎさがが〬 ひははぴ〬 っはねね〩〻
ぽ づぬびづ ほ〪〯 ひははぴ っはつづ 〪〪〯〯 でちぴとづひ びどぺづび はて ちぬぬ ばちっにづつ ねづびびちでづび 〪〯きぐぉたぇちぴとづひ〨 〦ばはびどぴどはの〬 〱〬 きぐぉたぉぎご〬 っはふのぴび〬 〱〬きぐぉたぉぎご〬 ひははぴ〬 っはねね〩〻〪〯 でちぴとづひ ちぬぬ ばちっにづつ ねづびびちでづび 〪〯
つどびばぬびせ〰そ 〽 〰〻てはひ 〨ど〽〱〻 ど 〼 でびどぺづ〻 ど〫〫〩つどびばぬびせどそ 〽 つどびばぬびせど〭〱そ 〫 っはふのぴびせど〭〱そ〻ぴはぴちぬっはふのぴ 〽 つどびばぬびせでびどぺづ〭〱そ 〫 っはふのぴびせでびどぺづ〭〱そ〻ひぢふて 〽 〨っとちひ 〪〩ねちぬぬはっ〨ぴはぴちぬっはふのぴ〩〻
っぢふて 〽 〨っとちひ 〪〩ねちぬぬはっ〨ぴはぴちぬっはふのぴ〩〻
きぐぉたぇちぴとづひぶ〨 ぬぢふて〬 ばはびどぴどはの〬 きぐぉたぐぁぃかぅい〬 ひぢふて〬っはふのぴび〬 つどびばぬび〬 きぐぉたぐぁぃかぅい〬 ひははぴ〬 っはねね〩〻〪〯 ふのばちっに ちぬぬ ねづびびちでづび ちのつ っはのっちぴづのちぴづ びぴひどのでび 〪〯っはのっちぴたばはび 〽 〰〻てはひ 〨ど〽〰〻 ど 〼 でびどぺづ〻 ど〫〫〩 ほ
ばはびどぴどはの 〽 〰〻きぐぉたさのばちっに〨 ひぢふて〫つどびばぬびせどそ〬 ぴはぴちぬっはふのぴ〭つどびばぬびせどそ〬〦ばはびどぴどはの〬 〦っはふのぴ〬 〱〬 きぐぉたぉぎご〬 っはねね〩〻
きぐぉたさのばちっに〨 ひぢふて〫つどびばぬびせどそ〬 ぴはぴちぬっはふのぴ〭つどびばぬびせどそ〬〦ばはびどぴどはの〬 っぢふて〫っはのっちぴたばはび〬 っはふのぴ〬 きぐぉたぃえぁげ〬 っはねね〩〻
っはのっちぴたばはび 〫〽 っはふのぴ〻
ぽっぢふてせっはのっちぴたばはびそ 〽 〧\〰〧〻

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

ぽ

〴〲
〴〳
〴〴

4.3 標準のMPI_PACKおよびMPI_UNPACK
これらの関数は第〱〳〮〵〮〲節で指定されたぜづへぴづひのちぬ〳〲〢データ形式でバッファとの間でデ

〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型

〱〳〸
〱
〲
〳
〴

ータの読み取り／書き込みを行い，パックに必要なサイズを計算する．将来の拡張性のために第〱引数にデータ形式を指定できるようになっているが，現在，つちぴちひづば引数に使用できる値はぜづへぴづひのちぬ〳〲〢のみである．

〵

ユーザへのアドバイス これらの関数を使用して，例えば，あるきぐぉ実装から別のきぐぉ 実装にポータブルな形式で型が決まったデータを送信することができる．
（ユーザへのアドバイス終わり）

〶
〷
〸
〹
〱〰
〱〱
〱〲

バッファには，ヘッダなしで，パックされたデータのみが含まれる．
きぐぉたぐぁぃかたぅじごぅげぎぁがによってパックされたデータの送信と受信には， きぐぉたあすごぅが使用されなくてはならない．

〱〳

根拠 きぐぉたぐぁぃかたぅじごぅげぎぁがにはメッセージにヘッダがないことを指定し，データの形式も指定する．きぐぉたぐぁぃかではヘッダを使用することができる（使用されることもある）ため，きぐぉたぐぁぃかたぅじごぅげぎぁがでパックされたデータに対して データ
型きぐぉたぐぁぃかぅいを使用することはできない． （根拠の終わり）

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたぐぁぃかたぅじごぅげぎぁが〨つちぴちひづば〬 どのぢふて〬 どのっはふのぴ〬 つちぴちぴべばづ〬 はふぴぢふて〬 はふぴびどぺづ〬 ばはびどぴどはの 〩
ぉぎ

〲〳
〲〴

ぉぎ

〲〵

ぉぎ

〲〶

ぉぎ

〲〷

くさご

〲〸

ぉぎ

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぉぎくさご

つちぴちひづば
どのぢふてどのっはふのぴ
つちぴちぴべばづ
はふぴぢふてはふぴびどぺづ
ばはびどぴどはの

データ表現（文字列）
入力バッファ始点（選択型）
入力データ項目数（整数型）
個々の入力データ項目のデータ型（ハンドル）
出力バッファ始点（選択型）
出力バッファバイト長（整数型）
バッファ中での現在のバイト位置（整数型）

どのぴ きぐぉたぐちっにたづへぴづひのちぬ〨っとちひ 〪つちぴちひづば〬 ぶはどつ 〪どのぢふて〬 どのぴ どのっはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 ぶはどつ 〪はふぴぢふて〬 きぐぉたぁどのぴ はふぴびどぺづ〬 きぐぉたぁどのぴ 〪ばはびどぴどはの〩
きぐぉたぐぁぃかたぅじごぅげぎぁが〨いぁごぁげぅぐ〬 ぉぎあさう〬 ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 くさごあさう〬 くさごこぉずぅ〬ぐくこぉごぉくぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 くさごこぉずぅ〬 ぐくこぉごぉくぎ
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐ〼ぴべばづ〾 ぉぎあさう〨〪〩〬 くさごあさう〨〪〩{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺ぐちっにたづへぴづひのちぬ〨っはのびぴ っとちひ〪 つちぴちひづば〬 っはのびぴ ぶはどつ〪 どのぢふて〬
どのぴ どのっはふのぴ〬 ぶはどつ〪 はふぴぢふて〬 きぐぉ〺〺ぁどのぴ はふぴびどぺづ〬
きぐぉ〺〺ぁどのぴ〦 ばはびどぴどはの〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〮〳〮 標準の乍乐义_乐乁乃之および乍乐义_乕乎乐乁乃之〱〳〹きぐぉたさぎぐぁぃかたぅじごぅげぎぁが〨つちぴちひづば〬 どのぢふて〬 どのびどぺづ〬 ばはびどぴどはの〬 はふぴぢふて〬 はふぴびどぺづ〬 ばはびどぴどはの 〩
ぉぎ
ぉぎ
ぉぎ
ぉぎくさご
くさご
ぉぎ
ぉぎ

つちぴちひづば
どのぢふてどのびどぺづ
ばはびどぴどはの
はふぴぢふてはふぴっはふのぴ
つちぴちぴべばづ

データ表現（文字列）
入力バッファ始点（選択型）

〱
〲
〳
〴

入力バッファバイト長（整数型）〵

バッファ中での現在のバイト位置（整数型）〶

出力バッファ始点（選択型）〷

出力データ項目数（整数型）〸

出力データ項目のデータ型（ハンドル）〹

どのぴ きぐぉたさのばちっにたづへぴづひのちぬ〨っとちひ 〪つちぴちひづば〬 ぶはどつ 〪どのぢふて〬 きぐぉたぁどのぴ どのびどぺづ〬
きぐぉたぁどのぴ 〪ばはびどぴどはの〬 ぶはどつ 〪はふぴぢふて〬 どのぴ はふぴっはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
きぐぉたさぎぐぁぃかたぅじごぅげぎぁが〨いぁごぁげぅぐ〬 ぉぎあさう〬 ぉぎこぉずぅ〬 ぐくこぉごぉくぎ〬 くさごあさう〬 くさごぃくさぎご〬
いぁごぁごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くさごぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぉぎこぉずぅ〬 ぐくこぉごぉくぎ
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐ〼ぴべばづ〾 ぉぎあさう〨〪〩〬 くさごあさう〨〪〩{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺さのばちっにたづへぴづひのちぬ〨っはのびぴ っとちひ〪 つちぴちひづば〬っはのびぴ ぶはどつ〪 どのぢふて〬 きぐぉ〺〺ぁどのぴ どのびどぺづ〬 きぐぉ〺〺ぁどのぴ〦 ばはびどぴどはの〬
ぶはどつ〪 はふぴぢふて〬 どのぴ はふぴっはふのぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節
を参照）}

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

きぐぉたぐぁぃかたぅじごぅげぎぁがたこぉずぅ〨 つちぴちひづば〬 どのっはふのぴ〬 つちぴちぴべばづ〬 びどぺづ 〩
ぉぎ
ぉぎ
ぉぎ
くさご

つちぴちひづば
どのっはふのぴ
つちぴちぴべばづ
びどぺづ

データ表現（文字列）〲〴〲〵

入力データ項目数（整数型）〲〶

個々の入力データのデータ型（ハンドル）〲〷

出力バッファバイト長（整数型）〲〸〲〹

どのぴ きぐぉたぐちっにたづへぴづひのちぬたびどぺづ〨っとちひ 〪つちぴちひづば〬 どのぴ どのっはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ 〪びどぺづ〩
きぐぉたぐぁぃかたぅじごぅげぎぁがたこぉずぅ〨いぁごぁげぅぐ〬 ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 こぉずぅぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐ{きぐぉ〺〺ぁどのぴ きぐぉ〺〺いちぴちぴべばづ〺〺ぐちっにたづへぴづひのちぬたびどぺづ〨っはのびぴ っとちひ〪 つちぴちひづば〬
どのぴ どのっはふのぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〴〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〴〮 データ型

〱
〲
〳
〴
〵

第5章

〶
〷
〸
〹

集団的通信

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

5.1 概論と概要〱〶

集団的通信は，複数のプロセスから成る〱つまたは複数のグループに関連した通信として定義される．きぐぉで規定するこのタイプの機能としては次のものがある．
• きぐぉたあぁげげぉぅげ〺 グループ内の全メンバ にまたがるバリア同期．（第〵〮〳節）

〱〷
〱〸
〱〹
〲〰
〲〱

• きぐぉたあぃぁこご〺 グ ル ー プ 内 の あ る メ ン バ か ら 全 メ ン バ へ の ブ ロ ー ド キ ャ ス ト（第〵〮〴節）．これは図〵〮〱に ぜぢひはちつっちびぴ〢 として示されている．

〲〲• きぐぉたぇぁごえぅげ〬 きぐぉたぇぁごえぅげざ〺 グループ内の全メンバ からあるメンバへのデータのギャザー（第〵〮〵節）．これは図〵〮〱にぜでちぴとづひ〢 として示されている．

〲〵• きぐぉたこぃぁごごぅげ〬 きぐぉたこぃぁごごぅげざ〺 グループ内のあるメンバから全メンバへのデー
タのスキャッタ（第〵〮〶節）．これは図〵〮〱にぜびっちぴぴづひ〢 として示されている．

〲〸• きぐぉたぁががぇぁごえぅげ〬 きぐぉたぁががぇぁごえぅげざ〺 グループ内の全メンバがの結果を受信する
ギャザーのバリエーション（第〵〮〷節）．これは図〵〮〱で ぜちぬぬでちぴとづひ〢 として示されている．

〳〱• きぐぉたぁががごくぁがが〬 きぐぉたぁががごくぁががざ〬 きぐぉたぁががごくぁががし〺 グ ル ー プ 内 の 全 メ ン バ
か ら 全 メ ン バ へ の デ ー タ の ス キ ャ ッ タ ／ ギ ャ ザ ー （完 全 交 換） と も 呼 ば れる）（第〵〮〸節）．これは図〵〮〱でぜっはねばぬづぴづ づへっとちのでづ〢 として示される．

〲〳
〲〴

〲〶
〲〷

〲〹
〳〰

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

• きぐぉたぁががげぅいさぃぅ〬 きぐぉたげぅいさぃぅ〺 びふね，ねちへ，ねどの，またはユーザ定義関数などの結果をグループ内の全メンバへ戻したり，あるメンバだけに戻したりするバリエー
ションをもつ大域的なリデュース操作（第〵〮〹節）
．

〴〰
〴〱
〴〲
〴〳

• きぐぉたげぅいさぃぅたこぃぁごごぅげ〺 リデュースおよびスキャッタ操作の組み合わせ（第〵〮〱〰節）
．〴〴
〴〵
〴〶

• きぐぉたこぃぁぎ〬 きぐぉたぅじこぃぁぎ〺 グループ内の全メンバにまたがるスキャン（プリフィックスとも呼ばれる）（第〵〮〱〱節）
．
〱〴〱

〴〷
〴〸

第 〵〮 集団的通信

〱〴〲

data

〲
〳
〴
〵

processes

〱

A

A

0

A

broadcast

A

〶

A

〷
〸

A

〹

A

〱〰

0
0
0
0
0
0

〱〱
〱〲
〱〳
〱〴

A

0

A

1

A

2

A

3

A

4

A

5

scatter

A
A

〱〵
〱〶

A

〱〷

gather

〱〸
〱〹

A
A

〲〰

A

〲〱

0
1
2
3
4
5

〲〲
〲〳
〲〴
〲〵
〲〶

A
B

A

0

A

0

〲〷
〲〸
〲〹
〳〰

C
D
E

〳〱
〳〲

F

allgather

0

A
A

0

A

0

A

0

0
0
0
0
0
0

B
B
B
B
B
B

0
0
0
0
0
0

C
C
C
C
C
C

0
0
0
0
0
0

D
D
D
D
D
D

0
0
0
0
0
0

E
E
E
E
E
E

0
0
0
0
0
0

F
F
F
F
F
F

0
0
0
0
0
0

〳〳
〳〴
〳〵
〳〶
〳〷

A
B

〳〸
〳〹
〴〰

C
D

0
0
0
0

A
B
C
D

1
1
1
1

A
B
C
D

2
2
2
2

A
B
C
D

3
3
3
3

A
B
C
D

4
4
4
4

A
B
C
D

5
5
5
5

A

completeexchange

A
A
A

0
1
2
3

B
B
B
B

0
1
2
3

C
C
C
C

0
1
2
3

D
D
D
D

0
1
2
3

E
E
E
E

0
1
2
3

F
F
F
F

0
1
2
3

〴〱
〴〲
〴〳

E
F

0
0

E
F

1
1

E
F

2
2

E
F

3
3

E
F

4
4

E
F

5
5

A
A

4
5

B
B

4
5

C
C

4
5

D
D

4
5

E
E

4
5

F
F

4
5

〴〴
〴〵
〴〶
〴〷
〴〸

図 〵〮〱〺 〶プロセスのグループの集団移動関数の図解．それぞれの場合において，各行はあるプロセスの中のデータ位置を表している．すなわち，ブロードキャストでは，はじめに第〱プロセスだけがデータA0 を持っているが，ブロードキャスト後，全プロセスがそのデータA0 を持つ．

〵〮〱〮 概論と概要〱〴〳

集団的ルーチンの呼び出しでの 重要な引数の〱つは，参加するプロセスの〱つ または複数の グループを定義し，操作のためのコンテクストを提供するコミュニケータである． これについては，第〵〮〲節で詳しく説明する．集団操作の構文および意味は，〱対〱操
作の構文および意味と整合するように定義される．そのため，一般的なデータ型が使用でき，これは 第〴章 で説明したように送信プロセスと受信プロセスの間で一致していな
ければならない． ブロードキャストやギャザーといったいくつかの集団的ルーチンでは，〱つのプロセスだけがメッセージを発信したり受信したりする．そのプロセスはルートと呼ばれる． 集団関数の引数で，「ルートでのみ意味を持つ」指定されるものは，ルートを除く全参加プロセスでは無視される．通信バッファ，一般のデータ型，および型一致規則の詳細については第〴章を，グループの定義方法およびコミュニケータの作成方
法については第〶章を参照すること．
集団操作の型一致条件は，〱対〱通信における送信側と受信側との間の対応条件よりも厳しい．つまり，集団操作では，送信されるデータ量は受信側が指定するデータ量と厳密に一致していなければならない．しかし送信側と受信側とで型マップ（メモリ内のレ
イアウト，第〴〮〱節を参照）が違っていても許される．
集団的ルーチンの呼び出しは集団操作への関与が完了するとすぐに戻ることができる（しかし，戻ることを強制するわけではない）．呼び出しの完了は，呼び出しプロセスが自由に通信バッファの領域を変更できることを示す．しかし，それはグループ内の他のプロセスが操作を完了，あるいは開始していることを示すものではない（操作の説明で特記している場合を除く）．すなわち，集団的通信の呼び出しは，全呼び出しプロセスの同期の効果をもたらす場合もあれば，そうでない場合もある．当然，この文の記述はバリア同期関数には適用されない．
集団的通信の呼び出しでは，〱対〱通信と同じコミュニケータを使用することができる．
きぐぉでは，集団的通信の呼び出しで作られたメッセージが〱対〱通信で作られたメッセージと混同されないことを保証している．集団的ルーチンの正しい使用法についての詳細は，第〵〮〱〲節に記載している．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

根拠 データ一致制限（型の対応で）によって，送信データの量を確認するためにきぐぉたげぅぃざの引数びぴちぴふびと類似の機能を設けるという煩わしいことを避けるようにした．集団的ルーチンのいくつかは，ステータス値の配列を必要とする．

〳〳

様々な集団関数の実装が可能となるべく，同期に関して記述されている．

〳〷

集団操作は，メッセージタグの引数を受け付けない． きぐぉが将来に改訂されたとき，ノンブロッキングな集団関数の定義において，多重な，あるいは，保留された
集団的通信における曖昧さを取り除くためにタグ（または類似のメカニズム）の追加が必要になるであろう． （根拠の終わり）

〳〴
〳〵
〳〶

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

ユーザへのアドバイス 集団操作の副次作用である同期に頼ることは，正しいプログラムにとって危険である．例えば，一部の実装で同期という副次作用をブロードキャストルーチンにもたらす場合があるとしても，標準ではこの作用を要求していないし，これに依存するプログラムは可搬でない．

〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〴〴
〱
〲
〳
〴
〵

一方，正しくて移植性のあるプログラムは，集団呼び出しでは同期をとっているかもしれないということを考慮しなければならない．同期による副次作用に頼ることはできないが，その副次作用を考慮してプログラムしなければならない．こうした問題点について第〵〮〱〲節で詳述する． （ユーザへのアドバイス終わり）

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

実装者へのアドバイス ベンダーは自社のアーキテクチャにあった最適な集団的ルーチンを書くことができるし，きぐぉの〱対〱通信関数や，いくつかの補助関数を使用するだけで完璧な集団のライブラリを書くことができる．その時実行中の〱対〱通信のと処理の干渉を回避するために，〱対〱通信の上位での実装で，集団操作用にユー
ザからは見えない隠れた専用のコミュニケータを作ることも可能である．この点についてはさらに第〵〮〱〲節で詳述する． （実装者へのアドバイス終わり）
集団的ルーチンの多くの説明で，ブロッキングきぐぉ の〱対〱ルーチンの図を示している．
これは，どのプロセスでどのようなデータが送受信されるかを示すためのものである．
これらの多くの例は正しいきぐぉのプログラムではなく，単純化するため，バッファの制約がないという前提になっていることが多い．

〱〹
〲〰
〲〱

5.2 コミュニケータ引数

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

集団関数の重要なコンセプトは，操作に参加するプロセスの〱つまたは複数のグループを持つということである．ルーチンは，明示的な引数としてグループの識別子を持たない．その代わりに，コミュニケータ引数がある．グループとコミュニケータについては第〶節で詳しく説明する．この章では，コミュニケータにはグループ内コミュニケータとグループ間コミュニケータの〲種類があることを理解しておけば十分である． グループ
内コミュニケータは，コンテクストと結びついた〱つのプロセスグループのための識別子と考えることができる．グループ間コミュニケータは，コンテクストと結びついた 〲つのプロセスグループを識別する．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

5.2.1 グループ内コミュニケータ集団操作の仕様
グループ内コミュニケータで識別されるグループ内の全てのプロセスは 集団的ルーチ
ンを呼び出す必要がある．
多くの場合，集団的通信はグループ内コミュニケータのために「インプレイス」で実行することができ，出力バッファを入力バッファと同じとすることができる．これは，実行する操作に応じて，送信バッファまたは受信バッファ引数の代わりに特別な引数の
値きぐぉたぉぎたぐがぁぃぅを使用して指定する．
根拠 「インプレイス」操作は きぐぉ実装とユーザの両方による不必要なメモリ
動作を低減するために用意されている． 送信バッファと受信バッファが同じア
ドレスを持っているかどうかをテストするための単純なチェックは一部の場合（きぐぉたぁががげぅいさぃぅなど）には機能するが，それ以外の場合（きぐぉたぇぁごえぅげなど，ルートが〰でない場合）には適切でない．また，うはひぴひちの言語では引数のエイリアス〵〮〲〮 コミュニケータ引数〱〴〵を明示的に禁止しており，特別な値の使用により「インプレイス」操作を示すアプ
ローチにより問題を軽減することができる． （根拠の終わり）〱〲〳

ユーザへのアドバイス 「インプレイス」オプションを使用することにより，多くの集団呼び出しの受信バッファを送受信バッファにすることができる．そのため，
ぉぎごぅぎご を含むうはひぴひちの言語の呼び出し形式ではこれらをくさごではなく，ぉぎくさごとしてマークする必要がある．
きぐぉたぉぎたぐがぁぃぅは特別な値で，使用するにはきぐぉたあくごごくきと同じ制約がある．

一部のグループ間コミュニケータ集団操作では「インプレイス」オプションがサポートされていない（きぐぉたぁががごくぁががざなど）． （ユーザへのアドバイス終わり）

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

5.2.2 グループ間コミュニケータへの集団操作の適用
集団操作がグループ間コミュニケータに適用される方法を理解するため，大部分の
きぐぉグループ内コミュニケータ集団操作を以下のいずれかのカテゴリに分類して考えることができる（例えば， 文献せ〴〳そを参照）．
全対全 全てのプロセスが結果に関与する．全てのプロセスが結果を受信する．
• きぐぉたぁががぇぁごえぅげ〬 きぐぉたぁががぇぁごえぅげざ• きぐぉたぁががごくぁがが〬 きぐぉたぁががごくぁががざ〬 きぐぉたぁががごくぁががし• きぐぉたぁががげぅいさぃぅ〬 きぐぉたげぅいさぃぅたこぃぁごごぅげ• きぐぉたあぁげげぉぅげ

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

全対1 全てのプロセスが結果に関与する．〱つのプロセスが結果を受信する．

〲〹〳〰

• きぐぉたぇぁごえぅげ〬 きぐぉたぇぁごえぅげざ• きぐぉたげぅいさぃぅ
1対全 〱つのプロセスが結果に関与する．全てのプロセスが結果を受信する．

〳〱
〳〲
〳〳
〳〴
〳〵

• きぐぉたあぃぁこご〳〶〳〷• きぐぉたこぃぁごごぅげ〬 きぐぉたこぃぁごごぅげざ
その他 上記のカテゴリに適合しない集団操作．
• きぐぉたこぃぁぎ〬 きぐぉたぅじこぃぁぎ
きぐぉたこぃぁぎときぐぉたぅじこぃぁぎのデータ移動パターンはこの分類法に適合しない．
グループ間コミュニケータへの集団的通信の適用は，〲つのグループで適切に説明される．例えば，全対全のきぐぉたぁががぇぁごえぅげ操作は〱つのグループの全てのメンバからデータをギャザーし，結果を他のグループの全てのメンバに提示する操作として説明することができる（図〵〮〲を参照）． もう〱つの例では，〱対全のきぐぉたあぃぁこご操作は，

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〴〶
〱
〲
〳
〴
〵
〶
〷

〱つのグループの〱つのメンバから他のグループの全てのメンバにデータを送信する．
きぐぉたげぅいさぃぅたこぃぁごごぅげなどの計算付集団的操作も同様の解釈ができる（図〵〮〳を参照）．
グループ内コミュニケータの場合，これらの〲つのグループは同じである． グループ間
コミュニケータの場合，これらの〲つのグループは異なる．全対全操作の場合，このような各操作は対称な全二重動作が可能なように，〲つのフェーズで記述される．
以下の集団操作もグループ間コミュニケータに適用される．

〸〹• きぐぉたあぁげげぉぅげ〬〱〰
〱〱• きぐぉたあぃぁこご〬

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

• きぐぉたぇぁごえぅげ〬 きぐぉたぇぁごえぅげざ〬• きぐぉたこぃぁごごぅげ〬 きぐぉたこぃぁごごぅげざ〬• きぐぉたぁががぇぁごえぅげ〬 きぐぉたぁががぇぁごえぅげざ〬• きぐぉたぁががごくぁがが〬 きぐぉたぁががごくぁががざ〬 きぐぉたぁががごくぁががし〬〱〹〲〰

• きぐぉたぁががげぅいさぃぅ〬 きぐぉたげぅいさぃぅ〬〲〱〲〲• きぐぉたげぅいさぃぅたこぃぁごごぅげ〮

〲〳
〲〴
〲〵
〲〶

ぃ〫〫言 語 で は， こ れ ら の 関 数 の 呼 び 出 し 形 式 はきぐぉ〺〺ぃはねねク ラ ス と な る． し か し，ぃ〫〫言語のきぐぉ〺〺ぃはねねでは集団操作が意味を持たないため（グループ間コミュニケ
ータでもグループ内コミュニケータでもないため），関数は全て純粋仮想である．

〲〷
〲〸
〲〹

0

0

〳〰

1

1

2

2

〳〱
〳〲
〳〳

3

〳〴

Lcomm

Rcomm

0

0

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

1

1

2

2

3

〴〲
〴〳

Lcomm

Rcomm

〴〴
〴〵
〴〶
〴〷
〴〸

図 〵〮〲〺 グループ間コミュニケータのオールギャザー． 仮想的な１つのプロセスにデータを集める方法を例示しているが，アルゴリズムを示しているわけではない． 〲つのフェーズで双方向のオールギャザーが行われる．

〵〮〲〮 コミュニケータ引数

〱〴〷
〱
〲

0

0

1

1

2

2

〳

3

〴
〵
〶
〷

Lcomm

Rcomm
〸
〹
〱〰

0

0

1

1

〱〲

2

2

〱〳

〱〱

〱〴

3

〱〵

Lcomm

Rcomm

〱〶
〱〷

図 〵〮〳〺 グループ間コミュニケータのリデューススキャッタ． 仮想的な１つのプロセスにデータを集める方法を例示しているが，アルゴリズムを示しているわけではない． 〲つのフェーズで双方向のリデューススキャッタが行われる．

〱〸
〱〹
〲〰
〲〱

5.2.3 グループ間コミュニケータ集団操作の仕様
グループ間コミュニケータによって識別される両方のグループの全てのプロセスは集団的ルーチンを呼び出す必要がある．
グループ間コミュニケータの場合は，あるプロセスからそのプロセス自身への通信が行われないため，グループ間コミュニケータの「インプレイス」オプションは グループ
間コミュニケータに適用されない．
グループ間コミュニケータ集団的通信の場合，操作が全対〱または〱対全のカテゴリに含まれるのであれば，送信は単方向となる．送信方向はルート引数の特別な値で示される． この場合，ルートプロセスを含むグループでは，グループ内の全てのプロセスはそのルートの特別な引数を使用してルーチンを呼び出す必要がある．このため，ルートプ
ロセスは特別なルート値きぐぉたげくくごを使用し，同じグループ内の他の全てのプロセスはルートとしてきぐぉたぐげくぃたぎさががを使用する．他のグループの全てのプロセス（ルートプロ
セスに対してリモートグループであるグループ）は集団的ルーチンを呼び出してルートのランクを提供する必要がある．操作が全対全のカテゴリに含まれる場合，送信は双方
向となる．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

根拠 〱対〱および〱対全のカテゴリに含まれる操作は本来単方向で，方向を指定する
ための明確な方法がある．全対全のカテゴリに含まれる操作は交換の一部として発生することがあり，この場合は一度に双方向で通信することに意味がある． （根拠の終わり）

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信〱〴〸〱

5.3 バリア同期

〲
〳
〴
〵
〶

きぐぉたあぁげげぉぅげ〨 っはねね 〩
ぉぎ

っはねね

コミュニケータ（ハンドル）

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

どのぴ きぐぉたあちひひどづひ〨きぐぉたぃはねね っはねね〩
きぐぉたあぁげげぉぅげ〨ぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺あちひひどづひ〨〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}
っはねね がグループ内コミュニケータの場合，きぐぉたあぁげげぉぅげは全グループメンバが呼び出すまでブロックする．この呼び出しがプロセスに戻るのは，全てのグループメンバがその呼び出しを開始した後である．
っはねねがグループ間コミュニケータの場合，きぐぉたあぁげげぉぅげには 〲つのグループが含まれる．呼び出しがグループ間コミュニケータの〱つの グループ（グループぁ）内のプロセスに戻るのは，他のグループ（グループあ）の全てのメンバがその呼び出しを開始した
後（逆も同様）である．プロセスは同じグループ内の全てのプロセスが呼び出しを開始
する前に呼び出しから戻ることがある．

〲〱
〲〲
〲〳

5.4 ブロードキャスト

〲〴
〲〵
〲〶

きぐぉたあぃぁこご〨 ぢふ》づひ〬 っはふのぴ〬 つちぴちぴべばづ〬 ひははぴ〬 っはねね 〩

〲〷
〲〸

ぉぎくさご

〲〹

ぉぎ

〳〰

ぉぎ

〳〱

ぉぎ

〳〲

ぉぎ

ぢふ》づひ
っはふのぴ
つちぴちぴべばづ
ひははぴ
っはねね

バッファの先頭アドレス（選択型）
バッファ内の要素の数（非負の 整数型）
バッファのデータ型（ハンドル）
ブロードキャストルートのランク（整数型）
コミュニケータ（ハンドル）

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

どのぴ きぐぉたあっちびぴ〨ぶはどつ〪 ぢふててづひ〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね 〩きぐぉたあぃぁこご〨あさううぅげ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさううぅげ〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺あっちびぴ〨ぶはどつ〪 ぢふててづひ〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ ひははぴ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

っはねねがグループ内コミュニケータの場合，きぐぉたあぃぁこごは，ランクが ひははぴであるプロ
セスからそのプロセスを含むグループ内の全プロセスへメッセージをブロードキャスト
する．っはねね およびひははぴとして同じ引数を使ってグループ内の全メンバにより呼び出される．戻った時点で，ひははぴのバッファの内容が全プロセスへコピーされている．
一般的に，つちぴちぴべばづでは派生データ型が使用できる． 任意のプロセスのっはふのぴ，つちぴちぴべばづの型シグネチャはルートのっはふのぴ，つちぴちぴべばづの型シグネチャと同じでなけ〵〮〵〮 ギャザー〱〴〹

ればならない．このことは，各プロセスとルートの間で，送信データの量と受け取るデータの量が等しくなければならないということを意味している．きぐぉたあぃぁこご および他の全てのデータ移動集団的ルーチンによりこの制約が課される．ただし送信側と受信側とで型マップの違いだけは許容される．
「インプレイス」オプションはここでは無効である，
っはねねがグループ間コミュニケータの場合，呼び出しにはグループ間コミュニケータ
の全てのプロセスが含まれるが， 〱つのグループ（グループぁ）によりルートプロセスが定義される．他方のグループ（グループあ）の全てのプロセスは，引数〨ひははぴ〩にグルー
プぁのルートのランクである同じ値を渡す．ルートは ひははぴに値きぐぉたげくくごを渡す． グループぁのその他の全てのプロセスはひははぴに値 きぐぉたぐげくぃたぎさががを渡す．データはルートからグループあの全てのプロセスにブロードキャストされる． グループあのプロセスのバ
ッファ引数はルートのバッファ引数と整合していなければならない．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

5.4.1 MPI_BCASTの使用例〱〷

ここではグループ内コミュニケータを使用した例を示す．

〱〸〱〹

例 5.1 プロセス〰からグループ内の全てのプロセスに〱〰〰個のどのぴをブロードキャストす
る．

〲〰
〲〱
〲〲

きぐぉたぃはねね っはねね〻
どのぴ ちひひちべせ〱〰〰そ〻どのぴ ひははぴ〽〰〻〮〮〮
きぐぉたあっちびぴ〨 ちひひちべ〬 〱〰〰〬 きぐぉたぉぎご〬 ひははぴ〬 っはねね〩〻
ここで取りあげる一部分のコードの多くは，変数（上記のっはねねなど）に適切な値が代入されているものと仮定している．

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

5.5 ギャザー

〳〱
〳〲
〳〳
〳〴

きぐぉたぇぁごえぅげ〨 びづのつぢふて〬 びづのつっはふのぴ〬 びづのつぴべばづ〬 ひづっぶぢふて〬 ひづっぶっはふのぴ〬 ひづっぶぴべばづ〬 ひははぴ〬 っはねね〩
ぉぎ
ぉぎ
ぉぎ
くさご
ぉぎ
ぉぎ
ぉぎ
ぉぎ

びづのつぢふてびづのつっはふのぴ
びづのつぴべばづ
ひづっぶぢふてひづっぶっはふのぴ
ひづっぶぴべばづ
ひははぴ
っはねね

〳〵

送信バッファの先頭アドレス（選択型）〳〶

送信バッファの要素の数（非負の 整数型）〳〷

送信バッファの要素のデータ型（ハンドル）〳〸

受信バッファのアドレス（選択型，ルートでのみ意
味を持つ）

〳〹

〱回の受信の要素数（非負の 整数型，ルートでのみ意味を持つ）〴〱

受信バッファの要素のデータ型〨ルートでのみ意味を持つ〩 （ハンドル）〴〳

受信プロセスのランク（整数型）〴〵

コミュニケータ（ハンドル）〴〶

どのぴ きぐぉたぇちぴとづひ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬

〴〰

〴〲

〴〴

〴〷
〴〸

第 〵〮 集団的通信

〱〵〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね〩
きぐぉたぇぁごえぅげ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬
げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぇちぴとづひ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ ひははぴ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}
っはねねがグループ間コミュニケータの場合，各プロセス（ルートプロセスを含む）は，
送信バッファの内容をルートプロセスへ送信する．ルートプロセスはメッセージを受信し，ランクの順番に格納する． あたかもグループの中のn個のプロセス（ルートプロセ
スを含む）が以下のルーチンの呼び出しを実行し，

〱〵
〱〶
〱〷

きぐぉたこづのつ〨びづのつぢふて, びづのつっはふのぴ, びづのつぴべばづ, ひははぴ, ...〩,
さらに次の呼び出しをの回実行した結果と同じである．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたげづっぶ〨ひづっぶぢふて 〫 ど · ひづっぶっはふのぴ · づへぴづのぴ〨ひづっぶぴべばづ〩, ひづっぶっはふのぴ, ひづっぶぴべばづ, ど, ...〩,
ここで，づへぴづのぴ〨ひづっぶぴべばづ〩はきぐぉたごべばづたでづぴたづへぴづのぴ〨〩の呼び出しで得ることができる型の範囲である．
言い換えると，グループ内のプロセスが送信した の個のメッセージをランク順に連結
し，あたかも得られたメッセージをきぐぉたげぅぃざ〨ひづっぶぢふて〬 ひづっぶっはふのぴ·の〬 ひづっぶぴべばづ〬 〮〮〮〩 の呼び
出しによって受け取ったかのようにルートが受信する．
ルート以外の全てのプロセスについては受信バッファは無視される．
通常，びづのつぴべばづとひづっぶぴべばづにはデータ型が使用できる，各プロセスのびづのつっはふのぴ，びづのつぴべばづの型シグネチャは，ルートのひづっぶっはふのぴ，ひづっぶぴべばづの型シグネチャと等しくなければならない．このことは，各プロセスとルートの間で，送信データの量と受け取るデータの量が等しくなければならないということを意味する．ただし送信側と受信側とで型マップの違いは許容される．
ひははぴのプロセスでは関数への全ての引数は意味を持つが，他のプロセスでは引数
びづのつぢふて，びづのつっはふのぴ，びづのつぴべばづ，ひははぴ，っはねねのみが意味を持つ．引数ひははぴおよびっはねねは全てのプロセスで同じ値でなければならない．
個数と型の指定は，ルートプロセス上の同じ位置に複数回書き込まれることがあってはならない．そのような呼び出しは誤りである．
ルートプロセスの引数ひづっぶっはふのぴは各プロセスから受信する項目数を示しているのであって，受信する項目の総数を示しているのではないことに注意すること．
ルートでびづのつぢふての値としてきぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケー
タの「インプレイス」オプションが指定される．このような場合，びづのつっはふのぴとびづのつぴべばづは無視され， ギャザーされたベクトルに対してルートの寄与分がすでに受信バッファ内の正しい場所にあると仮定される．
っはねねがグループ間コミュニケータの場合，呼び出しにはグループ間コミュニケータの全てのプロセスが含まれるが，〱つのグループ（グループぁ）によりルートプロセスが定〵〮〵〮 ギャザー〱〵〱

義される．他方のグループ（グループあ）の全てのプロセスは，引数ひははぴにグループぁの
ルートのランクである同じ値を渡す．ルートは ひははぴに値きぐぉたげくくごを渡す．グループぁの
その他の全てのプロセスはひははぴに値きぐぉたぐげくぃたぎさががを渡す．データはグループあの全てのプロセスからルートにギャザーされる． グループあのプロセスの送信バッファ引数はルートの受信バッファ引数と整合していなければならない．

〱
〲
〳
〴
〵
〶
〷

きぐぉたぇぁごえぅげざ〨 びづのつぢふて〬 びづのつっはふのぴ〬 びづのつぴべばづ〬 ひづっぶぢふて〬 ひづっぶっはふのぴび〬 つどびばぬび〬 ひづっぶぴべばづ〬 ひははぴ〬
っはねね〩
ぉぎ
ぉぎ
ぉぎ
くさご
ぉぎ

ぉぎ

びづのつぢふてびづのつっはふのぴ
びづのつぴべばづ
ひづっぶぢふてひづっぶっはふのぴび

つどびばぬび送信バッファの先頭アドレス（選択型）

〸
〹
〱〰
〱〱

送信バッファの要素の数（非負の 整数型）〱〲

送信バッファの要素のデータ型（ハンドル）〱〳

受信バッファのアドレス（選択型，ルートでのみ意
味を持つ）

〱〴

各プロセスから受信した要素の数を持つ 非負の 整数型の（グループサイズの長さの）配列（ルートでのみ意味を持つ）〱〶（グループサイズの長さの） 整数配列． エント
リどはプロセスどから送られてくるデータを置く位
置の ひづっぶぢふてからの相対変位を指定する（ルートでのみ意味を持つ）
．

〱〵

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

ぉぎ

ひづっぶぴべばづ

受信バッファの要素のデータ型（ルートでのみ意味を持つ）（ハンドル）

ぉぎ

ひははぴ
っはねね

受信プロセスのランク（整数型）〲〵

コミュニケータ（ハンドル）

〲〶

ぉぎ

〲〳
〲〴

〲〷

どのぴ きぐぉたぇちぴとづひぶ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ 〪ひづっぶっはふのぴび〬 どのぴ 〪つどびばぬび〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬
どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〩
きぐぉたぇぁごえぅげざ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬 いぉこぐがこ〬げぅぃざごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎごこ〨〪〩〬 いぉこぐがこ〨〪〩〬 げぅぃざごすぐぅ〬 げくくご〬
ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぇちぴとづひぶ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬っはのびぴ どのぴ ひづっぶっはふのぴびせそ〬 っはのびぴ どのぴ つどびばぬびせそ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ ひははぴ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

きぐぉたぇぁごえぅげざはきぐぉたぇぁごえぅげの機能を拡張したもので， ひづっぶっはふのぴびが配列になっており，各プロセスから可変個のデータを受け取れるようになっている．さらに，新しい引数としてつどびばぬびを提供することにより，ルート上のデータの配置に関して自由度が増している．
っはねねがグループ間コミュニケータの場合，結果としては，あたかもルートプロセスを含む各プロセスがメッセージをルートへ送信し，きぐぉたこづのつ〨びづのつぢふて, びづのつっはふのぴ, びづのつぴべばづ, ひははぴ, ...〩,

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信〱〵〲〱

ルートプロセスが受信をの回繰り返した場合と同じである．

〲〳

きぐぉたげづっぶ〨ひづっぶぢふて 〫 つどびばぬびせなそ · づへぴづのぴ〨ひづっぶぴべばづ〩, ひづっぶっはふのぴびせなそ, ひづっぶぴべばづ, ど, ...〩.

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

プロセスな から送られたデータは，オフセットつどびばぬびせなそ 要素（ひづっぶぴべばづの表現で）から始
まるひははぴプロセスのひづっぶぢふてに配置される．
ルート以外の全てのプロセスでは，受信バッファは無視される．
プロセスど の びづのつっはふのぴ，びづのつぴべばづで示される型シグネチャは，ルートの ひづっぶっはふのぴびせどそ，
ひづっぶぴべばづ で示される型シグネチャと等しくなければならない．このことは，各プロセスとルートとの間でペアごとに，送信データの量が受け取るデータの量と等しくなければならないということを意味する．ただし，例〵〮〶 に示されているように，送信側と受信側とで型マップの違いは許容される．
ひははぴプロセスでは，関数の全ての引数が意味を持つが，それ以外のプロセスでは引
数びづのつぢふて，びづのつっはふのぴ，びづのつぴべばづ，ひははぴ，っはねねのみが意味をもつ．引数ひははぴおよびっはねねは
全てのプロセスで値が同一でなければならない．
個数，型，変位の指定により，ルートプロセス上の同じ位置に複数回書き込まれることがあってはならない．そのような呼び出しはエラーとなる．
ルートでびづのつぢふての値としてきぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケー
タの「インプレイス」オプションが指定される．このような場合，びづのつっはふのぴとびづのつぴべばづは無視され， ギャザーされたベクトルに対してルートの関与分がすでに受信バッファ内の正しい場所にあると仮定される．
っはねねがグループ間コミュニケータの場合，呼び出しにはグループ間コミュニケータ
の全てのプロセスが含まれるが， 〱つのグループ（グループぁ）によりルートプロセ
スが定義される．他方のグループ（グループあ）の全てのプロセスは，引数ひははぴに グループぁのルートのランクである同じ値を渡す．ルートは ひははぴに値きぐぉたげくくごを渡す． グ
ループぁのその他の全てのプロセスはひははぴに値 きぐぉたぐげくぃたぎさががを渡す．データはグルー
プあの全てのプロセスからルートにギャザーされる．グループあのプロセスの 送信バッ
ファ引数はルートの受信バッファ引数と整合していなければならない．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

5.5.1 MPI_GATHER, MPI_GATHERVの使用例
ここではグループ内コミュニケータを使用した例を示す．
例 5.2 グループ内の全てのプロセスからルートへ〱〰〰個のどのぴをギャザーする． 図〵〮〴を参照すること．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そ〻どのぴ ひははぴ〬 〪ひぢふて〻〮〮〮きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪〱〰〰〪びどぺづはて〨どのぴ〩〩〻きぐぉたぇちぴとづひ〨 びづのつちひひちべ〬 〱〰〰〬 きぐぉたぉぎご〬 ひぢふて〬 〱〰〰〬 きぐぉたぉぎご〬 ひははぴ〬 っはねね〩〻〵〮〵〮 ギャザー

〱〵〳
100

100

100

〱

all processes

〲
〳
〴

100

100

100

〵

at root〶〷rbuf

図 〵〮〴〺 ルートプロセスがグループ内の各プロセスから〱〰〰 個のどのぴをギャザーする．

〸
〹
〱〰
〱〱

例 5.3 前の例の変更 ほ ルートだけが受信バッファ用のメモリを割り当てる．
きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そ〻どのぴ ひははぴ〬 ねべひちのに〬 〪ひぢふて〻〮〮〮きぐぉたぃはねねたひちのに〨 っはねね〬 〦ねべひちのに〩〻どて 〨 ねべひちのに 〽〽 ひははぴ〩 ほきぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪〱〰〰〪びどぺづはて〨どのぴ〩〩〻ぽきぐぉたぇちぴとづひ〨 びづのつちひひちべ〬 〱〰〰〬 きぐぉたぉぎご〬 ひぢふて〬 〱〰〰〬 きぐぉたぉぎご〬 ひははぴ〬 っはねね〩〻

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

例 5.4 前の例と同じことをしているが，派生データ型を使用している．ギャザーではルートプロセスと各プロセスとの間で型対応が行われているので，その型は でびどぺづ〪〱〰〰個の整数の集まりと一致しない．
きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そ〻どのぴ ひははぴ〬 〪ひぢふて〻きぐぉたいちぴちぴべばづ ひぴべばづ〻〮〮〮
きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
きぐぉたごべばづたっはのぴどでふはふび〨 〱〰〰〬 きぐぉたぉぎご〬 〦ひぴべばづ 〩〻きぐぉたごべばづたっはねねどぴ〨 〦ひぴべばづ 〩〻ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪〱〰〰〪びどぺづはて〨どのぴ〩〩〻きぐぉたぇちぴとづひ〨 びづのつちひひちべ〬 〱〰〰〬 きぐぉたぉぎご〬 ひぢふて〬 〱〬 ひぴべばづ〬 ひははぴ〬 っはねね〩〻

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

例 5.5 各プロセスはルートへ〱〰〰個のどのぴを送信するが，それぞれを受信側でびぴひどつづ個のどのぴ分だけの間隔をおいて配置する．きぐぉたぇぁごえぅげざおよびつどびばぬび引数を使用してこの効果を得ることができる．stride ≥ 〱〰〰と仮定する．図〵〮〵を参照すること．

〴〰
〴〱
〴〲
〴〳

きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そ〻どのぴ ひははぴ〬 〪ひぢふて〬 びぴひどつづ〻どのぴ 〪つどびばぬび〬ど〪〬ひっはふのぴび〻

〴〴

〮〮〮

〴〸

〴〵
〴〶
〴〷

第 〵〮 集団的通信

〱〵〴
100

〱

100

100

all processes

〲
〳
〴

100

〵

100

100

at root〶〷

stride
rbuf

〸
〹
〱〰
〱〱

図 〵〮〵〺 ルートプロセスは，グループ内の各プロセスから〱〰〰個のどのぴをギャザーし，それぞれをびぴひどつづの どのぴ個分の間隔をおいて配置する．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びぴひどつづ〪びどぺづはて〨どのぴ〩〩〻
つどびばぬび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
ひっはふのぴび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻てはひ 〨ど〽〰〻 ど〼でびどぺづ〻 〫〫ど〩 ほ
つどびばぬびせどそ 〽 ど〪びぴひどつづ〻ひっはふのぴびせどそ 〽 〱〰〰〻
ぽきぐぉたぇちぴとづひぶ〨 びづのつちひひちべ〬 〱〰〰〬 きぐぉたぉぎご〬 ひぢふて〬 ひっはふのぴび〬 つどびばぬび〬 きぐぉたぉぎご〬
ひははぴ〬 っはねね〩〻ただし，stride < 〱〰〰 の場合に，このプログラムはエラーは誤りである．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

例 5.6 受信側についての例〵〮〵と同じ． ただし，ぃ言語における 〱〰〰×〱〵〰のどのぴ配列の第〰列から〱〰〰個の整数を送信する． 図〵〮〶を参照すること．
きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そせ〱〵〰そ〻どのぴ ひははぴ〬 〪ひぢふて〬 びぴひどつづ〻きぐぉたいちぴちぴべばづ びぴべばづ〻
どのぴ 〪つどびばぬび〬ど〪〬ひっはふのぴび〻
〮〮〮

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びぴひどつづ〪びどぺづはて〨どのぴ〩〩〻
つどびばぬび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
ひっはふのぴび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻てはひ 〨ど〽〰〻 ど〼でびどぺづ〻 〫〫ど〩 ほ
つどびばぬびせどそ 〽 ど〪びぴひどつづ〻ひっはふのぴびせどそ 〽 〱〰〰〻ぽ〪〯 ぃひづちぴづ つちぴちぴべばづ てはひ 〱 っはぬふねの はて ちひひちべ〪〯
きぐぉたごべばづたぶづっぴはひ〨 〱〰〰〬 〱〬 〱〵〰〬 きぐぉたぉぎご〬 〦びぴべばづ〩〻
きぐぉたごべばづたっはねねどぴ〨 〦びぴべばづ 〩〻きぐぉたぇちぴとづひぶ〨 びづのつちひひちべ〬 〱〬 びぴべばづ〬 ひぢふて〬 ひっはふのぴび〬 つどびばぬび〬 きぐぉたぉぎご〬
ひははぴ〬 っはねね〩〻〵〮〵〮 ギャザー

〱〵〵
150

150

100

100

150

〱

all processes

100

〲
〳
〴
〵

100

100

〶

100

at root〷〸

striderbuf

図 〵〮〶〺 ルートプロセスはぃ言語における 〱〰〰×〱〵〰の配列の第〰列をギャザーし，それぞれをびぴひどつづ個のどのぴ個分だけの間隔をおいて配置する．

〹
〱〰
〱〱
〱〲
〱〳

例 5.7 プロセスどはぃ言語における〱〰〰 × 〱〵〰のどのぴ配列の第ど列から〨〱〰〰〭ど〩個のどのぴを送信する．上記〲つの例と同様に，びぴひどつづ間隔でバッファの中へ読み込む．図〵〮〷を参照す
ること．

〱〴
〱〵
〱〶
〱〷

きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そせ〱〵〰そ〪〬びばぴひ〻
どのぴ ひははぴ〬 〪ひぢふて〬 びぴひどつづ〬 ねべひちのに〻きぐぉたいちぴちぴべばづ びぴべばづ〻
どのぴ 〪つどびばぬび〬ど〪〬ひっはふのぴび〻

〱〸
〱〹
〲〰
〲〱
〲〲

〮〮〮
きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
きぐぉたぃはねねたひちのに〨 っはねね〬 〦ねべひちのに 〩〻ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びぴひどつづ〪びどぺづはて〨どのぴ〩〩〻
つどびばぬび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
ひっはふのぴび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻てはひ 〨ど〽〰〻 ど〼でびどぺづ〻 〫〫ど〩 ほ
つどびばぬびせどそ 〽 ど〪びぴひどつづ〻ひっはふのぴびせどそ 〽 〱〰〰〭ど〻〪〯 のはぴづ っとちのでづ てひはね ばひづぶどはふび づへちねばぬづ 〪〯ぽ〪〯 ぃひづちぴづ つちぴちぴべばづ てはひ ぴとづ っはぬふねの ぷづ ちひづ びづのつどので〪〯きぐぉたごべばづたぶづっぴはひ〨 〱〰〰〭ねべひちのに〬 〱〬 〱〵〰〬 きぐぉたぉぎご〬 〦びぴべばづ〩〻
きぐぉたごべばづたっはねねどぴ〨 〦びぴべばづ 〩〻〪〯 びばぴひ どび ぴとづ ちつつひづびび はて びぴちひぴ はて 〢ねべひちのに〢 っはぬふねの〪〯びばぴひ 〽 〦びづのつちひひちべせ〰そせねべひちのにそ〻きぐぉたぇちぴとづひぶ〨 びばぴひ〬 〱〬 びぴべばづ〬 ひぢふて〬 ひっはふのぴび〬 つどびばぬび〬 きぐぉたぉぎご〬
ひははぴ〬 っはねね〩〻
ただし，各プロセスから受信するデータの量は異なる．

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

例 5.8 例〵〮〷と同じ． ただし，送信側では別の方法で行われている． 送信側で正しい
ストライドとなるようなデータ型を生成し，ぃ言語における配列から〱列読み込む．
第〴〮〱〮〱〴節の例〴〮〱〶で行ったのと同じである．

〴〲
〴〳
〴〴
〴〵
〴〶

きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そせ〱〵〰そ〪〬びばぴひ〻
どのぴ ひははぴ〬 〪ひぢふて〬 びぴひどつづ〬 ねべひちのに〬 つどびばせ〲そ〬 ぢぬはっにぬづのせ〲そ〻〴〷〴〸第 〵〮 集団的通信

〱〵〶
150

〱
〲

100

150
100

150

all processes

100

〳
〴
〵
〶

100

99

98

at root〷〸

stride
rbuf

〹
〱〰
〱〱
〱〲

図 〵〮〷〺 ルートプロセスはぃ言語における〱〰〰×〱〵〰の配列の第ど列から〱〰〰〭ど個のどのぴをギャ
ザーし，それぞれをびぴひどつづ個のどのぴ分の間隔をおいて配置する．

〱〳
〱〴
〱〵
〱〶

きぐぉたいちぴちぴべばづ びぴべばづ〬ぴべばづせ〲そ〻どのぴ 〪つどびばぬび〬ど〪〬ひっはふのぴび〻
〮〮〮

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
きぐぉたぃはねねたひちのに〨 っはねね〬 〦ねべひちのに 〩〻ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びぴひどつづ〪びどぺづはて〨どのぴ〩〩〻
つどびばぬび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
ひっはふのぴび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻てはひ 〨ど〽〰〻 ど〼でびどぺづ〻 〫〫ど〩 ほ
つどびばぬびせどそ 〽 ど〪びぴひどつづ〻ひっはふのぴびせどそ 〽 〱〰〰〭ど〻ぽ〪〯 ぃひづちぴづ つちぴちぴべばづ てはひ はのづ どのぴ〬 ぷどぴと づへぴづのぴ はて づのぴどひづ ひはぷ〪〯
つどびばせ〰そ 〽 〰〻つどびばせ〱そ 〽 〱〵〰〪びどぺづはて〨どのぴ〩〻
ぴべばづせ〰そ 〽 きぐぉたぉぎご〻 ぴべばづせ〱そ 〽 きぐぉたさあ〻ぢぬはっにぬづのせ〰そ 〽 〱〻ぢぬはっにぬづのせ〱そ 〽 〱〻きぐぉたごべばづたっひづちぴづたびぴひふっぴ〨 〲〬 ぢぬはっにぬづの〬 つどびば〬 ぴべばづ〬 〦びぴべばづ 〩〻きぐぉたごべばづたっはねねどぴ〨 〦びぴべばづ 〩〻びばぴひ 〽 〦びづのつちひひちべせ〰そせねべひちのにそ〻きぐぉたぇちぴとづひぶ〨 びばぴひ〬 〱〰〰〭ねべひちのに〬 びぴべばづ〬 ひぢふて〬 ひっはふのぴび〬 つどびばぬび〬 きぐぉたぉぎご〬
ひははぴ〬 っはねね〩〻

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

例 5.9 送信側は例〵〮〷と同じ．ただし，受信側では受信したブロックの間のストライドはブロック毎に異なる． 図〵〮〸を参照すること．
きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そせ〱〵〰そ〪〬びばぴひ〻
どのぴ ひははぴ〬 〪ひぢふて〬 〪びぴひどつづ〬 ねべひちのに〬 ぢふてびどぺづ〻
きぐぉたいちぴちぴべばづ びぴべばづ〻
どのぴ 〪つどびばぬび〬ど〪〬ひっはふのぴび〬はててびづぴ〻

〴〳
〴〴
〴〵
〴〶

〮〮〮
きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
きぐぉたぃはねねたひちのに〨 っはねね〬 〦ねべひちのに 〩〻〴〷〴〸

びぴひどつづ 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻〵〮〵〮 ギャザー

〱〵〷
150
100

150

150

100

〱

all processes

100

〲
〳
〴
〵

100

99

〶

98

at root〷〸rbuf

stride[1]図 〵〮〸〺 ルートプロセスはぃ言語における〱〰〰×〱〵〰の配列の第ど 列から 〱〰〰〭ど どのぴをギャザ
ーし，それぞれをびぴひどつづ どのぴせどそ個分だけの間隔をおいて配置する（可変ストライド）
．

〹
〱〰
〱〱
〱〲
〱〳

〮〮〮
〪〯 びぴひどつづせどそ てはひ ど 〽 〰 ぴは でびどぺづ〭〱 どび びづぴ びはねづとはぷ〪〯〱〴〪〯 びづぴ ふば つどびばぬび ちのつ ひっはふのぴび ぶづっぴはひび てどひびぴ〪〯
つどびばぬび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
ひっはふのぴび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
はててびづぴ 〽 〰〻てはひ 〨ど〽〰〻 ど〼でびどぺづ〻 〫〫ど〩 ほ
つどびばぬびせどそ 〽 はててびづぴ〻
はててびづぴ 〫〽 びぴひどつづせどそ〻
ひっはふのぴびせどそ 〽 〱〰〰〭ど〻ぽ〪〯 ぴとづ ひづぱふどひづつ ぢふててづひ びどぺづ てはひ ひぢふて どび のはぷ づちびどぬべ はぢぴちどのづつ〪〯
ぢふてびどぺづ 〽 つどびばぬびせでびどぺづ〭〱そ〫ひっはふのぴびせでびどぺづ〭〱そ〻ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨ぢふてびどぺづ〪びどぺづはて〨どのぴ〩〩〻〪〯 ぃひづちぴづ つちぴちぴべばづ てはひ ぴとづ っはぬふねの ぷづ ちひづ びづのつどので〪〯きぐぉたごべばづたぶづっぴはひ〨 〱〰〰〭ねべひちのに〬 〱〬 〱〵〰〬 きぐぉたぉぎご〬 〦びぴべばづ〩〻
きぐぉたごべばづたっはねねどぴ〨 〦びぴべばづ 〩〻びばぴひ 〽 〦びづのつちひひちべせ〰そせねべひちのにそ〻きぐぉたぇちぴとづひぶ〨 びばぴひ〬 〱〬 びぴべばづ〬 ひぢふて〬 ひっはふのぴび〬 つどびばぬび〬 きぐぉたぉぎご〬
ひははぴ〬 っはねね〩〻

〱〷

〱〵
〱〶

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

例 5.10 プロセスど は，ぃ言語における〱〰〰 × 〱〵〰のどのぴ配列の第ど列からのふね個のどのぴを送信する．しかしひははぴではのふねにどのような値が設定されているか分からないので，まずギャザーを行ってこの値を獲得する．データは受信側で連続した領域に配置される．

〳〷
〳〸
〳〹
〴〰
〴〱

きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そせ〱〵〰そ〪〬びばぴひ〻
どのぴ ひははぴ〬 〪ひぢふて〬 ねべひちのに〬 つどびばせ〲そ〬 ぢぬはっにぬづのせ〲そ〻きぐぉたいちぴちぴべばづ びぴべばづ〬ぴべばづせ〲そ〻どのぴ 〪つどびばぬび〬ど〪〬ひっはふのぴび〬のふね〻

〴〲
〴〳
〴〴
〴〵
〴〶

〮〮〮
きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻〴〷〴〸

第 〵〮 集団的通信〱〵〸〱

きぐぉたぃはねねたひちのに〨 っはねね〬 〦ねべひちのに 〩〻〲〪〯 うどひびぴ〬 でちぴとづひ のふねび ぴは ひははぴ〪〯
ひっはふのぴび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻きぐぉたぇちぴとづひ〨 〦のふね〬 〱〬 きぐぉたぉぎご〬 ひっはふのぴび〬 〱〬 きぐぉたぉぎご〬 ひははぴ〬 っはねね〩〻〪〯 ひははぴ のはぷ とちび っはひひづっぴ ひっはふのぴび〬 ふびどので ぴとづびづ ぷづ びづぴ つどびばぬびせそ びは〪 ぴとちぴ つちぴち どび ばぬちっづつ っはのぴどでふはふびぬべ 〨はひ っはのっちぴづのちぴづつ〩 ちぴ ひづっづどぶづ づのつ〪〯
つどびばぬび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
つどびばぬびせ〰そ 〽 〰〻てはひ 〨ど〽〱〻 ど〼でびどぺづ〻 〫〫ど〩 ほ
つどびばぬびせどそ 〽 つどびばぬびせど〭〱そ〫ひっはふのぴびせど〭〱そ〻ぽ〪〯 ぁのつ〬 っひづちぴづ ひづっづどぶづ ぢふててづひ〪〯
ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪〨つどびばぬびせでびどぺづ〭〱そ〫ひっはふのぴびせでびどぺづ〭〱そ〩〪びどぺづはて〨どのぴ〩〩〻〪〯 ぃひづちぴづ つちぴちぴべばづ てはひ はのづ どのぴ〬 ぷどぴと づへぴづのぴ はて づのぴどひづ ひはぷ〪〯
つどびばせ〰そ 〽 〰〻つどびばせ〱そ 〽 〱〵〰〪びどぺづはて〨どのぴ〩〻
ぴべばづせ〰そ 〽 きぐぉたぉぎご〻 ぴべばづせ〱そ 〽 きぐぉたさあ〻ぢぬはっにぬづのせ〰そ 〽 〱〻ぢぬはっにぬづのせ〱そ 〽 〱〻きぐぉたごべばづたっひづちぴづたびぴひふっぴ〨 〲〬 ぢぬはっにぬづの〬 つどびば〬 ぴべばづ〬 〦びぴべばづ 〩〻きぐぉたごべばづたっはねねどぴ〨 〦びぴべばづ 〩〻びばぴひ 〽 〦びづのつちひひちべせ〰そせねべひちのにそ〻きぐぉたぇちぴとづひぶ〨 びばぴひ〬 のふね〬 びぴべばづ〬 ひぢふて〬 ひっはふのぴび〬 つどびばぬび〬 きぐぉたぉぎご〬
ひははぴ〬 っはねね〩〻

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

5.6 スキャッタ

〲〸
〲〹
〳〰
〳〱

きぐぉたこぃぁごごぅげ〨 びづのつぢふて〬 びづのつっはふのぴ〬 びづのつぴべばづ〬 ひづっぶぢふて〬 ひづっぶっはふのぴ〬 ひづっぶぴべばづ〬 ひははぴ〬 っはねね〩ぉぎ

びづのつぢふて送信バッファのアドレス（選択型，ルートでのみ意
味を持つ）

ぉぎ

びづのつっはふのぴ

各プロセスに送られる要素数〨非負の 整数型，ルートでのみ意味を持つ〩ぉぎ

びづのつぴべばづ

送信バッファ要素のデータ型（ルートでのみ意味を持つ）（ハンドル）

〳〸

くさご
ぉぎ

〴〰

ぉぎ

ひづっぶぢふてひづっぶっはふのぴ
ひづっぶぴべばづ
ひははぴ
っはねね

受信バッファのアドレス（選択型）

〳〹

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

〴〱

ぉぎ

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぉぎ

受信バッファ内の要素数（非負の 整数型）
受信バッファ要素のデータ型（ハンドル）
送信プロセスのランク（整数型）
コミュニケータ（ハンドル）

どのぴ きぐぉたこっちぴぴづひ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね〩
きぐぉたこぃぁごごぅげ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬
げくくご〬 ぃくきき〬 ぉぅげげくげ〩〵〮〶〮 スキャッタ〱〵〹〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺こっちぴぴづひ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ ひははぴ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたこぃぁごごぅげ はきぐぉたぇぁごえぅげの逆操作である．
っはねねがグループ内コミュニケータの場合，あたかもルートが以下の送信操作

〱
〲
〳
〴
〵
〶
〷
〸
〹

きぐぉたこづのつ〨びづのつぢふて 〫 ど · びづのつっはふのぴ · づへぴづのぴ〨びづのつぴべばづ〩, びづのつっはふのぴ, びづのつぴべばづ, ど, ...〩,〱〰
〱〱

をの回繰返し，各プロセスが以下の受信操作を行った結果と同じである．

〱〲〱〳

きぐぉたげづっぶ〨ひづっぶぢふて, ひづっぶっはふのぴ, ひづっぶぴべばづ, ど, ...〩.
ルートがきぐぉたこづのつ〨びづのつぢふて〬 びづのつっはふのぴ·の〬 びづのつぴべばづ〬 〮〮〮〩によってメッセージを送ることであるとも言い換られる．このメッセージはの個の等しいセグメントに分割されてi番目のセグメントがグループ内のi 番目のプロセスに送られる．各プロセスはこのメッセー
ジを上で述べた通りに受け取る．
全ての非ルートプロセスにおいて送信バッファは無視される．
ルートプロセスのびづのつっはふのぴ，びづのつぴべばづで示される型シグネチャは，全てのプロセスのひづっぶっはふのぴ，ひづっぶぴべばづで示される型シグネチャと等しくなければならない（しかし，型マップは異なっていてもよい）．このことは．各プロセスとルートとの間でペアごとに，送信データの量が受け取るデータの量と等しくなければならないということを意味する．
ただし，送信側と受信側とで型マップの違いは許容される．
ひははぴプロセスでは，関数の全ての引数が意味を持つが，それ以外のプロセスでは引
数ひづっぶぢふて，ひづっぶっはふのぴ，ひづっぶぴべばづ，ひははぴ，っはねねのみが意味をもつ．引数ひははぴおよびっはねねは
全てのプロセスで値が同一でなければならない．
個数，型の指定により，ルートプロセス上の同じ位置で複数回読み取られることがあってはならない．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

根拠 必要ではないが，きぐぉたぇぁごえぅげとの対称性を達成するために上述の制約が課されている．対応する制約（多重書き込み制約）は必要である． （根拠の終わり）

〳〴
〳〵
〳〶

ルートでひづっぶぢふての値としてきぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケー
タの「インプレイス」オプションが指定される．このような場合，ひづっぶっはふのぴとひづっぶぴべばづは無視され，ルートはそれ自体へのデータの「送信」を行わない． スキャッタされたベク
トルはn個のセグメントを持っていると仮定される．ここで，nはグループのサイズで，ルートが「それ自体に送信」するべきroot番目のセグメントは移動しない．
っはねねがグループ間コミュニケータの場合，呼び出しにはグループ間コミュニケータ
の全てのプロセスが含まれるが， 〱つのグループ（グループぁ）によりルートプロセスが定義される．他方のグループ（グループあ）の全てのプロセスは，引数ひははぴにグルー
プぁのルートのランクである同じ値を渡す．ルートは ひははぴに値きぐぉたげくくごを渡す． グループぁのその他の全てのプロセスはひははぴに値 きぐぉたぐげくぃたぎさががを渡す．データはルートか

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〶〰
〱
〲

らグループあの全てのプロセスにスキャッタされる．グループあのプロセスの受信バッフ
ァ引数はルートの送信バッファ引数と整合していなければならない．

〳
〴
〵
〶

きぐぉたこぃぁごごぅげざ〨 びづのつぢふて〬 びづのつっはふのぴび〬 つどびばぬび〬 びづのつぴべばづ〬 ひづっぶぢふて〬 ひづっぶっはふのぴ〬 ひづっぶぴべばづ〬 ひははぴ〬
っはねね〩
ぉぎ

びづのつぢふて送信バッファのアドレス（選択型，ルートでのみ意
味を持つ）

ぉぎ

びづのつっはふのぴび

各 ランク1 に送る要素の数を指定する（グループサ
イズの長さ）非負の整数配列

ぉぎ

つどびばぬび（グループサイズの長さの）整数配列．エントリどは
プロセスど に送られるデータを取得するびづのつぢふてへの相対変位として指定する．

〱〴

ぉぎ

送信バッファの要素のデータ型（ハンドル）

〱〵

くさご

〱〶

ぉぎ

びづのつぴべばづ
ひづっぶぢふてひづっぶっはふのぴ
ひづっぶぴべばづ
ひははぴ
っはねね

〷
〸
〹
〱〰
〱〱
〱〲
〱〳

〱〷

ぉぎ

〱〸
〱〹
〲〰

ぉぎ
ぉぎ

受信バッファのアドレス（選択型）
受信バッファの要素数（非負の 整数型）
受信バッファの要素のデータ型（ハンドル）
送信側プロセスのランク（整数型）
コミュニケータ（ハンドル）

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

どのぴ きぐぉたこっちぴぴづひぶ〨ぶはどつ〪 びづのつぢふて〬 どのぴ 〪びづのつっはふのぴび〬 どのぴ 〪つどびばぬび〬
きぐぉたいちぴちぴべばづ びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬
どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〩
きぐぉたこぃぁごごぅげざ〨こぅぎいあさう〬 こぅぎいぃくさぎごこ〬 いぉこぐがこ〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬げぅぃざごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎごこ〨〪〩〬 いぉこぐがこ〨〪〩〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 げくくご〬
ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺こっちぴぴづひぶ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 っはのびぴ どのぴ びづのつっはふのぴびせそ〬
っはのびぴ どのぴ つどびばぬびせそ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〬
どのぴ ひははぴ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

きぐぉたこぃぁごごぅげざはきぐぉたぇぁごえぅげざの逆操作である．
きぐぉたこぃぁごごぅげざはきぐぉたこぃぁごごぅげの機能を拡張したもので， びづのつっはふのぴびが配列になっており，各プロセスに可変個のデータを 送信できるようになっている．さらに，追加の引数としてつどびばぬびを提供することにより，ルート上のデータの取得場所に関して自由度が増している．
っはねねがグループ内コミュニケータの場合，あたかもルートが以下の送信操作を〴〰

きぐぉたこづのつ〨びづのつぢふて 〫 つどびばぬびせどそ · づへぴづのぴ〨びづのつぴべばづ〩, びづのつっはふのぴびせどそ, びづのつぴべばづ, ど, ...〩,〴〱〴〲の回繰り返し，各プロセスが以下の受信を行った結果と同じである．

〴〳〴〴

きぐぉたげづっぶ〨ひづっぶぢふて, ひづっぶっはふのぴ, ひづっぶぴべばづ, ど, ...〩.

〴〵
〴〶
〴〷
〴〸

ルート以外の全てのプロセスでは，送信バッファは無視される．
〱

訳者註：MPI-2.2の原文は “processor”であるが， “rank”の誤り．MPI-3では訂正されている．

〵〮〶〮 スキャッタ〱〶〱

ル ー ト のひづっぶっはふのぴびせどそ， ひづっぶぴべばづで 示 さ れ る 型 シ グ ネ チ ャ は プ ロ セ スど のびづのつっはふのぴ，
びづのつぴべばづで示される型シグネチャと等しくなければならない（しかし，型マップは異なっていてもよい）．このことは，各プロセスとルートとの間でペアごとの，送信データの量が受け取るデータの量と等しくなければならないということを意味する．ただし，送信側と受信側とで型マップの違いは許容される．
ひははぴプロセスでは，関数の全ての引数が意味を持つが，それ以外のプロセスでは引
数ひづっぶぢふて，ひづっぶっはふのぴ，ひづっぶぴべばづ，ひははぴ，っはねねのみが意味をもつ．引数ひははぴおよびっはねねは
全てのプロセスで値が同一でなければならない．
個数，型，変位の指定により，ルートプロセス上の同じ位置で複数回読み取られることがあってはならない．
ルートでひづっぶぢふての値としてきぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケー
タの「インプレイス」オプションが指定される．このような場合，ひづっぶっはふのぴとひづっぶぴべばづは無視され，ルートはそれ自体へのデータの「送信」を行わない． スキャッタされたベク
トルはn個のセグメントを持っていると仮定される．ここで，nはグループのサイズで，ルートが「それ自体に送信」するべきroot番目のセグメントは移動しない．
っはねねがグループ間コミュニケータの場合，呼び出しにはグループ間コミュニケータの全てのプロセスが含まれるが，〱つのグループ（グループぁ）によりルートプロセスが定義される．他方のグループ（グループあ）の全てのプロセスは，引数ひははぴにグループぁの
ルートのランクである同じ値を渡す．ルートはひははぴに値きぐぉたげくくごを渡す．グループぁの
その他の全てのプロセスは ひははぴに値きぐぉたぐげくぃたぎさががを渡す．データはルートからグルー
プあの全てのプロセスにスキャッタされる． グループあのプロセスの受信バッファ引数
はルートの送信バッファ引数と整合していなければならない．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

5.6.1 MPI_SCATTER, MPI_SCATTERVの使用例
ここではグループ間コミュニケータを使用した例を示す．

〲〹
〳〰
〳〱

例 5.11 例〵〮〲の逆の例．〱〰〰個のどのぴをルートプロセスから グループ内の各プロセスにス
キャッタする．図〵〮〹〮を参照すること．

〳〲
〳〳
〳〴

きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〪〬びづのつぢふて〻
どのぴ ひははぴ〬 ひぢふてせ〱〰〰そ〻〮〮〮きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
びづのつぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪〱〰〰〪びどぺづはて〨どのぴ〩〩〻〮〮〮きぐぉたこっちぴぴづひ〨 びづのつぢふて〬 〱〰〰〬 きぐぉたぉぎご〬 ひぢふて〬 〱〰〰〬 きぐぉたぉぎご〬 ひははぴ〬 っはねね〩〻

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

例 5.12 例〵〮〵の逆の例． ルートプロセスは〱〰〰個のどのぴを他のプロセスにスキャッタ
するが，どのぴは送信バッファにびぴひどつづ個のどのぴの間隔で置かれている． このような時はきぐぉたこぃぁごごぅげざの使用が求められる．stride ≥ 〱〰〰を仮定している．図〵〮〱〰を参照する
こと．

〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〶〲
100

〱

100

100

all processes

〲
〳
〴

100

〵

100

100

at root〶〷

sendbuf〸〹〱〰

図 〵〮〹〺 〱〰〰個のどのぴをルートプロセスからグループ内の各プロセスにスキャッタする．

〱〱

100

100

100

〱〲

all processes

〱〳
〱〴

100

〱〵

100

100

at root〱〶〱〷

stride〱〸sendbuf〱〹〲〰
〲〱

図 〵〮〱〰〺 ルートプロセスがびぴひどつづ個のどのぴの間隔の空いた〱〰〰個のどのぴをスキャッタ送信す
る．

〲〲
〲〳
〲〴
〲〵

きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〪〬びづのつぢふて〻
どのぴ ひははぴ〬 ひぢふてせ〱〰〰そ〬 ど〬 〪つどびばぬび〬 〪びっはふのぴび〻

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

〮〮〮
きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
びづのつぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びぴひどつづ〪びどぺづはて〨どのぴ〩〩〻〮〮〮
つどびばぬび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
びっはふのぴび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻てはひ 〨ど〽〰〻 ど〼でびどぺづ〻 〫〫ど〩 ほ
つどびばぬびせどそ 〽 ど〪びぴひどつづ〻びっはふのぴびせどそ 〽 〱〰〰〻
ぽきぐぉたこっちぴぴづひぶ〨 びづのつぢふて〬 びっはふのぴび〬 つどびばぬび〬 きぐぉたぉぎご〬 ひぢふて〬 〱〰〰〬 きぐぉたぉぎご〬
ひははぴ〬 っはねね〩〻

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

例 5.13 例〵〮〹の逆の例．送信側（ルートプロセス）ではストライドを変化させながらブロック間でデータが散在しており，受信側では〱〰〰×〱〵〰 のぃ言語配列の第ど列に受けとる．図〵〮〱〱を参照すること．

〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬ひづっぶちひひちべせ〱〰〰そせ〱〵〰そ〪〬ひばぴひ〻
どのぴ ひははぴ〬 〪びづのつぢふて〬 ねべひちのに〬 〪びぴひどつづ〻きぐぉたいちぴちぴべばづ ひぴべばづ〻
どのぴ ど〬 〪つどびばぬび〬 〪びっはふのぴび〬 はててびづぴ〻〵〮〶〮 スキャッタ

〱〶〳
150

100

150

150

100

〱

all processes

100

〲
〳
〴
〵

100

99

〶

98

at root〷〸

stride[1]sendbuf〹〱〰

図 〵〮〱〱〺 ルートは，〱〰〰〭ど個のどのぴブロックを〱〰〰×〱〵〰のぃ言語配列の第ど列へスキャッタさせる．送信側では，ブロックがそれぞれびぴひどつづせどそ個の間隔で散在している

〱〱
〱〲
〱〳

〮〮〮
きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
きぐぉたぃはねねたひちのに〨 っはねね〬 〦ねべひちのに 〩〻〱〴びぴひどつづ 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻〪〮〮〮〯 びぴひどつづせどそ てはひ ど 〽 〰 ぴは でびどぺづ〭〱 どび びづぴ びはねづとはぷ〪 びづのつぢふて っはねづび てひはね づぬびづぷとづひづ〪〯〮〮〮
つどびばぬび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
びっはふのぴび 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪びどぺづはて〨どのぴ〩〩〻
はててびづぴ 〽 〰〻てはひ 〨ど〽〰〻 ど〼でびどぺづ〻 〫〫ど〩 ほ
つどびばぬびせどそ 〽 はててびづぴ〻
はててびづぴ 〫〽 びぴひどつづせどそ〻
びっはふのぴびせどそ 〽 〱〰〰 〭 ど〻ぽ〪〯 ぃひづちぴづ つちぴちぴべばづ てはひ ぴとづ っはぬふねの ぷづ ちひづ ひづっづどぶどので〪〯きぐぉたごべばづたぶづっぴはひ〨 〱〰〰〭ねべひちのに〬 〱〬 〱〵〰〬 きぐぉたぉぎご〬 〦ひぴべばづ〩〻
きぐぉたごべばづたっはねねどぴ〨 〦ひぴべばづ 〩〻ひばぴひ 〽 〦ひづっぶちひひちべせ〰そせねべひちのにそ〻きぐぉたこっちぴぴづひぶ〨 びづのつぢふて〬 びっはふのぴび〬 つどびばぬび〬 きぐぉたぉぎご〬 ひばぴひ〬 〱〬 ひぴべばづ〬
ひははぴ〬 っはねね〩〻

〱〷

〱〵
〱〶

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〶〴
〱
〲

5.7 全プロセスへのギャザー〳〴〵

きぐぉたぁががぇぁごえぅげ〨 びづのつぢふて〬 びづのつっはふのぴ〬 びづのつぴべばづ〬 ひづっぶぢふて〬 ひづっぶっはふのぴ〬 ひづっぶぴべばづ〬 っはねね〩

〶

ぉぎ

〷

ぉぎ

〸

ぉぎ

〹

くさご

〱〰
〱〱

ぉぎ

びづのつぢふてびづのつっはふのぴ
びづのつぴべばづ
ひづっぶぢふてひづっぶっはふのぴ

送信バッファの先頭アドレス（選択型）

ひづっぶぴべばづ
っはねね

受信バッファの要素のデータ型（ハンドル）

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

ぉぎ
ぉぎ

送信バッファ内の要素の数（非負の 整数型）
送信バッファの要素のデータ型（ハンドル）
受信バッファのアドレス（選択型）
任意のプロセスから受信する要素の数（非負の 整数型）
コミュニケータ（ハンドル）

どのぴ きぐぉたぁぬぬでちぴとづひ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 きぐぉたぃはねね っはねね〩
きぐぉたぁががぇぁごえぅげ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぁぬぬでちぴとづひ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたぁががぇぁごえぅげは，ルートプロセスだけでなく，全てのプロセスが結果を受けとるきぐぉたぇぁごえぅげと考えることができる．第な 番目のプロセスから送信されるデータのブロックが全てのプロセスで受信され，バッファひづっぶぢふての第な番目のブロックとして格納される．
プロセスのびづのつっはふのぴ，びづのつぴべばづで示される型シグネチャはその他の任意のプロセスのひづっぶっはふのぴ，ひづっぶぴべばづで示される型シグネチャと等しくなければならない．
っはねねがグループ内コミュニケータの場合，きぐぉたぁががぇぁごえぅげ〨〮〮〮〩の呼び出しは，あた
かも全てのプロセスが以下の操作を，

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぇちぴとづひ〨びづのつぢふて〬びづのつっはふのぴ〬びづのつぴべばづ〬ひづっぶぢふて〬ひづっぶっはふのぴ〬
ひづっぶぴべばづ〬ひははぴ〬っはねね〩
ひははぴ 〽 〰 〬 〮〮〮〬 の〭〱までのの回の呼び出しを実行し結果と同じである．
きぐぉたぁががぇぁごえぅげの正しい使用規則はきぐぉたぇぁごえぅげの対応する規則から容易に見い出せる．
全てのプロセスで引数びづのつぢふて に値きぐぉたぉぎたぐがぁぃぅを渡すことにより．グループ内コミュニケータの「インプレイス」オプションが指定される． びづのつっはふのぴとびづのつぴべばづは無視される．そして，各プロセスの入力データが入る領域は，そのプロセスがそれ自体の寄与分を受信バッファに受信するための領域であると仮定される．
っはねねがグループ間コミュニケータの場合，一方のグループ（グループぁ）の各プロセ
スはびづのつっはふのぴ個のデータ項目に寄与し，これらのデータが連結されて結果が他方のグループ（グループあ）内の各プロセスに格納される．逆に，グループあの各プロセスの寄与〵〮〷〮 全プロセスへのギャザー〱〶〵分の連結がグループぁの各プロセスに格納される． グループぁの送信バッファ引数がグ
ループあの受信バッファ引数に整合していて，逆も同様になっている必要がある．

〱〲〳

ユーザへのアドバイス グループ間通信上で実行されるきぐぉたぁががぇぁごえぅげの通信パ
ターンは対称である必要はない．グループぁのプロセスによって送信される項目の数（グループぁの引数びづのつっはふのぴ，びづのつぴべばづ，およびグループあ の引数ひづっぶっはふのぴ，
ひづっぶぴべばづによって指定）はグループあのプロセスによって送信される項目の数（グループあの引数びづのつっはふのぴ， びづのつぴべばづ，グループぁの引数ひづっぶっはふのぴ，ひづっぶぴべばづによって指定）と同じでなくてもよい．特に，逆方向の通信の場合，びづのつっはふのぴ 〽 〰 を指定することにより，データを一方向にのみ移動させることができる． （ユーザへのアドバイス終わり）

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

きぐぉたぁががぇぁごえぅげざ〨 びづのつぢふて〬 びづのつっはふのぴ〬 びづのつぴべばづ〬 ひづっぶぢふて〬 ひづっぶっはふのぴび〬 つどびばぬび〬 ひづっぶぴべばづ〬 っはねね〩

〱〶
〱〷

ぉぎ
ぉぎ
ぉぎ
くさご
ぉぎ
ぉぎ

ぉぎ
ぉぎ

びづのつぢふてびづのつっはふのぴ
びづのつぴべばづ
ひづっぶぢふてひづっぶっはふのぴび
つどびばぬびひづっぶぴべばづ
っはねね

送信バッファの先頭アドレス（選択型）
送信バッファ内の要素の数（非負の整数型）

〱〸
〱〹
〲〰

送信バッファの要素のデータ型（ハンドル）〲〱

受信バッファのアドレス（選択型）〲〲

各プロセスから受信した要素の数を持つ 非負の整数型の（グループサイズの長さの）配列〲〳（グループサイズの長さの）整数配列．エントリどは
プロセスどから送られてくるデータを置く位置の
ひづっぶぢふてからの相対変位を指定する（ルートでのみ意
味を持つ）
．

〲〵

〲〴

〲〶
〲〷
〲〸

受信バッファの要素のデータ型（ハンドル）〲〹

コミュニケータ（ハンドル）〳〰
〳〱

どのぴ きぐぉたぁぬぬでちぴとづひぶ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ 〪ひづっぶっはふのぴび〬 どのぴ 〪つどびばぬび〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬
きぐぉたぃはねね っはねね〩
きぐぉたぁががぇぁごえぅげざ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬 いぉこぐがこ〬げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎごこ〨〪〩〬 いぉこぐがこ〨〪〩〬 げぅぃざごすぐぅ〬 ぃくきき〬ぉぅげげくげ{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぁぬぬでちぴとづひぶ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬っはのびぴ どのぴ ひづっぶっはふのぴびせそ〬 っはのびぴ どのぴ つどびばぬびせそ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式,
第15.2節を参照）}

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

きぐぉたぁががぇぁごえぅげざは，ルートプロセスだけでなく，全てのプロセスが結果を受けとるきぐぉたぇぁごえぅげざと考えることができる．第な 番目のプロセスから送信されるデータのブロックが全てのプロセスで受信され，バッファひづっぶぢふての第な番目のブロックとして格納される．ブロックは全て同じサイズである必要はない．

〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〶〶
〱
〲
〳
〴
〵
〶

プロセスなのびづのつっはふのぴ，びづのつぴべばづで示される型シグネチャはその他の任意のプロセスのひづっぶっはふのぴびせなそ，ひづっぶぴべばづで示される型シグネチャと等しくなければならない．
っはねねがグループ内コミュニケータの場合，あたかも全てのプロセスが以下に示す，
きぐぉたぇぁごえぅげざ〨びづのつぢふて〬びづのつっはふのぴ〬びづのつぴべばづ〬ひづっぶぢふて〬ひづっぶっはふのぴび〬つどびばぬび〬
ひづっぶぴべばづ〬ひははぴ〬っはねね〩〬

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

ひははぴ 〽 〰 〬 〮〮〮〬 の〭〱に対して実行した結果を同じである．きぐぉたぁががぇぁごえぅげざの正
しい使用規則はきぐぉたぇぁごえぅげざの対応する規則から容易に見い出せる．
全てのプロセスで引数びづのつぢふてに値きぐぉたぉぎたぐがぁぃぅ を渡すことにより，グループ内コミュニケータの「インプレイス」オプションが指定される．この場合，びづのつっはふのぴと
びづのつぴべばづは無視され，各プロセスの入力データが入る領域は，そのプロセスがそれ自体の寄与分を 受信バッファに受信するための領域であると仮定される．
っはねねがグループ間コミュニケータの場合，一方のグループ（グループぁ）の各プロセ
スはびづのつっはふのぴ個のデータ項目に寄与し，これらのデータが連結されて結果が他方のグループ（グループあ）内の各プロセスに格納される．逆に．グループあの各プロセスの寄与分の連結がグループぁの各プロセスに格納される． グループぁの送信バッファ引数がグ
ループあの受信バッファ引数に整合していて，逆も同様になっている必要がある．

〲〱〲〲

5.7.1 MPI_ALLGATHERの使用例〲〳〲〴

ここではグループ内コミュニケータを使用した例を示す．

〲〵
〲〶
〲〷

例 5.14 例〵〮〲のオールギャザー版．きぐぉたぁががぇぁごえぅげを使って， グループ中の全てのプロセスから各プロセスに〱〰〰個のどのぴをギャザーする．

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぃはねね っはねね〻
どのぴ でびどぺづ〬びづのつちひひちべせ〱〰〰そ〻どのぴ 〪ひぢふて〻〮〮〮きぐぉたぃはねねたびどぺづ〨 っはねね〬 〦でびどぺづ〩〻
ひぢふて 〽 〨どのぴ 〪〩ねちぬぬはっ〨でびどぺづ〪〱〰〰〪びどぺづはて〨どのぴ〩〩〻きぐぉたぁぬぬでちぴとづひ〨 びづのつちひひちべ〬 〱〰〰〬 きぐぉたぉぎご〬 ひぢふて〬 〱〰〰〬 きぐぉたぉぎご〬 っはねね〩〻
呼び出しの完了後，全てのプロセスはグループ全体の連結されたデータを保持している．

〵〮〸〮 全対全スキャッタ／ギャザー〱〶〷

5.8 全対全スキャッタ／ギャザー

〱
〲
〳
〴

きぐぉたぁががごくぁがが〨びづのつぢふて〬 びづのつっはふのぴ〬 びづのつぴべばづ〬 ひづっぶぢふて〬 ひづっぶっはふのぴ〬 ひづっぶぴべばづ〬 っはねね〩
ぉぎ
ぉぎ
ぉぎ
くさご
ぉぎ
ぉぎ
ぉぎ

びづのつぢふてびづのつっはふのぴ
びづのつぴべばづ
ひづっぶぢふてひづっぶっはふのぴ
ひづっぶぴべばづ
っはねね〵

送信バッファの先頭アドレス（選択型）〶

各プロセスに送信される要素の数（非負の 整数型）〷

送信バッファの要素のデータ型（ハンドル）〸

受信バッファのアドレス（選択型）〹

各プロセスから受信した要素の数（非負の 整数型）〱〰
〱〱

受信バッファの要素のデータ型（ハンドル）〱〲

コミュニケータ（ハンドル）〱〳〱〴

どのぴ きぐぉたぁぬぬぴはちぬぬ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 きぐぉたぃはねね っはねね〩
きぐぉたぁががごくぁがが〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぁぬぬぴはちぬぬ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたぁががごくぁががはきぐぉたぁががぇぁごえぅげ を拡張したもので，各プロセスから各受信側に異なるデータが送信される．プロセスどから送信されたな番目のブロックがプロセスなによって受信され，ひづっぶぢふてのど番目のブロックに格納される．
あるプロセスのびづのつっはふのぴ，びづのつぴべばづで示される型シグネチャはその他の任意のプロセスのひづっぶっはふのぴ，ひづっぶぴべばづで示される型シグネチャと等しくなければならない．このことは，プロセスの各ペアの間で，送信データの量が受け取るデータの量と等しくなければならないということを意味する．ここでも，型マップの違いは許容される．
っはねねがグループ内コミュニケータの場合，あたかも呼び出しで各プロセス（それ自体を含む）への送信を実行し，きぐぉたこづのつ〨びづのつぢふて 〫 ど · びづのつっはふのぴ · づへぴづのぴ〨びづのつぴべばづ〩, びづのつっはふのぴ, びづのつぴべばづ, ど, ...〩,
以下の呼び出しで他の全てのプロセスからの受信を実行した場合と同じ結果である．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

きぐぉたげづっぶ〨ひづっぶぢふて 〫 ど · ひづっぶっはふのぴ · づへぴづのぴ〨ひづっぶぴべばづ〩, ひづっぶっはふのぴ, ひづっぶぴべばづ, ど, ...〩.

〳〹〴〰

全てのプロセスにおいて引数は全て意味を持つ．引数っはねねは全てのプロセスで同じ値でなければならない．
全てのプロセスで引数びづのつぢふてに値きぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュ
ニケータの「インプレイス」オプションが指定される．この場合，びづのつっはふのぴとびづのつぴべばづは無視される． 送信されるデータがひづっぶぢふてから取得され， 受信したデータによって置換される．送信データおよび受信データは， ひづっぶっはふのぴおよびひづっぶぴべばづで指定したのと同じ型マップを持っていなければならない．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信〱〶〸

根拠 きぐぉたぁががごくぁががインスタンスの値を大きくすると，送信バッファと 受信バ
ッファの両方の割り当てで使用されるメモリ容量が大きくなりすぎる可能性がある．「インプレイス」オプションではアプリケーションのメモリ使用量を効果的に半減させることができ，送信されるデータがきぐぉたぁががごくぁががの交換後に送信プロセスで使用されない場合（並列高速フーリエ変換など）には有益である． （根拠の
終わり）

〱
〲
〳
〴
〵
〶
〷
〸

実装者へのアドバイス ユーザはメモリを節約するために「インプレイス」オプシ
ョンを使用することもできる．そのため，質の高いきぐぉ実装のためにはシステムのバッファリングを最小限に抑えるようにする必要がある． （実装者へのアドバイ
ス終わり）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

っはねねがグループ間コミュニケータの場合，あたかもグループぁの各プロセスがグルー
プあの各プロセスにメッセージを送信したのと同じであり，逆もまた同様である，グループぁのプロセスどの な番目の送信バッファがグループあのプロセスなのど番目の受信バッ
ファと整合していて，逆も同様になっている必要がある．

〱〹

ユーザへのアドバイス グループ間コミュニケータドメインで完全な交換を実行する場合，グループぁのプロセスからグループあのプロセスに送信されるデータ
項目の数は逆方向に送信される項目の数と同じでなくてもよい． 特に，逆方向
でびづのつっはふのぴ 〽 〰を指定することにより，単方向の通信を行うことができる． （ユーザへのアドバイス終わり）

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

きぐぉたぁががごくぁががざ〨びづのつぢふて〬 びづのつっはふのぴび〬 びつどびばぬび〬 びづのつぴべばづ〬 ひづっぶぢふて〬 ひづっぶっはふのぴび〬 ひつどびばぬび〬 ひづっぶ〭
ぴべばづ〬 っはねね〩
びづのつぢふてびづのつっはふのぴび

送信バッファの先頭アドレス（選択型）

ぉぎぉぎ

びつどびばぬび（グループサイズの長さの）整数配列． エントリなはプロセスなに対して送られて来るデータを取得する場所を びづのつぢふてからの相対変位として指定する

ぉぎ

送信バッファの要素のデータ型（ハンドル）ぉぎびづのつぴべばづ
ひづっぶぢふてひづっぶっはふのぴびぉぎ

ひつどびばぬび（グループサイズの長さの） 整数配列． エント
リどはプロセスど から送られてくるデータを置く位
置の ひづっぶぢふてからの相対変位を指定する．

ぉぎ

ひづっぶぴべばづ
っはねね

受信バッファの要素のデータ型（ハンドル）

ぉぎ

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

くさご

〴〰
〴〱
〴〲
〴〳

ぉぎ

各ランク2 に送信する要素の数を指定する（グルー
プサイズの長さの）非負の整数配列

受信バッファのアドレス（選択型）
各ランク2 から受信可能な要素の数を指定する（グループサイズの長さの） 非負の整数配列

コミュニケータ（ハンドル）

〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぁぬぬぴはちぬぬぶ〨ぶはどつ〪 びづのつぢふて〬 どのぴ 〪びづのつっはふのぴび〬 どのぴ 〪びつどびばぬび〬
きぐぉたいちぴちぴべばづ びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ 〪ひづっぶっはふのぴび〬 どのぴ 〪ひつどびばぬび〬
きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 きぐぉたぃはねね っはねね〩〲

訳者註：MPI-2.2の原文は“processor”であるが， “rank”の誤り．MPI-3では修正済．

〵〮〸〮 全対全スキャッタ／ギャザー〱〶〹きぐぉたぁががごくぁががざ〨こぅぎいあさう〬 こぅぎいぃくさぎごこ〬 こいぉこぐがこ〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬
げいぉこぐがこ〬 げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎごこ〨〪〩〬 こいぉこぐがこ〨〪〩〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎごこ〨〪〩〬 げいぉこぐがこ〨〪〩〬げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぁぬぬぴはちぬぬぶ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 っはのびぴ どのぴ びづのつっはふのぴびせそ〬
っはのびぴ どのぴ びつどびばぬびせそ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 っはのびぴ どのぴ ひづっぶっはふのぴびせそ〬 っはのびぴ どのぴ ひつどびばぬびせそ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ひづっぶぴべばづ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式,
第15.2節を参照）}〱

きぐぉたぁががごくぁががざは，送信されるデータの位置をびつどびばぬびによって指定し，受信側のデータを格納する位置をひつどびばぬび によって指定する自由度を付加したきぐぉたぁががごくぁががである．
っはねねがグループ内コミュニケータの場合，プロセスど から送られるデータのな番目のブロックはプロセスなにより受信され，ひづっぶぢふてのど番目のブロックに格納される．これらのブロック全てが同じサイズである必要はない．
プロセスどのびづのつっはふのぴびせなそ，びづのつぴべばづで示される型シグネチャはプロセスなの
ひづっぶっはふのぴびせどそ，ひづっぶぴべばづで示される型シグネチャと等しくなければならない，このことは，プロセスの各ペアの間で，送信データの量が受け取るデータの量と等しくなければならないということを意味する．ここでも， 送信側と受信側の型マップの違いは許容される．
あたかも以下の呼び出しにより各プロセスから他の各プロセスにメッセージが送信され，〱〰

きぐぉたこづのつ〨びづのつぢふて 〫 びつどびばぬびせどそ · づへぴづのぴ〨びづのつぴべばづ〩, びづのつっはふのぴびせどそ, びづのつぴべばづ, ど, ...〩,

〲〵

〲
〳
〴
〵
〶
〷
〸
〹

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

〲〶

以下の呼び出しにより他の全てのプロセスからメッセージを受信した結果と同じにな
る．

〲〷
〲〸
〲〹

きぐぉたげづっぶ〨ひづっぶぢふて 〫 ひつどびばぬびせどそ · づへぴづのぴ〨ひづっぶぴべばづ〩, ひづっぶっはふのぴびせどそ, ひづっぶぴべばづ, ど, ...〩.

〳〰
〳〱

全てのプロセスにおいて，引数は全て意味を持つ．引数っはねねは全てのプロセスで同じ値でなければならない．
全てのプロセスで引数びづのつぢふてに値きぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュ
ニケータの「インプレイス」オプションが指定される．この場合， びづのつっはふのぴび，びつどびばぬび，
びづのつぴべばづは無視される．送信されるデータがひづっぶぢふてから取得され，受信したデータによって置換される． 送信データおよび受信データは，ひづっぶっはふのぴび配列およびひづっぶぴべばづで指定したのと同じ型マップを持っていなければならなず，ひつどびばぬびで指定された受信バッファ内の場所から取得される．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

ユーザへのアドバイス 「インプレイス」オプションを指定する（全てのプロセスに対して行う必要がある）ことは，コミュニケータのグループ内の〲つのプロセス間で同じ量および型のデータが送受信されることを意味する．異なるプロセスのペアで異なる両のデータを交換することができる．プロセスどのひづっぶっはふのぴびせなそ およびひづっぶぴべばづがプロセスなのひづっぶっはふのぴびせどそおよびひづっぶぴべばづと一致するようにする必要があ
る．この対称の交換は， 送信されるデータがきぐぉたぁががごくぁががざの交換後に送信プロ

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信〱〷〰

セスで使用されないような場合に有益でありうる． （ユーザへのアドバイス終わ
り）

〱
〲
〳
〴
〵
〶
〷
〸

っはねねがグループ間コミュニケータの場合，あたかもグループぁの各プロセスがグルー
プあの各プロセスにメッセージを送信した結果と同じであり，逆もまた同様である．グ
ループぁのプロセスどのな番目の送信バッファがグループあのプロセスなのど番目の受信バッ
ファと整合していて，逆も同様になっている必要がある．

〹

根拠 きぐぉたぁががごくぁががときぐぉたぁががごくぁががざの定義は，〱対〱通信をの回独立に指定して行なうという柔軟性を示しているが，〲点の例外がある．全てのメッセージが同じ型を持ち，スキャッタ（あるいはギャザー）されるデータの格納先（元）が逐次的である点である． （根拠の終わり）

〱〰
〱〱
〱〲
〱〳
〱〴

実装者へのアドバイス 集団的通信を〱対〱通信の観点から見れば，メッセージは 送
信側から受信側に直接送信する形をとるが，通信経路に木構造を持ったものを実装してもよい．効率が良くなるのであれば，分岐（スキャッタの場合）または合流（ギャザーの場合）するノードを中継してメッセージを転送することができる．
（実装者へのアドバイス終わり）

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

きぐぉたぁががごくぁががし〨びづのつぢふて〬 びづのつっはふのぴび〬 びつどびばぬび〬 びづのつぴべばづび〬 ひづっぶぢふて〬 ひづっぶっはふのぴび〬 ひつどびばぬび〬 ひづっぶ〭
ぴべばづび〬 っはねね〩
送信バッファの先頭アドレス（選択型）

〲〵

ぉぎ

〲〶

ぉぎ

びづのつぢふてびづのつっはふのぴびぉぎ

びつどびばぬび（グループサイズの長さの）整数配列． エントリど
はプロセスなに対して送られて来るデータを取得する場所をびづのつぢふてからの相対変位としてバイトでに指定する（整数配列）

ぉぎ

びづのつぴべばづび（グループサイズの長さの）データ型の配列． エ
ントリなはプロセスなに送信するデータ型を指定する（ハンドルの配列）

くさご

受信バッファのアドレス（選択型）

ぉぎ

ひづっぶぢふてひづっぶっはふのぴびぉぎ

ひつどびばぬび（グループサイズの長さの）整数配列．エントリどは
プロセスど から送られてくるデータを置く位置の
ひづっぶぢふてからの相対変位を指定する（整数配列）

ぉぎ

ひづっぶぴべばづび（グループサイズの長さの）データ型の配列． エン
トリどはプロセスどから受信したデータ型を指定する（ハンドルの配列）

ぉぎ

っはねね

コミュニケータ（ハンドル）

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

各ランク3 に送信する要素の数を指定する（グルー
プサイズの長さ） 非負の整数の配列

各ランク3 から受信可能な要素の数を指定する（グループサイズの長さの） 非負の整数配列

〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぁぬぬぴはちぬぬぷ〨ぶはどつ 〪びづのつぢふて〬 どのぴ びづのつっはふのぴびせそ〬 どのぴ びつどびばぬびせそ〬
きぐぉたいちぴちぴべばづ びづのつぴべばづびせそ〬 ぶはどつ 〪ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴびせそ〬 どのぴ ひつどびばぬびせそ〬
きぐぉたいちぴちぴべばづ ひづっぶぴべばづびせそ〬 きぐぉたぃはねね っはねね〩〳

訳者註：MPI-2.2の原文は“processor”であるが， “rank”の誤り．MPI-3では修正済．

〵〮〸〮 全対全スキャッタ／ギャザー〱〷〱

きぐぉたぁががごくぁががし〨こぅぎいあさう〬 こぅぎいぃくさぎごこ〬 こいぉこぐがこ〬 こぅぎいごすぐぅこ〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬
げいぉこぐがこ〬 げぅぃざごすぐぅこ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎごこ〨〪〩〬 こいぉこぐがこ〨〪〩〬 こぅぎいごすぐぅこ〨〪〩〬 げぅぃざぃくさぎごこ〨〪〩〬げいぉこぐがこ〨〪〩〬 げぅぃざごすぐぅこ〨〪〩〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぁぬぬぴはちぬぬぷ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 っはのびぴ どのぴ びづのつっはふのぴびせそ〬
っはのびぴ どのぴ びつどびばぬびせそ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ びづのつぴべばづびせそ〬 ぶはどつ〪
ひづっぶぢふて〬 っはのびぴ どのぴ ひづっぶっはふのぴびせそ〬 っはのびぴ どのぴ ひつどびばぬびせそ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ ひづっぶぴべばづびせそ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式,
第15.2節を参照）}〱

きぐぉたぁががごくぁががしは 完 全 な 交 換 の も っ と も 一 般 的 な 形 式 で あ る．
きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃごと同様，もっとも一般的な型であるコンストラクタ
きぐぉたぁががごくぁががしでは，カウント，変位， データ型を個別に指定できる．また，最大の自由度を得るため，送信バッファと受信バッファ内のブロックの変位がバイト単位で指定される．
っはねねがグループ内コミュニケータの場合，プロセスどから送信される な番目のブロッ
クはプロセスなによって受信され． ひづっぶぢふてのど番目のブロックに格納される．これらのブロックは全てが同じサイズである必要はない．
プロセスどのびづのつっはふのぴびせなそ，びづのつぴべばづびせなそで示される型シグネチャはプロセスなの
ひづっぶっはふのぴびせどそ， ひづっぶぴべばづびせどそで示される型シグネチャと等しくなければならない．このことは，プロセスの各ペアの間で，送信データの量が受け取るデータの量と等しくなければならないということを意味する．ここでも，送信側と受信側とで型マップの違いは許容される．
あたかも以下の呼び出しにより各プロセスから他の各プロセスにメッセージが送信さ
れ，

〱〰

〲
〳
〴
〵
〶
〷
〸
〹

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

きぐぉたこづのつ〨びづのつぢふて 〫 びつどびばぬびせどそ, びづのつっはふのぴびせどそ, びづのつぴべばづびせどそ, ど, ...〩,
以下の呼び出しにより他の全てのプロセスからメッセージを受信した結果と同じになる．
きぐぉたげづっぶ〨ひづっぶぢふて 〫 ひつどびばぬびせどそ, ひづっぶっはふのぴびせどそ, ひづっぶぴべばづびせどそ, ど, ...〩.

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

全てのプロセスにおいて，引数は全て意味を持つ．引数っはねねには全てのプロセスで同じコミュニケータを指定する必要がある．
きぐぉたぁががごくぁががざと同様，全てのプロセスで引数びづのつぢふて にきぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケータの「インプレイス」オプションが指定される．この場合，びづのつっはふのぴび， びつどびばぬび，びづのつぴべばづは無視される．送信されるデータがひづっぶぢふて から取得され，受信したデータによって置換される． 送信データおよび受信データは，
ひづっぶっはふのぴび配列および ひづっぶぴべばづび配列で指定したのと同じ型マップを持っていなければならなず，ひつどびばぬびで指定された受信バッファ内の場所から取得される．
っはねねがグループ間コミュニケータの場合，あたかもグループぁの各プロセスがグルー
プあの各プロセスにメッセージを送信した結果と同じであり，逆もまた同様である．グ
ループぁのプロセスどのな番目の送信バッファがグループあのプロセスなのど番目の受信バッ
ファと整合していて，逆も同様になっている必要がある．

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信〱〷〲

根 拠 きぐぉたぁががごくぁががし関 数 は 入 力 引 数 を 慎 重 に 選 択 す る こ と に よ り， い く
つ か のきぐぉ関 数 を 汎 用 化 し て い る． 例 え ば， 〱つ を 除 い た 全 て の プ ロ セ ス をびづのつっはふのぴびせどそ 〽 〰とすることによりきぐぉたこぃぁごごぅげし関数を実現する． （根拠の
終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

5.9 大域的なリデュース操作
このセクションの関数は，グループの全メンバに対し大域的なリデュース演算（びふね，
ねちへ，論理など）を実行する．リデュース演算は，定義済み演算の一覧，またはユーザ
定義演算のいずれかとすることができる．大域的なリデュース関数にはいくつかバリエーションがある．〱つのグループの〱つのメンバにリデュースの結果を返すリデュース，〱つのグループの全メンバにこの結果を返すオールリデュース，および〲つのスキャン（並列プリフィックス） 操作の〳つである．さらに，リデューススキャッタ操作はリデュース操作の機能とスキャッタ操作の機能を組み合わせたものである．

〱〸〱〹

5.9.1 リデュース

〲〰
〲〱
〲〲
〲〳

きぐぉたげぅいさぃぅ〨 びづのつぢふて〬 ひづっぶぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 はば〬 ひははぴ〬 っはねね〩
ぉぎ

〲〴
〲〵

くさご

びづのつぢふて
ひづっぶぢふて送信バッファのアドレス（選択型）

っはふのぴ
つちぴちぴべばづ
はば
ひははぴ
っはねね

送信バッファ内の要素の数（非負の 整数型）

〲〶
〲〷

ぉぎ

〲〸

ぉぎ

〲〹

ぉぎ

〳〰

ぉぎ

〳〱

ぉぎ

受信バッファのアドレス（選択型，ルートでのみ意
味を持つ）
送信バッファの要素のデータ型（ハンドル）
リデュース演算（ハンドル）
ルートプロセスのランク（整数型）
コミュニケータ（ハンドル）

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

どのぴ きぐぉたげづつふっづ〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〩
きぐぉたげぅいさぃぅ〨こぅぎいあさう〬 げぅぃざあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺げづつふっづ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ きぐぉ〺〺くば〦 はば〬 どのぴ ひははぴ〩
っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

っはねねがグループ内コミュニケータの場合，きぐぉたげぅいさぃぅ は演算はばを使用してグルー
プ内の各プロセスの入力バッファで与えられる要素に対してリダクションを行ない，その結果をランクひははぴのプロセスの出力バッファに返す．入力バッファは，引数びづのつぢふて，
っはふのぴ，つちぴちぴべばづで定義される．出力バッファは，引数ひづっぶぢふて，っはふのぴ，つちぴちぴべばづで定義される．両者とも同じ型の要素を同じ個数だけ持つ．このルーチンは，っはふのぴ，つちぴちぴべばづ，
はば，ひははぴ， っはねねについて同じ引数を使用して全てのグループメンバから呼び出される． したがって全てのプロセスは同じ型の要素を持つ同じ長さの入力バッファと出〵〮〹〮 大域的なリデュース操作〱〷〳

力バッファを用意する． 各プロセスは，〱つの要素，または要素の列を与えることができ，要素の列の場合には，列の各エントリの要素ごとにリダクションを行う． 例
えば， きぐぉたきぁじという演算で，送信バッファに浮動小数点数の〲つの要素（っはふのぴ 〽 〲，つちぴちぴべばづ〽 きぐぉたうがくぁご）が入っている場合，ひづっぶぢふて〨〱〩 〽 でぬはぢちぬ ねちへ〨びづのつぢふて〨〱〩〩 およびひづっぶぢふて〨〲〩 〽 でぬはぢちぬ ねちへ〨びづのつぢふて〨〲〩〩 となる．
第〵〮〹〮〲節に，きぐぉで用意している定義済み演算の一覧を掲載した．さらに， 演算を適用できるデータ型もまとめた．そのほかにユーザは複数のデータ型についての操作で基本型または派生型のいずれでもオーバーロードできるユーザ用の演算も定義できる．これについては第〵〮〹〮〵節で詳述する．
演算はばは常に結合的であると仮定する．定義済み演算は全て可換であると仮定する．
ユーザは結合的であるが可換ではないと仮定された演算を定義することもできる．リデ
ュースの「標準的」評価順序はグループ内のプロセスのランクによって決まる．しかし，実装では結合性，または結合性と可換性を利用して，評価順序を変更することもできる．
浮動小数点数加算など厳密には結合的または可換でない演算についてはこの演算によってリデュースの結果が変わることもある．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

実装者へのアドバイス きぐぉたげぅいさぃぅを実装する場合には，同じ順序で現れる同じ引数で関数を適用する際には，必ず同じ結果が得られるようにすることが強く求められる．このためランク4 の物理的配置を利用する最適化はできない場合があることに注意すること． （実装者へのアドバイス終わり）

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ユーザへのアドバイス アプリケーションが，浮動小数点操作の非結合的を無視できない場合や，特別なリデュースの順序が必要で結合的なものとして扱えな
いユーザ定義の演算を使用する（第〵〮〹〮〵節を参照）．このようなアプリケーショ
ンでは評価順序を明確に規定する必要がある． 例えば，左から右（または右から左）の評価順序が厳密に求められる操作の場合，〱つのプロセスで全てのオペランドをギャザー（きぐぉたぇぁごえぅげなどにより）し，リデュース操作を望ましい順序で適用（きぐぉたげぅいさぃぅたがくぃぁがなどにより）することによってこれを実現できる．必要に応じて，他のプロセスへの結果のブロードキャストまたはスキャッタ（きぐぉたあぃぁこごなどにより）を行う． （ユーザへのアドバイス終わり）

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

きぐぉたげぅいさぃぅのつちぴちぴべばづ引数ははばと互換性がなければならない． 定義済み演算子は第〵〮〹〮〲節と第〵〮〹〮〴節で挙げられているきぐぉの型でしか機能しない．また，定義済みの演
算子用のつちぴちぴべばづとはばはすべてのプロセスで同じでなければならない．
ユーザは各プロセスできぐぉたげぅいさぃぅに異なるユーザ定義演算子を与えることができてしまう．この場合，きぐぉではどのオペランドにどの演算が使用されるかは定義されない．
ユーザ定義演算子は一般的な派生データ型でも機能する． この時，リデュース演算が適用される各引数はそのようなデータ型によって記述される〱つの要素であり，それは複数の基本値を含んでいてもよい．これについてはさらに，第〵〮〹〮〵節で詳述する．
〴

訳者註：MPI-2.2の原文は“processor”であるが， “rank”の誤り．MPI-3では修正済．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〷〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

ユーザへのアドバイス ユーザはきぐぉたげぅいさぃぅの実装方法についての仮定は控える必要がある．最も安全な方法は，各プロセスによってきぐぉたげぅいさぃぅに同じ関数が渡されるようにすることである． （ユーザへのアドバイス終わり）「送信」バッファでのデータ型のオーバーラップは許可されている．「受信」バッファでのデータ型のオーバーラップを行うとエラーとなり，予測不能の結果が生じることがある．
ルートで引数びづのつぢふて に値きぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケー
タの「インプレイス」オプションが指定される．この場合，ルートで受信バッファから入力データが取得され，ここでは入力データが出力データによって置換される．
っはねねがグループ間コミュニケータの場合，呼び出しにはグループ間コミュニケータの全てのプロセスが含まれるが， 〱つのグループ（グループぁ）によりルートプロセスが定義される．他方のグループ（グループあ）の全てのプロセスは，引数ひははぴに グループぁの
ルートのランクである同じ値を渡す．ルートはひははぴに値きぐぉたげくくごを渡す．グループぁの
その他の全てのプロセスはひははぴに値きぐぉたぐげくぃたぎさががを渡す． グループあでは送信バッフ
ァ引数のみが意味を持ち，ルートでは受信バッファ引数のみが意味を持つ．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

5.9.2 定義済みリデュース演算
以下の定義済み演算はきぐぉたげぅいさぃぅのために用意されていて，関数きぐぉたぁががげぅいさぃぅ，
きぐぉたげぅいさぃぅたこぃぁごごぅげ，きぐぉたこぃぁぎ，きぐぉたぅじこぃぁぎと関連している．これらの操作は，はばに次の値を入れることで呼び出される．

〲〶
〲〷
〲〸

名前

意味

〳〱

きぐぉたきぁじ〳〲きぐぉたきぉぎ〳〳きぐぉたこさき〳〴きぐぉたぐげくい〳〵

きぐぉたがぁぎい

最大値
最小値
和
積
論理積
ビット演算の積
論理和
ビット演算の和
排他的論理和
ビット演算の排他的論理和
最大値と位置
最小値と位置

〲〹
〳〰

〳〶
〳〷

きぐぉたあぁぎい〳〸きぐぉたがくげ〳〹きぐぉたあくげ〴〰

きぐぉたがじくげ〴〱

きぐぉたあじくげ

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたきぁじがくぃ
きぐぉたきぉぎがくぃ

〲つの演算， きぐぉたきぉぎがくぃおよびきぐぉたきぁじがくぃについては第〵〮〹〮〴節で別に説明する．他の定義済み演算については，引数はばとつちぴちぴべばづの組み合わせのうち，使用できるものを以下にリストアップする．最初に，次のようにきぐぉ基本データ型のグループを定義する．

〵〮〹〮 大域的なリデュース操作〱〷〵〱

ぃ言語整数型：

うはひぴひちの言語整数型：

実数型：

論理型：
複素数型：

バイト型：

きぐぉたぉぎご〬 きぐぉたがくぎぇ〬 きぐぉたこえくげご〬
きぐぉたさぎこぉぇぎぅいたこえくげご〬 きぐぉたさぎこぉぇぎぅい〬
きぐぉたさぎこぉぇぎぅいたがくぎぇ〬
きぐぉたがくぎぇたがくぎぇたぉぎご〬
きぐぉたがくぎぇたがくぎぇ（同義）〬
きぐぉたさぎこぉぇぎぅいたがくぎぇたがくぎぇ〬
きぐぉたこぉぇぎぅいたぃえぁげ〬
きぐぉたさぎこぉぇぎぅいたぃえぁげ〬
きぐぉたぉぎご〸たご〬 きぐぉたぉぎご〱〶たご〬
きぐぉたぉぎご〳〲たご〬 きぐぉたぉぎご〶〴たご〬
きぐぉたさぉぎご〸たご〬 きぐぉたさぉぎご〱〶たご〬
きぐぉたさぉぎご〳〲たご〬 きぐぉたさぉぎご〶〴たごきぐぉたぉぎごぅぇぅげ〬 きぐぉたぁぉぎご〬 きぐぉたくううこぅご〬
および，以下から返されたハンドル：
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげ〬および，利用できる場合：きぐぉたぉぎごぅぇぅげ〱〬
きぐぉたぉぎごぅぇぅげ〲〬 きぐぉたぉぎごぅぇぅげ〴〬
きぐぉたぉぎごぅぇぅげ〸〬 きぐぉたぉぎごぅぇぅげ〱〶
きぐぉたうがくぁご〬 きぐぉたいくさあがぅ〬 きぐぉたげぅぁが〬
きぐぉたいくさあがぅたぐげぅぃぉこぉくぎきぐぉたがくぎぇたいくさあがぅおよび，以下から返されたハンドル
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが〬および，利用できる場合：きぐぉたげぅぁが〲〬きぐぉたげぅぁが〴〬 きぐぉたげぅぁが〸〬 きぐぉたげぅぁが〱〶きぐぉたがくぇぉぃぁが〬 きぐぉたぃたあくくが〬きぐぉたぃくきぐがぅじ〬きぐぉたぃたぃくきぐがぅじ〬
きぐぉたぃたうがくぁごたぃくきぐがぅじ〬
きぐぉたぃたいくさあがぅたぃくきぐがぅじ〬
きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじ〬
きぐぉたぃじじたうがくぁごたぃくきぐがぅじ〬
きぐぉたぃじじたいくさあがぅたぃくきぐがぅじ〬
きぐぉたぃじじたがくぎぇたいくさあがぅたぃくきぐがぅじ〬
および，以下から返されたハンドル
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじ〬
および，利用できる場合：
きぐぉたいくさあがぅたぃくきぐがぅじ〬
きぐぉたぃくきぐがぅじ〴〬 きぐぉたぃくきぐがぅじ〸〬
きぐぉたぃくきぐがぅじ〱〶〬 きぐぉたぃくきぐがぅじ〳〲きぐぉたあすごぅ

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信〱〷〶〱

各演算に対し，有効なデータ型を以下に示す．

〲
〳
〴

くば

使用できるデータ型〷

きぐぉたきぁじ〬 きぐぉたきぉぎ

ぃ言語整数型，うはひぴひちの言語整数型，実数型〸

きぐぉたこさき〬 きぐぉたぐげくい

ぃ言語整数型，うはひぴひちの言語整数型，実数型，複素

〵
〶

数型

〹
〱〰
〱〱

きぐぉたがぁぎい〬 きぐぉたがくげ〬 きぐぉたがじくげ

ぃ言語整数型，論理型

きぐぉたあぁぎい〬 きぐぉたあくげ〬 きぐぉたあじくげぃ言語整数型，うはひぴひちの言語整数型，バイト型〱〲〱〳

以下に，グループ内コミュニケータを使用した例を示す．

〱〴
〱〵
〱〶

例 5.15 あるグループ中のプロセスに分配される〲つのベクトルの内積を計算し，ノード〰に結果を返すルーチン．

〱〷
〱〸
〱〹
〲〰
〲〱

こさあげくさごぉぎぅ ぐぁげたあがぁこ〱〨ね〬 ち〬 ぢ〬 っ〬 っはねね〩げぅぁが ち〨ね〩〬 ぢ〨ね〩
〡 ぬはっちぬ びぬどっづ はて ちひひちべげぅぁが っ〡 ひづびふぬぴ 〨ちぴ のはつづ ぺづひは〩げぅぁが びふねぉぎごぅぇぅげ ね〬 っはねね〬 ど〬 どづひひ

〲〲
〲〳
〲〴
〲〵
〲〶

〡 ぬはっちぬ びふね
びふね 〽 〰〮〰
いく ど 〽 〱〬 ね
びふね 〽 びふね 〫 ち〨ど〩〪ぢ〨ど〩ぅぎい いく〲〷〲〸〲〹〡 でぬはぢちぬ びふね
ぃぁがが きぐぉたげぅいさぃぅ〨びふね〬 っ〬 〱〬 きぐぉたげぅぁが〬 きぐぉたこさき〬 〰〬 っはねね〬 どづひひ〩げぅごさげぎ

〳〰
〳〱
〳〲
〳〳
〳〴

例 5.16 あるグループの中のプロセスに分配されるベクトルと配列の積を計算し，ノード〰に結果を返すルーチン．

〳〵
〳〶
〳〷
〳〸
〳〹

こさあげくさごぉぎぅ ぐぁげたあがぁこ〲〨ね〬 の〬 ち〬 ぢ〬 っ〬 っはねね〩げぅぁが ち〨ね〩〬 ぢ〨ね〬の〩〡 ぬはっちぬ びぬどっづ はて ちひひちべげぅぁが っ〨の〩〡 ひづびふぬぴげぅぁが びふね〨の〩ぉぎごぅぇぅげ の〬 っはねね〬 ど〬 な〬 どづひひ

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〡 ぬはっちぬ びふね
いく な〽 〱〬 のびふね〨な〩 〽 〰〮〰
いく ど 〽 〱〬 ね
びふね〨な〩 〽 びふね〨な〩 〫 ち〨ど〩〪ぢ〨ど〬な〩ぅぎい いくぅぎい いく〡 でぬはぢちぬ びふね
ぃぁがが きぐぉたげぅいさぃぅ〨びふね〬 っ〬 の〬 きぐぉたげぅぁが〬 きぐぉたこさき〬 〰〬 っはねね〬 どづひひ〩〵〮〹〮 大域的なリデュース操作〱〷〷〱〡 ひづぴふひの ひづびふぬぴ ちぴ のはつづ ぺづひは 〨ちのつ でちひぢちでづ ちぴ ぴとづ はぴとづひ のはつづび〩げぅごさげぎ〲〳〴〵

5.9.3 符号付き文字とリデュース
データ型きぐぉたこぉぇぎぅいたぃえぁげおよびきぐぉたさぎこぉぇぎぅいたぃえぁげはリデュース演算で使用できる．きぐぉたぃえぁげ，きぐぉたしぃえぁげ，きぐぉたぃえぁげぁぃごぅげ（印字可能可能文字を表す）はリ
デュース演算で使用できない．異機種環境では，きぐぉたぃえぁげ，きぐぉたしぃえぁげ，
きぐぉたぃえぁげぁぃごぅげは印字可能文字が保持されるように変換されるが，きぐぉたこぉぇぎぅいたぃえぁげときぐぉたさぎこぉぇぎぅいたぃえぁげは整数値が保持されるように変換される．

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

ユーザへのアドバイス データ型きぐぉたぃえぁげ，きぐぉたしぃえぁげおよび
きぐぉたぃえぁげぁぃごぅげは文字用で，文字コードの異なるマシン間で送信する場合に，
整 数 値 で は な く，印 字 可 能 可 能 文 字 が 保 持 さ れ る よ う に 変 換 さ れ る． デ ー タ
型きぐぉたこぉぇぎぅいたぃえぁげおよびきぐぉたさぎこぉぇぎぅいたぃえぁげは，整数値を保持する必要がある場合にぃ言語で使用される． （ユーザへのアドバイス終わり）

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

5.9.4 MINLOCとMAXLOC〲〳

演算子きぐぉたきぉぎがくぃは，大域的な最小値とこの最小値に位置するインデックスを計算する． きぐぉたきぁじがくぃもこれと同様に，大域的な最大値とそのインデックスを計算する場合に使用する．これの応用の〱つとして，大域的な最小値（最大値）とこの値を持つプロ
セスのランクを計算する例をとりあげる．
きぐぉたきぁじがくぃを定義する演算は次のとおりである．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

u
i

!

◦

v
j

!

〽

w
k

!

〳〱
〳〲
〳〳

ここで

〳〴
〳〵

w 〽 ねちへ〨u, v〩

〳〶
〳〷

さらに

〳〸
〳〹



 i


どて u > vk〽
ねどの〨i, j〩 どて u 〽 v j
どて u < v

〴〰
〴〱
〴〲
〴〳

きぐぉたきぉぎがくぃも同様に定義する．

u
i

!

◦

v
j

!

〽

w
k

!

〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〷〸
〱

ここで

〲
〳

w 〽 ねどの〨u, v〩

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

さらに



 i

どて u < vk〽
ねどの〨i, j〩 どて u 〽 v j
どて u > v
この演算は両者とも結合的であり可換である． 〨u0 , 〰〩, 〨u1 , 〱〩, . . . , 〨un−1 , n − 〱〩のペアの列に対してきぐぉたきぁじがくぃのリデュースを適用した場合，戻り値は〨u, r〩となることに注意されたい．ここで， u 〽 ねちへi ui とrはこの列の中の最初の大域的な最大値のインデックスである．したがって，各プロセスが値とそのグループ内におけるランクを与えるとすると，はば 〽 きぐぉたきぁじがくぃとしたリデュース操作は最大値とその値を持つ最初のプロセ
スのランクを返す．同様に，きぐぉたきぉぎがくぃを使用して最小値とそのインデックスを返すことができる．より一般的には，きぐぉたきぉぎがくぃは辞書順での最小値を求めるということであり，要素が各ペアの最初の成分に応じて順序付けられ〲番目の成分により決定される．
リデュース演算は，値とインデックスのペアからなる引数に対する演算と定義される．
うはひぴひちの言語とぃ言語とでは，型はこのペアを記述するように与えられる．うはひぴひちの言語では，引数に複数の型が混在していた場合は問題となる．うはひぴひちの言語のこの問題は，インデックスを値と同じ型に強制的に変換し，値と同じ型を持つペアから成る型をきぐぉが提供することで回避されている．ぃ言語では， きぐぉの提供する型は別々の型のペアであり，
インデックスはどのぴ型である．
リデュース操作の中できぐぉたきぉぎがくぃおよびきぐぉたきぁじがくぃを使用するためには，ペア（値とインデックス）を表すつちぴちぴべばづ引数を与えなければならない．きぐぉはこのような定義済
みデータ型を〹個用意している． きぐぉたきぁじがくぃときぐぉたきぉぎがくぃの操作を次のデータ型とともに使用することができる．

〳〲〳〳

うはひぴひちの言語〺

〳〴

名前

〳〵

きぐぉた〲げぅぁが〳〶

きぐぉた〲いくさあがぅたぐげぅぃぉこぉくぎ

〳〷〳〸

きぐぉた〲ぉぎごぅぇぅげ説明
げぅぁが型のペア
いくさあがぅ ぐげぅぃぉこぉくぎ 型変数のペアぉぎごぅぇぅげ型のペア

〳〹
〴〰
〴〱

ぃ言語〺

〴〲

名前

〴〳
〴〴

きぐぉたうがくぁごたぉぎご〴〵

きぐぉたいくさあがぅたぉぎご〴〶きぐぉたがくぎぇたぉぎご

〴〷きぐぉた〲ぉぎご

〴〸

きぐぉたこえくげごたぉぎご

説明てぬはちぴ と どのぴ
つはふぢぬづ と どのぴ
ぬはので と どのぴ
どのぴ のペア
びとはひぴ と どのぴ〵〮〹〮 大域的なリデュース操作
きぐぉたがくぎぇたいくさあがぅたぉぎご

〱〷〹
ぬはので つはふぢぬづ と どのぴ〱〲

データ型きぐぉた〲げぅぁがは，あたかも次のように定義された結果と同様である（第〴〮〱節を
参照）
．

〳
〴
〵

きぐぉたごすぐぅたぃくぎごぉぇさくさこ〨〲〬 きぐぉたげぅぁが〬 きぐぉた〲げぅぁが〩
きぐぉた〲ぉぎごぅぇぅげ，きぐぉた〲いくさあがぅたぐげぅぃぉこぉくぎ， きぐぉた〲ぉぎごについても同様のことがいえる．

データ型きぐぉたうがくぁごたぉぎごは，あたかも次の命令群によって定義された結果と同じである．
ぴべばづせ〰そ 〽 きぐぉたうがくぁご
ぴべばづせ〱そ 〽 きぐぉたぉぎご
つどびばせ〰そ 〽 〰
つどびばせ〱そ 〽 びどぺづはて〨てぬはちぴ〩
ぢぬはっにせ〰そ 〽 〱ぢぬはっにせ〱そ 〽 〱きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨〲〬 ぢぬはっに〬 つどびば〬 ぴべばづ〬 きぐぉたうがくぁごたぉぎご〩
きぐぉたがくぎぇたぉぎごおよびきぐぉたいくさあがぅたぉぎご についても同様のことがいえる．

以下に，グループ内コミュニケータを使用した例を示す．

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

例 5.17 各プロセスはぃ言語における〳〰個のつはふぢぬづの配列を持つ．〳〰個のそれぞれの場
所について，最大値を持つその値とプロセスのランクを計算する．

〲〱
〲〲
〲〳

〮〮〮
〪〯 づちっと ばひはっづびび とちび ちの ちひひちべ はて 〳〰 つはふぢぬづ〺 ちどのせ〳〰そ〪〯つはふぢぬづ ちどのせ〳〰そ〬 ちはふぴせ〳〰そ〻どのぴ どのつせ〳〰そ〻
びぴひふっぴ ほ
つはふぢぬづ ぶちぬ〻
どのぴ
ひちのに〻
ぽ どのせ〳〰そ〬 はふぴせ〳〰そ〻どのぴ ど〬 ねべひちのに〬 ひははぴ〻

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

きぐぉたぃはねねたひちのに〨っはねね〬 〦ねべひちのに〩〻てはひ 〨ど〽〰〻 ど〼〳〰〻 〫〫ど〩 ほ
どのせどそ〮ぶちぬ 〽 ちどのせどそ〻
どのせどそ〮ひちのに 〽 ねべひちのに〻ぽきぐぉたげづつふっづ〨 どの〬 はふぴ〬 〳〰〬 きぐぉたいくさあがぅたぉぎご〬 きぐぉたきぁじがくぃ〬 ひははぴ〬 っはねね 〩〻〪〯 ぁぴ ぴとどび ばはどのぴ〬 ぴとづ ちのびぷづひ ひづびどつづび はの ばひはっづびび ひははぴ〪〯
どて 〨ねべひちのに 〽〽 ひははぴ〩 ほ〪〯 ひづちつ ひちのにび はふぴ〪〯てはひ 〨ど〽〰〻 ど〼〳〰〻 〫〫ど〩 ほ
ちはふぴせどそ 〽 はふぴせどそ〮ぶちぬ〻
どのつせどそ 〽 はふぴせどそ〮ひちのに〻
ぽ
ぽ

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷

例 5.18 うはひぴひちの言語での同様の例〴〸

第 〵〮 集団的通信

〱〸〰
〱
〲

〮〮〮
〡 づちっと ばひはっづびび とちび ちの ちひひちべ はて 〳〰 つはふぢぬづ〺 ちどの〨〳〰〩

〳
〴
〵
〶

いくさあがぅ ぐげぅぃぉこぉくぎ ちどの〨〳〰〩〬 ちはふぴ〨〳〰〩ぉぎごぅぇぅげ どのつ〨〳〰〩いくさあがぅ ぐげぅぃぉこぉくぎ どの〨〲〬〳〰〩〬 はふぴ〨〲〬〳〰〩
ぉぎごぅぇぅげ ど〬 ねべひちのに〬 ひははぴ〬 どづひひ

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

ぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ねべひちのに〬 どづひひ〩いく ぉ〽〱〬 〳〰
どの〨〱〬ど〩 〽 ちどの〨ど〩どの〨〲〬ど〩 〽 ねべひちのに〡 ねべひちのに どび っはづひっづつ ぴは ち つはふぢぬづぅぎい いくぃぁがが きぐぉたげぅいさぃぅ〨 どの〬 はふぴ〬 〳〰〬 きぐぉた〲いくさあがぅたぐげぅぃぉこぉくぎ〬 きぐぉたきぁじがくぃ〬 ひははぴ〬
っはねね〬 どづひひ 〩〡 ぁぴ ぴとどび ばはどのぴ〬 ぴとづ ちのびぷづひ ひづびどつづび はの ばひはっづびび ひははぴ

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

ぉう 〨ねべひちのに 〮ぅけ〮 ひははぴ〩 ごえぅぎ
〡 ひづちつ ひちのにび はふぴいく ぉ〽 〱〬 〳〰
ちはふぴ〨ど〩 〽 はふぴ〨〱〬ど〩
どのつ〨ど〩 〽 はふぴ〨〲〬ど〩 〡 ひちのに どび っはづひっづつ ぢちっに ぴは ちの どのぴづでづひぅぎい いくぅぎい ぉう

〲〱
〲〲
〲〳
〲〴
〲〵

例 5.19 各プロセスは値の空でない配列を持つ．大域的な最小値，その値を保持するプ
ロセスのランク，このプロセス上でのインデックスを見つける．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〣つづてどのづがぅぎ〱〰〰〰

てぬはちぴ ぶちぬせがぅぎそ〻〪〯 ぬはっちぬ ちひひちべ はて ぶちぬふづび 〪〯どのぴ っはふのぴ〻〪〯 ぬはっちぬ のふねぢづひ はて ぶちぬふづび 〪〯どのぴ ねべひちのに〬 ねどのひちのに〬 ねどのどのつづへ〻てぬはちぴ ねどのぶちぬ〻びぴひふっぴ ほてぬはちぴ ぶちぬふづ〻
どのぴ
どのつづへ〻ぽ どの〬 はふぴ〻〪〯 ぬはっちぬ ねどのぬはっ 〪〯どの〮ぶちぬふづ 〽 ぶちぬせ〰そ〻どの〮どのつづへ 〽 〰〻てはひ 〨ど〽〱〻 ど 〼 っはふのぴ〻 ど〫〫〩
どて 〨どの〮ぶちぬふづ 〾 ぶちぬせどそ〩 ほどの〮ぶちぬふづ 〽 ぶちぬせどそ〻どの〮どのつづへ 〽 ど〻ぽ〪〯 でぬはぢちぬ ねどのぬはっ 〪〯きぐぉたぃはねねたひちのに〨っはねね〬 〦ねべひちのに〩〻どの〮どのつづへ 〽 ねべひちのに〪がぅぎ 〫 どの〮どのつづへ〻
きぐぉたげづつふっづ〨 〦どの〬 〦はふぴ〬 〱〬 きぐぉたうがくぁごたぉぎご〬 きぐぉたきぉぎがくぃ〬 ひははぴ〬 っはねね 〩〻〪〯 ぁぴ ぴとどび ばはどのぴ〬 ぴとづ ちのびぷづひ ひづびどつづび はの ばひはっづびび ひははぴ〪〯
どて 〨ねべひちのに 〽〽 ひははぴ〩 ほ〵〮〹〮 大域的なリデュース操作〱〸〱〱〪〯 ひづちつ ちのびぷづひ はふぴ〪〯
ねどのぶちぬ 〽 はふぴ〮ぶちぬふづ〻
ねどのひちのに 〽 はふぴ〮どのつづへ 〯 がぅぎ〻
ねどのどのつづへ 〽 はふぴ〮どのつづへ 〥 がぅぎ〻

〲
〳
〴
〵

ぽ

〶
〷

根拠 ここで与えたきぐぉたきぉぎがくぃおよびきぐぉたきぁじがくぃの定義には，これら〲つの演算を特別に扱う必要がないという利点がある．他のリデュース演算のように処理すれば良い．プログラマはきぐぉたきぁじがくぃおよびきぐぉたきぉぎがくぃの独自の定義を必要に応じて与えることができる．欠点としては，値とインデックスを最初にインタリーブしなければならないという点と，更にうはひぴひちの言語の場合，インデックスと値を同じ型に強制変換しなければならないという点が挙げられる． （根拠の終わり）

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

5.9.5 ユーザ定義リデュース演算

〱〷
〱〸
〱〹

きぐぉたくぐたぃげぅぁごぅ〨てふのっぴどはの〬 っはねねふぴづ〬 はば〩
ぉぎ
ぉぎ
くさご

てふのっぴどはのっはねねふぴづ
はば〲〰

ユーザ定義関数（関数）可換の場合はぴひふづ それ以外はてちぬびづ
演算（ハンドル）どのぴ きぐぉたくばたっひづちぴづ〨きぐぉたさびづひたてふのっぴどはの 〪てふのっぴどはの〬 どのぴ っはねねふぴづ〬 きぐぉたくば 〪はば〩
きぐぉたくぐたぃげぅぁごぅ〨 うさぎぃごぉくぎ〬 ぃくききさごぅ〬 くぐ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
がくぇぉぃぁが ぃくききさごぅぉぎごぅぇぅげ くぐ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺くば〺〺ぉのどぴ〨きぐぉ〺〺さびづひたてふのっぴどはの〪 てふのっぴどはの〬 ぢははぬ っはねねふぴづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉたくぐたぃげぅぁごぅは，ユーザ定義のリデュース演算をはばハンドルにバインドし，その後，これをきぐぉたげぅいさぃぅ，きぐぉたぁががげぅいさぃぅ，きぐぉたげぅいさぃぅたこぃぁごごぅげ，きぐぉたこぃぁぎ，
きぐぉたぅじこぃぁぎで使用することができる．ユーザ定義演算は結合的であると仮定される．
っはねねふぴづ 〽 ぴひふづであれば，この演算は可換かつ結合的でなければならない．っはねねふぴづ 〽
てちぬびづであれば，操作順序は固定され，プロセスランクの昇順でプロセス〰 から始まると定義される．操作の結合性から評価の実行順序を変更することが可能である．また，っはねねふぴづ 〽 ぴひふづの場合は，さらに可換性を利用して評価の実行順序を変更することが可能である．
引数てふのっぴどはのはユーザ定義関数であり， どのぶづっ，どのはふぴぶづっ，ぬづの，つちぴちぴべばづの〴つの引数を持たなければならない．
この関数のぉこく ぃ言語プロトタイプは次のとおりである．
ぴべばづつづて ぶはどつ きぐぉたさびづひたてふのっぴどはの〨ぶはどつ 〪どのぶづっ〬 ぶはどつ 〪どのはふぴぶづっ〬 どのぴ 〪ぬづの〬
きぐぉたいちぴちぴべばづ 〪つちぴちぴべばづ〩〻〳〲

ユーザ定義関数のうはひぴひちの言語での宣言は次のとおりである．
こさあげくさごぉぎぅ さこぅげたうさぎぃごぉくぎ〨ぉぎざぅぃ〬 ぉぎくさござぅぃ〬 がぅぎ〬 ごすぐぅ〩

〴〷

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

〴〸

第 〵〮 集団的通信

〱〸〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

〼ぴべばづ〾 ぉぎざぅぃ〨がぅぎ〩〬 ぉぎくさござぅぃ〨がぅぎ〩ぉぎごぅぇぅげ がぅぎ〬 ごすぐぅ
ユーザ定義関数のぃ〫〫言語での宣言は次のとおりである．
{ぴべばづつづて ぶはどつ きぐぉ〺〺さびづひたてふのっぴどはの〨っはのびぴ ぶはどつ〪 どのぶづっ〬 ぶはどつ 〪どのはふぴぶづっ〬 どのぴ
ぬづの〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩〻 （廃止された呼び出し形式．第15.2節を参照）}
つちぴちぴべばづ引数は，きぐぉたげぅいさぃぅの呼び出しに渡されるデータ型のハンドルである．ユーザのリデュース関数を作成する場合には，次のことが成立するようにしなければならない．ふせ〰そ〬 〮〮〮 〬 ふせぬづの〭〱そをこの関数を呼び出すときの引数どのぶづっ．ぬづの，つちぴちぴべばづで記述される通信バッファの中のぬづの個の要素とする．ぶせ〰そ〬 〮〮〮 〬 ぶせぬづの〭〱そ をこの関数が呼び出される
ときの引数どのはふぴぶづっ，ぬづの，つちぴちぴべばづで記述される通信バッファの中のぬづの個の要素とする．
ぷせ〰そ〬 〮〮〮 〬ぷせぬづの〭〱そをこの関数から戻るときの引数どのはふぴぶづっ，ぬづの， つちぴちぴべばづで記述される通信バッファの中のぬづの個の要素とする．ど〽〰 〬 〮〮〮 〬 ぬづの〭〱についてぷせどそ 〽 ふせどそ◦ぶせどそである．ここで， ◦は関数が計算するリデュース演算である．
どのぶづっ，どのはふぴぶづっをてふのっぴどはのがリダクションするぬづの個の要素の配列と考えることもできる．リダクションの結果をどのはふぴぶづっに上書きする，これが名前の由来である．この関数の呼び出しにより．ぬづの個の各要素についてリデュース演算の評価が要素毎に行われる．つまり，関数はど 〽 〰, ..., っはふのぴ − 〱についてどのはふぴぶづっせどそに値どのぶづっせどそ ◦ どのはふぴぶづっせどそを返す．ここで，◦ はこの関数が演算する結合操作である．

〲〳
〲〴
〲〵
〲〶
〲〷

根拠 ぬづの引数を使用することで，きぐぉたげぅいさぃぅが入力バッファ中の要素ごとに関数を呼び出さずに済むようになる．さらに言えば，システム側で入力データに対する関数の適用方法を選べるということである．ぃ言語では，うはひぴひちの言語との互換性か
ら参照渡しとしている．

〲〸
〲〹
〳〰
〳〱

既知の大域的なハンドルに対し，つちぴちぴべばづ引数の値を内部で調べることで，〱つのユーザ定義関数をオーバロードし，複数の異なるデータ型に対し使用することが可能である． （根拠の終わり）

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

一般データ型をユーザ関数に渡すことができる．ただし，連続していないデータ型を使用すると，効率が低下するおそれがある．
ユーザ定義関数内部できぐぉ通信関数を呼び出すことはできないが，エラーが発生した場合に関数の内部できぐぉたぁあくげごを呼び出すことができる．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス オーバロードされるユーザ定義リデュース関数のライブ
ラリを定義するとする．つちぴちぴべばづ引数は，オペランド型に応じて各呼び出しの正しい実行パスを選択するのに利用される． ユーザ定義リデュース関数は渡され
るつちぴちぴべばづ引数を解読することはできず，またデータ型ハンドルとそれが表すデー
タ型との対応関係を識別することもできない．この対応関係は，データ型を生成した時点で確定している．ライブラリを使用する前に，ライブラリの初期化プリアン
ブルを実行しなければならない．このプリアンブルコードによって，ライブラリが〵〮〹〮 大域的なリデュース操作〱〸〳

使用するデータ型を定義し，これらのデータ型のハンドルをユーザコードとライブ
ラリコードで共有するスタティックな大域変数に格納する．

〱〲〳

きぐぉたげぅいさぃぅのうはひぴひちの言語バージョンは，うはひぴひちの言語の呼び出し規約を使用してユーザ定義リデュース関数を呼び出し，うはひぴひちの言語のデータ型引数を渡す．ぃ言語
バージョンではぃ言語の呼び出し規約でデータ型ハンドルのぃ言語の表現を使用する．両方の言語を同時に使用することを予定しているユーザの場合には，それぞれに応じたリデュース関数の定義を行わなければならない． （ユーザへのアドバイ
ス終わり）

〴
〵
〶
〷
〸
〹
〱〰
〱〱

実装者へのアドバイス 「インプレイス」オプションを使用しない，
きぐぉたげぅいさぃぅの単純なミスによる不効率な実装を以下に示す．

〱〲
〱〳
〱〴

きぐぉたぃはねねたびどぺづ〨っはねね〬 〦でひはふばびどぺづ〩〻
きぐぉたぃはねねたひちのに〨っはねね〬 〦ひちのに〩〻どて 〨ひちのに 〾 〰〩 ほ
きぐぉたげづっぶ〨ぴづねばぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 ひちのに〭〱〮〮〮〬〩〻
さびづひたひづつふっづ〨ぴづねばぢふて〬 びづのつぢふて〬 っはふのぴ〬 つちぴちぴべばづ〩〻ぽどて 〨ひちのに 〼 でひはふばびどぺづ〭〱〩 ほ
きぐぉたこづのつ〨びづのつぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 ひちのに〫〱〬 〮〮〮〩〻
ぽ〪〯 ちのびぷづひ のはぷ ひづびどつづび どの ばひはっづびび でひはふばびどぺづ〭〱 〮〮〮 のはぷ びづのつ ぴは ひははぴ〪〯
どて 〨ひちのに 〽〽 ひははぴ〩 ほきぐぉたぉひづっぶ〨ひづっぶぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 でひはふばびどぺづ〭〱〮〮〮〬〬 〦ひづぱ〩〻
ぽどて 〨ひちのに 〽〽 でひはふばびどぺづ〭〱〩 ほ
きぐぉたこづのつ〨びづのつぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 ひははぴ〬 〮〮〮〩〻ぽどて 〨ひちのに 〽〽 ひははぴ〩 ほきぐぉたしちどぴ〨〦ひづぱ〬 〦びぴちぴふび〩〻
ぽ

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

リデュース演算はプロセス〰からプロセス でひはふばびどぺづ〭〱まで順番に進行する．この順序は，さびづひたひづつふっづ〨〩 関数によって定義される演算子が 可換でない場合を 考 慮 し て 順 序 を 選 択 す る． 結 合 性 を 利 用 し，さ ら に ツ リ ー を 用 い て 対 数 オ
ーダーでリダクションを行うことにより効率のよい実装を行うことができる．
きぐぉたくぐたぃげぅぁごぅへのっはねねふぴづ引数が真の場合， 結合性を利用できる．さらに，サイズ ぬづの < っはふのぴ の単位で要素を転送，リデュースすることにより必要な一時バッファの大きさをリデュースし，通信を計算によりパイプライン化することができ
る．

〳〲

定義済みリデュース操作はユーザ定義操作のライブラリとして実装できる．しかし，きぐぉたげぅいさぃぅでこれらの関数を特別な場合として処理すれば性能が向上する
可能性がある． （実装者へのアドバイス終わり）

〴〲

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信〱〸〴〱

きぐぉたくぐたうげぅぅ〨 はば〩

〲

ぉぎくさご

はば

〳
〴
〵
〶
〷

どのぴ きぐぉたはばたてひづづ〨 きぐぉたくば 〪はば〩
きぐぉたくぐたうげぅぅ〨 くぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くぐ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺くば〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〸

解放するユーザ定義リダクション演算をマークし，はば をきぐぉたくぐたぎさがが に設定する．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

演算（ハンドル）

ユーザ定義リデュースの例
ここでユーザ定義リデュース演算の例を取りあげる．ここではグループ内コミュニケータを使用した例を示す．
例 5.20 ぃ言語で複素数型配列の積を計算する．
ぴべばづつづて びぴひふっぴ ほ
つはふぢぬづ ひづちぬ〬どねちで〻ぽ ぃはねばぬづへ〻

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

〪〯 ぴとづ ふびづひ〭つづてどのづつ てふのっぴどはの〪〯
ぶはどつ ねべぐひはつ〨 ぃはねばぬづへ 〪どの〬 ぃはねばぬづへ 〪どのはふぴ〬 どのぴ 〪ぬづの〬 きぐぉたいちぴちぴべばづ 〪つばぴひ 〩ほどのぴ ど〻
ぃはねばぬづへ っ〻〲〶てはひ 〨ど〽〰〻 ど〼 〪ぬづの〻 〫〫ど〩 ほっ〮ひづちぬ 〽 どのはふぴ〭〾ひづちぬ〪どの〭〾ひづちぬ 〭どのはふぴ〭〾どねちで〪どの〭〾どねちで〻っ〮どねちで 〽 どのはふぴ〭〾ひづちぬ〪どの〭〾どねちで 〫どのはふぴ〭〾どねちで〪どの〭〾ひづちぬ〻〪どのはふぴ 〽 っ〻どの〫〫〻 どのはふぴ〫〫〻
ぽ

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぽ
〪〯 ちのつ〬 ぴは っちぬぬ どぴ〪〪〮〮〮〯〮〮〮〯 づちっと ばひはっづびび とちび ちの ちひひちべ はて 〱〰〰 ぃはねばぬづへづび〪〯
ぃはねばぬづへ ちせ〱〰〰そ〬 ちのびぷづひせ〱〰〰そ〻きぐぉたくば ねべくば〻きぐぉたいちぴちぴべばづ っぴべばづ〻〪〯 づへばぬちどの ぴは きぐぉ とはぷ ぴべばづ ぃはねばぬづへ どび つづてどのづつ〪〯
きぐぉたごべばづたっはのぴどでふはふび〨 〲〬 きぐぉたいくさあがぅ〬 〦っぴべばづ 〩〻きぐぉたごべばづたっはねねどぴ〨 〦っぴべばづ 〩〻〪〯 っひづちぴづ ぴとづ っはねばぬづへ〭ばひはつふっぴ ふびづひ〭はば〪〯
きぐぉたくばたっひづちぴづ〨 ねべぐひはつ〬 〱〬 〦ねべくば 〩〻〵〮〹〮 大域的なリデュース操作〱〸〵

きぐぉたげづつふっづ〨 ち〬 ちのびぷづひ〬 〱〰〰〬 っぴべばづ〬 ねべくば〬 ひははぴ〬 っはねね 〩〻〱〲〪〯 ぁぴ ぴとどび ばはどのぴ〬 ぴとづ ちのびぷづひ〬 ぷとどっと っはのびどびぴび はて 〱〰〰 ぃはねばぬづへづび〪〬 ひづびどつづび はの ばひはっづびび ひははぴ
〪〯

〳
〴
〵
〶
〷

5.9.6 オールリデュース〸〹

きぐぉでは，演算結果がグループの全てのプロセスへ返されるリデュース操作のバリエーションが用意されている．きぐぉでは，これらの操作に関わる同じグループ内の全てのプロセスが同一の結果を受け取ることが要求されている．

〱〰
〱〱
〱〲
〱〳
〱〴

きぐぉたぁががげぅいさぃぅ〨 びづのつぢふて〬 ひづっぶぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 はば〬 っはねね〩
ぉぎ
くさご
ぉぎ
ぉぎ
ぉぎ
ぉぎ

びづのつぢふて
ひづっぶぢふてっはふのぴ
つちぴちぴべばづ
はば
っはねね

〱〵

送信バッファの先頭アドレス（選択型）〱〶

受信バッファの先頭アドレス（選択型）〱〷

送信バッファ内の要素の数（非負の 整数型）〱〸

送信バッファの要素のデータ型（ハンドル）
演算（ハンドル）
コミュニケータ（ハンドル）

〱〹
〲〰
〲〱
〲〲
〲〳

どのぴ きぐぉたぁぬぬひづつふっづ〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね〩
きぐぉたぁががげぅいさぃぅ〨こぅぎいあさう〬 げぅぃざあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぁぬぬひづつふっづ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ きぐぉ〺〺くば〦 はば〩 っはのびぴ 〽 〰
（廃止された呼び出し形式, 第15.2節を参照）}
っはねねがグループ内コミュニケータの場合，きぐぉたぁががげぅいさぃぅの動作は結果がグループの全メンバの受信バッファに現れる点を除き，きぐぉたげぅいさぃぅ と同じである．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

実装者へのアドバイス オールリデュース操作は，リデュースの後にブロードキャ
ストが続くものとして実装することができる．しかし，直接実装したほうが効率がよいと思われる． （実装者へのアドバイス終わり）
全てのプロセスの引数びづのつぢふて に値きぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ間コミュニケータの「インプレイス」オプションが指定される．この場合，各プロセスで受信バッファから入力データが取得され，ここでは入力データが出力データによって置換される．
っはねねがグループ間コミュニケータの場合，グループぁのプロセスによって提供される
データのリデュースの結果がグループあの各プロセスに格納され，同様に逆のことも行われる．両方のグループで，同じ型仕様を指定するっはふのぴおよびつちぴちぴべばづ引数を使用する必要がある．
ここではグループ内コミュニケータを使用した例を示す．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〸〶
〱
〲
〳
〴
〵
〶
〷

例 5.21 ベクトルと，プロセスのグループに分散した配列の積を計算し，全ノードに結果を返すルーチン（例〵〮〱〶も参照）
こさあげくさごぉぎぅ ぐぁげたあがぁこ〲〨ね〬 の〬 ち〬 ぢ〬 っ〬 っはねね〩げぅぁが ち〨ね〩〬 ぢ〨ね〬の〩〡 ぬはっちぬ びぬどっづ はて ちひひちべげぅぁが っ〨の〩〡 ひづびふぬぴげぅぁが びふね〨の〩ぉぎごぅぇぅげ の〬 っはねね〬 ど〬 な〬 どづひひ

〸
〹
〱〰
〱〱
〱〲
〱〳

〡 ぬはっちぬ びふね
いく な〽 〱〬 のびふね〨な〩 〽 〰〮〰
いく ど 〽 〱〬 ね
びふね〨な〩 〽 びふね〨な〩 〫 ち〨ど〩〪ぢ〨ど〬な〩ぅぎい いくぅぎい いく

〱〴
〱〵
〱〶
〱〷
〱〸

〡 でぬはぢちぬ びふね
ぃぁがが きぐぉたぁががげぅいさぃぅ〨びふね〬 っ〬 の〬 きぐぉたげぅぁが〬 きぐぉたこさき〬 っはねね〬 どづひひ〩〡 ひづぴふひの ひづびふぬぴ ちぴ ちぬぬ のはつづびげぅごさげぎ

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

5.9.7 プロセスローカルなリデュース
このセクションで説明する関数は，標準のきぐぉ操作では対応が難しい特別なリデュー
スパターンを実装しようとするライブラリの実装者にとって重要である．
以下の関数では，リデュース演算子がローカル引数に適用される．

〲〸
〲〹
〳〰

きぐぉたげぅいさぃぅたがくぃぁが〨 どのぢふて〬 どのはふぴぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 はば〩
入力バッファ（選択型）

ぉぎくさご

どのぢふて
どのはふぴぢふて

ぉぎ

っはふのぴ

どのぢふておよびどのはふぴぢふて バッファ内の要素の数（非負の
整数型）

ぉぎ

つちぴちぴべばづ

どのぢふておよびどのはふぴぢふて バッファの要素のデータ型（ハ
ンドル）

ぉぎ

はば

演算（ハンドル）

ぉぎ

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

入力バッファと出力バッファの組み合わせ（選択型）

どのぴ きぐぉたげづつふっづたぬはっちぬ〨ぶはどつ〪 どのぢふて〬 ぶはどつ〪 どのはふぴぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〩きぐぉたげぅいさぃぅたがくぃぁが〨ぉぎあさう〬 ぉぎくさあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぉぅげげくげ〩〼ぴべばづ〾 ぉぎあさう〨〪〩〬 ぉぎくさごあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺くば〺〺げづつふっづたぬはっちぬ〨っはのびぴ ぶはどつ〪 どのぢふて〬 ぶはどつ〪 どのはふぴぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
この関数は，第〵〮〹〮〵節のユーザ定義演算で説明したように，はばで指定される演算をどのぢふておよびどのはふぴぢふての要素に適用し，結果をどのはふぴぢふてに要素ごとに格納する．どのぢふてと〵〮〱〰〮 リデューススキャッタ〱〸〷

どのはふぴぢふて（入力と結果）の両方が，っはふのぴで指定されたのと同じ要素数を持ち，つちぴちぴべばづで指定されたのと同じデータ型を持つ． きぐぉたぉぎたぐがぁぃぅ オプションは利用できない．
リデュース演算はその可換性の問い合わせを行うことができる．

〱
〲
〳
〴
〵

きぐぉたくぐたぃくききさごぁごぉざぅ〨 はば〬 っはねねふぴづ〩
ぉぎ
くさご

はば
っはねねふぴづ〶

演算（ハンドル）はばが可換の場合はぴひふづ，それ以外の場合はてちぬびづ（論
理型）

〷
〸
〹
〱〰

どのぴ きぐぉたくばたっはねねふぴちぴどぶづ〨きぐぉたくば はば〬 どのぴ 〪っはねねふぴづ〩
きぐぉたくぐたぃくききさごぁごぉざぅ〨くぐ〬 ぃくききさごぅ〬 ぉぅげげくげ〩がくぇぉぃぁが ぃくききさごぅぉぎごぅぇぅげ くぐ〬 ぉぅげげくげ
{ぢははぬ きぐぉ〺〺くば〺〺ぉびたっはねねふぴちぴどぶづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

5.10 リデューススキャッタ〱〸〱〹

きぐぉでは，リデュース操作のバリエーションが用意されている．そこでは，戻る際に演算結果がグループ内の全プロセスにスキャッタされる．全てのプロセスに等しいサイズのブロックをスキャッタする操作もあれば，プロセスごとに異なるサイズのブロックをスキャッタする操作もある．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

5.10.1 MPI_REDUCE_SCATTER_BLOCK

〲〶
〲〷
〲〸

きぐぉたげぅいさぃぅたこぃぁごごぅげたあがくぃか〨 びづのつぢふて〬 ひづっぶぢふて〬 ひづっぶっはふのぴ〬 つちぴちぴべばづ〬 はば〬 っはねね〩
ぉぎ
くさご
ぉぎ
ぉぎ
ぉぎ
ぉぎ

びづのつぢふて
ひづっぶぢふてひづっぶっはふのぴ
つちぴちぴべばづ
はば
っはねね

〲〹

送信バッファの先頭アドレス（選択型）〳〰

受信バッファの先頭アドレス（選択型）〳〱

ブロックごとの要素数（非負の整数型）〳〲

送信バッファおよび受信バッファの要素のデータ型（ハンドル）
演算（ハンドル）
コミュニケータ（ハンドル）

どのぴ きぐぉたげづつふっづたびっちぴぴづひたぢぬはっに〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね〩
きぐぉたげぅいさぃぅたこぃぁごごぅげたあがくぃか〨こぅぎいあさう〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ げぅぃざぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺げづつふっづたびっちぴぴづひたぢぬはっに〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬
どのぴ ひづっぶっはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬
っはのびぴ きぐぉ〺〺くば〦 はば〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}
っはねねがグループ内コミュニケータの場合，きぐぉたげぅいさぃぅたこぃぁごごぅげたあがくぃかはまず，演算はばを使用して，びづのつぢふて，っはふのぴ，つちぴちぴべばづで定義される送信バッファで

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〸〸
〱
〲
〳
〴
〵
〶
〷

っはふのぴ 〽 の〪ひづっぶっはふのぴ個の要素（の はっはねねのグループ内のプロセスの数）のベクトルに対して大域的な要素ごとのリデュースを行う．ルーチンは，ひづっぶっはふのぴ，つちぴちぴべばづ，はば，っはねねの同じ引数を使用して，グループの全メンバによって呼び出される． 生成されるベクトルは，グループの各プロセスにスキャッタされるひづっぶっはふのぴ個の要素の連続す
るの個のブロックとして扱われる．ど番目のブロックがプロセスど に送信され，ひづっぶぢふて，
ひづっぶっはふのぴ．つちぴちぴべばづで定義される受信バッファに格納される．

〸

実装者へのアドバイス きぐぉたげぅいさぃぅたこぃぁごごぅげたあがくぃかルーチンは機能的に，
っはふのぴがひづっぶっはふのぴ〪のと等しいきぐぉたげぅいさぃぅギャザー操作を実行した後に びづのつっはふのぴと
ひづっぶっはふのぴが等しいきぐぉたこぃぁごごぅげ を実行するのと同等である．ただし，直接実装した方が高速になる場合がある． （実装者へのアドバイス終わり）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

全てのプロセスで引数びづのつぢふて に値きぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケータの「インプレイス」オプションが指定される．この場合，入力データは受信バッファから取得される．
っはねねがグループ間コミュニケータの場合，一方のグループ（グループぁ）のプロセスによって提供されるデータのリデュースの結果が他方のグループ（グループ あ）のプロ
セス間でスキャッタされ，同様に逆のことが行われる．各グループ内で，全てのプロセ
スがひづっぶっはふのぴ引数に同じ値を渡し，送信バッファに格納されたっはふのぴ 〽 の〪ひづっぶっはふのぴ個の要素（のはグループのサイズ）の入力ベクトルを渡す．要素の数っはふのぴは〲つのグループで同じでなければならない．他方のグループから得られるベクトルはグループのプロセス
間でひづっぶっはふのぴ個の要素のブロックでスキャッタされる．

〲〶

根拠 一方のグループの送信バッファの長さが他方のグループのローカルひづっぶっはふのぴ
引数によって決定できるようにするため，最後の制約が必要となる．これがないと，要素のリデュースの数を割り出すために通信が必要となる． （根拠の終わり）

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

5.10.2 MPI_REDUCE_SCATTER
きぐぉたげぅいさぃぅたこぃぁごごぅげは，ブ ロ ッ ク の ス キ ャ ッ タ の サ イ ズ を 可 変 と で き る よ うにきぐぉたげぅいさぃぅたこぃぁごごぅげたあがくぃかの機能を拡張したものである． ブロックサイズは，ど番目のブロックにひづっぶっはふのぴびせどそ 個の要素が入るようにひづっぶっはふのぴび配列によって決まる．

〳〸〳〹

きぐぉたげぅいさぃぅたこぃぁごごぅげ〨 びづのつぢふて〬 ひづっぶぢふて〬 ひづっぶっはふのぴび〬 つちぴちぴべばづ〬 はば〬 っはねね〩

〴〰
〴〱

ぉぎ

〴〲

くさご

〴〳

ぉぎ

〴〴

ぉぎ

びづのつぢふて
ひづっぶぢふてひづっぶっはふのぴび
つちぴちぴべばづ

〴〵
〴〶

ぉぎ

〴〷

ぉぎ

〴〸

はば
っはねね

送信バッファの先頭アドレス（選択型）
受信バッファの先頭アドレス（選択型）（グループサイズの長さの）非負の整数配列
送信バッファおよび受信バッファの要素のデータ型（ハンドル）
演算（ハンドル）
コミュニケータ（ハンドル）〵〮〱〰〮 リデューススキャッタ〱〸〹

どのぴ きぐぉたげづつふっづたびっちぴぴづひ〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ 〪ひづっぶっはふのぴび〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね〩
きぐぉたげぅいさぃぅたこぃぁごごぅげ〨こぅぎいあさう〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ げぅぃざぃくさぎごこ〨〪〩〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺げづつふっづたびっちぴぴづひ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬
どのぴ ひづっぶっはふのぴびせそ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬
っはのびぴ きぐぉ〺〺くば〦 はば〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〱
〲
〳
〴
〵
〶
〷
〸
〹

っはねねがグループ内コミュニケータの場合，きぐぉたげぅいさぃぅたこぃぁごごぅげはまず，演算はばを使用して，びづのつぢふて，っはふのぴ，つちぴちぴべばづで定義される送信バッファでP
っはふのぴ 〽 n−1
i=0 ひづっぶっはふのぴびせどそ個の要素（の はっはねねのグループ内のプロセスの数）のベクトルに対して大域的な要素ごとのリデュースを行う．ルーチンは，ひづっぶっはふのぴび，つちぴちぴべばづ，
はば， っはねねの同じ引数を使用して，グループの全メンバによって呼び出される．生成されるベクトルは，ど番目のブロックの要素数がひづっぶっはふのぴびせどそであるの個の連続するブロックとして扱われる．ブロックは，グループのプロセスにスキャッタされる．ど番目のブロックがプロセスど に送信され，ひづっぶぢふて，ひづっぶっはふのぴびせどそ， つちぴちぴべばづで定義される受信バッファに格納される．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

実装者へのアドバイス きぐぉたげぅいさぃぅたこぃぁごごぅげルーチンは機能的に，
っはふのぴ がひづっぶっはふのぴびせどその合計と等しいきぐぉたげぅいさぃぅリデュース操作を実行した後にびづのつっはふのぴとひづっぶっはふのぴが等しいきぐぉたこぃぁごごぅげざを実行するのと同等である．ただし，直接実装した方が高速になる場合がある． （実装者へのアドバイス終わり）

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

引数びづのつぢふて に値きぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケータの「インプレイス」オプションが指定される．この場合，入力データは受信バッファから取得される．ひづっぶっはふのぴびせどそ〽〽〰のプロセスには受信バッファが割り当てられないことがあるた
め，全てのプロセスで「インプレイス」オプションを指定する必要はない．
っはねねがグループ間コミュニケータの場合，一方のグループ（グループぁ）のプロセスによって提供されるデータのリデュースの結果が他方のグループ（グループあ）のプロ
セス間でスキャッタされ，同様に逆のことが行われる．各グループ内で，全てのプロセ
P
スが同じひづっぶっはふのぴび引数を渡し，送信バッファに格納されたっはふのぴ 〽 n−1
i=0 ひづっぶっはふのぴびせどそ個の要素（の はグループのサイズ）の入力ベクトルを渡す．他方のグループから得られるベクトルはグループのプロセス間でひづっぶっはふのぴびせどそ個の要素のブロックでスキャッタされる．要素の数っはふのぴは〲つのグループで同じでなければならない．

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

根拠 送信バッファの長さがローカルひづっぶっはふのぴびエントリの合計によって決定できるようにするために最後の制約が必要となる．これがないと，リデュースされる要素数を割り出すために通信が必要となる． （根拠の終わり）

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信〱〹〰
〱

5.11 スキャン〲〳〴

5.11.1 包括的スキャン〵〶

きぐぉたこぃぁぎ〨 びづのつぢふて〬 ひづっぶぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 はば〬 っはねね 〩

〷
〸

ぉぎ

〹

くさご

〱〰

ぉぎ

〱〱

ぉぎ

〱〲

ぉぎ

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

ぉぎ

びづのつぢふて
ひづっぶぢふてっはふのぴ
つちぴちぴべばづ
はばっはねね

送信バッファの先頭アドレス（選択型）
受信バッファの先頭アドレス（選択型）
入力バッファ内の要素の数（非負の 整数型）
入力バッファの要素のデータ型（ハンドル）
演算（ハンドル）
コミュニケータ（ハンドル）

どのぴ きぐぉたこっちの〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね 〩きぐぉたこぃぁぎ〨こぅぎいあさう〬 げぅぃざあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぉのぴひちっはねね〺〺こっちの〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ きぐぉ〺〺くば〦 はば〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
っはねねがグループ内コミュニケータの場合，きぐぉたこぃぁぎはグループ中に分散したデータに対しプリフィックスリデュースを実行する場合に使用する．この演算は，ランクど のプロセスの受信バッファの中に，ランク〰〮〮〮〬〬どまでのプロセスの送信バッファの中の値のリデュースを返す．サポートされている演算の種類や意味，および送信，受信バッ
ファに対する制約はきぐぉたげぅいさぃぅの場合と同様である．
引数びづのつぢふてにきぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケータの「インプレイス」オプションが指定される．この場合，入力データは受信バッファから取得され，出力データによって置換される．
この演算はグループ間コミュニケータに対しては無効である．

〳〳
〳〴
〳〵

5.11.2 排他的スキャン

〳〶
〳〷
〳〸

きぐぉたぅじこぃぁぎ〨びづのつぢふて〬 ひづっぶぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 はば〬 っはねね〩

〳〹

ぉぎ

〴〰

くさご

〴〱

ぉぎ

〴〲
〴〳

ぉぎ

〴〴

ぉぎ

〴〵

ぉぎ

びづのつぢふて
ひづっぶぢふてっはふのぴ
つちぴちぴべばづ
はばっはねね

送信バッファの先頭アドレス（選択型）
受信バッファの先頭アドレス（選択型）
入力バッファ内の要素の数（非負の整数型）
入力バッファの要素のデータ型（ハンドル）
演算（ハンドル）グループ内コミュニケータ〨ハンドル〩

〴〶
〴〷
〴〸

どのぴ きぐぉたぅへびっちの〨ぶはどつ 〪びづのつぢふて〬 ぶはどつ 〪ひづっぶぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね〩〵〮〱〱〮 スキャン〱〹〱

きぐぉたぅじこぃぁぎ〨こぅぎいあさう〬 げぅぃざあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぉのぴひちっはねね〺〺ぅへびっちの〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ きぐぉ〺〺くば〦 はば〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱

っはねねがグループ内コミュニケータの場合，きぐぉたぅじこぃぁぎはグループ中に分散したデータのプリフィックスリデュースを実行する場合に使用する． ランク〰のプロセ
スのひづっぶぢふて の値は未定義で，ひづっぶぢふてはプロセス〰では意味を持たない． ランク〱のプ
ロセスのひづっぶぢふて の値はランク〰のプロセスのびづのつぢふて の値として定義されている． ラン
クi > 〱のプロセスの場合，この演算は，ランクiのプロセスの受信バッファの中に，ランク〰, . . . , i − 〱（端の数を含む）までのプロセスの送信バッファの中の値のリデュースを返す．サポートされている演算の種類や意味，および送信，受信バッファに対する制約
はきぐぉたげぅいさぃぅの場合と同様である．
引数びづのつぢふてにきぐぉたぉぎたぐがぁぃぅを渡すことにより，グループ内コミュニケータの「インプレイス」オプションが指定される．この場合，入力データは受信バッファから取得され，出力データによって置換される．ランク〰の受信バッファはこの演算によって変更されない．
この操作はグループ間コミュニケータに対しては無効である．

〷

〲
〳
〴
〵
〶

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

根拠 排他的スキャンは包括的スキャンよりも一般的である．包括的スキャン操作
は，排他的スキャンを使用し，これにローカル寄与分をローカルに組み合わせることにより，実現することができる． きぐぉたきぁじのような反転できない操作の場合，包括的スキャンにより排他的スキャンの計算をすることはできない． （根拠の終わ
り）

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

5.11.3 MPI_SCANの使用例〳〱

ここではグループ内コミュニケータを使用した例を示す．

〳〲〳〳

例 5.22 この例では，ユーザ定義操作を使用して部分スキャンを行う．部分スキャンは入力として値の集合および論理値の集合をとり，その論理値によりスキャンの様々なセグメントを区分けする．例えば，
値
v1
v2
v3
v4
v5
v6
v7
v8
論理 〰
〰
〱
〱
〱
〰
〰
〱
結果 v1 v1 〫 v2 v3 v3 〫 v4 v3 〫 v4 〫 v5 v6 v6 〫 v7 v8

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

この結果をもたらす演算子は次のとおりである．

〴〳
〴〴

u
i
ここで，

!

◦

v
j

!

〽

w
j

!

〴〵

,

〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱〹〲
〱

(

〲

w〽

〳

u 〫 v どて i 〽 j.
v
どて i 6〽 j〴〵〶

これが非可換演算子であることに注意する．これを実装するぃ言語のコードは次のとおりである．

〷〸〹〱〰

ぴべばづつづて びぴひふっぴ ほ
つはふぢぬづ ぶちぬ〻
どのぴ ぬはで〻
ぽ こづでこっちのぐちどひ〻

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

〪〯 ぴとづ ふびづひ〭つづてどのづつ てふのっぴどはの〪〯
ぶはどつ びづでこっちの〨 こづでこっちのぐちどひ 〪どの〬 こづでこっちのぐちどひ 〪どのはふぴ〬 どのぴ 〪ぬづの〬
きぐぉたいちぴちぴべばづ 〪つばぴひ 〩ほどのぴ ど〻
こづでこっちのぐちどひ っ〻〱〸てはひ 〨ど〽〰〻 ど〼 〪ぬづの〻 〫〫ど〩 ほ
どて 〨 どの〭〾ぬはで 〽〽 どのはふぴ〭〾ぬはで 〩っ〮ぶちぬ 〽 どの〭〾ぶちぬ 〫 どのはふぴ〭〾ぶちぬ〻
づぬびづっ〮ぶちぬ 〽 どのはふぴ〭〾ぶちぬ〻っ〮ぬはで 〽 どのはふぴ〭〾ぬはで〻〪どのはふぴ 〽 っ〻どの〫〫〻 どのはふぴ〫〫〻
ぽ

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

ぽ
ユーザ定義関数のどのはふぴ引数は演算子の右辺に対応する．この演算子を使用する場合には，次のように非可換であることを指定するのを忘れないようにする必要がある．

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ ど〬ぢちびづ〻
こづでこっちのぐちどひ ち〬 ちのびぷづひ〻
きぐぉたくばねべくば〻きぐぉたいちぴちぴべばづ ぴべばづせ〲そ 〽 ほきぐぉたいくさあがぅ〬 きぐぉたぉぎごぽ〻きぐぉたぁどのぴ
つどびばせ〲そ〻どのぴ
ぢぬはっにぬづのせ〲そ 〽 ほ 〱〬 〱ぽ〻きぐぉたいちぴちぴべばづ びびばちどひ〻〪〯 づへばぬちどの ぴは きぐぉ とはぷ ぴべばづ こづでこっちのぐちどひ どび つづてどのづつ〪〯
きぐぉたぇづぴたちつつひづびび〨 ち〬 つどびば〩〻
きぐぉたぇづぴたちつつひづびび〨 ち〮ぬはで〬 つどびば〫〱〩〻ぢちびづ 〽 つどびばせ〰そ〻てはひ 〨ど〽〰〻 ど〼〲〻 〫〫ど〩 つどびばせどそ 〭〽 ぢちびづ〻
きぐぉたごべばづたっひづちぴづたびぴひふっぴ〨 〲〬 ぢぬはっにぬづの〬 つどびば〬 ぴべばづ〬 〦びびばちどひ 〩〻きぐぉたごべばづたっはねねどぴ〨 〦びびばちどひ 〩〻〪〯 っひづちぴづ ぴとづ びづでねづのぴづつ〭びっちの ふびづひ〭はば〪〯
きぐぉたくばたっひづちぴづ〨 びづでこっちの〬 〰〬 〦ねべくば 〩〻〮〮〮きぐぉたこっちの〨 〦ち〬 〦ちのびぷづひ〬 〱〬 びびばちどひ〬 ねべくば〬 っはねね 〩〻〵〮〱〲〮 正当性〱〹〳

5.12 正当性〱〲

正しくかつ可搬なプログラムは，集団的通信を同期的に行うか否かにかかわらず，デッドロックが発生しないように集団的通信を呼び出さなければならない．次の例は，グループ内コミュニケータでの集団的ルーチンの危険な使用例である．
例 5.23 以下の例は誤りである．
びぷどぴっと〨ひちのに〩 ほ
っちびづ 〰〺
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〰〬 っはねね〩〻
きぐぉたあっちびぴ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 〱〬 っはねね〩〻
ぢひづちに〻
っちびづ 〱〺
きぐぉたあっちびぴ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 〱〬 っはねね〩〻
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〰〬 っはねね〩〻
ぢひづちに〻
ぽっはねねのグループが{〰〬〱}であると仮定する．〲つのプロセスは逆順で〲つのブロードキ
ャスト操作を実行する．操作が同期していると，デッドロッククが発生する．
集団操作は通信を行うグループの全てのメンバで同じ順序で実行されなければならな
い．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

例 5.24 以下の例は誤りである．

〲〴〲〵

びぷどぴっと〨ひちのに〩 ほ
っちびづ 〰〺
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〰〬 っはねね〰〩〻
きぐぉたあっちびぴ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 〲〬 っはねね〲〩〻
ぢひづちに〻
っちびづ 〱〺
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〱〬 っはねね〱〩〻
きぐぉたあっちびぴ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 〰〬 っはねね〰〩〻
ぢひづちに〻
っちびづ 〲〺
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〲〬 っはねね〲〩〻
きぐぉたあっちびぴ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 〱〬 っはねね〱〩〻
ぢひづちに〻
ぽ

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

っはねね〰のグループが{〰〬〱}，っはねね〱のグループが{〱〬 〲}， っはねね〲のグループが{〲〬〰}であると仮定する．ブロードキャストが同期操作であれば，巡回依存性がある．つまり，っはねね〲のブロードキャストはっはねね〰のブロードキャスト後でしか完了せず，っはねね〰のブロードキャストはっはねね〱のブロードキャストの後でしか完了せず， っはねね〱のブロードキ
ャストはっはねね〲のブロードキャストの後でしか完了しない．このように，このコードではデッドロックが発生することになる．
集団操作は．巡回依存性が発生しない順序で実行しなければならない．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

例 5.25 以下の例は誤りである．

〴〷
〴〸

〱〹〴
〱
〲
〳
〴
〵
〶
〷
〸

第 〵〮 集団的通信

びぷどぴっと〨ひちのに〩 ほ
っちびづ 〰〺
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〰〬 っはねね〩〻
きぐぉたこづのつ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 〱〬 ぴちで〬 っはねね〩〻
ぢひづちに〻
っちびづ 〱〺
きぐぉたげづっぶ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 〰〬 ぴちで〬 っはねね〬 びぴちぴふび〩〻
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〰〬 っはねね〩〻
ぢひづちに〻
ぽ

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

プロセス〰は，ブロードキャストを実行し，その後ブロッキング送信操作を行う．プ
ロセス〱はまず送信と一致するブロッキング受信を実行し，その後プロセス〰のブロードキャストと一致するブロードキャスト呼び出しを実行する．このプログラムでもデッドロックが発生する可能性がある．プロセス〰でのブロードキャスト呼び出しは，プロセス〱が一致するブロードキャスト呼び出しを実行するまでブロックする場合があるので，送信は実行されない．プロセス 〱は明らかに受信でブロックされるので，この場合ブロードキャストを実行することはない．
集団操作と〱対〱操作の実行の相対的な順序はこのようにすべきである．それは集団操作と〱対〱通信とが同期しても，デッドロックを引き起こさないようにするためである．
例 5.26 安全でない非決定性プログラム．
びぷどぴっと〨ひちのに〩 ほ
っちびづ 〰〺
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〰〬 っはねね〩〻
きぐぉたこづのつ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 〱〬 ぴちで〬 っはねね〩〻
ぢひづちに〻
っちびづ 〱〺
きぐぉたげづっぶ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 きぐぉたぁぎすたこくさげぃぅ〬 ぴちで〬 っはねね〬 びぴちぴふび〩〻
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〰〬 っはねね〩〻
きぐぉたげづっぶ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 きぐぉたぁぎすたこくさげぃぅ〬 ぴちで〬 っはねね〬 びぴちぴふび〩〻
ぢひづちに〻
っちびづ 〲〺
きぐぉたこづのつ〨ぢふて〲〬 っはふのぴ〬 ぴべばづ〬 〱〬 ぴちで〬 っはねね〩〻
きぐぉたあっちびぴ〨ぢふて〱〬 っはふのぴ〬 ぴべばづ〬 〰〬 っはねね〩〻
ぢひづちに〻
ぽ〳つのプロセスは全てブロードキャストに参加している．プロセス〰はブロードキャス
ト後にメッセージをプロセス〱に送信し，プロセス〲はブロードキャストの前にメッセージをプロセス〱に送信する．プロセス〱は引数にワイルドカードで送信元を指定して，ブロードキャストの前後に受信する．
このプログラムには送受信の一致方法の違いで〲通りの実行の仕方が考えられる．これを図〵〮〱〲に示す．ここで， 〲番目の実行は，ブロードキャスト後の送信が他のノードにおいてブロードキャスト前に受信されるという，特殊な結果になる．この例は，特定の同期効果を持つ集団的通信関数に依存すべきではないという事実を証明している．〱番目の実行が起こる時のみ（ブロードキャストが同期をとる時のみ）正常に動作するプログラ
ムは誤りである．

〵〮〱〲〮 正当性〱〹〵
First Execution

process:

0

〱

1

2

〲
〳

recv
broadcast
send

match

broadcast
match

send
broadcast

〴
〵
〶

recv

〷
〸
〹
〱〰

Second Execution

〱〱
〱〲
〱〳
〱〴

broadcast
send

match

〱〵

recv
〱〶

broadcast
recv

match

〱〷

send

〱〸

broadcast〱〹図 〵〮〱〲〺 競合状態が発生すると送信と受信の間に非決定性による一致が生じる．プログ
ラムを決定性にするためにブロードキャストの同期に依存することはできない．

〲〰
〲〱
〲〲
〲〳

最後に，マルチスレッド実装では，〱つのプロセスで同時に実行される複数の集団的通信呼び出しが発生する可能性がある．このような状況ではユーザ側の責任で同じプロセスで〲つの異なる集団的通信呼び出しが同時に同じコミュニケータを使用しないようにする必要がある．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

実装者へのアドバイス 〱対〱きぐぉ通信を使用してブロードキャストを実装していると仮定する．この時は，以下〲つの規則に従わなければならない．

〳〰
〳〱
〳〲

〱〮 全ての受信でその送信元を明示する（ワイルドカードを使用しない）．

〳〳〲〮 各プロセスは後の集団呼び出しに関連するメッセージを送信する前に，〱つの集団呼び出しに関連する全てのメッセージを送信する．

〳〴

これで，〱対〱メッセージの順序が保存されているので，後続のブロードキャストに属するメッセージと混同することはありえない．〱対〱通信のメッセージと集団的通信のメッセージを混同しないようにするのは実装者の責任である．これを達成する
ための〱つの方法は，コミュニケータを生成するたびに集団的通信用の「隠されたコミュニケータ」を生成することである．また，例えば隠されたタグまたはコンテ
クストビットを使用してコミュニケータが〱対〱通信用か集団的通信用かを指定する
ことにより，同様の効果をより安価に実現できる． （実装者へのアドバイス終わ
り）

〳〷

〳〵
〳〶

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〹〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〵〮 集団的通信

〱
〲
〳
〴
〵

第6章

〶
〷
〸
〹

グループ，コンテクスト，コミュニケ
ータ，キャッシング

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

6.1 はじめに〱〸〱〹

この章では，並列ライブラリの開発を支援するきぐぉの諸機能を紹介する．並列ライブ
ラリは主要アルゴリズムの並列化における複雑さを緩和するために必要とされる．並列ライブラリの利用により，並列化の過程における一貫した正当性を確保でき，きぐぉ自体で実現できる以上の「高いレベル」の可搬性を実現できる．同様に，ライブラリを利用することで，プログラマは（行列演算などの）主要アルゴリズムを実装するにあたりデータ構造，データ配置，演算手順をそのたびに定義する作業を繰り返さずに済む．良い並列ライブラリには（システムや問題の規模あるいは浮動小数点数の型に応じてデータ
配置や戦略の異なる）複数のバリエーションがあるので，これもまたユーザから隠す必要がある．
本章で説明する機能を使用し，ライブラリを記述する際の詳しい情報については文
献せ〴〲そおよび文献せ〳そを参照すること．

6.1.1 ライブラリをサポートするのに必要な機能
堅牢な並列ライブラリを作成するため次のような機能が必要となる．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

• ライブラリ外の通信によって干渉される事のない通信を保証する安全な通信空間，〳〸〳〹• ライブラリと関与していない（おそらく無関連のコードを実行している）プロセスとの不必要な同期を避けるための集団操作のスコープ，

〴〰
〴〱
〴〲

• ライブラリ独自のデータ構造およびアルゴリズムに適した用語での通信の記述を可能にするプロセス命名の抽象化，

〴〳
〴〴
〴〵

• 通信プロセス群に対する，新たな集団操作などの新しいユーザ定義属性による「修飾」．このメカニズムによってユーザやライブラリ作成者はメッセージ通信の記法を拡張することができる．
〱〹〷

〴〶
〴〷
〴〸

〱〹〸
〱
〲
〳
〴

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

また，通信コンテクスト，通信プロセスのグループを簡潔に表し，プロセス命名の抽象化を扱い，修飾を格納するため統一されたメカニズムまたはオブジェクトが必要であ
る．

〵
〶
〷
〸
〹
〱〰
〱〱

6.1.2 MPIのライブラリサポート
堅牢なライブラリをサポートするためにきぐぉ が提供する概念には次のものがある．
• 通信のコンテクスト，• プロセスのグループ，〱〲〱〳• 仮想トポロジー，〱〴〱〵• 属性キャッシング，〱〶〱〷• コミュニケータ．

〱〸
〱〹
〲〰
〲〱
〲〲

コミュニケータ（文献せ〱〹〬 〴〰〬 〴〵そを参照）は上記の概念を全て含み，きぐぉにおける全ての通信操作の適切なスコープを定める．コミュニケータは， 単一のプロセスグループ内の操作を行うグループ内コミュニケータと，〲つのプロセスグループ間で〱対〱通信を行う
グループ間コミュニケータの〲種類に分けられる．

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

キャッシング． コミュニケータ（下記参照）は新しい属性をコミュニケータに付与するための「キャッシング」メカニズムを提供する．この新しい属性はきぐぉに組み込まれた属性と同等に扱われる．この機能は，上級ユーザがコミュニケータをさらに修飾する
場合や，きぐぉ自身がコミュニケータの機能を実装するために使用する．例えば，第〷章で説明する仮想トポロジー関数はこの方法でサポートされる．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

グループ． グループは，順序付されたプロセスの一群であり，各プロセスはそれぞれランクを与えられる．プロセス間通信における低レベルの名前はグループによって定義される（ランクが送受信に使用される）．このように，グループは〱対〱通信におけるプ
ロセス名のスコープを定義する．さらに，グループは集団操作のスコープも定義する．
きぐぉにおいてグループはコミュニケータと別個に扱われる場合があるが，通信操作にはコミュニケータしか使用できない．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

グループ内コミュニケータ． きぐぉのメッセージ通信においてもっとも一般的に使用される 手段はグループ内コミュニケータによるものである．グループ内コミュニケータはグループのインスタンス，〱対〱通信および集団的通信のコンテクスト，仮想トポロジー
およびそのほかの属性を含む．これらの機能は次のように働く．

〴〵
〴〶
〴〷
〴〸

• きぐぉのコンテクストは，メッセージ通信が独立した安全な「空間」で実行されることを可能とするものである．コンテクストは，メッセージを区別する付加タグに類似している．メッセージはシステムによって区別される．異なるライブラリ（また〶〮〱〮 はじめに〱〹〹は異なるライブラリ呼び出し）で別々の通信 コンテクストを使用することにより，ライブラリ実行の内部通信を外部通信から隔離する．これによって，「他の」コミュニケータ上に通信中であってもライブラリ呼び出しが可能となり，ライブラリコ
ードの実行の前後で同期を取る必要がない．また，処理中の〱対〱通信は単一のコミュニケータ内の集団的通信を妨害しないことが保証されている．

〱
〲
〳
〴
〵
〶
〷

• グループは，〱つのコミュニケータの通信（上記参照）への参加者を定義する．
• 仮想トポロジーは，単一のグループ内のランクとトポロジーからあるいはトポロジ
ーへの特別なマッピングを定義する．この機能を実現するためのコミュニケータ用の特別なコンストラクタを 第〷章に定義する．本章で説明しているグループ内コミュニケータはトポロジーを持たない．

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

• 属性は，ユーザやライブラリが後の参照のために，コミュニケータに追加したロー
カル情報を定義する．

〱〵
〱〶
〱〷

ユーザへのアドバイス 通信ライブラリの多くの実装では， 並列プログラムを起動したときに利用可能な全てのプロセスを含む唯一の定義済み通信空間が用意され，これらのプロセスには連続したランクが割り当てられている．〱対〱通信への参加者
はそのランクで識別され，（ブロードキャストなどの）集団的通信は常に全てのプロセスに関与する．きぐぉでは，定義済みコミュニケータきぐぉたぃくききたしくげがいを使用することでこの実装にしたがうことができる． この実装に満足しているユーザ
は，コミュニケータ引数が必要な場所にMPIたCOMMたWORLDを設定すればよく，本章の残り部分は飛ばしても構わない． （ユーザへのアドバイス終わり）

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

グループ間コミュニケータ これまでの説明ではグループ内通信について述べてきた．
きぐぉはさらに〲つの重ならないグループ間通信もサポートする．いくつかの並列モジュールで構成されるアプリケーションを作成する場合，あるモジュールが他のモジュールと当該モジュール内のローカルランクを使用して通信を行えるようにすると便利である．
これは特に，クライアントまたはサーバのいずれかが並列動作するクライアント／サー
バパラダイムで重宝するものである．グループ間通信によって，全てのプロセスが初期化時に割り当てられていない動的モデルにきぐぉを拡張するためのメカニズムが提供される．このような場合には，「空間」をまたぐ通信が必要になる．グループ間通信は，グループ間コミュニケータと呼ぶオブジェクトによりサポートされる．これらのオブジェク
トは〲つのグループをこの両グループで共有される通信コンテクストと結合する．グルー
プ間コミュニケータでは，これらの機能は次のように作用する．

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

• コンテクストは，〲つのグループの間でメッセージ通信の独立した安全な「空間」を持つことを可能とする．ローカルグループにおける送信は常にリモートグループ
における受信であり，またその逆も同様である．メッセージはシステムによって区別される．異なるライブラリ（または異なるライブラリ呼び出し）で別々の通信コ
ンテクストを使用することにより，ライブラリ実行の内部通信を外部通信から隔離

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〰〰
〱
〲

する．これによって，「他の」コミュニケータ上で通信中であってもライブラリ呼
び出しが可能となり，ライブラリコードの実行の前後で同期を取る必要がない．

〳〴〵• ローカルグループおよびリモートグループは，グループ間コミュニケータの受信者と送信先を指定する．

〶〷• 仮想トポロジーはグループ間コミュニケータに関しては定義されない．

〸〹〱〰

• 前述のように，属性キャッシュは，ユーザまたはライブラリが後の参照のためにコ
ミュニケータに追加したローカル情報を定義する．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

きぐぉは，グループ間コミュニケータを生成し操作するためのメカニズムを提供する．
これは，グループ内コミュニケータと同様に〱対〱通信および集団的通信に使用される．
グループ間通信を必要としないユーザはこの拡張機能を無視してもよい．重なり合うグ
ループ間でグループ間通信を必要とするユーザは，当該機能をきぐぉ上に実装しなければ
ならない．

〱〸
〱〹
〲〰
〲〱
〲〲

6.2 基本概念
この節では，前節で紹介した概念に対して形式的な定義を与える．

〲〳〲〴

6.2.1 グループ

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

グループとは，順序付けされたプロセス識別子（以下プロセスと呼ぶ）の集合のことである．プロセスは実装依存オブジェクトである．グループ内の各プロセスは整数ランクが付加されている．ランクは連続で，〰から始まる．グループは不可視なグループオ
ブジェクトなので，プロセスからプロセスへ直接引き渡す事はできない．コミュニケー
タにおいてグループは通信「空間」への参加者を記述しまた参加者の順序付けのために使用される（そこで，参加者には通信「空間」の中で固有の名前が与えられることにな
る）．
きぐぉたぇげくさぐたぅきぐごすは，メンバを持たない特別なグループとして定義されている．定義済み定数きぐぉたぇげくさぐたぎさががは，無効なグループハンドルの値として使用される．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

ユーザへのアドバイス きぐぉたぇげくさぐたぅきぐごすは空のグループへの有効なハンドルであり，無効なハンドルであるきぐぉたぇげくさぐたぎさががと混同してはならない．前者はグループ操作の引数として使用されるが，後者はグループを解放するときに返されるもので，引数として使用できない． （ユーザへのアドバイス終わり）

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス グループは仮想〭実プロセスアドレス変換テーブルで表すことができる．各コミュニケータオブジェクト（下記参照）はこのようなテーブルを指すポインタを持つ．
きぐぉの単純な実装では，グループをテーブル形式に列挙する．しかし多数のプロセスがある場合，スケーラビリティとメモリ利用度を高めるために高度なデータ構造〶〮〲〮 基本概念〲〰〱

が意味を持つ．きぐぉではこのような実装が可能である． （実装者へのアドバイス終
わり）

〱
〲
〳

6.2.2 コンテクスト
コンテクストとは，通信空間の分割を行う（次に定義する）コミュニケータの特性である．あるコンテクストで送信されるメッセージは他のコンテクストでは受信できない．
さらに，集団操作が可能な場合では集団操作は 処理中の〱対〱通信操作と無関係に行え
る．コンテクストは明示的なきぐぉオブジェクトではなく，コミュニケータの実現の一部である（以下参照）
．

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

実装者へのアドバイス 同じプロセス内の異なるコミュニケータは異なるコンテクストを持つ．コンテクストは，コミュニケータを〱対〱通信およびきぐぉで定義する集団的通信に対し安全なものとするために必要なシステム管理タグである．ここで安全という意味は，〱つのコミュニケータ内の集団的通信および〱対〱通信が干渉しな
い，かつ，異なるコミュニケータ上の通信が互いに干渉しないことである．
コンテクストの〱つの実装方法としては，送信時メッセージへ付加し，合致するメ
ッセージを受信する補助タグを使用する方法がある．各グループ内コミュニケータ
は，〲つのタグの値（〱対〱通信に〱つ，集団的通信に〱つ）を持つ．コミュニケータ
生成関数は新しいグループ固有のコンテクストに関し，各プロセス間で合意を得る
ために集団的通信を使用する．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

同様に，グループ間通信（必ず〱対〱通信である）では，コミュニケータに〲つのコ
ンテクストタグが格納される．〱つはグループぁが送信にグループあが受信に使用し，他の〱つはグループあが送信にグループぁが受信に使用するものである．

〲〶
〲〷
〲〸
〲〹

コンテクストは明示されたオブジェクトではないので，他の実装も可能である．
（実装者へのアドバイス終わり）

〳〰
〳〱
〳〲

6.2.3 グループ内コミュニケータ
グループ内コミュニケータはグループとコンテクストの概念からなる．実装固有の最適化およびアプリケーショントポロジー（次の第〷章で定義する）をサポートするためにコミュニケータは追加情報を「キャッシュ」することができる（第〶〮〷節を参照）．
きぐぉの通信操作は〱対〱通信および集団操作のスコープと「通信空間」を決定するためにコミュニケータを参照する．
各コミュニケータは有効な参加者からなるグループを持ち，このグループにはローカ
ルプロセスを含んでいる．メッセージの送信元と送信先はそのグループにおけるプロセ
スのランクにより指定される．
集団的通信の場合，グループ内コミュニケータは集団操作に加わるプロセスの集合を（必要であれば，その順序も）指定する．したがって，コミュニケータは通信の「空間的」スコープを制限し，ランクによって機種非依存なプロセス指定方法を提供する．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〰〲
〱
〲

グループ内コミュニケータは，不可視なグループ内コミュニケータオブジェクトによって表され，したがってプロセスからプロセスへ直接には転送できない．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

6.2.4 定義済みグループ内コミュニケータきぐぉたぉぎぉごまたはきぐぉたぉぎぉごたごえげぅぁいを呼び出すと（自分自身を含め）初期化後に通信できる全てのプロセスを含む初期グループ内コミュニケータである
きぐぉたぃくききたしくげがいが定義される．さらに，そのプロセスのみが含まれるコミュニケー
タきぐぉたぃくききたこぅがうが提供される．
定義済み定数きぐぉたぃくききたぎさががは無効なコミュニケータハンドルに使用する値である．
きぐぉの静的なプロセスモデルの実装では，きぐぉの初期化後に計算に関係する全てのプ
ロセスが利用可能となる．この場合， きぐぉたぃくききたしくげがいはその計算に使用可能な全てのプロセスのコミュニケータであり，全てのプロセスで同じ値を持つ．プロセスが動的にきぐぉの実行に参加できる実装においては，他の全てのプロセスにアクセスする以
前に計算を開始する場合があり得る．この状況において， きぐぉたぃくききたしくげがいは参加プ
ロセスが即座に通信できるプロセス全てを含むコミュニケータである． したがって，
きぐぉたぃくききたしくげがいは同時に異なるプロセスにおいて異なる値を持つことがある．
全てのきぐぉの実装はきぐぉたぃくききたしくげがいコミュニケータを提供することが要求される．
このコミュニケータはプロセスの実行中に解放することはできない．このコミュニケー
タに対応するグループは定義済み定数とはなっていないが，きぐぉたぃくききたぇげくさぐを使用
してアクセスされる場合がある（下記参照）．きぐぉはきぐぉたぃくききたしくげがいのプロセスのランクとその（機種依存）絶対アドレスとの間の対応関係を指定しない．また，きぐぉはホ
ストプロセスの関数を指定することもない．他の実装依存定義済みコミュニケータも提供される可能性もある．

〳〰
〳〱
〳〲

6.3 グループ管理

〳〳
〳〴
〳〵

この節では，きぐぉにおけるプロセスグループの操作について説明する．これらの操作はローカルなものであり，その実行にはプロセス間通信を必要としない．

〳〶
〳〷
〳〸

6.3.1 グループアクセサ

〳〹
〴〰
〴〱

きぐぉたぇげくさぐたこぉずぅ〨でひはふば〬 びどぺづ〩

〴〲

ぉぎ

〴〳

くさご

でひはふば
びどぺづ

グループ（ハンドル）
グループ内のプロセス数（整数型）

〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぇひはふばたびどぺづ〨きぐぉたぇひはふば でひはふば〬 どのぴ 〪びどぺづ〩
きぐぉたぇげくさぐたこぉずぅ〨ぇげくさぐ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 こぉずぅ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぇひはふば〺〺ぇづぴたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〶〮〳〮 グループ管理〲〰〳

きぐぉたぇげくさぐたげぁぎか〨でひはふば〬 ひちのに〩
ぉぎ
くさご

でひはふば
ひちのに

〱

グループ（ハンドル）
呼び出しプロセスのグループ内のランク，もしくはプロセスがグループのメンバーでない場合はきぐぉたさぎいぅうぉぎぅい （整数型）

〲
〳
〴
〵
〶

どのぴ きぐぉたぇひはふばたひちのに〨きぐぉたぇひはふば でひはふば〬 どのぴ 〪ひちのに〩きぐぉたぇげくさぐたげぁぎか〨ぇげくさぐ〬 げぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 げぁぎか〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぇひはふば〺〺ぇづぴたひちのに〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〷
〸
〹
〱〰
〱〱
〱〲

きぐぉたぇげくさぐたごげぁぎこがぁごぅたげぁぎかこ 〨でひはふば〱〬 の〬 ひちのにび〱〬 でひはふば〲〬 ひちのにび〲〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

でひはふば〱の
ひちのにび〱
でひはふば〲
ひちのにび〲〱〳

グループ〱（ハンドル）〱〴

配列ひちのにび〱とひちのにび〲のランク数（整数型）〱〵

グループ〱中の〰以上の有効なランクの配列〱〶

グループ〲（ハンドル）〱〷グループ〲 において対応するランクの配列，対応するものがない場合はきぐぉたさぎいぅうぉぎぅい

〱〸
〱〹
〲〰

どのぴ きぐぉたぇひはふばたぴひちのびぬちぴづたひちのにび 〨きぐぉたぇひはふば でひはふば〱〬 どのぴ の〬 どのぴ 〪ひちのにび〱〬
きぐぉたぇひはふば でひはふば〲〬 どのぴ 〪ひちのにび〲〩
きぐぉたぇげくさぐたごげぁぎこがぁごぅたげぁぎかこ〨ぇげくさぐ〱〬 ぎ〬 げぁぎかこ〱〬 ぇげくさぐ〲〬 げぁぎかこ〲〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぎ〬 げぁぎかこ〱〨〪〩〬 ぇげくさぐ〲〬 げぁぎかこ〲〨〪〩〬 ぉぅげげくげ
{びぴちぴどっ ぶはどつ きぐぉ〺〺ぇひはふば〺〺ごひちのびぬちぴづたひちのにび 〨っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〱〬 どのぴ の〬っはのびぴ どのぴ ひちのにび〱せそ〬 っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〲〬 どのぴ ひちのにび〲せそ〩（廃止された呼び出し形式, 第15.2節を参照）}
この関数は，〲つの異なるグループに所属する同一のプロセスの順序付けの対応を決定するために使用する．例えば， きぐぉたぃくききたしくげがいのグループ中のプロセスのランクを知っている場合に，その部分集合のグループにおける同じプロセスのランクを知りたい
場合がある．
きぐぉたぐげくぃたぎさががはきぐぉたぇげくさぐたごげぁぎこがぁごぅたげぁぎかこへの入力のための有効なランクである． きぐぉたぐげくぃたぎさががは変換されたランクとして返される．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

きぐぉたぇげくさぐたぃくきぐぁげぅ〨でひはふば〱〬 でひはふば〲〬 ひづびふぬぴ〩
ぉぎ
ぉぎ
くさご

でひはふば〱
でひはふば〲
ひづびふぬぴ第〱グループ（ハンドル）

〳〶
〳〷
〳〸

第〲グループ（ハンドル）〳〹

結果（整数型）〴〰
〴〱

どのぴ きぐぉたぇひはふばたっはねばちひづ〨きぐぉたぇひはふば でひはふば〱〬きぐぉたぇひはふば でひはふば〲〬 どのぴ 〪ひづびふぬぴ〩
きぐぉたぇげくさぐたぃくきぐぁげぅ〨ぇげくさぐ〱〬 ぇげくさぐ〲〬 げぅこさがご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぇげくさぐ〲〬 げぅこさがご〬 ぉぅげげくげ
{びぴちぴどっ どのぴ きぐぉ〺〺ぇひはふば〺〺ぃはねばちひづ〨っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〱〬っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〲〩 （廃止された呼び出し形式, 第15.2節を参照）}
グループのメンバと順序が〲つのグループで同一ならば結果はきぐぉたぉいぅぎごとなる．これは，例えばでひはふば〱およびでひはふば〲が同じハンドルの場合に起こる．グループメンバは同じで

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〰〴
〱
〲

あるが順序が異なる場合にはきぐぉたこぉきぉがぁげとなる．それ以外の場合にはきぐぉたさぎぅけさぁがと
なる．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

6.3.2 グループコンストラクタ
グループコンストラクタは，既存のグループのサブセットやスーパーセットを生成する場合に使用する．これらのコンストラクタは，既存のグループから新規グループを生成する．これらはローカルな操作であり，異なるグループを異なるプロセスで定義する場合がある．またプロセスはそれ自身を含まないグループを定義する場合もある．コミュニケータを作る関数の引数としてグループを使用する場合にはグループ内の各プロセスが同一のグループ定義を持つことが必要とされる．きぐぉは新規にグループを構築するためのメカニズムを提供せず，他のすでに定義されているグループからのみグ
ループを作ることができる．初期コミュニケータきぐぉたぃくききたしくげがいに付随する（関数きぐぉたぃくききたぇげくさぐによりアクセス可能な）グループが他の全てのグループ定義のベースとなる．

〱〸

根拠 後述するきぐぉたぃくききたいさぐに類似したグループ複製関数はない．グループが一度作成されると，ハンドルのコピーを作成することでそのグループへの複数の参照を持つことができるのでグループデュプリケータは必要ない本節に示すコンスト
ラクタは既存のグループのサブセットおよびスーパーセットが必要な場合に対処するものである． （根拠の終わり）

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

実装者へのアドバイス 各グループコンストラクタは新しいグループオブジェクトを返すのと同様に動作する．この新規グループが既存グループのコピーの場合には，参照回数を管理することによって新しいオブジェクトを作成しないようにする
ことができる． （実装者へのアドバイス終わり）

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

きぐぉたぃくききたぇげくさぐ〨っはねね〬 でひはふば〩

〳〴

ぉぎ

〳〵

くさご

っはねね
でひはふば

コミュニケータ（ハンドル）
っはねねに対応するグループ（ハンドル）

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

どのぴ きぐぉたぃはねねたでひはふば〨きぐぉたぃはねね っはねね〬 きぐぉたぇひはふば 〪でひはふば〩
きぐぉたぃくききたぇげくさぐ〨ぃくきき〬 ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぇげくさぐ〬 ぉぅげげくげ
{きぐぉ〺〺ぇひはふば きぐぉ〺〺ぃはねね〺〺ぇづぴたでひはふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぃくききたぇげくさぐはでひはふばにっはねねのグループのハンドルを返す．

〴〲
〴〳
〴〴

きぐぉたぇげくさぐたさぎぉくぎ〨でひはふば〱〬 でひはふば〲〬 のづぷでひはふば〩

〴〵

ぉぎ

〴〶

ぉぎ

〴〷

くさご

〴〸

でひはふば〱
でひはふば〲のづぷでひはふば第〱グループ（ハンドル）
第〲グループ（ハンドル）
和集合グループ（ハンドル）〶〮〳〮 グループ管理〲〰〵

どのぴ きぐぉたぇひはふばたふのどはの〨きぐぉたぇひはふば でひはふば〱〬 きぐぉたぇひはふば でひはふば〲〬
きぐぉたぇひはふば 〪のづぷでひはふば〩
きぐぉたぇげくさぐたさぎぉくぎ〨ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺ぇひはふば きぐぉ〺〺ぇひはふば〺〺さのどはの〨っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〱〬っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〲〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱
〲
〳
〴
〵
〶
〷

きぐぉたぇげくさぐたぉぎごぅげこぅぃごぉくぎ〨でひはふば〱〬 でひはふば〲〬 のづぷでひはふば〩
ぉぎ
ぉぎ
くさご

でひはふば〱
でひはふば〲のづぷでひはふば〸〹

第〱グループ（ハンドル）〱〰

第〲グループ（ハンドル）〱〱

積集合グループ（ハンドル）〱〲〱〳

どのぴ きぐぉたぇひはふばたどのぴづひびづっぴどはの〨きぐぉたぇひはふば でひはふば〱〬 きぐぉたぇひはふば でひはふば〲〬
きぐぉたぇひはふば 〪のづぷでひはふば〩
きぐぉたぇげくさぐたぉぎごぅげこぅぃごぉくぎ〨ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺ぇひはふば きぐぉ〺〺ぇひはふば〺〺ぉのぴづひびづっぴ〨っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〱〬っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〲〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

きぐぉたぇげくさぐたいぉううぅげぅぎぃぅ〨でひはふば〱〬 でひはふば〲〬 のづぷでひはふば〩
ぉぎ
ぉぎ
くさご

でひはふば〱
でひはふば〲のづぷでひはふば〲〱第〱グループ（ハンドル）〲〲

第〲グループ（ハンドル）〲〳

差集合グループ（ハンドル）

どのぴ きぐぉたぇひはふばたつどててづひづのっづ〨きぐぉたぇひはふば でひはふば〱〬 きぐぉたぇひはふば でひはふば〲〬
きぐぉたぇひはふば 〪のづぷでひはふば〩
きぐぉたぇげくさぐたいぉううぅげぅぎぃぅ〨ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺ぇひはふば きぐぉ〺〺ぇひはふば〺〺いどててづひづのっづ〨っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〱〬っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〲〩 （廃止された呼び出し形式, 第15.2節を参照）}
集合演算に似た演算を次のように定義する．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

和 第〱グループ〨でひはふば〱〩の全ての要素の後に，第〱グループにない第〲グループ〨でひはふば〲〩の全ての要素を続ける．

〳〴

積 第〱グループの要素で第〲グループの要素でもある全ての要素．順序は第〱グループのとおりとする．

〳〷

〳〵
〳〶

〳〸
〳〹

差 第〲グループにない第〱グループの要素の全ての要素で，順序は第〱グループのとおり
とする．

〴〰

これらの演算では，出力グループのプロセス順序は可能ならば主として第〱グループの順序で，ついで必要であれば第〲グループの順序で決定される．和も積も可換ではない
が，両方とも結合的である．
新しいグループは空の場合があり，きぐぉたぇげくさぐたぅきぐごすに等しくなる．

〴〳

〴〱
〴〲

〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〰〶
〱
〲

きぐぉたぇげくさぐたぉぎぃが〨でひはふば〬 の〬 ひちのにび〬 のづぷでひはふば〩グループ（ハンドル）

ぉぎ

でひはふば
の

ぉぎ

ひちのにび

のづぷでひはふばに出力されるでひはふば中のプロセスのランクの配列（整数配列）

くさごのづぷでひはふば

上記から生成された新しいグループ．順序はひちのにびによって決まる．（ハンドル）

ぉぎ

〳
〴
〵
〶
〷
〸

配列ひちのにびの要素数（およびのづぷでひはふばのサイズ）（整
数型）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

どのぴ きぐぉたぇひはふばたどのっぬ〨きぐぉたぇひはふば でひはふば〬 どのぴ の〬 どのぴ 〪ひちのにび〬 きぐぉたぇひはふば 〪のづぷでひはふば〩
きぐぉたぇげくさぐたぉぎぃが〨ぇげくさぐ〬 ぎ〬 げぁぎかこ〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぎ〬 げぁぎかこ〨〪〩〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ
{きぐぉ〺〺ぇひはふば きぐぉ〺〺ぇひはふば〺〺ぉのっぬ〨どのぴ の〬 っはのびぴ どのぴ ひちのにびせそ〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}
関数きぐぉたぇげくさぐたぉぎぃがは，グループでひはふば中のランクひちのにせ〰そ〬. . .〬 ひちのにせの〭〱そのの個のプロセスからなるグループのづぷでひはふばを生成する．のづぷでひはふばの中のランクどのプロセスはでひはふばの中のランクひちのにびせどそを持つプロセスである．ひちのにびののの要素のそれぞれはでひはふばの中の有効なランクでなければならず，全ての要素は異なっていなければならない．そうでない場
合には，プログラムは誤りである．の 〽 〰の場合，のづぷでひはふばはきぐぉたぇげくさぐたぅきぐごすである．例えば，この関数はグループの要素の順序を変更する場合に使用できる．
きぐぉたぇげくさぐたぃくきぐぁげぅも参照すること．

〲〴
〲〵
〲〶
〲〷

きぐぉたぇげくさぐたぅじぃが〨でひはふば〬 の〬 ひちのにび〬 のづぷでひはふば〩グループ（ハンドル）

ぉぎ

でひはふば
の
ひちのにび

くさご

のづぷでひはふば

上記から生成された新しいグループ．順序はでひはふばによって決まる．（ハンドル）

ぉぎ
ぉぎ

〲〸
〲〹
〳〰
〳〱

配列ひちのにびの要素数（整数型）のづぷでひはふばに出力されないでひはふば中の整数のランクの配列（整数配列）

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぇひはふばたづへっぬ〨きぐぉたぇひはふば でひはふば〬 どのぴ の〬 どのぴ 〪ひちのにび〬 きぐぉたぇひはふば 〪のづぷでひはふば〩
きぐぉたぇげくさぐたぅじぃが〨ぇげくさぐ〬 ぎ〬 げぁぎかこ〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぎ〬 げぁぎかこ〨〪〩〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ
{きぐぉ〺〺ぇひはふば きぐぉ〺〺ぇひはふば〺〺ぅへっぬ〨どのぴ の〬 っはのびぴ どのぴ ひちのにびせそ〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}
関数きぐぉたぇげくさぐたぅじぃがは，でひはふばからランクひちのにびせ〰そ 〬. . . ひちのにびせの〭〱そのプロセスを削除することで得られるプロセスのグループのづぷでひはふばを作成する．のづぷでひはふばの中のプロセスの順序付けはでひはふばにおける順序付けと同じである．ひちのにびのの個の要素のそれぞれはでひはふば内で有効なランクでなければならず，全ての要素は異なっていなければならない．そうでない場合には，プログラムは誤りである．の 〽 〰であれば，のづぷでひはふばはでひはふばと同一である．

〶〮〳〮 グループ管理〲〰〷

きぐぉたぇげくさぐたげぁぎぇぅたぉぎぃが〨でひはふば〬 の〬 ひちのでづび〬 のづぷでひはふば〩
でひはふばの
ひちのでづび

ぉぎ
ぉぎ
ぉぎ

くさご

のづぷでひはふば〱グループ（ハンドル）
配列ひちのでづびの〳つ組みの数（整数型）のづぷでひはふばに含まれるべきでひはふば中のプロセスのランクを示す（最初のランク，最後のランク，ストライド）の〳つ組みの整数の 〱次元配列
上記から生成される新しいグループ．プロセスの順
序は配列ひちのでづびによって決まる．（ハンドル）

〲
〳
〴
〵
〶
〷
〸
〹

どのぴ きぐぉたぇひはふばたひちのでづたどのっぬ〨きぐぉたぇひはふば でひはふば〬 どのぴ の〬 どのぴ ひちのでづびせそせ〳そ〬きぐぉたぇひはふば 〪のづぷでひはふば〩
きぐぉたぇげくさぐたげぁぎぇぅたぉぎぃが〨ぇげくさぐ〬 ぎ〬 げぁぎぇぅこ〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぎ〬 げぁぎぇぅこ〨〳〪〬〩〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ
{きぐぉ〺〺ぇひはふば きぐぉ〺〺ぇひはふば〺〺げちのでづたどのっぬ〨どのぴ の〬 っはのびぴ どのぴ ひちのでづびせそせ〳そ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
ひちのでづびが次のような〳つ組みだとすると，

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

〨f irst1 , last1 , stride1 〩, ..., 〨f irstn , lastn , striden 〩〱〸〱〹のづぷでひはふばは次のようなランクのでひはふば内のプロセスの列である．


f irst1 , f irst1 〫 stride1 , ..., f irst1 〫〲〱lastn − f irstn
striden .
striden〲〴

f irstn , f irstn 〫 striden , ..., f irstn 〫〲〰

last1 − f irst1
stride1 , ...
stride1




〲〲
〲〳

〲〵
〲〶

計算で求めたそれぞれのランクはでひはふば内で有効なランクでなければならず，計算で求めた全てのランクは異なっていなければならない．そうでない場合，プログラムは誤りである．f irsti > lasti や，stridei が負の場合もあるが，〰にはならないことに注意すること．
このルーチンの動作は，配列ひちのでづびをその配列によって指定されたランクを含む単一の配列へ拡張し，結果の配列ひちのにびおよびその他の引数をきぐぉたぇげくさぐたぉぎぃがに渡した動作と同等である．きぐぉたぇげくさぐたぉぎぃがの呼び出しは，ひちのにびの中の各ランクどを引数ひちのでづびの中の〳つ組み〨ど〬ど〬〱〩で置き換えたきぐぉたぇげくさぐたげぁぎぇぅたぉぎぃがの呼び出しと同等である．

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

きぐぉたぇげくさぐたげぁぎぇぅたぅじぃが〨でひはふば〬 の〬 ひちのでづび〬 のづぷでひはふば〩
ぉぎ
ぉぎ
ぉぎ

くさご

でひはふば
の
ひちのでづびのづぷでひはふば〳〸

グループ（ハンドル）〳〹配列ひちのでづびの要素数（整数型）〴〰

出力グループのづぷでひはふばから排除されるでひはふば中のプ
ロセスのランクを示す（最初のランク，最後のラン
ク，ストライド）の〳つ組みの整数の〱次元配列〴〱

上記から生成される新しいグループ．でひはふばの順序は保たれる．（ハンドル）

〴〴

〴〲
〴〳

〴〵
〴〶

どのぴ きぐぉたぇひはふばたひちのでづたづへっぬ〨きぐぉたぇひはふば でひはふば〬 どのぴ の〬 どのぴ ひちのでづびせそせ〳そ〬きぐぉたぇひはふば 〪のづぷでひはふば〩〴〷〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〰〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

きぐぉたぇげくさぐたげぁぎぇぅたぅじぃが〨ぇげくさぐ〬 ぎ〬 げぁぎぇぅこ〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぎ〬 げぁぎぇぅこ〨〳〪〬〩〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ
{きぐぉ〺〺ぇひはふば きぐぉ〺〺ぇひはふば〺〺げちのでづたづへっぬ〨どのぴ の〬 っはのびぴ どのぴ ひちのでづびせそせ〳そ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
計算で求めたそれぞれのランクはでひはふばの中で有効なランクでなければならず，計算で求めたランクは全て異なっていなければならない．そうでない場合，プログラムは誤りである．
このルーチンの動作は，配列ひちのでづびを除外されているランクを含む単一の配列へ拡張し，結果の配列ひちのにびおよびその他の引数をきぐぉたぇげくさぐたぅじぃがに渡した動作と同等である．きぐぉたぇげくさぐたぅじぃがの呼び出しは，ひちのにびの中の各ランクどを引数ひちのでづびの中の〳つ組
み〨ど〬ど〬〱〩で置き換えたきぐぉたぇげくさぐたげぁぎぇぅたぅじぃがの呼び出しと同等である．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

ユーザへのアドバイス 範囲操作はランクを明示的に列挙しないので，効率よく実装されていればよりスケーラブルである．高品質な実装ではこの利点を得られるのできぐぉプログラマはできるかぎり範囲操作を使用するよう推奨する． （ユーザへのアドバイス終わり）

〱〹
〲〰
〲〱
〲〲
〲〳

実装者へのアドバイス （時間と空間の）よりよいスケーラビリティを得るため，
できればグループメンバを列挙しない形で実装すべきである． （実装者へのアドバイス終わり）〲〴〲〵

6.3.3 グループデストラクタ

〲〶
〲〷
〲〸
〲〹

きぐぉたぇげくさぐたうげぅぅ〨でひはふば〩
ぉぎくさご

でひはふば

グループ（ハンドル）

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

どのぴ きぐぉたぇひはふばたてひづづ〨きぐぉたぇひはふば 〪でひはふば〩
きぐぉたぇげくさぐたうげぅぅ〨ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぇひはふば〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
この操作は，グループオブジェクトに解放マークをつける．ハンドルでひはふばは，呼び出
しによりきぐぉたぇげくさぐたぎさががに設定される．このグループを使用する実行中の操作は全て正常に完了する．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス きぐぉたぃくききたぇげくさぐ，きぐぉたぃくききたぃげぅぁごぅ，きぐぉたぃくききたいさぐを呼び出すごとにインクリメントされ，きぐぉたぇげくさぐたうげぅぅある
いはきぐぉたぃくききたうげぅぅを呼び出すごとにデクリメントされる参照カウントを持つことができる．グループオブジェクトは，参照カウントが〰になると最終的に解放される． （実装者へのアドバイス終わり）〶〮〴〮 コミュニケータ管理〲〰〹

6.4 コミュニケータ管理〱〲

この節では，きぐぉにおけるコミュニケータの操作について説明する．コミュニケータ
を参照する操作はローカルであり，実行のためにプロセス間通信を必要としない．コミュニケータを生成する操作は集団的であり，プロセス間通信を必要とする場合がある．
実装者へのアドバイス 高品質な実装では，複数回にわたる呼び出しによる（同じグループ，またはそのサブセットの）コミュニケータの生成に関連するオーバーヘ
ッドを，〱つの集団的通信で複数のコンテクストを割り当てることにより低減しな
ければならない． （実装者へのアドバイス終わり）

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

6.4.1 コミュニケータアクセサ〱〴

次のものは全てローカル通信操作である．

〱〵
〱〶
〱〷

きぐぉたぃくききたこぉずぅ〨っはねね〬 びどぺづ〩
ぉぎ
くさご

っはねね
びどぺづ

〱〸

コミュニケータ（ハンドル）
っはねねのグループのプロセス数（整数型）

〱〹
〲〰
〲〱

どのぴ きぐぉたぃはねねたびどぺづ〨きぐぉたぃはねね っはねね〬 どのぴ 〪びどぺづ〩
きぐぉたぃくききたこぉずぅ〨ぃくきき〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 こぉずぅ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぃはねね〺〺ぇづぴたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〲
〲〳
〲〴
〲〵
〲〶

根拠 この関数は，きぐぉたぃくききたぇげくさぐ でコミュニケータのグループにアクセスし（上記参照），きぐぉたぇげくさぐたこぉずぅを使用してサイズを計算し，きぐぉたぇげくさぐたうげぅぅに
よって一時的なグループを解放する操作と等価である．しかし，この関数は非常によく使用されるのでショートカットが導入された． （根拠の終わり）

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

ユーザへのアドバイス この関数は，コミュニケータに関わるプロセスの個数を返す． きぐぉたぃくききたしくげがいの場合，これは利用可能なプロセスの総数を示している（きぐぉの本バージョンでは，初期化後にプロセスの個数を変更する標準的な手段は用意されていない）．
この関数は，特定のライブラリやプログラムで利用可能な並列度を決定するた
めに次のきぐぉたぃくききたげぁぎかとともに使用されることが多い． 関数
きぐぉたぃくききたげぁぎかは，〰 . . .びどぺづ−〱の範囲で呼び出したプロセスのランクを示す．
ただし，びどぺづはきぐぉたぃくききたこぉずぅの戻り値である． （ユーザへのアドバイス終わ
り）

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〱〰
〱
〲

きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〩
ぉぎ

〳
〴

くさご

っはねね
びどぺづ

コミュニケータ（ハンドル）
っはねねのグループにおける呼び出しプロセスのランク（整数型）〵〶〷〸〹

どのぴ きぐぉたぃはねねたひちのに〨きぐぉたぃはねね っはねね〬 どのぴ 〪ひちのに〩きぐぉたぃくききたげぁぎか〨ぃくきき〬 げぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 げぁぎか〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぃはねね〺〺ぇづぴたひちのに〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〰

根拠 この関数は，きぐぉたぃくききたぇげくさぐでコミュニケータのグループにアクセスし（上記参照），きぐぉたぇげくさぐたげぁぎかを使用してランクを計算し，きぐぉたぇげくさぐたうげぅぅによって一時的なグループを解放する操作と等価である．しかし，この関数は非常によく使用されるのでショートカットが導入された． （根拠
の終わり）

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

ユーザへのアドバイス この関数は，特定のコミュニケータグループの中の自プロ
セスのランクを与える．上述のように，きぐぉたぃくききたこぉずぅとともに使用すると便利
である．

〱〸
〱〹
〲〰
〲〱

次のような動作をする多くのプログラムは，マスタースレーブモデルに基づいて作成される．つまり，〱つのプロセス（ランク〰のプロセスなど）の管理下に，他のプロセス群が計算ノードとしてサービスするような場合である．このモデルでは，前出の〲つの呼び出しがコミュニケータの個々のプロセスの役割を決定するために使用される． （ユーザへのアドバイス終わり）

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

きぐぉたぃくききたぃくきぐぁげぅ〨っはねね〱〬 っはねね〲〬 ひづびふぬぴ〩

〳〱
〳〲

ぉぎ

〳〳

ぉぎ

〳〴

くさご

っはねね〱
っはねね〲
ひづびふぬぴ第〱コミュニケータ（ハンドル）
第〲コミュニケータ（ハンドル）
結果（整数型）

〳〵
〳〶
〳〷
〳〸
〳〹

どのぴ きぐぉたぃはねねたっはねばちひづ〨きぐぉたぃはねね っはねね〱〬きぐぉたぃはねね っはねね〲〬 どのぴ 〪ひづびふぬぴ〩
きぐぉたぃくききたぃくきぐぁげぅ〨ぃくきき〱〬 ぃくきき〲〬 げぅこさがご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〱〬 ぃくきき〲〬 げぅこさがご〬 ぉぅげげくげ
{びぴちぴどっ どのぴ きぐぉ〺〺ぃはねね〺〺ぃはねばちひづ〨っはのびぴ きぐぉ〺〺ぃはねね〦 っはねね〱〬っはのびぴ きぐぉ〺〺ぃはねね〦 っはねね〲〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

っはねね〱とっはねね〲が同じオブジェクト（同一グループ，同一コンテクスト）のハンドルである場合，かつその場合にかぎりきぐぉたぉいぅぎごが返される．対応するグループのメンバ
およびランク順序が同一の場合にはきぐぉたぃくぎぇげさぅぎごが返される．この場合〲つのコミュニケータはコンテクストのみが異なる．両方のコミュニケータのグループのメンバは同一であるが，ランク順が異なる場合にきぐぉたこぉきぉがぁげとなる．これら以外の場合は，
きぐぉたさぎぅけさぁがとなる．

〶〮〴〮 コミュニケータ管理〲〱〱

6.4.2 コミュニケータコンストラクタ〱〲

次に示す関数は，コミュニケータっはねねに付随するグループまたは複数のグループ中の全てのプロセスにより呼び出される集団関数である．

〳〴〵

根拠 きぐぉでは新しいコミュニケータを生成する場合にコミュニケータが必要とされるという点で，鶏が先か卵が先かという議論があり得ることに注意されたい．
全てのきぐぉコミュニケータを生成するための基本コミュニケータはきぐぉの外であら
かじめきぐぉたぃくききたしくげがいとして定義されている．このモデルは，多くの議論の後にきぐぉで書いたプログラムの「安全性」を高めるために選択された． （根拠の終わ
り）

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

きぐぉインターフェイスにはグループ内コミュニケータとグループ間コミュニケータ
の両方に適用される 〴つのコミュニケータ構成ルーチンが用意されている．構成ルー
チンきぐぉたぉぎごぅげぃくききたぃげぅぁごぅ（後述）はグループ間コミュニケータにのみ適用される．
グループ内コミュニケータは〱つのグループにのみ関与するが，グループ間コミュニケ
ータは〲つのグループに関与する．以下のグループ間コミュニケータの説明では，グループ間コミュニケータの〲つのグループを「左」グループおよび「右」グループと呼ぶ．グ
ループ間コミュニケータのプロセスは左グループまたは右グループのメンバである．そのプロセスの観点から，プロセスが属するグループを「ローカル」グループと呼び，他方のグループを（そのプロセスとの対比で）「リモート」グループと呼ぶ．左グループおよび右グループというラベルにより，特定のプロセスに関係しないグループ間コミュニ
ケータ内の 〲つのグループ（ローカルグループおよびリモートグループ）を説明することができる．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

きぐぉたぃくききたいさぐ〨っはねね〬 のづぷっはねね〩
ぉぎ
くさご

っはねね
のづぷっはねね〳〱

コミュニケータ（ハンドル）〳〲

っはねねのコピー（ハンドル）〳〳〳〴

どのぴ きぐぉたぃはねねたつふば〨きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪のづぷっはねね〩
きぐぉたぃくききたいさぐ〨ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ
{きぐぉ〺〺ぉのぴひちっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴづひっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺ぃちひぴっはねね きぐぉ〺〺ぃちひぴっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺ぇひちばとっはねね きぐぉ〺〺ぇひちばとっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺いどびぴでひちばとっはねね きぐぉ〺〺いどびぴでひちばとっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}{きぐぉ〺〺ぃはねね〦 きぐぉ〺〺ぃはねね〺〺ぃぬはのづ〨〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺ぉのぴひちっはねね〦 きぐぉ〺〺ぉのぴひちっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を
参照）}

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〱〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

{きぐぉ〺〺ぉのぴづひっはねね〦 きぐぉ〺〺ぉのぴづひっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺ぃちひぴっはねね〦 きぐぉ〺〺ぃちひぴっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺ぇひちばとっはねね〦 きぐぉ〺〺ぇひちばとっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺いどびぴでひちばとっはねね〦 きぐぉ〺〺いどびぴでひちばとっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたぃくききたいさぐは，付随するキーとともに既存のコミュニケータっはねねを複製する．
付随する各々のキーに対応するコピーコールバックは新しいコミュニケータに付随する属性値を決定する．コピーコールバック関数の利用方法として新規コミュニケータから属性を削除する操作が挙げられる．のづぷっはねねには 同じグループ（または同じ複数グループ），コピーされたキャッシュ情報，かつ新しいコンテクストをもつ新規コミュニケータ
が返される（第〶〮〷〮〱節を参照）．ぃ〫〫言語のいふば〨〩およびぃぬはのづ〨〩の呼び出し形式については， 〴〹〵ページの第〱〶〮〱〮〷節を参照すること．

〱〷

ユーザへのアドバイス この操作は，元のコミュニケータと同じ特性を持つ複製された通信空間を使用する並列ライブラリ関数を提供するためにある．この特性には，属性（下記参照）とトポロジー（第〷章参照）が含まれる．この呼び出しは，
コミュニケータっはねねに処理中の〱対〱通信がある場合でも有効である．典型的な呼び出しでは，並列関数のはじめにきぐぉたぃくききたいさぐが呼ばれ，それによって複製されたコミュニケータは関数の終わりできぐぉたぃくききたうげぅぅによって解放される．他のコミュニケータ管理の方法も可能である．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

この呼び出しは，グループ内コミュニケータとグループ間コミュニケータの両方に適用される． （ユーザへのアドバイス終わり）

〲〷
〲〸
〲〹

実装者へのアドバイス 実際にはグループ情報をコピーする必要はなく，新しい参照を追加し，参照カウントをインクリメントすればよい．コピーオンライトの手法
をキャッシュ情報に使用することもできる． （実装者へのアドバイス終わり）

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

きぐぉたぃくききたぃげぅぁごぅ〨っはねね〬 でひはふば〬 のづぷっはねね〩
コミュニケータ（ハンドル）

ぉぎ

っはねね
でひはふば

ぉぎ

っはねね

新しいコミュニケータ（ハンドル）

ぉぎ

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

っはねねのグループのサブセットである グループ（ハンドル）

どのぴ きぐぉたぃはねねたっひづちぴづ〨きぐぉたぃはねね っはねね〬 きぐぉたぇひはふば でひはふば〬 きぐぉたぃはねね 〪のづぷっはねね〩
きぐぉたぃくききたぃげぅぁごぅ〨ぃくきき〬 ぇげくさぐ〬 ぎぅしぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぇげくさぐ〬 ぎぅしぃくきき〬 ぉぅげげくげ
{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴづひっはねね〺〺ぃひづちぴづ〨っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺ぉのぴひちっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺ぃひづちぴづ〨っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〶〮〴〮 コミュニケータ管理〲〱〳

っはねねがグループ内コミュニケータの場合，この関数はでひはふば引数によって定義された
通信グループを持つ新規コミュニケータのづぷっはねねを返す． キャッシュ情報はっはねねか
らのづぷっはねねに伝播されない． 各プロセスはっはねねに関連するでひはふばのサブグループであるでひはふば引数により呼び出す必要があり，これはきぐぉたぇげくさぐたぅきぐごすとすることもできる．プロセスごとにでひはふば引数に異なる値を指定することもできる．プロセスが空でな
いでひはふばにより呼び出された場合，そのでひはふばの全てのプロセスは引数と同じでひはふばにより関数を呼び出す必要がある．つまり，同じプロセスを同じ順序で呼び出す必要がある．
そうでない場合，呼び出しは誤りである．このことは，複数プロセス間で指定される一連のグループがそれぞれ異なっていなければならないことを示している．呼び出しプロ
セスがでひはふば引数として渡されたグループのメンバである場合，のづぷっはねねは関連グループとしてでひはふばを持つコミュニケータである．プロセスがきぐぉたぇげくさぐたぅきぐごすなどの所属外
のでひはふばにより呼び出しを行う場合，のづぷっはねねとしてきぐぉたぃくききたぎさががが返される．関数は集団的であり，っはねねのグループ内の全てのプロセスによって呼び出される必要があ
る．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

根拠 このインターフェイスでは，全てのっはねねのプロセス内で同じでひはふばが必要とされる，元のきぐぉ〭〱〮〱のメカニズムをサポートしている．重ならないサブグループのメンバシップに関する情報をユーザが持っている場合にきぐぉたぃくききたこぐがぉごで生じる不必要な通信を削減するための実装が行えるように，きぐぉ〭〲〮〲では重ならない
サブグループが使用できるよう拡張された． （根拠の終わり）

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

根拠 っはねねのグループ全体が呼び出しを行うという要求条件は次の考察から生じた．
• 通常の集団的通信を使用してきぐぉたぃくききたぃげぅぁごぅを実装できるようにする．
• 特に一部重なり合うグループ同士が新規コミュニケータを生成する場合を含め，さらなる安全性を提供する．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

• コンテクスト生成時に，可能な場合には通信を避ける実装を許容する．
（根拠の終わり）

〳〴
〳〵
〳〶
〳〷

ユーザへのアドバイス きぐぉたぃくききたぃげぅぁごぅは，別の通信空間で別のきぉきい計算を行うためにプロセスグループのサブセットを提供するための手段を提供する．
きぐぉたぃくききたぃげぅぁごぅで得られたコミュニケータのづぷっはねねにさらにきぐぉたぃくききたぃげぅぁごぅ（または他のコミュニケータコンストラクタ）を適用し，計算を並列化された副計算に再分割することができる．より一般的なサービスは後述のきぐぉたぃくききたこぐがぉごが提供する． （ユーザへのアドバイス終わり）

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

実装者へのアドバイス きぐぉたぃくききたいさぐの呼び出しでは，全てのプロセスで同じでひはふば（コミュニケータに関連するでひはふば）が使用される．きぐぉたぃくききたぃげぅぁごぅの
呼び出しでは，プロセスは同じでひはふばまたは重ならないサブグループを用意する．

〴〶
〴〷
〴〸

〲〱〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング
この両方の呼び出しにおいて，理論的には通信なしでグループ全体でユニークなコ
ンテクストに合意することが可能である． しかし，これらの関数をローカルに実行するにはより大きなコンテクスト名前空間の使用が必要となりまたエラー検査の機会を減らすことにもなる．実装に際してはこれらの相反する目標に対して，〱つの集団操作で複数のコンテクストを一括して割り当てるなど，個々に妥協することができる．
重要：関与するプロセスと同期せずに新しいコミュニケータを生成する場合，通信システムは受信側プロセスでまだ割り当てられていないコンテクストに到達するメッセージに対処できなければならない． （実装者へのアドバイス終わり）

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

っはねねがグループ間コミュニケータの場合，出力コミュニケータはローカルグルー
プがでひはふばに含まれるプロセスのみで構成されるグループ間コミュニケータでもある（図〶〮〱を参照）．でひはふば引数に含まれるプロセスは，のづぷっはねねの一部である入力グループ
間コミュニケータのローカルグループ内のプロセスのみとする必要がある．っはねねの同じ
ローカルグループ内の全てのプロセスはでひはふばに同じ値を指定する必要がある．でひはふばに
グループ間コミュニケータのローカルグループ内のプロセスが 〱つも指定されていない，または呼び出しプロセスがでひはふばに含まれていない場合，きぐぉたぃくききたぎさががが返される．

〲〱
〲〲
〲〳
〲〴
〲〵

根拠 左グループまたは右グループが空の場合，空のグループの側できぐぉたぃくききたぎさががを返す必要があるため， きぐぉたぇげくさぐたぅきぐごすのグループ間コミュ
ニケータではなく，のふぬぬコミュニケータが返される． （根拠の終わり）

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

例 6.1 以下の例で，グループ間コミュニケータの左側の最初のノードがグループ間コミュニケータの右側の全てのメンバに加わって新しいコミュニケータを形成する方法を示す．
きぐぉたぃはねね どのぴづひたっはねね〬 のづぷたどのぴづひたっはねね〻
きぐぉたぇひはふば ぬはっちぬたでひはふば〬 でひはふば〻
どのぴ
ひちのに 〽 〰〻 〪〯 ひちのに はの ぬづてぴ びどつづ ぴは どのっぬふつづ どののづぷ どのぴづひ〭っはねね 〪〪〯〯 ぃはのびぴひふっぴ ぴとづ はひどでどのちぬ どのぴづひっはねねふのどっちぴはひ〺 〢どのぴづひたっはねね〢 〪〯
〮〮〮

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

〪〯 ぃはのびぴひふっぴ ぴとづ でひはふば はて ばひはっづびびづび ぴは ぢづ どの のづぷ
どのぴづひっはねねふのどっちぴはひ 〪〯どて 〨〪〯 ぉ〧ね はの ぴとづ ぬづてぴ びどつづ はて ぴとづ どのぴづひっはねねふのどっちぴはひ 〪〯〩 ほ
きぐぉたぃはねねたでひはふば 〨 どのぴづひたっはねね〬 〦ぬはっちぬたでひはふば 〩〻きぐぉたぇひはふばたどのっぬ 〨 ぬはっちぬたでひはふば〬 〱〬 〦ひちのに〬 〦でひはふば 〩〻きぐぉたぇひはふばたてひづづ 〨 〦ぬはっちぬたでひはふば 〩〻ぽづぬびづ
きぐぉたぃはねねたでひはふば 〨 どのぴづひたっはねね〬 〦でひはふば 〩〻

〴〵
〴〶
〴〷
〴〸

きぐぉたぃはねねたっひづちぴづ 〨 どのぴづひたっはねね〬 でひはふば〬 〦のづぷたどのぴづひたっはねね 〩〻きぐぉたぇひはふばたてひづづ〨 〦でひはふば 〩〻〶〮〴〮 コミュニケータ管理〲〱〵〱

INTER-COMMUNICATOR CREATE〲

Before

〳
〴

0
〵

5

1

0

1

〶

4
2

4

〷

3

〸

2

3
〹
〱〰
〱〱

After

〱〲
〱〳
〱〴

0

〱〵

1

〱〶
〱〷

0

1

2

〱〸
〱〹
〲〰
〲〱

図 〶〮〱〺 グループ間コミュニケータ向けに拡張したきぐぉたぃくききたぃげぅぁごぅを使用したグループ間コミュニケータの作成．入力グループは灰色の円．

〲〲
〲〳
〲〴
〲〵

きぐぉたぃくききたこぐがぉご〨っはねね〬 っはぬはひ〬 にづべ〬 のづぷっはねね〩
ぉぎ
ぉぎ
ぉぎ
くさご

っはねね
っはぬはひ
にづべ
のづぷっはねね〲〶

コミュニケータ（ハンドル）〲〷

サブセット割り当ての制御（整数型）〲〸

ランク割り当ての制御（整数型）〲〹

新規コミュニケータ（ハンドル）〳〰
〳〱

どのぴ きぐぉたぃはねねたびばぬどぴ〨きぐぉたぃはねね っはねね〬 どのぴ っはぬはひ〬 どのぴ にづべ〬 きぐぉたぃはねね 〪のづぷっはねね〩
きぐぉたぃくききたこぐがぉご〨ぃくきき〬 ぃくがくげ〬 かぅす〬 ぎぅしぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくがくげ〬 かぅす〬 ぎぅしぃくきき〬 ぉぅげげくげ
{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴづひっはねね〺〺こばぬどぴ〨どのぴ っはぬはひ〬 どのぴ にづべ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺ぉのぴひちっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺こばぬどぴ〨どのぴ っはぬはひ〬 どのぴ にづべ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〳〲

この関数は，っはねねに付随するグループをっはぬはひの値に対応してそれぞれ重ならないサブ
グループに分割する．各サブグループは同一っはぬはひのプロセスを全て含む．各サブグル
ープ内で，プロセスは引数にづべの値の順序でランクが付けられ，同じにづべの値をもつプロ
セスは旧グループのランク順に従ってランクが決められる．各サブグループに対応した新しいコミュニケータが生成され，のづぷっはねねに返される．プロセスはっはぬはひの値としてきぐぉたさぎいぅうぉぎぅいを供給することができ，その場合，のづぷっはねねにはきぐぉたぃくききたぎさががが返る．この関数は，集団呼び出しであるが，各プロセスは異なるっはぬはひとにづべで呼び出すことができる．

〳〹

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〲〱〶
〱
〲
〳
〴
〵
〶
〷
〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

グループ内コミュニケータっはねねでは，でひはふば引数のメンバであるプロセスが「っはぬはひ 〽 でひはふばの数」（重ならない全てのグループの独自の採番に基づく）と「にづべ 〽 でひはふば内でのランク」を渡し，でひはふば引数のメンバでない全てのプロセスが「っはぬはひ 〽 きぐぉたさぎいぅうぉぎぅい」を渡すとすれば，きぐぉたぃくききたこぐがぉご〨っはねね〬 っはぬはひ〬 にづべ〬のづぷっはねね〩の呼び出しは，きぐぉたぃくききたこぐがぉご〨っはねね〬 っはぬはひ〬 にづべ〬 のづぷっはねね〩の呼び出しと同等である．
っはぬはひの値は非負でなければならない．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

ユーザへのアドバイス これはプロセスグループをk個のサブグループに分割するためのきわめて強力なメカニズムである．ここでkは，プロセス全体に対して設定したカラーの個数で決まり，ユーザが暗黙のうちに選択した値である．生成したコミュニケータは互いに重なり合うことはない．このような分割は，マルチグリッド法や，線形代数などの計算処理の階層構造を定義する際に有用であろう． グ
ループ内コミュニケータの場合，きぐぉたぃくききたこぐがぉごはきぐぉたぃくききたぃげぅぁごぅと同様の機能を持ち，通信グループを重ならないサブグループに分割する．
きぐぉたぃくききたこぐがぉごは，一部のプロセスがグループ内の他のメンバに関する完全な情報を持っていないが，全てのプロセスが所属グループ（のっはぬはひ）を知っている場
合に有益である．この場合，きぐぉ実装は通信によって他のグループメンバを検出す
る．きぐぉたぃくききたぃげぅぁごぅは全てのプロセスがグループ内のメンバに関する完全な情報を持っている場合に有益である．この場合，きぐぉではグループのメンバシップを検出するための余分な通信を回避することができる．
きぐぉたぃくききたこぐがぉごで生成されるコミュニケータ同士は重なり合わない（プロセスは，〱回の呼び出しに付き〱つのっはぬはひのみを持つ）．きぐぉたぃくききたこぐがぉごを複数回呼び出すことでこの制約を解消できる．このように分割するには，っはぬはひおよびにづべの使用方法を工夫することが推奨される．
っはぬはひが固定の場合，にづべは一意である必要はない． きぐぉたぃくききたこぐがぉごにより，このにづべに従ってプロセスが昇順にソートされ，にづべの値が同じ場合は一貫性のある方法で順序付けされる．全てのにづべが同様に指定される場合，指定されたっはぬはひの全てのプロセスは親グループとの相対のランク順となる．
基本的に，指定されたっはぬはひの全てのプロセスに対してにづべを〰にした場合，新しいコ
ミュニケータでプロセスのランク順を意識する必要はない． （ユーザへのアドバ
イス終わり）

〴〰
〴〱
〴〲
〴〳

根拠 きぐぉたさぎいぅうぉぎぅいに割り当てられた値との衝突を避けるため，っはぬはひの値は非負に制限されている． （根拠の終わり）

〴〴
〴〵
〴〶
〴〷
〴〸

グループ間コミュニケータに対するきぐぉたぃくききたこぐがぉごの結果として，右側のプロセスと同じっはぬはひを持つ左側のプロセスが組み合わされて新しいグループ間コミュニケータが生成される．にづべ引数はグループ間コミュニケータの両側のプロセスの相対ランクを示す

〶〮〴〮 コミュニケータ管理〲〱〷（図〶〮〲を参照）．っはぬはひがグループ間コミュニケータの一方でしか指定されていない場合，
きぐぉたぃくききたぎさががが返される．っはぬはひとしてきぐぉたさぎいぅうぉぎぅいが指定されたプロセスについても，きぐぉたぃくききたぎさががが返される．
ユーザへのアドバイス グループ間コミュニケータの場合，きぐぉたぃくききたぃげぅぁごぅよ
りきぐぉたぃくききたこぐがぉごの方が一般的である．きぐぉたぃくききたこぐがぉごの〱回の呼び出しで重なりのない一連のグループ間コミュニケータを生成することができ，
きぐぉたぃくききたぃげぅぁごぅの呼び出しでは〱つのグループ間コミュニケータの生成のみができる． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

Color

〱〳
〱〴
〱〵

0(0,1)

1(0,0)

0(0,0)

1(1,0)〱〶〱〷

4(1,0)

2(2,0)
3(0,1)

2(2,0)〱〸〱〹3(2,1)

〲〰

Key

〲〱
〲〲
〲〳

Input Intercommunicator (comm)〲〴〲〵Rank in the original group

〲〶

1(3)
0(1)

〲〷

0(0)

1(0)

〲〸

Color = 0

〲〹
〳〰
〳〱
〳〲

0(4)

0(1)

Color = 1

〳〳
〳〴
〳〵
〳〶
〳〷

0(2)

〳〸

0(2)

1(3)

Color = 2

〳〹
〴〰
〴〱

Disjoint output communicators (newcomm)(one per color)

〴〲
〴〳
〴〴

図 〶〮〲〺 グループ間コミュニケータをきぐぉたぃくききたこぐがぉごで分割した例．

〴〵〴〶

例 6.2 （並列クライアント／サーバ）．以下のクライアントのコードに，グループ間コ〴〷〴〸第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〱〸
〱
〲
〳

ミュニケータの左側のクライアントをグループ間コミュニケータの右側のサーバプール
中の〱台のサーバに割り当てる方法を示す．
〪〯 ぃぬどづのぴ っはつづ 〪〯きぐぉたぃはねね ねふぬぴどばぬづたびづひぶづひたっはねね〻
きぐぉたぃはねね びどのでぬづたびづひぶづひたっはねね〻
どのぴ
っはぬはひ〬 ひちのに〬 のふねたびづひぶづひび〻

〴
〵
〶
〷

〪〯 ぃひづちぴづ どのぴづひっはねねふのどっちぴはひ ぷどぴと っぬどづのぴび ちのつ びづひぶづひび〺
ねふぬぴどばぬづたびづひぶづひたっはねね 〪〯
〮〮〮

〸
〹
〱〰
〱〱

〪〯 うどのつ はふぴ ぴとづ のふねぢづひ はて びづひぶづひび ちぶちどぬちぢぬづ 〪〯きぐぉたぃはねねたひづねはぴづたびどぺづ 〨 ねふぬぴどばぬづたびづひぶづひたっはねね〬 〦のふねたびづひぶづひび 〩〻〱〲〱〳〪〯 いづぴづひねどのづ ねべ っはぬはひ 〪〯きぐぉたぃはねねたひちのに 〨 ねふぬぴどばぬづたびづひぶづひたっはねね〬 〦ひちのに 〩〻っはぬはひ 〽 ひちのに 〥 のふねたびづひぶづひび〻

〱〴
〱〵
〱〶

〪〯 こばぬどぴ ぴとづ どのぴづひっはねねふのどっちぴはひ 〪〯きぐぉたぃはねねたびばぬどぴ 〨 ねふぬぴどばぬづたびづひぶづひたっはねね〬 っはぬはひ〬 ひちのに〬〦びどのでぬづたびづひぶづひたっはねね 〩〻

〱〷
〱〸
〱〹
〲〰

対応するサーバのコードを以下に示す．

〲〱〪〯 こづひぶづひ っはつづ 〪〯きぐぉたぃはねね ねふぬぴどばぬづたっぬどづのぴたっはねね〻
きぐぉたぃはねね びどのでぬづたびづひぶづひたっはねね〻
どのぴ
ひちのに〻

〲〲
〲〳
〲〴
〲〵

〪〯 ぃひづちぴづ どのぴづひっはねねふのどっちぴはひ ぷどぴと っぬどづのぴび ちのつ びづひぶづひび〺
ねふぬぴどばぬづたっぬどづのぴたっはねね 〪〯
〮〮〮

〲〶
〲〷
〲〸

〪〯 こばぬどぴ ぴとづ どのぴづひっはねねふのどっちぴはひ てはひ ち びどのでぬづ びづひぶづひ ばづひ でひはふばはて っぬどづのぴび 〪〯きぐぉたぃはねねたひちのに 〨 ねふぬぴどばぬづたっぬどづのぴたっはねね〬 〦ひちのに 〩〻きぐぉたぃはねねたびばぬどぴ 〨 ねふぬぴどばぬづたっぬどづのぴたっはねね〬 ひちのに〬 〰〬〦びどのでぬづたびづひぶづひたっはねね 〩〻

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

6.4.3 コミュニケータデストラクタ

〳〷
〳〸
〳〹

きぐぉたぃくききたうげぅぅ〨っはねね〩

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぉぎくさご

っはねね

破壊されるコミュニケータ（ハンドル）

どのぴ きぐぉたぃはねねたてひづづ〨きぐぉたぃはねね 〪っはねね〩
きぐぉたぃくききたうげぅぅ〨ぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
この集団操作は，通信オブジェクトに解放のマークを付ける．ハンドルは
きぐぉたぃくききたぎさががにセットされる．このコミュニケータを使用中の未終了の操作は全て

〶〮〵〮 例題〲〱〹

正常終了する．なぜなら，オブジェクトは，アクティブな参照がほかにない場合にかぎり実際に解放されるからである．この呼び出しはグループ内コミュニケータとグループ
間コミュニケータに適用される．全てのキャッシュ属性に対する削除コールバック関数（第〶〮〷節を参照）は任意の順序で呼び出される．

〱
〲
〳
〴
〵
〶

実装者へのアドバイス きぐぉたぃくききたいさぐの呼び出しによってインクリメントされ，きぐぉたぃくききたうげぅぅの呼び出しによってデクリメントされるような参照カウントメ
カニズムを使用することができる．オブジェクトはカウントが〰になると最終的に解放される．
この関数は集団的であるが，通常ローカルに実装されることが期待される．ただし，きぐぉライブラリのデバッグバージョンにおいては同期操作としての実装を選択することができる． （実装者へのアドバイス終わり）

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

6.5 例題〱〷〱〸6.5.1 一般的な慣例#1

〱〹
〲〰

例〣〱ち〺

〲〱
〲〲

どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほどのぴ ねづ〬 びどぺづ〻〮〮〮
きぐぉたぉのどぴ 〨 〦ちひでっ〬 〦ちひでぶ 〩〻きぐぉたぃはねねたひちのに 〨きぐぉたぃくききたしくげがい〬 〦ねづ〩〻
きぐぉたぃはねねたびどぺづ 〨きぐぉたぃくききたしくげがい〬 〦びどぺづ〩〻

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

〨ぶはどつ〩ばひどのぴて 〨〢ぐひはっづびび 〥つ びどぺづ 〥つぜの〢〬 ねづ〬 びどぺづ〩〻〮〮〮
きぐぉたうどのちぬどぺづ〨〩〻
ぽ

〲〹
〳〰
〳〱
〳〲

例〣〱ちは「何もしない」プログラムで，プログラム自身を正しく初期化し，「全プロセスを含む」コミュニケータを参照し，メッセージを出力する．また，このプログラムは
正しく終了している．この例は，きぐぉがばひどのぴて形式の通信自体をサポートしていることを意味していない．
例〣〱ぢ（びどぺづが偶数であると仮定している）〺
どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほどのぴ ねづ〬 びどぺづ〻
どのぴ こくきぅたごぁぇ 〽 〰〻〮〮〮きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ねづ〩〻〪〯 ぬはっちぬ 〪〯きぐぉたぃはねねたびどぺづ〨きぐぉたぃくききたしくげがい〬 〦びどぺづ〩〻 〪〯 ぬはっちぬ 〪〯どて〨〨ねづ 〥 〲〩 〽〽 〰〩
ほ

〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〲〰
〱〪〯 びづのつ ふのぬづびび とどでとづびぴ〭のふねぢづひづつ ばひはっづびび 〪〯どて〨〨ねづ 〫 〱〩 〼 びどぺづ〩
きぐぉたこづのつ〨〮〮〮〬 ねづ 〫 〱〬 こくきぅたごぁぇ〬 きぐぉたぃくききたしくげがい〩〻

〲
〳

ぽ
づぬびづ
きぐぉたげづっぶ〨〮〮〮〬 ねづ 〭 〱〬 こくきぅたごぁぇ〬 きぐぉたぃくききたしくげがい〬 〦びぴちぴふび〩〻

〴
〵
〶

〮〮〮
きぐぉたうどのちぬどぺづ〨〩〻

〷
〸

ぽ

〹
〱〰
〱〱

例〣〱ぢは，「全プロセスを含む」コミュニケータにおける「偶数」プロセスと「奇数」
プロセスとの間のメッセージ交換を概略的に示している．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

6.5.2 一般的な慣例#2
どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほどのぴ ねづ〬 っはふのぴ〻
ぶはどつ 〪つちぴち〻〮〮〮〱〹

きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻
きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ねづ〩〻〲〰
〲〱

どて〨ねづ 〽〽 〰〩ほ〪〯 でづぴ どのばふぴ〬 っひづちぴづ ぢふててづひ だだつちぴち〧〧 〪〯
〮〮〮
ぽ

〲〲
〲〳
〲〴
〲〵
〲〶

きぐぉたあっちびぴ〨つちぴち〬 っはふのぴ〬 きぐぉたあすごぅ〬 〰〬 きぐぉたぃくききたしくげがい〩〻

〲〷
〲〸

〮〮〮

〲〹

きぐぉたうどのちぬどぺづ〨〩〻

〳〰
〳〱
〳〲

ぽ
この例は集団的通信の使用法を説明している．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

6.5.3 （おおむね）一般的な慣習#3
どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほどのぴ ねづ〬 っはふのぴ〬 っはふのぴ〲〻
ぶはどつ 〪びづのつたぢふて〬 〪ひづっぶたぢふて〬 〪びづのつたぢふて〲〬 〪ひづっぶたぢふて〲〻きぐぉたぇひはふば きぐぉたぇげくさぐたしくげがい〬 でひばひづね〻
きぐぉたぃはねね っはねねびぬちぶづ〻
びぴちぴどっ どのぴ ひちのにびせそ 〽 ほ〰ぽ〻〮〮〮きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻
きぐぉたぃはねねたでひはふば〨きぐぉたぃくききたしくげがい〬 〦きぐぉたぇげくさぐたしくげがい〩〻
きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ねづ〩〻 〪〯 ぬはっちぬ 〪〯

〴〵
〴〶
〴〷
〴〸

きぐぉたぇひはふばたづへっぬ〨きぐぉたぇげくさぐたしくげがい〬 〱〬 ひちのにび〬 〦でひばひづね〩〻 〪〯 ぬはっちぬ 〪〯きぐぉたぃはねねたっひづちぴづ〨きぐぉたぃくききたしくげがい〬 でひばひづね〬 〦っはねねびぬちぶづ〩〻
どて〨ねづ 〡〽 〰〩〶〮〵〮 例題〲〲〱〱

ほ〪〯 っはねばふぴづ はの びぬちぶづ 〪〯〮〮〮きぐぉたげづつふっづ〨びづのつたぢふて〬ひづっぶたぢふてて〬っはふのぴ〬 きぐぉたぉぎご〬 きぐぉたこさき〬 〱〬 っはねねびぬちぶづ〩〻〮〮〮
きぐぉたぃはねねたてひづづ〨〦っはねねびぬちぶづ〩〻〲

ぽ〪〯 ぺづひは てちぬぬび ぴとひはふでと どねねづつどちぴづぬべ ぴは ぴとどび ひづつふっづ〬 はぴとづひび つは ぬちぴづひ〮〮〮 〪〯きぐぉたげづつふっづ〨びづのつたぢふて〲〬 ひづっぶたぢふてて〲〬 っはふのぴ〲〬
きぐぉたぉぎご〬 きぐぉたこさき〬 〰〬 きぐぉたぃくききたしくげがい〩〻

〶

〳
〴
〵

〷
〸
〹

きぐぉたぇひはふばたてひづづ〨〦きぐぉたぇげくさぐたしくげがい〩〻
きぐぉたぇひはふばたてひづづ〨〦でひばひづね〩〻
きぐぉたうどのちぬどぺづ〨〩〻
ぽ

〱〰
〱〱
〱〲
〱〳

この例は，〰番目のプロセス以外の全てのプロセスからなるグループを（「全プロセスからなる」グループから）どのように生成するか，その新しいグループに対応したコミュニケータ〨っはねねびぬちぶづ〩をどのように形成するかを示している．新しいコミュニケータは
集団呼び出しで使用され，全てのプロセスはきぐぉたぃくききたしくげがいコンテクストで集団呼び出しを実行する．この例は，それぞれ異なるコンテクストを持つ〲つのコミュニケータ
がどのように通信を保護しているかを示している．つまり， きぐぉたぃくききたしくげがいの通信
はっはねねびぬちぶづの通信から隔離されるし，またその逆もあるということである．
ここで示したように，どのプロセスにおいても異なるコミュニケータ内のコンテクス
トは互いに隔離されるので「グループ安全性」はコミュニケータを介して実現される．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

6.5.4 例#4
次の例は，〱対〱通信と集団的通信との間の「安全性」を示すものである．きぐぉは，〱つのコミュニケータが安全な〱対〱通信および集団的通信を実行できることを保証している．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

〣つづてどのづ ごぁぇたぁげあぉごげぁげす 〱〲〳〴〵〣つづてどのづ こくきぅたぃくさぎご〵〰
どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほどのぴ ねづ〻きぐぉたげづぱふづびぴ ひづぱふづびぴせ〲そ〻きぐぉたこぴちぴふび びぴちぴふびせ〲そ〻きぐぉたぇひはふば きぐぉたぇげくさぐたしくげがい〬 びふぢでひはふば〻
どのぴ ひちのにびせそ 〽 ほ〲〬 〴〬 〶〬 〸ぽ〻きぐぉたぃはねね ぴとづたっはねね〻〮〮〮
きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻
きぐぉたぃはねねたでひはふば〨きぐぉたぃくききたしくげがい〬 〦きぐぉたぇげくさぐたしくげがい〩〻

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

きぐぉたぇひはふばたどのっぬ〨きぐぉたぇげくさぐたしくげがい〬 〴〬 ひちのにび〬 〦びふぢでひはふば〩〻 〪〯 ぬはっちぬ 〪〯きぐぉたぇひはふばたひちのに〨びふぢでひはふば〬 〦ねづ〩〻〪〯 ぬはっちぬ 〪〯きぐぉたぃはねねたっひづちぴづ〨きぐぉたぃくききたしくげがい〬 びふぢでひはふば〬 〦ぴとづたっはねね〩〻

〴〴
〴〵
〴〶
〴〷

どて〨ねづ 〡〽 きぐぉたさぎいぅうぉぎぅい〩〴〸第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〲〲
〱

ほ
きぐぉたぉひづっぶ〨ぢふてて〱〬 っはふのぴ〬 きぐぉたいくさあがぅ〬 きぐぉたぁぎすたこくさげぃぅ〬 ごぁぇたぁげあぉごげぁげす〬
ぴとづたっはねね〬 ひづぱふづびぴ〩〻
きぐぉたぉびづのつ〨ぢふてて〲〬 っはふのぴ〬 きぐぉたいくさあがぅ〬 〨ねづ〫〱〩〥〴〬 ごぁぇたぁげあぉごげぁげす〬
ぴとづたっはねね〬 ひづぱふづびぴ〫〱〩〻てはひ〨ど 〽 〰〻 ど 〼 こくきぅたぃくさぎご〬 ど〫〫〩きぐぉたげづつふっづ〨〮〮〮〬 ぴとづたっはねね〩〻
きぐぉたしちどぴちぬぬ〨〲〬 ひづぱふづびぴ〬 びぴちぴふび〩〻

〲
〳
〴
〵
〶
〷
〸

きぐぉたぃはねねたてひづづ〨〦ぴとづたっはねね〩〻

〹

ぽ

〱〰

きぐぉたぇひはふばたてひづづ〨〦きぐぉたぇげくさぐたしくげがい〩〻
きぐぉたぇひはふばたてひづづ〨〦びふぢでひはふば〩〻
きぐぉたうどのちぬどぺづ〨〩〻

〱〱
〱〲
〱〳

ぽ

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

6.5.5 ライブラリの例#1
メインプログラム〺
どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほどのぴ つはのづ 〽 〰〻ふびづひたぬどぢたぴ 〪ぬどぢとたち〬 〪ぬどぢとたぢ〻
ぶはどつ 〪つちぴちびづぴ〱〬 〪つちぴちびづぴ〲〻〮〮〮
きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻〮〮〮
どのどぴたふびづひたぬどぢ〨きぐぉたぃくききたしくげがい〬 〦ぬどぢとたち〩〻
どのどぴたふびづひたぬどぢ〨きぐぉたぃくききたしくげがい〬 〦ぬどぢとたぢ〩〻〮〮〮
ふびづひたびぴちひぴたはば〨ぬどぢとたち〬 つちぴちびづぴ〱〩〻
ふびづひたびぴちひぴたはば〨ぬどぢとたぢ〬 つちぴちびづぴ〲〩〻〮〮〮
ぷとどぬづ〨〡つはのづ〩
ほ〪〯 ぷはひに 〪〯〮〮〮きぐぉたげづつふっづ〨〮〮〮〬 きぐぉたぃくききたしくげがい〩〻〪〮〮〮〯 びづづ どて つはのづ 〪〯〮〮〮ぽふびづひたづのつたはば〨ぬどぢとたち〩〻
ふびづひたづのつたはば〨ぬどぢとたぢ〩〻〴〰

ふのどのどぴたふびづひたぬどぢ〨ぬどぢとたち〩〻
ふのどのどぴたふびづひたぬどぢ〨ぬどぢとたぢ〩〻
きぐぉたうどのちぬどぺづ〨〩〻

〴〱
〴〲
〴〳
〴〴

ぽ
ユーザライブラリの初期化コード〺

〴〵
〴〶
〴〷
〴〸

ぶはどつ どのどぴたふびづひたぬどぢ〨きぐぉたぃはねね っはねね〬 ふびづひたぬどぢたぴ 〪〪とちのつぬづ〩
ほふびづひたぬどぢたぴ 〪びちぶづ〻〶〮〵〮 例題
ふびづひたぬどぢたどのどぴびちぶづ〨〦びちぶづ〩〻 〪〯 ぬはっちぬ 〪〯きぐぉたぃはねねたつふば〨っはねね〬 〦〨びちぶづ 〭〾 っはねね〩〩〻

〲〲〳
〱
〲
〳

〪〯 はぴとづひ どのどぴび 〪〯
〮〮〮

〴
〵

〪とちのつぬづ 〽 びちぶづ〻
ぽ〶〷ユーザスタートアップコード〺〸〹

ぶはどつ ふびづひたびぴちひぴたはば〨ふびづひたぬどぢたぴ 〪とちのつぬづ〬 ぶはどつ 〪つちぴち〩
ほきぐぉたぉひづっぶ〨 〮〮〮〬 とちのつぬづ〭〾っはねね〬 〦〨とちのつぬづ 〭〾 どひづっぶたとちのつぬづ〩 〩〻きぐぉたぉびづのつ〨 〮〮〮〬 とちのつぬづ〭〾っはねね〬 〦〨とちのつぬづ 〭〾 どびづのつたとちのつぬづ〩 〩〻
ぽ

〱〰
〱〱
〱〲
〱〳
〱〴

ユーザ通信クリーンアップコード〺〱〵〱〶

ぶはどつ ふびづひたづのつたはば〨ふびづひたぬどぢたぴ 〪とちのつぬづ〩
ほきぐぉたこぴちぴふび びぴちぴふび〻
きぐぉたしちどぴ〨とちのつぬづ 〭〾 どびづのつたとちのつぬづ〬 〦びぴちぴふび〩〻
きぐぉたしちどぴ〨とちのつぬづ 〭〾 どひづっぶたとちのつぬづ〬 〦びぴちぴふび〩〻ぽユーザオブジェクトクリーンアップコード〺

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

ぶはどつ ふのどのどぴたふびづひたぬどぢ〨ふびづひたぬどぢたぴ 〪とちのつぬづ〩
ほきぐぉたぃはねねたてひづづ〨〦〨とちのつぬづ 〭〾 っはねね〩〩〻てひづづ〨とちのつぬづ〩〻
ぽ

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

6.5.6 ライブラリの例#2〳〱〳〲

メインプログラム〺〳〳〳〴

どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほどのぴ ねち〬 ねぢ〻
きぐぉたぇひはふば きぐぉたぇげくさぐたしくげがい〬 でひはふばたち〬 でひはふばたぢ〻
きぐぉたぃはねね っはねねたち〬 っはねねたぢ〻
びぴちぴどっ どのぴ ぬどびぴたちせそ 〽 ほ〰〬 〱ぽ〻〣どて つづてどのづつ〨ぅじぁきぐがぅた〲あ〩 ぼ つづてどのづつ〨ぅじぁきぐがぅた〲ぃ〩
びぴちぴどっ どのぴ ぬどびぴたぢせそ 〽 ほ〰〬 〲 〬〳ぽ〻
〣づぬびづ〪〯 ぅじぁきぐがぅた〲ぁ 〪〯びぴちぴどっ どのぴ ぬどびぴたぢせそ 〽 ほ〰〬 〲ぽ〻〣づのつどてどのぴ びどぺづたぬどびぴたち 〽 びどぺづはて〨ぬどびぴたち〩〯びどぺづはて〨どのぴ〩〻
どのぴ びどぺづたぬどびぴたぢ 〽 びどぺづはて〨ぬどびぴたぢ〩〯びどぺづはて〨どのぴ〩〻

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

〮〮〮
きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻
きぐぉたぃはねねたでひはふば〨きぐぉたぃくききたしくげがい〬 〦きぐぉたぇげくさぐたしくげがい〩〻〴〷〴〸第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング〲〲〴〱きぐぉたぇひはふばたどのっぬ〨きぐぉたぇげくさぐたしくげがい〬 びどぺづたぬどびぴたち〬 ぬどびぴたち〬 〦でひはふばたち〩〻
きぐぉたぇひはふばたどのっぬ〨きぐぉたぇげくさぐたしくげがい〬 びどぺづたぬどびぴたぢ〬 ぬどびぴたぢ〬 〦でひはふばたぢ〩〻〲〳〴

きぐぉたぃはねねたっひづちぴづ〨きぐぉたぃくききたしくげがい〬 でひはふばたち〬 〦っはねねたち〩〻
きぐぉたぃはねねたっひづちぴづ〨きぐぉたぃくききたしくげがい〬 でひはふばたぢ〬 〦っはねねたぢ〩〻〵〶

どて〨っはねねたち 〡〽 きぐぉたぃくききたぎさがが〩きぐぉたぃはねねたひちのに〨っはねねたち〬 〦ねち〩〻
どて〨っはねねたぢ 〡〽 きぐぉたぃくききたぎさがが〩きぐぉたぃはねねたひちのに〨っはねねたぢ〬 〦ねぢ〩〻

〷
〸
〹
〱〰

どて〨っはねねたち 〡〽 きぐぉたぃくききたぎさがが〩ぬどぢたっちぬぬ〨っはねねたち〩〻

〱〱
〱〲
〱〳

どて〨っはねねたぢ 〡〽 きぐぉたぃくききたぎさがが〩ほ
ぬどぢたっちぬぬ〨っはねねたぢ〩〻
ぬどぢたっちぬぬ〨っはねねたぢ〩〻
ぽ

〱〴
〱〵
〱〶
〱〷

どて〨っはねねたち 〡〽 きぐぉたぃくききたぎさがが〩きぐぉたぃはねねたてひづづ〨〦っはねねたち〩〻
どて〨っはねねたぢ 〡〽 きぐぉたぃくききたぎさがが〩きぐぉたぃはねねたてひづづ〨〦っはねねたぢ〩〻
きぐぉたぇひはふばたてひづづ〨〦でひはふばたち〩〻
きぐぉたぇひはふばたてひづづ〨〦でひはふばたぢ〩〻
きぐぉたぇひはふばたてひづづ〨〦きぐぉたぇげくさぐたしくげがい〩〻
きぐぉたうどのちぬどぺづ〨〩〻

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

ぽ

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

ライブラリ〺
ぶはどつ ぬどぢたっちぬぬ〨きぐぉたぃはねね っはねね〩
ほどのぴ ねづ〬 つはのづ 〽 〰〻きぐぉたこぴちぴふび びぴちぴふび〻
きぐぉたぃはねねたひちのに〨っはねね〬 〦ねづ〩〻
どて〨ねづ 〽〽 〰〩ぷとどぬづ〨〡つはのづ〩
ほきぐぉたげづっぶ〨〮〮〮〬 きぐぉたぁぎすたこくさげぃぅ〬 きぐぉたぁぎすたごぁぇ〬 っはねね〬 〦びぴちぴふび〩〻
〮〮〮
ぽ
づぬびづ
ほ
〪〯 ぷはひに 〪〯きぐぉたこづのつ〨〮〮〮〬 〰〬 ぁげあぉごげぁげすたごぁぇ〬 っはねね〩〻〮〮〮〮ぽ〣どてつづて ぅじぁきぐがぅた〲ぃ〪〯 どのっぬふつづ 〨ひづびば〬 づへっぬふつづ〩 てはひ びちてづぴべ 〨ひづびば〬 のは びちてづぴべ〩〺 〪〯きぐぉたあちひひどづひ〨っはねね〩〻〣づのつどて
ぽ

〴〵
〴〶
〴〷
〴〸

上記の例はぬどびぴたぢにランク〳を含むかどうか，そして同期がぬどぢたっちぬぬに含まれるかどうかにより，実際には〳つの例となっている．この例は，コンテクストを使用したとしても，同じコンテクストで複数回のぬどぢたっちぬぬの呼び出しを行うとこれらの呼び出しは必ずしも互〶〮〶〮 グループ間通信〲〲〵

いに安全な状態にないということを示している（いわゆる，「バックマスキング」現象が発生し得る）．きぐぉたあちひひどづひが追加された場合に安全な通信が実現する．この例は，コンテ
クストを使用したとしてもライブラリは慎重に作成しなければならないということを示している．ランク〳がない場合には，バックマスキングを避けて安全性を確保するための同期は必要ない．
「リデュース」や「オールリデュース」などのアルゴリズムでは，きぐぉの基本機能によって送信元を安全に選択できるので，本質的にバックマスキングの問題は発生しな
い．同じ根または異なる根の一般的なツリー型ブロードキャストアルゴリズムを複数回呼び出す場合（文献せ〴〵そを参照のこと）も同様である．ここで，同じコンテクストにおけるプロセス間メッセージの〲者間での順序保証，および送信元を安全に選択できるというきぐぉの〲つの性質が前提となる．いずれかの特徴を削除すると，バックマスキングが発生しないという保証がなくなる．
決定性が失われたアルゴリズム送り先の順番が決まらないブロードキャストを行おうとするアルゴリズム順序が非決定的 順序が非決定的なブロードキャストや，ワイルドカ
ード操作を含む他の呼び出しを実行しようとするアルゴリズムは，「リデュース」，「オールリデュース」，「ブロードキャスト」の順序が決定的な実装が持つ，良い特性を一般には持たない．このようなアルゴリズムにおいて，正しい処理を行うためには（コミュニ
ケータのスコープ内で）単調増加するタグを利用しなくてはならないこともある．
前述の議論は全て〱対〱通信で実装された「集団呼び出し」を仮定している．きぐぉでは
集団呼び出しは〱対〱通信を使用して実装してもいいし，しなくてもよい．これらのアルゴリズムは，きぐぉでの集団呼び出しの実装方法とは関係なく，正確さと安全性の議論のために例示された．第〶〮〹節も参照のこと．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

6.6 グループ間通信〲〹〳〰

本節では，グループ間通信の概念を導入し，それをサポートするきぐぉの仕様について説明を加える．さらに，利用者レベルのサーバを含むプログラムを作成するためのサポートについても述べる．
これまでに述べてきた〱対〱通信は，同じグループのメンバであるプロセス間の通信のみを考慮の対象としてきた．本章の前の部分で述べたように，このようなタイプの通信
は「グループ内通信」と呼ばれ，そのような通信で使用されるコミュニケータは「グループ内コミュニケータ」と呼ばれる．
モジュール化され，複数分野にまたがるアプリケーションでは，異なるプロセスグル
ープがそれぞれ違ったモジュールを実行したり，異なるモジュールに含まれるプロセス
が互いにパイプライン的な，あるいはより一般的なグラフ状の通信を行なったりする．
このようなアプリケーションでは，あるプロセスが通信の相手プロセスを特定する最も自然な方法は，相手グループ中での相手プロセスのランクを指定することである．一方，内部に利用者レベルのサーバを含むようなアプリケーションでは，各サーバが複数のク
ライアントに対してサービスを提供するようなプロセスグループであったり，各クライ
アントが複数のサーバからのサービスを受けるプロセスグループであるような状況が生

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〲〲〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

ずる．このようなアプリケーションにおいても，相手プロセスを相手グループにおけるランクを用いて指定することがきわめて自然だと考えられる．先にも述べたように，このようなタイプの通信は「グループ間通信」と呼ばれ，ここで使われるコミュニケータ
は「グループ間コミュニケータ」と呼ばれる．
グループ間通信は，異なるグループに属するプロセス間での〱対〱通信である．グルー
プ間通信を開始するプロセスを含むグループは「ローカルグループ」と呼ばれる．送信操作における送信プロセス，あるいは受信操作における受信プロセスがこれに相当する．
一方，通信の相手プロセスを含むグループは「リモートグループ」と呼ばれる．送信操
作における受信プロセス，受信操作における送信プロセスがこれに相当する． グループ
内コミュニケータの場合と同様，相手プロセスは〨っはねねふのどっちぴはひ〬 ひちのに〩のペアを用いて指定される．しかし，グループ内通信と異なり，ランクはリモートグループに従って定義される．
グループ間コミュニケータに関する全てのコンストラクタの動作はブロッキングである．ローカルグループとリモートグループは重なりを持ってはならない．
ユーザへのアドバイス いくつかの理由により，グループは重なりがないことが重要となる． まず，グループ間コミュニケータの目的は，重なりのないグルー
プ間の通信のためのコミュニケータを提供することである． これは
きぐぉたぉぎごぅげぃくききたきぅげぇぅの定義にも反映され，これを使用してユーザは生成されたグループ内コミュニケータ内のプロセスのランク付けを制御することができ，
このランク付けは，グループに重なりがあるとほとんど意味がない．また，集団操作をグループ間コミュニケータに自然に拡張することは，グループに重なりがない
場合に高い効果が得られる． （ユーザへのアドバイス終わり）〲〸〲〹

以下に，グループ間通信とグループ間コミュニケータの特性をまとめる．

〳〰
〳〱
〳〲
〳〳

• 〱対〱通信および集団的通信のシンタックスは，グループ間通信，グループ内双方の通信に関して同様である．同じコミュニケータを送信操作と受信操作の双方に用いることができる．

〳〴〳〵〳〶• 相手プロセスは，送信と受信の双方に関して，リモートグループでのランクによって指定される．

〳〷〳〸〳〹• グループ間コミュニケータを用いた通信は，異なるコミュニケータを用いた他のいかなる通信とも干渉しないことが保証される．

〴〰
〴〱
〴〲

• 〱つのコミュニケータはグループ内，グループ間通信のいずれかの通信にのみ使用
でき，両方に用いることはできない．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

あるコミュニケータがグループ内コミュニケータか，グループ間コミュニケータのいず
れであるかを知るためには，関数きぐぉたぃくききたごぅこごたぉぎごぅげを用いることができる．グ
ループ間コミュニケータは，コミュニケータの情報を参照するためのいくつかの関数に対して，引数として与えることができる．一方，グループ内コミュニケータのためのコ〶〮〶〮 グループ間通信〲〲〷

ンストラクタ関数のうちいくつかは，グループ間コミュニケータを入力引数としてとることができないものがある（例えばきぐぉたぃぁげごたぃげぅぁごぅ）
．

〱
〲
〳

実装者へのアドバイス 〱対〱通信を実現するために，コミュニケータは各プロセスにおいて以下のような項目の組によって表現することができる．
group
sendたcontext
receiveたcontext
source

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

グループ間コミュニケータに対しては，groupはリモートグループを表わし，sourceはローカルグループでのランクを表わす．グループ内コミュニケータに対しては，groupはコミュニケータグループ（リモートグループ〽ローカルグループ）
を，sourceはそのグループにおけるプロセスのランクを表わす．送信コンテクス
トと受信コンテクストは同一である．groupは，ランクからプロセスの絶対位置への変換テーブルとして表現される．
グループ間コミュニケータを論ずるには，ローカルグループとリモートグループそれぞれにおける 〲つのプロセスを考える必要がある．いま，グループP におけるプ
ロセス P がグループ間コミュニケータCP を持ち，グループQ におけるプロセス
Q がグループ間コミュニケータCQ を持つとする．このとき，

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

• CP .groupはグループQ を表わし，CQ .groupはグループP を表わす．

〲〷• CP .sendたcontext = ぃQ .receiveたcontext であり，そのコンテクストはグループQ に関して一意である．同様に，
CP .receiveたcontext = CQ .sendたcontext であり，そのコンテクストはグ
ループPに対して一意である．

〲〸• CP .sourceはグループP におけるプロセスPのランクであり， CQ .sourceはグループQ におけるプロセスQのランクである．

〳〳

プロセスPがグループ間コミュニケータを用いてプロセスQにメッセージを送る場合を考える．このとき，Pはgroupテーブルを用いてQの絶対位置を見出す．
sourceとsendたcontextはメッセージに付加される．

〳〶

プ ロ セ スQがsourceを 明 示 的 に 指 定 し て グ ル ー プ 間 コ ミ ュ ニ ケ ー タ を 用 い て
受信をポストする場合を考える． このとき，Qはreceiveたcontextをメッセージのcontextと照合し，soruce引数をメッセージのsourceと照合する．

〴〰

同様なアルゴリズムは，グループ内コミュニケータに関しても適用できる．

〴〴

グループ間コミュニケータのアクセサとコンストラクタをサポートするためには，上に述べたモデルにさらに構造体を追加することが必要である．この構造体は，ロ

〲〹
〳〰
〳〱
〳〲

〳〴
〳〵

〳〷
〳〸
〳〹

〴〱
〴〲
〴〳

〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〲〸ーカル通信グループと付加的な安全性保証のためのコンテクストに関する情報を格納するために用いる．

〱〲〳（実装者へのアドバイス終わり）〴〵〶

6.6.1 グループ間コミュニケータのアクセサ〷〸〹

きぐぉたぃくききたごぅこごたぉぎごぅげ〨っはねね〬 」ちで〩

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ぉぎ
くさご

っはねね
」ちで

コミュニケータ（ハンドル）（論理型）

どのぴ きぐぉたぃはねねたぴづびぴたどのぴづひ〨きぐぉたぃはねね っはねね〬 どのぴ 〪てぬちで〩きぐぉたぃくききたごぅこごたぉぎごぅげ〨ぃくきき〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
{ぢははぬ きぐぉ〺〺ぃはねね〺〺ぉびたどのぴづひ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
このローカル関数によって，呼び出し元プロセスは，あるコミュニケータがグループ間
コミュニケータかグループ内コミュニケータかを知ることができる．本関数は，前者であればぴひふづを，後者であればてちぬびづを返す．
これまでに挙げられたグループ内コミュニケータに関するアクセサに対し，入力引数としてグループ間コミュニケータを与えた場合，それらの関数は次の表に示すように動
作する．

〲〶
〲〷
〲〸
〲〹

きぐぉたぃくききたこぉずぅ
きぐぉたぃくききたぇげくさぐ
きぐぉたぃくききたげぁぎか

ローカルグループのサイズを返す．
ローカルグループを返す．
ローカルグループ内でのランクを返す．

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

表 〶〮〱〺 （グループ間コミュニケータモードでの）きぐぉたぃくききた〪関数の振る舞い
さらに，きぐぉたぃくききたぃくきぐぁげぅ操作はグループ間コミュニケータに関しても用いることができる．双方のコミュニケータはグループ内コミュニケータかグループ間コミュ
ニケータのいずれかである必要があり，そうでない場合にはきぐぉたさぎぅけさぁがが返される．
きぐぉたぃくぎぇげさぅぎごときぐぉたこぉきぉがぁげの結果を得るためには，対応するローカルグループとリモートグループがそれぞれ正しく比較できなくてはならない．特に，ローカルグル
ープ，リモートグループの一方でも類似してはいても完全に同じではないという場合，
きぐぉたこぉきぉがぁげが返される可能性がある．
次に挙げるアクセサは，つねにグループ間コミュニケータのリモートグループに関するアクセス手段を提供する．
これらは全てローカル操作である．

〶〮〶〮 グループ間通信〲〲〹

きぐぉたぃくききたげぅきくごぅたこぉずぅ〨っはねね〬 びどぺづ〩
ぉぎ
くさご

っはねね
びどぺづ

〱

グループ間コミュニケータ（ハンドル）〲〳

っはねねのリモートグループ内のプロセス数（整数型）

どのぴ きぐぉたぃはねねたひづねはぴづたびどぺづ〨きぐぉたぃはねね っはねね〬 どのぴ 〪びどぺづ〩
きぐぉたぃくききたげぅきくごぅたこぉずぅ〨ぃくきき〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 こぉずぅ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぉのぴづひっはねね〺〺ぇづぴたひづねはぴづたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参
照）}

〴
〵
〶
〷
〸
〹
〱〰
〱〱

きぐぉたぃくききたげぅきくごぅたぇげくさぐ〨っはねね〬 でひはふば〩
ぉぎ
くさご

っはねね
びどぺづ

〱〲

グループ間コミュニケータ（ハンドル）〱〳

っはねねに対応するリモートグループ（ハンドル）〱〴〱〵

どのぴ きぐぉたぃはねねたひづねはぴづたでひはふば〨きぐぉたぃはねね っはねね〬 きぐぉたぇひはふば 〪でひはふば〩
きぐぉたぃくききたげぅきくごぅたぇげくさぐ〨ぃくきき〬 ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぇげくさぐ〬 ぉぅげげくげ
{きぐぉ〺〺ぇひはふば きぐぉ〺〺ぉのぴづひっはねね〺〺ぇづぴたひづねはぴづたでひはふば〨〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

根拠 グループ間コミュニケータを構成するローカルグループとリモートグルー
プに対称な方法でアクセスできることは重要である． そのために，本関数およびきぐぉたぃくききたげぅきくごぅたこぉずぅ が提供されている． （根拠の終わり）

〲〲
〲〳
〲〴
〲〵

6.6.2 グループ間コミュニケータの操作
本節では，グループ間コミュニケータに関する〴つのブロッキング操作を紹介する．
きぐぉたぉぎごぅげぃくききたぃげぅぁごぅは〲つのグループ内コミュニケータを結合してグループ間コ
ミュニケータとするのに用いられるきぐぉたぉぎごぅげぃくききたきぅげぇぅ関数はグループ間コミュ
ニケータを構成するローカルグループとリモートグループを結合して〱つのグループ内コ
ミュニケータを生成する．以前にも述べたきぐぉたぃくききたいさぐときぐぉたぃくききたうげぅぅはそれ
ぞれ，グループ間コミュニケータを複製，解放する．
グループ間コミュニケータの構成要素となるローカルグループとリモートグループとの間の重複は認められない．重複がある場合，そのプログラムは誤りであり，デッドロックに陥る可能性が高い．（プロセスがマルチスレッド構成であり，きぐぉの関数呼び出しがプロセス全体ではなく〱つのスレッドしかブロックしないのであれば，プロセスが重複してグループに属することも可能である．その場合には，利用者の責任において，そのプロセスの〲つの「役割」がそれぞれ別のスレッドによって実行されることを保証する必要がある．）
きぐぉたぉぎごぅげぃくききたぃげぅぁごぅ関数は，次に述べる状況下で，〲つの既存のグループ内コ
ミュニケータからグループ間コミュニケータを生成するのに用いられる．まず，それぞれのグループ中で，選ばれた少なくとも〱つのメンバ（「グループリーダ」）が他方のグル
ープのグループリーダと通信できなくてはならない．すなわち，〲つのグループリーダが

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〳〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

属する「ピア」コミュニケータが存在し，かつ各リーダは他方のリーダの仲介コミュニ
ケータ内でのランクを知っている必要がある．さらに，各グループのメンバは，それぞれのリーダのランクを知っていなくてはならない．
〲つのグループ内コミュニケータからのグループ間コミュニケータの生成時には，ローカルグループとリモートグループでの独立した集団操作と，ローカルグループのプロセ
スとリモートグループのプロセスの間での〱対〱通信が必要となる．
標準的なきぐぉの実装（初期化時に静的にプロセスが割り当てられる）では，
きぐぉたぃくききたしくげがいコミュニケータ（より好ましくは，ピア専用のきぐぉたぃくききたしくげがいの複製）がピアコミュニケータとなりうる．スポーンやジョインを使ったアプリケーショ
ンについては， ピアとして使われるべきグループ間コミュニケータを最初に生成する必要があるかもしれない．
第〷章で述べるアプリケーショントポロジーに関する関数は，グループ間コミュ
ニケータに対しては適用することはできない． このような機能が必要な利用者は，
きぐぉたぉぎごぅげぃくききたきぅげぇぅを用いてグループ内コミュニケータを生成し，それに対してグラフあるいはカルテシアントポロジーを当てはめて適当なトポロジー属性を持たせるのが良い．あるいは，一般性を失わないような独自のアプリケーショントポロジーメカ
ニズムを考案することも可能である．

〲〱
〲〲
〲〳
〲〴

きぐぉたぉぎごぅげぃくききたぃげぅぁごぅ〨ぬはっちぬたっはねね〬 ぬはっちぬたぬづちつづひ〬 ばづづひたっはねね〬 ひづねはぴづたぬづちつづひ〬 ぴちで〬のづぷどのぴづひっはねね〩

〲〵
〲〶

ぉぎ

ぬはっちぬたっはねね

ローカルグループ内コミュニケータ（ハンドル）ぉぎ

ぬはっちぬたぬづちつづひ

ぬはっちぬたっはねね内のローカルグループリーダのランク

〲〷
〲〸

（整数型）

〲〹
〳〰

ぉぎ

ばづづひたっはねね〳〱

持つ（ハンドル）〳〲〳〳「仲介」コミュニケータ．ぬはっちぬたぬづちつづひでのみ意味をぉぎ

ひづねはぴづたぬづちつづひ

ばづづひたっはねね内のリモートグループリーダのランク．
ぬはっちぬたぬづちつづひでのみ意味を持つ．（整数型）

〳〴
〳〵
〳〶
〳〷

ぉぎ

ぴちで

「安全」タグ（整数型）

くさごのづぷどのぴづひっはねね

新規グループ間コミュニケータ（ハンドル）

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぉのぴづひっはねねたっひづちぴづ〨きぐぉたぃはねね ぬはっちぬたっはねね〬 どのぴ ぬはっちぬたぬづちつづひ〬
きぐぉたぃはねね ばづづひたっはねね〬 どのぴ ひづねはぴづたぬづちつづひ〬 どのぴ ぴちで〬 きぐぉたぃはねね 〪のづぷどのぴづひっはねね〩
きぐぉたぉぎごぅげぃくききたぃげぅぁごぅ〨がくぃぁがたぃくきき〬 がくぃぁがたがぅぁいぅげ〬 ぐぅぅげたぃくきき〬 げぅきくごぅたがぅぁいぅげ〬
ごぁぇ〬 ぎぅしぉぎごぅげぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ がくぃぁがたぃくきき〬 がくぃぁがたがぅぁいぅげ〬 ぐぅぅげたぃくきき〬 げぅきくごぅたがぅぁいぅげ〬 ごぁぇ〬ぎぅしぉぎごぅげぃくきき〬 ぉぅげげくげ
{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺ぃひづちぴづたどのぴづひっはねね〨どのぴ ぬはっちぬたぬづちつづひ〬 っはのびぴ
きぐぉ〺〺ぃはねね〦 ばづづひたっはねね〬 どのぴ ひづねはぴづたぬづちつづひ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
本関数はグループ間コミュニケータを生成する． 動作は，ローカルグループとリモ〶〮〶〮 グループ間通信〲〳〱

ー ト グ ル ー プ の 和 集 合 に つ い て 集 団 的 で あ る． プ ロ セ ス は 各 グ ル ー プ 内 で 同 一 の引数ぬはっちぬたっはねねとぬはっちぬたぬづちつづひを指定する必要がある．ひづねはぴづたぬづちつづひ，ぬはっちぬたぬづちつづひ，およびぴちでに関してワイルドカードを用いることはできない．
本関数はリーダ間の〱対〱通信に関して，コミュニケータばづづひたっはねねとタグぴちでを用いる．したがって，ばづづひたっはねね上でこの通信と干渉する可能性のある未完了の通信が存在しないように注意を払う必要がある．

〱
〲
〳
〴
〵
〶
〷
〸

ユーザへのアドバイス ピアコミュニケータの使用にともなう問題を避けるために，
例えばきぐぉたぃくききたしくげがいの複製のような専用のピアコミュニケータを利用することを推奨する． （ユーザへのアドバイス終わり）

〹
〱〰
〱〱
〱〲
〱〳
〱〴

きぐぉたぉぎごぅげぃくききたきぅげぇぅ〨どのぴづひっはねね〬 とどでと〬 のづぷどのぴひちっはねね〩
ぉぎ
ぉぎ
くさご

どのぴづひっはねね
とどでとのづぷどのぴひちっはねね〱〵

グループ間コミュニケータ（ハンドル）

〱〶

（論理型）

〱〷

新規コミュニケータ（ハンドル）

どのぴ きぐぉたぉのぴづひっはねねたねづひでづ〨きぐぉたぃはねね どのぴづひっはねね〬 どのぴ とどでと〬きぐぉたぃはねね 〪のづぷどのぴひちっはねね〩
きぐぉたぉぎごぅげぃくききたきぅげぇぅ〨ぉぎごぅげぃくきき〬 えぉぇえ〬 ぉぎごげぁぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎごぅげぃくきき〬 ぉぎごげぁぃくきき〬 ぉぅげげくげ
がくぇぉぃぁが えぉぇえ{きぐぉ〺〺ぉのぴひちっはねね きぐぉ〺〺ぉのぴづひっはねね〺〺きづひでづ〨ぢははぬ とどでと〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
本関数は，どのぴづひっはねねを構成する〲つのグループの和集合から 〱つのグループ内コミュニ
ケータを生成する．全てのプロセスは，その〲つのグループのそれぞれで同一のとどでとの値を設定しなくてはならない．一方のグループに属するプロセスがとどでと 〽 てちぬびづを設定し，他方のグループに属するプロセスがとどでと 〽 ぴひふづを設定した場合，和集合内でのラン
クはぜぬはぷ〢のグループがぜとどでと〢のグループより前になるように決定される．全てのプロセスが同じとどでとの値を設定したならば，和集合内でのランクは任意となる．この関数は〲つのグループの和集合に関して集団的であり，かつブロッキングである．
各プロセスの新規グループ間コミュニケータのエラーハンドラは，ローカルグループに寄与するコミュニケータから継承される．このため，同じコミュニケータ内のプロセ
スごとにエラーハンドラが異なるという状態が発生する可能性がある．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

実装者へのアドバイス きぐぉたぉぎごぅげぃくききたきぅげぇぅ，きぐぉたぃくききたうげぅぅ，
きぐぉたぃくききたいさぐの実装はきぐぉたぉぎごぅげぃくききたぃげぅぁごぅの実装と似ている．ただし
前〳者では，グループリーダ間の通信において，仲介コミュニケータのコンテクス
トではなく入力のグループ間コミュニケータ固有のコンテクストを用いる． （実装者へのアドバイス終わり）

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〲〳〲

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〱〲〳Group 0Group 1

Group 2〴〵〶〷図 〶〮〳〺 〳グループでのパイプライン．

〸
〹
〱〰
〱〱

6.6.3 グループ間コミュニケータの使用例
例〱〺 〳グループでの「パイプライン」

〱〲
〱〳
〱〴
〱〵

グループ〰と〱とが通信を行ない，グループ〱と〲とが通信を行なう．したがって，グループ〰は〱つのグループ間コミュニケータを，グループ〱は〲つのグループ間コミュニケータ
を，グループ〲は〱つのグループ間コミュニケータを必要とする．

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほきぐぉたぃはねね
ねべぃはねね〻〪〯 どのぴひち〭っはねねふのどっちぴはひ はて ぬはっちぬ びふぢ〭でひはふば 〪〯きぐぉたぃはねね
ねべうどひびぴぃはねね〻 〪〯 どのぴづひ〭っはねねふのどっちぴはひ 〪〯きぐぉたぃはねね
ねべこづっはのつぃはねね〻 〪〯 びづっはのつ どのぴづひ〭っはねねふのどっちぴはひ 〨でひはふば 〱 はのぬべ〩 〪〯どのぴ ねづねぢづひびとどばかづべ〻
どのぴ ひちのに〻きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻
きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ひちのに〩〻

〲〵
〲〶
〲〷
〲〸
〲〹

〪〯 さびづひ っはつづ ねふびぴ でづのづひちぴづ ねづねぢづひびとどばかづべ どの ぴとづ ひちのでづ せ〰〬 〱〬 〲そ 〪〯
ねづねぢづひびとどばかづべ 〽 ひちのに 〥 〳〻〪〯 あふどぬつ どのぴひち〭っはねねふのどっちぴはひ てはひ ぬはっちぬ びふぢ〭でひはふば 〪〯きぐぉたぃはねねたびばぬどぴ〨きぐぉたぃくききたしくげがい〬 ねづねぢづひびとどばかづべ〬 ひちのに〬 〦ねべぃはねね〩〻

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

〪〯 あふどぬつ どのぴづひ〭っはねねふのどっちぴはひび〮 ごちでび ちひづ とちひつ〭っはつづつ〮 〪〯どて 〨ねづねぢづひびとどばかづべ 〽〽 〰〩ほ〪〯 ぇひはふば 〰 っはねねふのどっちぴづび ぷどぴと でひはふば 〱〮 〪〯きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〱〬〱〬 〦ねべうどひびぴぃはねね〩〻ぽづぬびづ どて 〨ねづねぢづひびとどばかづべ 〽〽 〱〩ほ〪〯 ぇひはふば 〱 っはねねふのどっちぴづび ぷどぴと でひはふばび 〰 ちのつ 〲〮 〪〯きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〰〬〱〬 〦ねべうどひびぴぃはねね〩〻
きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〲〬〱〲〬 〦ねべこづっはのつぃはねね〩〻ぽづぬびづ どて 〨ねづねぢづひびとどばかづべ 〽〽 〲〩ほ〪〯 ぇひはふば 〲 っはねねふのどっちぴづび ぷどぴと でひはふば 〱〮 〪〯きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〱〬〱〲〬 〦ねべうどひびぴぃはねね〩〻
ぽ

〴〵
〴〶
〴〷
〴〸

〪〯 いは ぷはひに 〮〮〮 〪〯びぷどぴっと〨ねづねぢづひびとどばかづべ〩
ほ〪〯 てひづづ っはねねふのどっちぴはひび ちばばひはばひどちぴづぬべ 〪〯〶〮〶〮 グループ間通信

〲〳〳
〱
〲
〳

Group 0Group 1

Group 2〴〵〶〷図 〶〮〴〺 〳グループでのリング．

〸〹

っちびづ 〱〺
きぐぉたぃはねねたてひづづ〨〦ねべこづっはのつぃはねね〩〻
っちびづ 〰〺
っちびづ 〲〺
きぐぉたぃはねねたてひづづ〨〦ねべうどひびぴぃはねね〩〻
ぢひづちに〻
ぽ

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

きぐぉたうどのちぬどぺづ〨〩〻
ぽ

〱〷
〱〸
〱〹

例〲〺 〳グループでの「リング」〲〰
〲〱

グループ〰と〱，グループ〱と〲，グループ〲と〰がそれぞれ通信を行なう．したがって，それぞれが〲つのグループ間コミュニケータを必要とする．

〲〲
〲〳
〲〴

どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほきぐぉたぃはねね
ねべぃはねね〻〪〯 どのぴひち〭っはねねふのどっちぴはひ はて ぬはっちぬ びふぢ〭でひはふば 〪〯きぐぉたぃはねね
ねべうどひびぴぃはねね〻 〪〯 どのぴづひ〭っはねねふのどっちぴはひび 〪〯きぐぉたぃはねね
ねべこづっはのつぃはねね〻
きぐぉたこぴちぴふび びぴちぴふび〻
どのぴ ねづねぢづひびとどばかづべ〻
どのぴ ひちのに〻

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻
きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ひちのに〩〻〮〮〮〳〲〪〯 さびづひ っはつづ ねふびぴ でづのづひちぴづ ねづねぢづひびとどばかづべ どの ぴとづ ひちのでづ せ〰〬 〱〬 〲そ 〪〯
ねづねぢづひびとどばかづべ 〽 ひちのに 〥 〳〻

〳〵

〳〳
〳〴

〳〶
〳〷

〪〯 あふどぬつ どのぴひち〭っはねねふのどっちぴはひ てはひ ぬはっちぬ びふぢ〭でひはふば 〪〯きぐぉたぃはねねたびばぬどぴ〨きぐぉたぃくききたしくげがい〬 ねづねぢづひびとどばかづべ〬 ひちのに〬 〦ねべぃはねね〩〻〪〯 あふどぬつ どのぴづひ〭っはねねふのどっちぴはひび〮 ごちでび ちひづ とちひつ〭っはつづつ〮 〪〯どて 〨ねづねぢづひびとどばかづべ 〽〽 〰〩ほ〪〯 ぇひはふば 〰 っはねねふのどっちぴづび ぷどぴと でひはふばび 〱 ちのつ 〲〮 〪〯きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〱〬〱〬 〦ねべうどひびぴぃはねね〩〻
きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〲〬〲〬 〦ねべこづっはのつぃはねね〩〻ぽづぬびづ どて 〨ねづねぢづひびとどばかづべ 〽〽 〱〩ほ〪〯 ぇひはふば 〱 っはねねふのどっちぴづび ぷどぴと でひはふばび 〰 ちのつ 〲〮 〪〯きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〰〬

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング〲〳〴〱〱〬 〦ねべうどひびぴぃはねね〩〻
きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〲〬〱〲〬 〦ねべこづっはのつぃはねね〩〻〲〳ぽづぬびづ どて 〨ねづねぢづひびとどばかづべ 〽〽 〲〩ほ〪〯 ぇひはふば 〲 っはねねふのどっちぴづび ぷどぴと でひはふばび 〰 ちのつ 〱〮 〪〯きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〰〬〲〬 〦ねべうどひびぴぃはねね〩〻
きぐぉたぉのぴづひっはねねたっひづちぴづ〨 ねべぃはねね〬 〰〬 きぐぉたぃくききたしくげがい〬 〱〬〱〲〬 〦ねべこづっはのつぃはねね〩〻
ぽ

〴
〵
〶
〷
〸
〹
〱〰

〪〯 いは びはねづ ぷはひに 〮〮〮 〪〯〱〱〱〲〪〯 ごとづの てひづづ っはねねふのどっちぴはひび ぢづてはひづ ぴづひねどのちぴどので〮〮〮 〪〯きぐぉたぃはねねたてひづづ〨〦ねべうどひびぴぃはねね〩〻
きぐぉたぃはねねたてひづづ〨〦ねべこづっはのつぃはねね〩〻
きぐぉたぃはねねたてひづづ〨〦ねべぃはねね〩〻
きぐぉたうどのちぬどぺづ〨〩〻

〱〳
〱〴
〱〵
〱〶

ぽ

〱〷
〱〸
〱〹
〲〰

6.7 キャッシング

〲〱
〲〲
〲〳
〲〴
〲〵

きぐぉは，アプリケーションで〳種類のきぐぉオブジェクトであるコミュニケータ，ウィン
ドウ，データ型に属性と呼ばれる任意の情報を付加するため，「キャッシング」という機能を用意している．より正確に言えば，キャッシング機能を用いれば，次のような機能を可搬なライブラリとして実装できるようになる．

〲〶
〲〷
〲〸

• きぐぉのグループ内コミュニケータ，グループ間コミュニケータ，ウィンドウ，またはデータ型と情報を関連付けることにより呼び出し間で情報を伝え，〲〹〳〰

• その情報を高速に検索し，

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

• 古くなった情報が再利用されないことを保証する．これはオブジェクトが解放され，その後，きぐぉによって そのオブジェクトが使用していたのと同じハンドルが再利用された場合にも保証される．
集団的通信やアプリケーショントポロジーを扱うようなきぐぉの組み込みルーチンでキャッシングの能力が必要とされる．これらの機能へのインターフェイスをきぐぉの標準の一部として定義することには重要である．それは集団的通信とアプリケーショントポロ
ジーを扱うようなルーチンが可搬になるためである．そしてまた，ユーザが記述したルーチンで標準のきぐぉの呼び出し手順を用いることにより拡張性がより向上するためであ
る．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス コミュニケータきぐぉたぃくききたこぅがうは，この属性キャッシング
メカニズムを通してプロセスにローカルな属性を設定するのに適している． （ユーザへのアドバイス終わり）〶〮〷〮 キャッシング

〲〳〵根拠 極端な例では，全ての不可視なハンドルでキャッシングを行うことができる．
あるいは，コミュニケータでのみ行うこともできる．キャッシングはコストが伴うため，明らかに必要で，コスト増加が過度でない場合だけ使用するように制限する必要がある．そのため，他のハンドルではなく，ウィンドウとデータ型が追加されている． （根拠の終わり）

〱
〲
〳
〴
〵
〶
〷

うはひぴひちの言語の整数型とぃ言語のポインタのサイズの違いが問題となることがある．コ
ミュニケータでの属性のキャッシングによりこの問題に対処するため，このケースのための関数も用意されている．データ型とウィンドウでキャッシングを行うための関数もこの問題に対応している．アドレスサイズの問題については，第〱〶〮〳〮〶節を参照すること．
実装者へのアドバイス 高品質な実装では，きぐぉたじじじたぃげぅぁごぅたかぅすざぁがの呼び出
しにより生成されたにづべぶちぬがきぐぉたすすすたぇぅごたぁごごげ，きぐぉたすすすたこぅごたぁごごげ，
きぐぉたすすすたいぅがぅごぅたぁごごげ，きぐぉたすすすたうげぅぅたかぅすざぁがの呼び出し時に型の違ったオブジェクトと一緒に使用された場合に，エラーを発生させる必要がある．そのためには，関連するユーザ関数の型に関する情報を各にづべぶちぬで管理する必要がある．
（実装者へのアドバイス終わり）

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

6.7.1 機能説明〲〲

コミュニケータ，ウィンドウ，データ型に属性を結び付けることができる． 属性はプロセスに対してローカルであり，またそれらが結び付けられたコミュニケータに固有である．属性は，きぐぉたぃくききたいさぐによって複製された場合を除いてコミュニケータからコミュニケータへと伝播することはない（そして，アプリケーションは属性をコピーするためにコールバック関数に許可を与える必要がある）
．

〲〴

〲〳

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

ユーザへのアドバイス ぃ言語の属性はぶはどつ 〪型である．通常，このような属性は詳
しい情報が記述された構造体のポインタまたはきぐぉオブジェクトのハンドルである．うはひぴひちの言語では属性は整数型〨ぉぎごぅぇぅげ〩である．このような属性は，きぐぉオブジェクトのハンドル，または単なる整数型の属性とすることができる． （ユーザへのアドバイス終わり）
実装者へのアドバイス 属性はぃ言語のポインタのサイズと同じ大きさかあるいはそれより大きなサイズのスカラ値である．属性は，きぐぉのハンドルを常に保持することができる． （実装者へのアドバイス終わり）

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

ここで定義されるキャッシングインターフェイスでは，きぐぉによるコミュニケータ，
ウィンドウ，データ型の内部での属性の格納が不可視的でなければならない．アクセサ関数は次のものを含んでいる．

〴〲
〴〳
〴〴
〴〵

• （属性を識別するための）キー値を得る．コミュニケータが破壊あるいはコピーされた時にきぐぉがそのアプリケーションを知らせるためのコールバック関数を指定す
る．

〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〳〶〱• 属性の値の保持と取得を行う．

〲

実装者へのアドバイス キャッシングとコールバック関数は，アプリケーションの明示的なリクエストに対して，常に同期して呼び出される．これによりユーザ領域とシステム領域間で繰り返される交錯の問題を避けることができる（この同期呼び出し規則は，きぐぉの一般的な特性である）
．

〳
〴
〵
〶
〷
〸

キー値の選択はきぐぉに一任されている．これは，きぐぉが属性の組の実装を最適に行うためである．また，これにより同一のコミュニケータを使用する独立したモジュールでのキャッシング情報のコンフリクト衝突を避けることができる．

〹
〱〰
〱〱

コールバック機能だけからなるかなり小さなインターフェイスでは，可搬なコードで完全なキャッシング機能を実装することが可能かもしれない．しかし，こうした最小のインターフェイスでは， 任意のコミュニケータを処理するには，ある種の表探索が暗に必要になる．一方ここではより完全なインターフェイスを定義している．これは属性への高速なアクセスを可能にするためである． コミュニケータの中で（対応する属性テーブルを見つけるための）ポインタの使用，および（個々の属性を計算するための）賢く選択されたキー値の使用を通して 属性への高速なアクセスを達成する．最小のインターフェイスの持つ固有の効果的な点を考慮しても，ここで 定義されるより完全なインターフェイスの方が優れているように思われる． （実装者へのアドバイス終わり）

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

きぐぉはキャッシングに関して次のようなサービスを提供する．これらは全てプロセスでローカルである．

〲〷
〲〸
〲〹
〳〰

6.7.2 コミュニケータ
コミュニケータでキャッシングを行うための関数を以下に示す．

〳〱
〳〲
〳〳
〳〴

きぐぉたぃくききたぃげぅぁごぅたかぅすざぁが〨っはねねたっはばべたちぴぴひたての〬 っはねねたつづぬづぴづたちぴぴひたての〬 っはねねたにづべぶちぬ〬づへぴひちたびぴちぴづ〩ぉぎ

っはねねたっはばべたちぴぴひたてのっはねねたにづべぶちぬのためのコピーコールバック関数（関数）

ぉぎ

っはねねたつづぬづぴづたちぴぴひたてのっはねねたにづべぶちぬのための削除コールバック関数（関数）

〳〹

くさご
ぉぎ

っはねねたにづべぶちぬ
づへぴひちたびぴちぴづ

今後のアクセスのためのキー値（整数型）

〴〰

〳〵
〳〶
〳〷
〳〸

コールバック関数のためのその他の状態

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぃはねねたっひづちぴづたにづべぶちぬ〨きぐぉたぃはねねたっはばべたちぴぴひたてふのっぴどはの 〪っはねねたっはばべたちぴぴひたての〬きぐぉたぃはねねたつづぬづぴづたちぴぴひたてふのっぴどはの 〪っはねねたつづぬづぴづたちぴぴひたての〬 どのぴ 〪っはねねたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〩
きぐぉたぃくききたぃげぅぁごぅたかぅすざぁが〨ぃくききたぃくぐすたぁごごげたうぎ〬 ぃくききたいぅがぅごぅたぁごごげたうぎ〬 ぃくききたかぅすざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぅじごぅげぎぁが ぃくききたぃくぐすたぁごごげたうぎ〬 ぃくききたいぅがぅごぅたぁごごげたうぎぉぎごぅぇぅげ ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〶〮〷〮 キャッシング

〲〳〷{びぴちぴどっ どのぴ きぐぉ〺〺ぃはねね〺〺ぃひづちぴづたにづべぶちぬ〨きぐぉ〺〺ぃはねね〺〺ぃはばべたちぴぴひたてふのっぴどはの〪っはねねたっはばべたちぴぴひたての〬きぐぉ〺〺ぃはねね〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〪 っはねねたつづぬづぴづたちぴぴひたての〬
ぶはどつ〪 づへぴひちたびぴちぴづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
この関数は新規の属性キーを生成する．キーはプロセスにおいてローカルで一意であり，ユーザからは不可視であり，明示的に整数型として格納される．割り当てが完了す
ると，キー値を使用して属性を関連付け，ローカルに定義されたあらゆるコミュニケー
タ上で属性にアクセスすることができる．
この関数は，廃止されたきぐぉたかぅすざぁがたぃげぅぁごぅに代わるものである．ぃ言語の呼び出
し形式も同じである．うはひぴひちの言語の呼び出し形式は，づへぴひちたびぴちぴづがアドレスサイズの整数型である点が異なる．また，コピーと削除のコールバック関数は，アドレスサイズの属性と整合性のあるうはひぴひちの言語の呼び出し形式を備えている．
ぃ言語のコールバック関数はぴべばづつづて どのぴ きぐぉたぃはねねたっはばべたちぴぴひたてふのっぴどはの〨きぐぉたぃはねね はぬつっはねね〬 どのぴ っはねねたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬
どのぴ 〪てぬちで〩〻およびぴべばづつづて どのぴ きぐぉたぃはねねたつづぬづぴづたちぴぴひたてふのっぴどはの〨きぐぉたぃはねね っはねね〬 どのぴ っはねねたにづべぶちぬ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻である．これはきぐぉ〭〱〮〱の呼び出しと同じであるが，名前が新しくなっている．古い名前は廃止された．
うはひぴひちの言語のコールバック関数は
こさあげくさごぉぎぅ ぃくききたぃくぐすたぁごごげたうぎ〨くがいぃくきき〬 ぃくききたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬ぁごごげぉあさごぅたざぁがたぉぎ〬 ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ
および以下である．
こさあげくさごぉぎぅ ぃくききたいぅがぅごぅたぁごごげたうぎ〨ぃくきき〬 ぃくききたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

ぃ〫〫言語のコールバック関数は{ぴべばづつづて どのぴ きぐぉ〺〺ぃはねね〺〺ぃはばべたちぴぴひたてふのっぴどはの〨っはのびぴ きぐぉ〺〺ぃはねね〦 はぬつっはねね〬
どのぴ っはねねたにづべぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたどの〬
ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたはふぴ〬 ぢははぬ〦 てぬちで〩〻 （廃止された呼び出し形式．
第15.2節を参照）}〳〵

および以下である．
{ぴべばづつづて どのぴ きぐぉ〺〺ぃはねね〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〨きぐぉ〺〺ぃはねね〦 っはねね〬
どのぴ っはねねたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻 （廃止された呼び出し形式．第15.2節を参照）}〴〰

っはねねたっはばべたちぴぴひたての関数はコミュニケータがきぐぉたぃくききたいさぐによって複製されたときに呼び出される． っはねねたっはばべたちぴぴひたてのはきぐぉたぃはねねたっはばべたちぴぴひたてふのっぴどはの型でなければならない． コピーコールバック関数は，はぬつっはねね中のそれぞれのキー値に対して任意の順に呼び出される． それぞれのコピーコールバック関数の呼び出しは，キー値とそ

〴〴

〳〶
〳〷
〳〸
〳〹

〴〱
〴〲
〴〳

〴〵
〴〶
〴〷
〴〸

〲〳〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

れに一致する属性に対して行なわれる． 」ちで 〽 〰が返された場合には，複製されたコ
ミュニケータ中の属性は削除されている．そうでない場合〨」ちで 〽 〱〩には新しい属性値
がちぴぴひどぢふぴづたぶちぬたはふぴを通じてセットされる．この関数は成功時にはきぐぉたこさぃぃぅここを返し，エラー時にはエラーコードを返す（エラー時には，きぐぉたぃくききたいさぐは失敗する）．
ぃ言 語，ぃ〫〫言 語，うはひぴひちの言 語 に お い て，引 数っはねねたっはばべたちぴぴひたてのをきぐぉたぃくききたぎさががたぃくぐすたうぎま た はきぐぉたぃくききたいさぐたうぎと し て 指 定 す る こ と が で きる．きぐぉたぃくききたぎさががたぃくぐすたうぎは」ちで 〽 〰をセットし， きぐぉたこさぃぃぅここを返すだけの関数である． 単純なコピー関数としてきぐぉたぃくききたいさぐたうぎが用意されている． この関数は」ちで 〽 〱をセットし，ちぴぴひどぢふぴづたぶちぬたはふぴにちぴぴひどぢふぴづたぶちぬたどのの値を返し， きぐぉたこさぃぃぅここを返却値とする． これら関数は廃止されたきぐぉ〭〱の定義済みコールバック
きぐぉたぎさががたぃくぐすたうぎおよびきぐぉたいさぐたうぎに代わるものである．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

ユーザへのアドバイス ちぴぴひどぢふぴづたぶちぬたどのとちぴぴひどぢふぴづたぶちぬたはふぴは両方ともぶはどつ 〪型であるが，その使い方は異なっている．ぃ言語のコピー関数は，ちぴぴひどぢふぴづたぶちぬたどの中の属性の値をきぐぉを通じでコピーし，ちぴぴひどぢふぴづたぶちぬたはふぴに属性のアドレスを入れる．これはこの関数が，（新しい）属性値を返すことができるようにするためである． ぶはどつ 〪型を利用するのは，煩雑なキャストを避けるためである．
有効なコピー関数には〲種類ある．〱つは属性を含んだデータ構造まるごとをコピーすることにより情報を完全に複製するものである．もう〱つは，他のデータ構造への参照をリファレンスカウント方式で持つだけの方法である．後者の方法では属性のその他の型はまったくコピーされない（それらははぬつっはねねだけで指定されている可能性がある）． （ユーザへのアドバイス終わり）

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

実装者へのアドバイス ぃ言語のインターフェイスはぃ言語で作成されたキー値によるコピーと削除の関数を仮定していて，うはひぴひちの言語の呼び出しインターフェイス
はうはひぴひちの言語で作成されたキー値を仮定している． （実装者へのアドバイス終わ
り）

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

っはねねたっはばべたちぴぴひたてのと類似しているのは次のように定義される削除コールバック関数である．っはねねたつづぬづぴづたちぴぴひたての関数は，コミュニケータがきぐぉたぃくききたうげぅぅによって削除された場合か，明示的にきぐぉたぃくききたいぅがぅごぅたぁごごげが呼び出された場合に呼び出される．
っはねねたつづぬづぴづたちぴぴひたてのはきぐぉたぃはねねたつづぬづぴづたちぴぴひたてふのっぴどはの型でなくてはならない．
こ の 関 数 は， きぐぉたぃくききたうげぅぅ， きぐぉたぃくききたいぅがぅごぅたぁごごげ，
きぐぉたぃくききたこぅごたぁごごげにより属性が削除されなくてはならなくなった時には常に呼び出される．この関数は成功時にはきぐぉたこさぃぃぅここを返し，失敗時にはエラーコードを返す（この時には，きぐぉたぃくききたうげぅぅは失敗する）．
ぃ言語，ぃ〫〫言語，うはひぴひちの言語において，引数っはねねたつづぬづぴづたちぴぴひたてのをきぐぉたぃくききたぎさががたいぅがぅごぅたうぎと し て 指 定 す る こ と が で き る．
きぐぉたぃくききたぎさががたいぅがぅごぅたうぎはきぐぉたこさぃぃぅここを返すだけの関数である．
きぐぉたぃくききたぎさががたいぅがぅごぅたうぎは廃止されたきぐぉたぎさががたいぅがぅごぅたうぎに代わるものである．

〶〮〷〮 キャッシング

〲〳〹

属性コピー関数または属性削除関数がきぐぉたこさぃぃぅここ以外の値を返す場合， これを呼び出した関数呼び出し（きぐぉたぃくききたうげぅぅなど）は誤りである．
特別なキー値きぐぉたかぅすざぁがたぉぎざぁがぉいがきぐぉたかぅすざぁがたぃげぅぁごぅによって返されることはない．そのため，キー値の静的な初期化のために使用することができる．

〱
〲
〳
〴
〵
〶

実 装 者 へ の ア ド バ イ ス ぃ〫〫言 語 の ル ー チ ンきぐぉ〺〺ぃはねね〺〺ぃひづちぴづたにづべぶちぬの 呼 び 出〷〸
し で， っはねねたっはばべたちぴぴひたての引 数 と し て 定 義 済 み のぃ言 語 の 関 数〹きぐぉたぃくききたぎさががたぃくぐすたうぎまたはきぐぉたぃくききたいさぐたうぎを使用したり，〱〰
っはねねたつづぬづぴづたちぴぴひたての引数として定義済みのぃ言語の関数きぐぉたぃくききたぎさががたいぅがぅごぅたうぎを
〱〱使用したりできるようにするために，第〱入力引数，第〲入力引数，または両方の入〱〲力引数としてぃ言語の関数が使用できる（ぃ〫〫言語のプロトタイプに一致する引数〱〳〱〴の代わりに）〳つのルーチンでこのルーチン〨きぐぉ〺〺ぃはねね〺〺ぃひづちぴづたにづべぶちぬ〩をオーバー〱〵ロードしてもよい． （実装者へのアドバイス終わり）〱〶

ユーザへのアドバイス 内部的にきぐぉ〺〺ぃはねね〺〺ぃひづちぴづたにづべぶちぬを呼び出す「ラッパー」
ルーチンを記述しようとしていて， っはねねたっはばべたちぴぴひたてのやっはねねたつづぬづぴづたちぴぴひたてのがこのラッパールーチンの引数である場合，またユーザ定義のぃ〫〫言語のコピーおよび削除関数と定義済みのぃ言語関数の両方でこのラッパールーチンをコールバックする必要がある場合，上記の「実装者へのアドバイス」で説明したのと同じオーバーロードが必要となる場合もある． （ユーザへのアドバイス終わり）

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

きぐぉたぃくききたうげぅぅたかぅすざぁが〨っはねねたにづべぶちぬ〩ぉぎくさご

っはねねたにづべぶちぬ

キー値（整数型）〲〷〲〸〲〹

どのぴ きぐぉたぃはねねたてひづづたにづべぶちぬ〨どのぴ 〪っはねねたにづべぶちぬ〩きぐぉたぃくききたうげぅぅたかぅすざぁが〨ぃくききたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたかぅすざぁが〬 ぉぅげげくげ
{びぴちぴどっ ぶはどつ きぐぉ〺〺ぃはねね〺〺うひづづたにづべぶちぬ〨どのぴ〦 っはねねたにづべぶちぬ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〳〰
〳〱
〳〲
〳〳
〳〴

現存の属性キーを解放する．この関数はにづべぶちぬの値をきぐぉたかぅすざぁがたぉぎざぁがぉいにセットする．使用中の属性キーを解放することは誤りではないことに注意．実際の解放は，（そのプロセスでの他のコミュニケータによる）そのキーへの全ての参照が解放されるまで行
われないからである．これらの参照は，きぐぉたぃくききたいぅがぅごぅたぁごごげを呼び出して〱つの属性のインスタンスを解放するか，あるいはきぐぉたぃくききたうげぅぅを呼び出して解放済みのコミュニケータに関係する全ての属性を解放することにより，プログラムで明示的に解放する必要がある．
この呼び出しはきぐぉ〭〱の呼び出しきぐぉたかぅすざぁがたうげぅぅと同じだが，新しいコミュニケ
ータ固有の作成関数と対応させる必要がある．きぐぉたかぅすざぁがたうげぅぅは廃止された．

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〴〰
〱
〲

きぐぉたぃくききたこぅごたぁごごげ〨っはねね〬 っはねねたにづべぶちぬ〬 ちぴぴひどぢふぴづたぶちぬ〩
ぉぎくさご

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

ぉぎ
ぉぎ

っはねね
っはねねたにづべぶちぬ
ちぴぴひどぢふぴづたぶちぬ

属性を結びつけるコミュニケータ（ハンドル）
キー値（整数型）
属性値

どのぴ きぐぉたぃはねねたびづぴたちぴぴひ〨きぐぉたぃはねね っはねね〬 どのぴ っはねねたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〩
きぐぉたぃくききたこぅごたぁごごげ〨ぃくきき〬 ぃくききたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが
{ぶはどつ きぐぉ〺〺ぃはねね〺〺こづぴたちぴぴひ〨どのぴ っはねねたにづべぶちぬ〬 っはのびぴ ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}
この関数は，指定された属性値ちぴぴひどぢふぴづたぶちぬを格納する．この属性値は後にきぐぉたぃくききたぇぅごたぁごごげにより取り出される． 値が既に存在していた場合，その結果はきぐぉたぃくききたいぅがぅごぅたぁごごげが呼び出されて以前の値が削除された（そしてコールバ
ック関数っはねねたつづぬづぴづたちぴぴひたてのが実行された）後に新しい値が格納されたのと同様となる． にづべぶちぬの値に対応するキーがない場合，呼び出しは誤りである． 特に
きぐぉたかぅすざぁがたぉぎざぁがぉいは誤ったキー値である．っはねねたつづぬづぴづたちぴぴひたての関数がきぐぉたこさぃぃぅここと異なるエラーコードを返した時は，本関数は失敗する．
この関数は廃止されたきぐぉたぁごごげたぐさごに代わるものである．ぃ言語の呼び出し形式は同じである．うはひぴひちの言語の呼び出し形式は，ちぴぴひどぢふぴづたぶちぬがアドレスサイズの整数型である点が異なる．

〲〴〲〵〲〶きぐぉたぃくききたぇぅごたぁごごげ〨っはねね〬 っはねねたにづべぶちぬ〬 ちぴぴひどぢふぴづたぶちぬ〬 」ちで〩
ぉぎ

っはねね

属性が結びつけられているコミュニケータ（ハンド
ル）

〲〹

ぉぎ
くさご

っはねねたにづべぶちぬ
ちぴぴひどぢふぴづたぶちぬ」ちで

キー値（整数型）

〳〰

〲〷
〲〸

〳〱

くさご

属性値（」ちで 〽 てちぬびづでない場合）
キーと関連する属性がない場合，てちぬびづ（論理型）

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

どのぴ きぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃはねね っはねね〬 どのぴ っはねねたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬
どのぴ 〪てぬちで〩きぐぉたぃくききたぇぅごたぁごごげ〨ぃくきき〬 ぃくききたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが
がくぇぉぃぁが うがぁぇ
{ぢははぬ きぐぉ〺〺ぃはねね〺〺ぇづぴたちぴぴひ〨どのぴ っはねねたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〰
〴〱
〴〲
〴〳
〴〴

キー値をもとに属性を検索する．にづべぶちぬの値に対応するキーがない場合，呼び出しは誤りである．一方，キー値は存在するが，っはねねに属性が存在しない場合にはその呼び出しは正しい．そのような場合には，呼び出しによっててぬちで 〽 てちぬびづが返される．特にきぐぉたかぅすざぁがたぉぎざぁがぉいは誤ったキー値である．

〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス きぐぉたぃはねねたびづぴたちぴぴひの呼び出しでは，ちぴぴひどぢふぴづたぶちぬに属性の値が渡される．きぐぉたぃはねねたでづぴたちぴぴひでは，ちぴぴひどぢふぴづたぶちぬに，属性値の返されるべ〶〮〷〮 キャッシング

〲〴〱き ア ド レ ス が 渡 さ れ る． し た が っ て， 属 性 値 そ れ 自 体 がぶはどつ〪型 の ポ イ ン タ である場合，きぐぉたぃはねねたびづぴたちぴぴひの実際のちぴぴひどぢふぴづたぶちぬパ ラメー タはぶはどつ〪型で あり，
きぐぉたぃはねねたでづぴたちぴぴひの実際のちぴぴひどぢふぴづたぶちぬパラメータはぶはどつ〪〪型である． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶

根拠 正式なパラメータちぴぴひどぢふぴづたぶちぬまたはぶはどつ〪型（ぶはどつ〪〪ではなく）を使用することにより，属性値がぶはどつ〪以外の型で宣言される場合に必要な煩雑なキャストを行わずに済む． （根拠の終わり）

〷
〸
〹
〱〰

この関数は廃止されたきぐぉたぁごごげたぇぅごに代わるものである．ぃ言語の呼び出し形式は同じである．うはひぴひちの言語の呼び出し形式は，ちぴぴひどぢふぴづたぶちぬがアドレスサイズの整数型である点が異なる．

〱〱
〱〲
〱〳
〱〴
〱〵

きぐぉたぃくききたいぅがぅごぅたぁごごげ〨っはねね〬 っはねねたにづべぶちぬ〩
ぉぎくさご
ぉぎ

っはねね

属性の削除の対象となるコミュニケータ（ハンドル）

っはねねたにづべぶちぬ

キー値（整数型）

〱〶
〱〷
〱〸
〱〹
〲〰

どのぴ きぐぉたぃはねねたつづぬづぴづたちぴぴひ〨きぐぉたぃはねね っはねね〬 どのぴ っはねねたにづべぶちぬ〩きぐぉたぃくききたいぅがぅごぅたぁごごげ〨ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺いづぬづぴづたちぴぴひ〨どのぴ っはねねたにづべぶちぬ〩 （廃止された呼び出し形式, 第15.2節を参照）}〲〱

キーに基づいてキャッシュから属性を削除する．この関数は，にづべぶちぬの作成時に指定された属性削除関数っはねねたつづぬづぴづたちぴぴひたてのを呼び出す．っはねねたつづぬづぴづたちぴぴひたての関数がきぐぉたこさぃぃぅここ以外のエラーコードを返した場合は，本関数は失敗する．
コミュニケータが関数きぐぉたぃくききたいさぐを用いて複製される時は必ず，現在設定されている属性の全てのコールバックコピー関数が（任意の順で）呼び出される．コミュニ
ケータが関数きぐぉたぃくききたうげぅぅを用いて削除された時には必ず，現在設定されている属
性の全てのコールバック削除関数が呼び出される．
この関数はきぐぉたぁごごげたいぅがぅごぅと同じだが，新しいコミュニケータ固有の関数と対応させる必要がある．きぐぉたぁごごげたいぅがぅごぅは廃止された．

〲〶

〲〲
〲〳
〲〴
〲〵

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

6.7.3 ウィンドウ〳〸〳〹

ウィンドウのキャッシング用の新しい関数を以下に示す．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〲〴〲
〱

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシングきぐぉたしぉぎたぃげぅぁごぅたかぅすざぁが〨ぷどのたっはばべたちぴぴひたての〬 ぷどのたつづぬづぴづたちぴぴひたての〬 ぷどのたにづべぶちぬ〬 づへぴひちたびぴちぴづ〩

〲
〳
〴

ぉぎ
ぉぎ

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

くさご
ぉぎ

ぷどのたっはばべたちぴぴひたてのぷどのたつづぬづぴづたちぴぴひたてのぷどのたにづべぶちぬ
づへぴひちたびぴちぴづ

ぷどのたにづべぶちぬのためのコピーコールバック関数（関数）
ぷどのたにづべぶちぬのための削除コールバック関数（関数）今後のアクセスのためのキー値（整数型）
コールバック関数のためのその他の状態

どのぴ きぐぉたしどのたっひづちぴづたにづべぶちぬ〨きぐぉたしどのたっはばべたちぴぴひたてふのっぴどはの 〪ぷどのたっはばべたちぴぴひたての〬きぐぉたしどのたつづぬづぴづたちぴぴひたてふのっぴどはの 〪ぷどのたつづぬづぴづたちぴぴひたての〬 どのぴ 〪ぷどのたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〩
きぐぉたしぉぎたぃげぅぁごぅたかぅすざぁが〨しぉぎたぃくぐすたぁごごげたうぎ〬 しぉぎたいぅがぅごぅたぁごごげたうぎ〬 しぉぎたかぅすざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぅじごぅげぎぁが しぉぎたぃくぐすたぁごごげたうぎ〬 しぉぎたいぅがぅごぅたぁごごげたうぎぉぎごぅぇぅげ しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ{びぴちぴどっ どのぴ きぐぉ〺〺しどの〺〺ぃひづちぴづたにづべぶちぬ〨きぐぉ〺〺しどの〺〺ぃはばべたちぴぴひたてふのっぴどはの〪
ぷどのたっはばべたちぴぴひたての〬きぐぉ〺〺しどの〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〪 ぷどのたつづぬづぴづたちぴぴひたての〬
ぶはどつ〪 づへぴひちたびぴちぴづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
ぃ言 語， ぃ〫〫言 語， うはひぴひちの言 語 に お い て， 引 数ぷどのたっはばべたちぴぴひたてのをきぐぉたしぉぎたぎさががたぃくぐすたうぎまたはきぐぉたしぉぎたいさぐたうぎとして指定することができる．
きぐぉたしぉぎたぎさががたぃくぐすたうぎは 」ちで 〽 〰をセットし， きぐぉたこさぃぃぅここを返すだけの関数である．単純なコピー関数としてきぐぉたしぉぎたいさぐたうぎが用意されている．この関数は」ちで 〽
〱をセットし，ちぴぴひどぢふぴづたぶちぬたはふぴにちぴぴひどぢふぴづたぶちぬたどのの値を返し，きぐぉたこさぃぃぅここを返却値とする．
ぃ言 語， ぃ〫〫言 語， うはひぴひちの言 語 に お い て， 引 数ぷどのたつづぬづぴづたちぴぴひたてのをきぐぉたしぉぎたぎさががたいぅがぅごぅたうぎとして指定することができる．きぐぉたしぉぎたぎさががたいぅがぅごぅたうぎはきぐぉたこさぃぃぅここを返すだけの関数である．
ぃ言語のコールバック関数はぴべばづつづて どのぴ きぐぉたしどのたっはばべたちぴぴひたてふのっぴどはの〨きぐぉたしどの はぬつぷどの〬 どのぴ ぷどのたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬
どのぴ 〪てぬちで〩〻および以下である．
ぴべばづつづて どのぴ きぐぉたしどのたつづぬづぴづたちぴぴひたてふのっぴどはの〨きぐぉたしどの ぷどの〬 どのぴ ぷどのたにづべぶちぬ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻
うはひぴひちの言語のコールバック関数は
こさあげくさごぉぎぅ しぉぎたぃくぐすたぁごごげたうぎ〨くがいしぉぎ〬 しぉぎたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬ぁごごげぉあさごぅたざぁがたぉぎ〬 ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいしぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ
および以下である．
こさあげくさごぉぎぅ しぉぎたいぅがぅごぅたぁごごげたうぎ〨しぉぎ〬 しぉぎたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〶〮〷〮 キャッシング

〲〴〳ぃ〫〫言語のコールバックは{ぴべばづつづて どのぴ きぐぉ〺〺しどの〺〺ぃはばべたちぴぴひたてふのっぴどはの〨っはのびぴ きぐぉ〺〺しどの〦 はぬつぷどの〬
どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたどの〬
ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたはふぴ〬 ぢははぬ〦 てぬちで〩〻 （廃止された呼び出し形式．
第15.2節を参照）}
および以下である．
{ぴべばづつづて どのぴ きぐぉ〺〺しどの〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〨きぐぉ〺〺しどの〦 ぷどの〬 どのぴ ぷどのたにづべぶちぬ〬
ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻 （廃止された呼び出し形式．
第15.2節を参照）}
属性コピー関数または属性削除関数がきぐぉたこさぃぃぅここ以外の値を返す場合，これを呼び出した関数呼び出し（きぐぉたしぉぎたうげぅぅなど）は誤りである．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

きぐぉたしぉぎたうげぅぅたかぅすざぁが〨ぷどのたにづべぶちぬ〩ぉぎくさご

ぷどのたにづべぶちぬ〱〴

キー値（整数型〩〱〵〱〶

どのぴ きぐぉたしどのたてひづづたにづべぶちぬ〨どのぴ 〪ぷどのたにづべぶちぬ〩きぐぉたしぉぎたうげぅぅたかぅすざぁが〨しぉぎたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎたかぅすざぁが〬 ぉぅげげくげ
{びぴちぴどっ ぶはどつ きぐぉ〺〺しどの〺〺うひづづたにづべぶちぬ〨どのぴ〦 ぷどのたにづべぶちぬ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたしぉぎたこぅごたぁごごげ〨ぷどの〬 ぷどのたにづべぶちぬ〬 ちぴぴひどぢふぴづたぶちぬ〩
ぉぎくさご
ぉぎ
ぉぎ

ぷどの
ぷどのたにづべぶちぬ
ちぴぴひどぢふぴづたぶちぬ〲〳

属性を結びつけるウィンドウ（ハンドル）〲〴

キー値（整数型）

〲〵

属性値

〲〶
〲〷

どのぴ きぐぉたしどのたびづぴたちぴぴひ〨きぐぉたしどの ぷどの〬 どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〩
きぐぉたしぉぎたこぅごたぁごごげ〨しぉぎ〬 しぉぎたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが
{ぶはどつ きぐぉ〺〺しどの〺〺こづぴたちぴぴひ〨どのぴ ぷどのたにづべぶちぬ〬 っはのびぴ ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

きぐぉたしぉぎたぇぅごたぁごごげ〨ぷどの〬 ぷどのたにづべぶちぬ〬 ちぴぴひどぢふぴづたぶちぬ〬 」ちで〩
ぉぎ
ぉぎ
くさご
くさご

ぷどの
ぷどのたにづべぶちぬ
ちぴぴひどぢふぴづたぶちぬ
」ちで

〳〵
〳〶

属性が結びつけられているウィンドウ（ハンドル）〳〷

キー値（整数型）〳〸

属性値（」ちで 〽 てちぬびづでない場合）〳〹

キーと関連する属性がない場合，てちぬびづ（論理型）〴〰
〴〱

どのぴ きぐぉたしどのたでづぴたちぴぴひ〨きぐぉたしどの ぷどの〬 どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬
どのぴ 〪てぬちで〩きぐぉたしぉぎたぇぅごたぁごごげ〨しぉぎ〬 しぉぎたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが
がくぇぉぃぁが うがぁぇ
{ぢははぬ きぐぉ〺〺しどの〺〺ぇづぴたちぴぴひ〨どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〴〴
〱
〲

きぐぉたしぉぎたいぅがぅごぅたぁごごげ〨ぷどの〬 ぷどのたにづべぶちぬ〩
ぉぎくさご

〳
〴
〵
〶
〷
〸
〹

ぉぎ

ぷどの
ぷどのたにづべぶちぬ

属性の削除の対象となるウィンドウ（ハンドル）
キー値（整数型）

どのぴ きぐぉたしどのたつづぬづぴづたちぴぴひ〨きぐぉたしどの ぷどの〬 どのぴ ぷどのたにづべぶちぬ〩きぐぉたしぉぎたいぅがぅごぅたぁごごげ〨しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺いづぬづぴづたちぴぴひ〨どのぴ ぷどのたにづべぶちぬ〩 （廃止された呼び出し形式, 第15.2節を参照）
}

〱〰
〱〱
〱〲
〱〳

6.7.4 データ型
データ型のキャッシングのための新しい関数を以下に示す．

〱〴
〱〵
〱〶

きぐぉたごすぐぅたぃげぅぁごぅたかぅすざぁが〨ぴべばづたっはばべたちぴぴひたての〬 ぴべばづたつづぬづぴづたちぴぴひたての〬 ぴべばづたにづべぶちぬ〬 づへぴひちたびぴちぴづ〩〱〷ぉぎ

ぴべばづたっはばべたちぴぴひたての

ぴべばづたにづべぶちぬのためのコピーコールバック関数 （関
数）

〲〰

ぉぎ
くさご

〲〲

ぉぎ

ぴべばづたつづぬづぴづたちぴぴひたての
ぴべばづたにづべぶちぬ
づへぴひちたびぴちぴづ

ぴべばづたにづべぶちぬのための削除コールバック関数（関数）

〲〱

〱〸
〱〹

今後のアクセスのためのキー値（整数型）
コールバック関数のためのその他の状態

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたごべばづたっひづちぴづたにづべぶちぬ〨きぐぉたごべばづたっはばべたちぴぴひたてふのっぴどはの 〪ぴべばづたっはばべたちぴぴひたての〬きぐぉたごべばづたつづぬづぴづたちぴぴひたてふのっぴどはの 〪ぴべばづたつづぬづぴづたちぴぴひたての〬 どのぴ 〪ぴべばづたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〩
きぐぉたごすぐぅたぃげぅぁごぅたかぅすざぁが〨ごすぐぅたぃくぐすたぁごごげたうぎ〬 ごすぐぅたいぅがぅごぅたぁごごげたうぎ〬 ごすぐぅたかぅすざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぅじごぅげぎぁが ごすぐぅたぃくぐすたぁごごげたうぎ〬 ごすぐぅたいぅがぅごぅたぁごごげたうぎぉぎごぅぇぅげ ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ{びぴちぴどっ どのぴ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたにづべぶちぬ〨きぐぉ〺〺いちぴちぴべばづ〺〺ぃはばべたちぴぴひたてふのっぴどはの〪
ぴべばづたっはばべたちぴぴひたての〬 きぐぉ〺〺いちぴちぴべばづ〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〪
ぴべばづたつづぬづぴづたちぴぴひたての〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩 （廃止された呼び出し形式,
第15.2節を参照）}
ぃ言 語， ぃ〫〫言 語， うはひぴひちの言 語 に お い て， 引 数ぴべばづたっはばべたちぴぴひたてのをきぐぉたごすぐぅたぎさががたぃくぐすたうぎまたはきぐぉたごすぐぅたいさぐたうぎとして指定することができる．
きぐぉたごすぐぅたぎさががたぃくぐすたうぎは」ちで 〽 〰をセットし，きぐぉたこさぃぃぅここを返すだけの関数である．単純なコピー関数としてきぐぉたごすぐぅたいさぐたうぎが用意されている．この関数は」ちで 〽
〱をセットし，ちぴぴひどぢふぴづたぶちぬたはふぴにちぴぴひどぢふぴづたぶちぬたどのの値を返し，きぐぉたこさぃぃぅここを返却値とする．
ぃ言 語，ぃ〫〫言 語，うはひぴひちの言 語 に お い て，引 数ぴべばづたつづぬづぴづたちぴぴひたてのをきぐぉたごすぐぅたぎさががたいぅがぅごぅたうぎと し て 指 定 す る こ と が で き る．
きぐぉたごすぐぅたぎさががたいぅがぅごぅたうぎはきぐぉたこさぃぃぅここを返すだけの関数である．
ぃ言語のコールバック関数はぴべばづつづて どのぴ きぐぉたごべばづたっはばべたちぴぴひたてふのっぴどはの〨きぐぉたいちぴちぴべばづ はぬつぴべばづ〬
どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩〻〶〮〷〮 キャッシング

〲〴〵および以下である．
ぴべばづつづて どのぴ きぐぉたごべばづたつづぬづぴづたちぴぴひたてふのっぴどはの〨きぐぉたいちぴちぴべばづ ぴべばづ〬
どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻〱

うはひぴひちの言語のコールバック関数は
こさあげくさごぉぎぅ ごすぐぅたぃくぐすたぁごごげたうぎ〨くがいごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬ぁごごげぉあさごぅたざぁがたぉぎ〬 ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬ぁごごげぉあさごぅたざぁがたぉぎ〬 ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ

〴

〲
〳

〵
〶
〷
〸
〹
〱〰

および以下である．
こさあげくさごぉぎぅ ごすぐぅたいぅがぅごぅたぁごごげたうぎ〨ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ
ぃ〫〫言語のコールバックは{ぴべばづつづて どのぴ
きぐぉ〺〺いちぴちぴべばづ〺〺ぃはばべたちぴぴひたてふのっぴどはの〨っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 はぬつぴべばづ〬
どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〬
っはのびぴ ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたはふぴ〬
ぢははぬ〦 てぬちで〩〻 （廃止された呼び出し形式．第15.2節を参照）}
および以下である．
{ぴべばづつづて どのぴ きぐぉ〺〺いちぴちぴべばづ〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〨きぐぉ〺〺いちぴちぴべばづ〦 ぴべばづ〬
どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻 （廃止された呼び出し形式．第15.2節を参照）}
属性コピー関数または属性削除関数がきぐぉたこさぃぃぅここ以外の値を返す場合，これを呼び出した関数呼び出し（きぐぉたごすぐぅたうげぅぅなど）は誤りである．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

きぐぉたごすぐぅたうげぅぅたかぅすざぁが〨ぴべばづたにづべぶちぬ〩ぉぎくさご

ぴべばづたにづべぶちぬ〲〹

キー値（整数型）〳〰
〳〱

どのぴ きぐぉたごべばづたてひづづたにづべぶちぬ〨どのぴ 〪ぴべばづたにづべぶちぬ〩きぐぉたごすぐぅたうげぅぅたかぅすざぁが〨ごすぐぅたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
{びぴちぴどっ ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺うひづづたにづべぶちぬ〨どのぴ〦 ぴべばづたにづべぶちぬ〩 （廃止された呼び出し形
式, 第15.2節を参照）}

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

きぐぉたごすぐぅたこぅごたぁごごげ〨ぴべばづ〬 ぴべばづたにづべぶちぬ〬 ちぴぴひどぢふぴづたぶちぬ〩
ぉぎくさご
ぉぎ
ぉぎ

ぴべばづ
ぴべばづたにづべぶちぬ
ちぴぴひどぢふぴづたぶちぬ

属性を結びつけるデータ型（ハンドル）
キー値（整数型）
属性値

どのぴ きぐぉたごべばづたびづぴたちぴぴひ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 どのぴ ぴべばづたにづべぶちぬ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〩
きぐぉたごすぐぅたこぅごたぁごごげ〨ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〴〶
〱
〲

{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺こづぴたちぴぴひ〨どのぴ ぴべばづたにづべぶちぬ〬 っはのびぴ ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩（廃止された呼び出し形式, 第15.2節を参照）}〳〴〵

きぐぉたごすぐぅたぇぅごたぁごごげ〨ぴべばづ〬 ぴべばづたにづべぶちぬ〬 ちぴぴひどぢふぴづたぶちぬ〬 」ちで〩

〶

ぉぎ

〷

ぉぎ

〸

くさご

〹

くさご

ぴべばづ
ぴべばづたにづべぶちぬ
ちぴぴひどぢふぴづたぶちぬ」ちで属性が結びつけられているデータ型（ハンドル）
キー値（整数型）
属性値（」ちで 〽 てちぬびづでない場合）
キーと関連する属性がない場合，てちぬびづ（論理型）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

どのぴ きぐぉたごべばづたでづぴたちぴぴひ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ
〪ちぴぴひどぢふぴづたぶちぬ〬 どのぴ 〪てぬちで〩きぐぉたごすぐぅたぇぅごたぁごごげ〨ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが
がくぇぉぃぁが うがぁぇ
{ぢははぬ きぐぉ〺〺いちぴちぴべばづ〺〺ぇづぴたちぴぴひ〨どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}

〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたごすぐぅたいぅがぅごぅたぁごごげ〨ぴべばづ〬 ぴべばづたにづべぶちぬ〩
ぉぎくさご
ぉぎ

ぴべばづ
ぴべばづたにづべぶちぬ

属性の削除の対象となるデータ型（ハンドル）
キー値（整数型）

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

どのぴ きぐぉたごべばづたつづぬづぴづたちぴぴひ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 どのぴ ぴべばづたにづべぶちぬ〩きぐぉたごすぐぅたいぅがぅごぅたぁごごげ〨ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺いづぬづぴづたちぴぴひ〨どのぴ ぴべばづたにづべぶちぬ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

6.7.5 無効なKeyvalに対するエラークラス
属性のキー値はきぐぉた{ごすぐぅ〬ぃくきき〬しぉぎ}たぃげぅぁごぅたかぅすざぁがによりシステムで割り当 て ら れ る． こ の よ う な 値 の み を， キ ー 値 を 入 力 引 数 と し て 使 用 す る 関 数 に 渡 す
こ と が で き る． こ れ ら の 関 数 の い ず れ か に 誤 っ た キ ー 値 が 渡 さ れ た こ と を 警 告 するため，きぐぉの新しいエラークラスきぐぉたぅげげたかぅすざぁがが用意されている． これを返すのは， きぐぉたぁごごげたぐさご，きぐぉたぁごごげたぇぅご，きぐぉたぁごごげたいぅがぅごぅ，きぐぉたかぅすざぁがたうげぅぅ，
きぐぉた{ごすぐぅ〬ぃくきき〬しぉぎ}たいぅがぅごぅたぁごごげ，きぐぉた{ごすぐぅ〬ぃくきき〬しぉぎ}たこぅごたぁごごげ，
きぐぉた{ごすぐぅ〬ぃくきき〬しぉぎ}たぇぅごたぁごごげ，きぐぉた{ごすぐぅ〬ぃくきき〬しぉぎ}たうげぅぅたかぅすざぁが，きぐぉたぃくききたいさぐ，きぐぉたぃくききたいぉこぃくぎぎぅぃご，きぐぉたぃくききたうげぅぅである． 最後の〳つがここに加わっているのは，にづべぶちぬが属性のコピー関数と削除関数の引数であるためであ
る．

〴〴
〴〵

6.7.6 属性の例

〴〶
〴〷
〴〸

ユーザへのアドバイス この例では〲度目以降の集団操作が効果的にキャッシング
を利用するにはどのように書けばよいかを示している．コーディングスタイルは，〶〮〷〮 キャッシング

〲〴〷きぐぉ関数の結果がエラーステータスのみを返すことを想定している． （ユーザへのアドバイス終わり）〱〲〳〪〯 にづべ てはひ ぴとどび ねはつふぬづ〧び びぴふてて〺 〪〯びぴちぴどっ どのぴ ではばたにづべ 〽 きぐぉたかぅすざぁがたぉぎざぁがぉい〻
ぴべばづつづて びぴひふっぴ
ほどのぴ ひづてたっはふのぴ〻〪〯 ひづてづひづのっづ っはふのぴ 〪〪〯〯 はぴとづひ びぴふてて〬 ぷとちぴづぶづひ づぬびづ ぷづ ぷちのぴ 〪〯ぽ ではばたびぴふててたぴべばづ〻ぅててどっどづのぴたぃはぬぬづっぴどぶづたくば 〨っはねね〬 〮〮〮〩
きぐぉたぃはねね っはねね〻ほではばたびぴふててたぴべばづ 〪ではばたびぴふてて〻きぐぉたぇひはふば
でひはふば〻
どのぴてはふのつてぬちで〻

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

きぐぉたぃはねねたでひはふば〨っはねね〬 〦でひはふば〩〻どて 〨ではばたにづべ 〽〽 きぐぉたかぅすざぁがたぉぎざぁがぉい〩 〪〯 でづぴ ち にづべ はの てどひびぴ っちぬぬ づぶづひ 〪〯ほどて 〨 〡 きぐぉたぃはねねたっひづちぴづたにづべぶちぬ〨 ではばたびぴふててたっはばどづひ〬
ではばたびぴふててたつづびぴひふっぴはひ〬〦ではばたにづべ〬 〨ぶはどつ 〪〩〰〩〩〻〪〯 でづぴ ぴとづ にづべ ぷとどぬづ ちびびどでのどので どぴび っはばべ ちのつ つづぬづぴづ っちぬぬぢちっに
ぢづとちぶどはひ〮 〪〯

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

きぐぉたぁぢはひぴ 〨っはねね〬 〹〹〩〻
ぽ

〲〵
〲〶

きぐぉたぃはねねたでづぴたちぴぴひ 〨っはねね〬 ではばたにづべ〬 〦ではばたびぴふてて〬 〦てはふのつてぬちで〩〻どて 〨てはふのつてぬちで〩
ほ 〪〯 ごとどび ねはつふぬづ とちび づへづっふぴづつ どの ぴとどび でひはふば ぢづてはひづ〮
しづ ぷどぬぬ ふびづ ぴとづ っちっとづつ どのてはひねちぴどはの 〪〯ぽづぬびづ
ほ 〪〯 ごとどび どび ち でひはふば ぴとちぴ ぷづ とちぶづ のはぴ べづぴ っちっとづつ ちのべぴとどので どの〮
しづ ぷどぬぬ のはぷ つは びは〪〪〮〯〯 うどひびぴ〬 ちぬぬはっちぴづ びぴはひちでづ てはひ ぴとづ びぴふてて ぷづ ぷちのぴ〬
ちのつ どのどぴどちぬどぺづ ぴとづ ひづてづひづのっづ っはふのぴ 〪〯

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

ではばたびぴふてて 〽 〨ではばたびぴふててたぴべばづ 〪〩 ねちぬぬはっ 〨びどぺづはて〨ではばたびぴふててたぴべばづ〩〩〻
どて 〨ではばたびぴふてて 〽〽 ぎさがが〩 ほ 〪〯 ちぢはひぴ はの はふぴ〭はて〭ねづねはひべ づひひはひ 〪〯 ぽ〳〸

ではばたびぴふてて 〭〾 ひづてたっはふのぴ 〽 〱〻

〴〰

〳〹

〴〱

〪〯 こづっはのつ〬 てどぬぬ どの 〪ではばたびぴふてて ぷどぴと ぷとちぴづぶづひ ぷづ ぷちのぴ〮
ごとどび ばちひぴ どびの〧ぴ びとはぷの とづひづ 〪〪〯〯 ごとどひつ〬 びぴはひづ ではばたびぴふてて ちび ぴとづ ちぴぴひどぢふぴづ ぶちぬふづ 〪〯きぐぉたぃはねねたびづぴたちぴぴひ 〨 っはねね〬 ではばたにづべ〬 ではばたびぴふてて〩〻ぽ〪〯 ごとづの〬 どの ちのべ っちびづ〬 ふびづ っはのぴづのぴび はて 〪ではばたびぴふててぴは つは ぴとづ でぬはぢちぬ はば 〮〮〮 〪〯
ぽ

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〴〸
〱
〲

〪〯 ごとづ てはぬぬはぷどので ひはふぴどのづ どび っちぬぬづつ ぢべ きぐぉ ぷとづの ち でひはふば どび てひづづつ 〪〯

〳
〴
〵
〶
〷
〸

ではばたびぴふててたつづびぴひふっぴはひ 〨っはねね〬 にづべぶちぬ〬 ではばたびぴふてて〬 づへぴひち〩
きぐぉたぃはねね っはねね〻
どのぴ にづべぶちぬ〻
ではばたびぴふててたぴべばづ 〪ではばたびぴふてて〻
ぶはどつ 〪づへぴひち〻
ほどて 〨にづべぶちぬ 〡〽 ではばたにづべ〩 ほ 〪〯 ちぢはひぴ 〭〭 ばひはでひちねねどので づひひはひ 〪〯 ぽ〹〪〯 ごとづ でひはふば〧び ぢづどので てひづづつ ひづねはぶづび はのづ ひづてづひづのっづ ぴは ではばたびぴふてて 〪〯ではばたびぴふてて 〭〾 ひづてたっはふのぴ 〭〽 〱〻

〱〰
〱〱
〱〲

〪〯 ぉて のは ひづてづひづのっづび ひづねちどの〬 ぴとづの てひづづ ぴとづ びぴはひちでづ 〪〯どて 〨ではばたびぴふてて 〭〾 ひづてたっはふのぴ 〽〽 〰〩 ほてひづづ〨〨ぶはどつ 〪〩ではばたびぴふてて〩〻
ぽ

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

ぽ
〪〯 ごとづ てはぬぬはぷどので ひはふぴどのづ どび っちぬぬづつ ぢべ きぐぉ ぷとづの ち でひはふば どび っはばどづつ 〪〯ではばたびぴふててたっはばどづひ 〨っはねね〬 にづべぶちぬ〬 づへぴひち〬 ではばたびぴふててたどの〬 ではばたびぴふててたはふぴ〬 てぬちで〩きぐぉたぃはねね っはねね〻
どのぴ にづべぶちぬ〻
ではばたびぴふててたぴべばづ 〪ではばたびぴふててたどの〬 〪ではばたびぴふててたはふぴ〻
ぶはどつ 〪づへぴひち〻
ほどて 〨にづべぶちぬ 〡〽 ではばたにづべ〩 ほ 〪〯 ちぢはひぴ 〭〭 ばひはでひちねねどので づひひはひ 〪〯 ぽ〲〴〪〯 ごとづ のづぷ でひはふば ちつつび はのづ ひづてづひづのっづ ぴは ぴとどび ではばたびぴふてて 〪〯ではばたびぴふてて 〭〾 ひづてたっはふのぴ 〫〽 〱〻ではばたびぴふててたはふぴ 〽 ではばたびぴふててたどの〻

〲〵
〲〶
〲〷

ぽ

〲〸
〲〹
〳〰
〳〱

6.8 命名オブジェクト

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

エラーレポート，デバッグ，プロファイリングなどの際に，きぐぉのコミュニケータ，
ウィンドウ，またはデータ型と，印字可能な識別子とを関係づけることができれば便利な場合がよくある．不可視なオブジェクトに結びつけられた名前は，オブジェクトがきぐぉルーチンによって複製またはコピーされたときに伝播されない．コミュニケータ
については，以下の〲つの関数を使用してこれに対応することができる．

〳〹
〴〰
〴〱
〴〲

きぐぉたぃくききたこぅごたぎぁきぅ 〨っはねね〬 っはねねたのちねづ〩
ぉぎくさご

っはねね

識別子をセットする対象となるコミュニケータ（ハ
ンドル）

ぉぎ

っはねねたのちねづ

名前として記憶される文字列（文字列）

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぃはねねたびづぴたのちねづ〨きぐぉたぃはねね っはねね〬 っとちひ 〪っはねねたのちねづ〩
きぐぉたぃくききたこぅごたぎぁきぅ〨ぃくきき〬 ぃくききたぎぁきぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ぃくききたぎぁきぅ

〶〮〸〮 命名オブジェクト〲〴〹{ぶはどつ きぐぉ〺〺ぃはねね〺〺こづぴたのちねづ〨っはのびぴ っとちひ〪 っはねねたのちねづ〩 （廃止された呼び出し形式, 第15.2節
を参照）}
きぐぉたぃくききたこぅごたぎぁきぅを使用すると，コミュニケータと名前の文字列を関連付けることができる．きぐぉたぃくききたこぅごたぎぁきぅに渡される文字列は きぐぉライブラリ内部に保存される（そのため，呼び出しの直後に呼び出し側が解放するか，スタックに割り当てることができる）．のちねづの先頭のスペースは意味を持つが，末尾のスペースは意味を持たない．
きぐぉたぃくききたこぅごたぎぁきぅは ロ ー カ ル な 操 作（か つ 非 集 団 操 作）で，きぐぉたぃくききたこぅごたぎぁきぅの呼び出しを行ったプロセス内で認識されるコミュニケータの名前のみに影響する．必ずしも，全てのプロセス内のコミュニケータに同じ（あるいは何らかの）名前を割り当てる必要はない．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

ユーザへのアドバイス きぐぉたぃくききたこぅごたぎぁきぅはコードのデバッグ支援のために用意されているので，混乱を避けるため，全プロセスで同一コミュニケータに同じ名前を割り当てることは意味がある． （ユーザへのアドバイス終わり）
格納可能な名前の長さは，うはひぴひちの言語ではきぐぉたきぁじたくあおぅぃごたぎぁきぅの値までに制限され，ぃ言語およびぃ〫〫言語ではのふぬぬターミネータを考慮してきぐぉたきぁじたくあおぅぃごたぎぁきぅ〭〱までに制限されている．これより長い名前をつけるようとすると，名前の切り捨てが発生する． きぐぉたきぁじたくあおぅぃごたぎぁきぅの値は少なくとも〶〴でなければならない．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

ユーザへのアドバイス メモリ不足の場合， どんな長さの名前をつけようとしても失敗する可能性が残るため， きぐぉたきぁじたくあおぅぃごたぎぁきぅの値について，この長さより短い名前が必ず設定できるという保証ではなく，ただ名前の長さの厳格な上限としてのみ考える必要がある． （ユーザへのアドバイス終わり）

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

実装者へのアドバイス 名前用に固定サイズの領域をあらかじめ割り当てる実装では，その割り当てたサイズをきぐぉたきぁじたくあおぅぃごたぎぁきぅの値として使用する必要があ
る．ヒープ領域から名前の領域を割り当てる実装では，きぐぉたぃくききたぇぅごたぎぁきぅの呼び出し時に最大でこのサイズの文字列用の領域をユーザが割り当てる必要があるため， きぐぉたきぁじたくあおぅぃごたぎぁきぅとして比較的小さい値を定義する必要がある．
（実装者へのアドバイス終わり）

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

きぐぉたぃくききたぇぅごたぎぁきぅ 〨っはねね〬 っはねねたのちねづ〬 ひづびふぬぴぬづの〩
ぉぎ
くさご

くさご

っはねね
っはねねたのちねづ

ひづびふぬぴぬづの

名前を返す対象となるコミュニケータ（ハンドル）前にコミュニケータに格納されていた名前，ある
いはそのような名前がない場合は空の文字列（文字列）
返された名前の長さ（整数型）

どのぴ きぐぉたぃはねねたでづぴたのちねづ〨きぐぉたぃはねね っはねね〬 っとちひ 〪っはねねたのちねづ〬 どのぴ 〪ひづびふぬぴぬづの〩
きぐぉたぃくききたぇぅごたぎぁきぅ〨ぃくきき〬 ぃくききたぎぁきぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〵〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

ぉぎごぅぇぅげ ぃくきき〬 げぅこさがごがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ぃくききたぎぁきぅ{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぇづぴたのちねづ〨っとちひ〪 っはねねたのちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}
きぐぉたぃくききたぇぅごたぎぁきぅは，指定のコミュニケータと関連付けられていた最後の名前を返す．名前の設定と取得は，任意の言語について行える．使用する言語に関係なく，同じ名前が返される．のちねづはきぐぉたきぁじたくあおぅぃごたぎぁきぅ文字の長さの作成済み文字列を格納できるように割り当てる必要がある．きぐぉたぃくききたぇぅごたぎぁきぅは設定された名前のコ
ピーをのちねづに返す．
ぃ言語ではさらに，のちねづせひづびふぬぴぬづのその位置にのふぬぬ文字が格納される．ひづびふぬぴぬづのは
きぐぉたきぁじたくあおぅぃごたぎぁきぅ〭〱を超えることはない． うはひぴひちの言語では，名前の右側が空白文字で埋められる．ひづびふぬぴぬづのがきぐぉたきぁじたくあおぅぃごたぎぁきぅを超えないようにする必要があ
る．
ユーザが名前をコミュニケータと関連付けていない場合，またはエラーが発生した場合，きぐぉたぃくききたぇぅごたぎぁきぅは空の文字列を返す（うはひぴひちの言語の場合は全てが空
白，ぃ言語およびぃ〫〫言語の場合は〢〢）．定義済みの〳つのコミュニケータでは，定義
済 み の 名 前 が 関 連 付 け ら れ て い る． そ の た め， きぐぉたぃくききたしくげがい，きぐぉたぃくききたこぅがうの名前と，きぐぉたぃくききたぇぅごたぐぁげぅぎごによって返されたコミュニケー
タの名前（きぐぉたぃくききたぎさががでない場合）は，それぞれデフォルトがきぐぉたぃくききたしくげがい，きぐぉたぃくききたこぅがう，きぐぉたぃくききたぐぁげぅぎごとなる．システムがコミュニケータにデフォルト
名を使用するよう設定した場合でも，同じコミュニケータに対してユーザが名前を設定することができる．この場合，古い名前が削除され，新しい名前が割り当てられる．
根拠 単に定義済みの属性キーを提供する代わりに，コミュニケータの名前を設定
および取得するための独立した関数を用意している．理由は以下のとおりである．

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

• 一般的に，うはひぴひちの言語では文字列を属性として格納することができない．
• ヒープ領域から割り当てられていることが分かっている場合を除いて，文字列の属性のための削除関数をセットアップするのが容易ではない．
• 属性キーを有益にするにはびぴひつふば呼び出しの追加のコードが必要となる．これが標準化されていない場合，ユーザが記述する必要がある．これは非常に無駄な作業で，容易に削減することができる．
• うはひぴひちの言語の呼び出し形式は記述が単純ではなく（うはひぴひちの言語のコンパイル
システムの詳細によって異なる），可搬でもない．そのため，ユーザコードではなく，ライブラリで管理する必要がある．

〴〲〴〳（根拠の終わり）

〴〴
〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス 上記の定義は，きぐぉたぃくききたぇぅごたぎぁきぅによって返された
文字列は名前がない場合でも常に有効な文字列であるため，そのまま出力しても安全であることを意味している．

〶〮〸〮 命名オブジェクト〲〵〱

名前とコミュニケータの関連付けは，きぐぉプログラムの意味には影響を及ぼさないが，名前の保存のためにプログラムの格納要件が（必ず）増加する．そのため，名前とコミュニケータの関連付けのために必ずこれらの関数を使用しなければならな
いというわけではない．

〱

しかし，名前とコミュニケータを関連付けておけば，デバッガやプロファイラで表示される情報の内容がわかりやすくなるため，きぐぉアプリケーションのデバッグやプロファイリングがしやすくなる． （ユーザへのアドバイス終わり）

〶

〲
〳
〴
〵

〷
〸
〹
〱〰

データ型の名前の設定と取得に使用される関数を以下に示す．

〱〱〱〲

きぐぉたごすぐぅたこぅごたぎぁきぅ 〨ぴべばづ〬 ぴべばづたのちねづ〩
ぉぎくさご
ぉぎ

ぴべばづ
ぴべばづたのちねづ

識別子を設定する対象となるデータ型（ハンドル）名前として記憶される文字列（文字列）

どのぴ きぐぉたごべばづたびづぴたのちねづ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 っとちひ 〪ぴべばづたのちねづ〩
きぐぉたごすぐぅたこぅごたぎぁきぅ〨ごすぐぅ〬 ごすぐぅたぎぁきぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ごすぐぅたぎぁきぅ{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺こづぴたのちねづ〨っはのびぴ っとちひ〪 ぴべばづたのちねづ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

きぐぉたごすぐぅたぇぅごたぎぁきぅ 〨ぴべばづ〬 ぴべばづたのちねづ〬 ひづびふぬぴぬづの〩
ぉぎ
くさご
くさご

ぴべばづ
ぴべばづたのちねづ
ひづびふぬぴぬづの

名前を返す対象となるデータ型（ハンドル）〲〵〲〶

前にデータ型に格納されていた名前，あるいはそのような名前がない場合は空の文字列（文字列）〲〷

返された名前の長さ（整数型）

〲〹

〲〸

〳〰

どのぴ きぐぉたごべばづたでづぴたのちねづ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 っとちひ 〪ぴべばづたのちねづ〬 どのぴ 〪ひづびふぬぴぬづの〩
きぐぉたごすぐぅたぇぅごたぎぁきぅ〨ごすぐぅ〬 ごすぐぅたぎぁきぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ごすぐぅたぎぁきぅ{ぶはどつ きぐぉ〺〺いちぴちぴべばづ〺〺ぇづぴたのちねづ〨っとちひ〪 ぴべばづたのちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
定義済みの名前付きデータ型にはデータ型の名前のデフォルト名がある． 例えば，
きぐぉたしぃえぁげにはきぐぉたしぃえぁげというデフォルト名がある．
ウィンドウの名前の設定と取得に使用される関数を以下に示す．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

きぐぉたしぉぎたこぅごたぎぁきぅ 〨ぷどの〬 ぷどのたのちねづ〩
ぉぎくさご
ぉぎ

ぷどの
ぷどのたのちねづ〴〲

識別子を設定する対象となるウィンドウ（ハンドル）
名前として記憶される文字列（文字列）

〴〳
〴〴
〴〵
〴〶

どのぴ きぐぉたしどのたびづぴたのちねづ〨きぐぉたしどの ぷどの〬 っとちひ 〪ぷどのたのちねづ〩
きぐぉたしぉぎたこぅごたぎぁきぅ〨しぉぎ〬 しぉぎたぎぁきぅ〬 ぉぅげげくげ〩〴〷〴〸第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〵〲
〱
〲
〳
〴

ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 しぉぎたぎぁきぅ{ぶはどつ きぐぉ〺〺しどの〺〺こづぴたのちねづ〨っはのびぴ っとちひ〪 ぷどのたのちねづ〩 （廃止された呼び出し形式, 第15.2節を
参照）}

〵
〶
〷

きぐぉたしぉぎたぇぅごたぎぁきぅ 〨ぷどの〬 ぷどのたのちねづ〬 ひづびふぬぴぬづの〩
名前を返す対象となるウィンドウ（ハンドル）

くさご

ぷどの
ぷどのたのちねづ

くさご

ひづびふぬぴぬづの

返された名前の長さ（整数型）

〸

ぉぎ

〹
〱〰
〱〱

前にウィンドウに格納されていた名前，あるいはそのような名前がない場合は空の文字列（文字列）

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

どのぴ きぐぉたしどのたでづぴたのちねづ〨きぐぉたしどの ぷどの〬 っとちひ 〪ぷどのたのちねづ〬 どのぴ 〪ひづびふぬぴぬづの〩
きぐぉたしぉぎたぇぅごたぎぁきぅ〨しぉぎ〬 しぉぎたぎぁきぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 しぉぎたぎぁきぅ{ぶはどつ きぐぉ〺〺しどの〺〺ぇづぴたのちねづ〨っとちひ〪 ぷどのたのちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〸
〱〹
〲〰

6.9 ゆるい同期モデルの形式化

〲〱
〲〲
〲〳

この節では，特にグループ内通信に重点を置いて，ゆるい同期モデルについて詳しく
説明する．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

6.9.1 基本説明
呼び出し側がコミュニケータ（コンテクストとグループを含む）を呼び出される側に渡す時，サブプログラムの実行によってそのコミュニケータが副作用の影響を受けることのないようにしなくてはならない．つまり，プロセスを必要とする可能性のあるコミュニケータ上ではアクティブな操作があってはならない．このモデルに従ってライブラ
リを記述すれば，「安全」な動作が実現される．このように指定されたライブラリにより，呼び出される側は，コミュニケータを介する通信をしていればどのような通信も他の通信に邪魔されることはない．したがって，（コミュニケータ上にあらかじめ割り当てられたコンテクストによるような場合でも）同期なしで新しくコミュニケータを作成するような高度な実装が可能になり，これによって重大なオーバーヘッドが課されなくな
る．
このような形態によってもたらされる安全は，例えば，ライブラリルーチンへのディスクリプタの配列の受け渡しのような，一般の計算機科学で利用されているものと同様である．ライブラリルーチンは，正当でかつ変更可能なディスクリプタのようなものとして考えられている．

〴〴〴〵

6.9.2 実行モデル

〴〶
〴〷
〴〸

ゆるい同期モデルでは，実行中のプロセスがそれぞれの手続きを呼び出し， 並列手続
きへ制御をうつすことで効率をあげることができる．この呼び出しは集団操作である．

〶〮〹〮 ゆるい同期モデルの形式化〲〵〳

それは実行グループの全てのプロセスで実行され，呼び出しは全てのプロセスでほぼ同
じ順に実行される．しかし，呼び出しは同期させる必要がない．
並列手続きがあるプロセス中でアクティブであるとは，そのプロセスが 手続きを集団的に実行しているグループに属しており，グループのメンバのいくつかが現在手続きのコードを実行中であるということである．並列手続きがあるプロセス中でアクティブならば，たとえ現在，この手続きのコードを実行していない場合でも，このプロセスはこの手続きに関するメッセージ受けとることができる．

〱
〲
〳
〴
〵
〶
〷
〸
〹

コミュニケータの静的割り当て
任意の時点において，どのプロセスにおいてもアクティブな並列手続きが〱つまでであり，その手続きを実行しているプロセスのグループが固定されているような場合には，
コミュニケータを静的にアロケートすることができる．例えば，並列手続きの全ての呼び出しに全プロセスが関与し，プロセスがみなシングルスレッドであり，かつ再帰的な並列手続きの呼び出しがないような場合が挙げられる．
そのような場合には，コミュニケータはそれぞれの手続きへ静的に割り当てることができる．つまり静的な割り当てが，初期化のコードの部分であらかじめ可能になる． 各
ライブラリの中の一つの手続きしか各プロセッサ上で並行にアクティブにならないよう，並列の手続きをライブラリにまとめることができるなら，一つのライブラリあたり一つのコミュニケータを割り当てれば十分である．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

コミュニケータの動的割り当て〲〵

新しい並列手続きが同一の並列手続きを実行するグループの一部から常に呼び出される場合には，並列手続きの呼び出しは深くネストしたものとなる．したがって，同一の並列手続きを実行するプロセスは，同一の実行スタックを持つ．
そのような場合には，それぞれの新しい並列手続きごとに，新しいコミュニケータ
が動的に割り当てられなければならない．この割り当ては呼び出し側で行われる．新しいコミュニケータは，呼び出される側の実行グループが呼び出し側の実行グループと同じである場合はきぐぉたぃくききたいさぐを呼び出すことで作成され，呼び出し側の実行グループが個々の並列ルーチンを実行するいくつかのサブグループに分解される場合には，
きぐぉたぃくききたこぐがぉごを呼び出すことで作成される．新しいコミュニケータは，呼び出されるルーチンへ引数として渡される．
それぞれの呼び出しでは，新しいコミュニケータの作成を減らすか，ある場合には避けることもできる．例えば，もしも実行グループが分割されない場合には，コミュニケ
ータのスタックをあらかじめ割り当てておき，それを再帰呼び出しのスタックとみなし，再利用するようにスタックを管理することができる．
呼び出し側と呼び出される側で同一のコミュニケータを利用した場合でも，通信が順序付けられているという特性を利用することで，呼び出し側と呼び出される側の通信の混乱を避けることができる．そのような場合には次の〲つの規則を守る必要がある．

〲〷

〲〶

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〶〮 グループ，コンテクスト，コミュニケータ，キャッシング

〲〵〴
〱
〲

• 手続き呼び出しの前（あるいは手続きから戻る前）に送ったメッセージは，その手続きの呼び出し（あるいはリターン）の前に受信側で受信を終了すること．

〳〴〵• メッセージは常に送信元によって選択されること（きぐぉたぁぎすたこくさげぃぅによって作成されたものは使用しない）
．

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

一般的な場合一般に，同一グループ中で同じ並列手続きを複数並行してアクティブに呼び出す場合があり，ここでは呼び出しのネストは少なくなる．このとき，新しいコミュニケータをそれぞれの呼び出しで作成する必要がある．重なりのあるプロセスの集合上で〲つの異った並列手続きが並行して呼び出された場合にコミュニケータの作成を適切に調整することは，ユーザの責任である．

〱
〲
〳
〴
〵

第7章

〶
〷
〸
〹

プロセストポロジー

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

7.1 はじめに〱〶本章ではきぐぉのトポロジーのメカニズムについて解説する．トポロジーとはグループ
内コミュニケータに与えることができる特別なオプション属性であり，グループ間コミュニケータには追加できない．トポロジーは（コミュニケータ内で）グループをなすプ
ロセス群に便利な命名メカニズムを提供し，さらに，ランタイムシステムがプロセス群
をハードウェアにマッピングするのを補助することもある．
第〶章で説明したように，きぐぉのプロセスグループをの個のプロセスの集合とすると，グループ内の各プロセスには〰からの〭〱までのランクが割り当てられる．多くの並列アプ
リケーションでは，プロセス群への線形なランク付けは，プロセスの論理的通信パター
ン（これは通常，もとになる問題の幾何学的配置と利用する数値アルゴリズムによって決定される）を十分には反映していない．多くの場合，プロセス群は〲次元あるいは〳次
元格子のようなトポロジー的なパターンに配置される．より一般的には，論理的プロセ
ス配置はグラフで表現される．この章では，この論理的プロセス配置を「仮想トポロジー」と呼ぶことにする．
仮想プロセストポロジーは，もとになる物理的ハードウェアのトポロジーとはまった
く異なる．与えられたマシン上での通信性能を改善させるような場合には，システムは
仮想トポロジーを利用して，プロセス群を物理的プロセッサに割り当ててもよい．しかし，このマッピングをどのように行うかということについては，きぐぉの対象外である．
他方で，仮想トポロジーを記述することは，アプリケーションにのみ依存し，マシンとは独立している．この章で記載されている関数とは，マシンとは独立したマッピングのみを扱う関数である．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

根拠 物理的なマッピングについては取り上げないが，ランタイムシステムは仮想トポロジーに関する情報があれば，これはアドバイスとなり得る．格子／トーラス
構造をハイパーキューブや格子などのハードウェアトポロジーにマッピングする手法は既知である．より複雑なグラフ構造については，適切な発見的手法により近最適解が得られることがあるせ〳〲そ．他方，ユーザが論理的プロセス配置を「仮想トポロジー」として指定する方法がなければ，ランダムマッピングとなる可能性が高
〲〵〵

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〷〮 プロセストポロジー

〲〵〶
〱
〲
〳
〴
〵
〶
〷
〸
〹

い．これは，一部のマシンの相互接続ネットワーク内で不必要な競合を引き起こす．最近のワームホールルーティングアーキテクチャ上での適切なプロセス－プロ
セッサ間マッピングから得られた，性能改善の予測値および測定値に関する詳細が文献せ〱〰〬 〱〱そに示されている．
性能面の利点の他に，仮想トポロジーは便利なプロセス名前構造として機能し，その結果，メッセージ通信プログラムの読み易さや記述力に多くの利点をもたらすことができる． （根拠の終わり）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

7.2 仮想トポロジー
プロセス集合における通信パターンはグラフで表現できる．ノードでプロセスを表し，相互に通信するプロセスをエッジで接続する．きぐぉはグループ内のプロセスの任意の対でのメッセージ通信を提供する．チャネルを明示的に開く必要はない．したがって，ユーザが定義するプロセスグラフに「ミッシングリンク」があっても，対応するプロセス
間でメッセージを交換できないということはない．これはむしろ，この接続が仮想トポ
ロジーでは無視されるということを意味する．この戦略は，このトポロジーではこの通信の経路を指定する有効な方法がないということを示唆している．他にも，自動マッピ
ングツールが（これがランタイ環境に存在する場合）マッピングの際にこのエッジを考慮しないということも考えられる．
どのようなアプリケーションでも，仮想トポロジーをグラフによって指定するだけで十分である．しかし，多くのアプリケーションではグラフ構造は規則的であり，グラフ
を詳細にセットアップすることはユーザにとっては不便なもので，実行時に効率を落とすことも考えられる．並列アプリケーションの大部分はリング，〲次あるいは高次元の格子，またはトーラスのようなプロセストポロジーを使用する．これらは各座標方向におけるプロセス数と次元数により完全に定義される．また一般的に，格子とトーラスのマ
ッピングは一般グラフのマッピングよりは簡単な問題である．そこでこれらには系統的に対処するのが望ましい．
カルテシアン構造におけるプロセス座標には〰から番号が振られる．カルテシアン構造を持つプロセス群には常に行優先番号付けを使用する．このことは，例えば〨〲 × 〲〩格子における〴つのプロセスのグループランクと座標には次の関係があることを意味する．

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

っははひつ 〨〰〬〰〩〺
っははひつ 〨〰〬〱〩〺
っははひつ 〨〱〬〰〩〺
っははひつ 〨〱〬〱〩〺

ひちのに 〰
ひちのに 〱
ひちのに 〲
ひちのに 〳〴〳〴〴

7.3 MPIへの埋め込み

〴〵
〴〶
〴〷
〴〸

この章で定義されている仮想トポロジーを支援する機能は，きぐぉの他の部分と整合がとれており，また可能な限り，他の箇所で定義された関数を利用している．トポロジー〷〮〴〮 関数の概要〲〵〷

情報はコミュニケータに付加される．この情報は第〶章で説明したキャッシングメカニズ
ムを用いてコミュニケータに追加される．

〱
〲
〳
〴

7.4 関数の概要〵〶

関数きぐぉたぇげぁぐえたぃげぅぁごぅ， きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎご，
きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅ，きぐぉたぃぁげごたぃげぅぁごぅは，一般的な（グラフ）仮想トポロ
ジーおよびカルテシアントポロジーを生成するのに使う．これらのトポロジー生成関数
は集団的である．他の集団呼び出しと同様，呼び出しが同期するしないに関わらず，正しく動作するようにプログラムを書かなければならない．
トポロジー生成関数は入力として既存のコミュニケータっはねねたはぬつをとる．これはトポロジーをマッピングするプロセスの集合を定義している． きぐぉたぇげぁぐえたぃげぅぁごぅお
よ びきぐぉたぃぁげごたぃげぅぁごぅの 場 合，全 て の 入 力 引 数 はっはねねたはぬつの グ ル ー プ の 全 て の プ
ロセスの値と同じでなければならない． きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎごおよ
びきぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅの場合，入力された通信グラフは呼び出しプロセスに分配される．そのため，各プロセスは引数にそれぞれ異なるグラフを示す値を渡す．しかし，全てのプロセスはひづはひつづひおよびどのては引数には同じ値を渡す必要がある．いずれの場合
も，トポロジー構造をキャッシュ情報に持つ新規コミュニケータっはねねたぴはばはぬが生成される（第〶章を参照）．関数きぐぉたぃくききたぃげぅぁごぅの場合と同様に，っはねねたはぬつから伝播されたキャッシュ情報はっはねねたぴはばはぬへは伝播されない．
きぐぉたぃぁげごたぃげぅぁごぅを使用すると，任意の次元のカルテシアン構造が記述できる．この関数では，各座標方向についてプロセス構造が周期的か否かを指定する．n次元ハイパ
ーキューブは各座標方向につき〲個のプロセスを持つn次元トーラスであることに注意すること．したがって，ハイパーキューブ構造に対する特別なサポートは不要である．ローカルな補助関数きぐぉたいぉきこたぃげぅぁごぅを使用すると，与えられた次元数に対して，バランスのとれたプロセス配置を計算することができる．

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

根拠 ぅじぐげぅここせ〱〲そとぐぁげきぁぃこにも同様の関数が含まれている． （根拠の終わ
り）

〳〳
〳〴
〳〵

関数きぐぉたごくぐくたごぅこごを使用すると，コミュニケータに付加されたトポロジーについて問い合わせできる． トポロジー情報は，一般グラフについては関数
きぐぉたぇげぁぐえいぉきこたぇぅごお よ びきぐぉたぇげぁぐえたぇぅごを 使 用 し て， カ ル テ シ ア ン ト ポ ロ ジ
ー に つ い て はきぐぉたぃぁげごいぉきたぇぅごお よ びきぐぉたぃぁげごたぇぅごを 使 用 し て， コ ミ ュ ニ ケ ー
タ か ら 抽 出 で き る． カ ル テ シ ア ン ト ポ ロ ジ ー を 操 作 す る た め に， い く つ か の 追
加 関 数 が 用 意 さ れ て い る． 関 数きぐぉたぃぁげごたげぁぎかお よ びきぐぉたぃぁげごたぃくくげいこは， カル テ シ ア ン 座 標 を グ ル ー プ ラ ン ク へ， 逆 に グ ル ー プ ラ ン ク を カ ル テ シ ア ン 座 標
へ変換する． 関数きぐぉたぃぁげごたこさあを使用すると，（きぐぉたぃくききたこぐがぉごと同様に）部分
カ ル テ シ ア ン 領 域 を 抽 出 で き る． 関 数きぐぉたぃぁげごたこえぉうごは プ ロ セ ス が〱つ の カ ル テ
シ ア ン 次 元 に お け る そ の 隣 接 と 通 信 す る た め に 必 要 な 情 報 を 提 供 す る． 〲つ の 関
数きぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎごおよびきぐぉたぇげぁぐえたぎぅぉぇえあくげこを使用すると，グ

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〷〮 プロセストポロジー

〲〵〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

ラ フ の 中 の ノ ー ド の 隣 接 を 抽 出 で き る． 分 散 グ ラ フ の 場 合， 関 数
きぐぉたいぉこごたぎぅぉぇえあくげこたぃくさぎごおよびきぐぉたいぉこごたぎぅぉぇえあくげこを使用して呼び出しノードの隣接を抽出できる．関数きぐぉたぃぁげごたこさあは，入力コミュニケータのグループ上で集団的である．他の全ての関数はローカルである．
〲つの追加関数きぐぉたぇげぁぐえたきぁぐおよびきぐぉたぃぁげごたきぁぐについては最後の節で紹介する．一般にこれらの関数はユーザが直接呼び出す関数ではない．しかし，第〶章で説明したコミュニケータ操作関数と一緒に使用すれば，他の全てのトポロジー関数の実装には十分である．このような実装については第〷〮〵〮〸節で概説する．

〱〱〱〲

7.5 トポロジーコンストラクタ〱〳〱〴

7.5.1 カルテシアンコンストラクタ

〱〵
〱〶
〱〷

きぐぉたぃぁげごたぃげぅぁごぅ〨っはねねたはぬつ〬 のつどねび〬 つどねび〬 ばづひどはつび〬 ひづはひつづひ〬 っはねねたっちひぴ〩〱〸

入力コミュニケータ（ハンドル）ぉぎ

っはねねたはぬつ
のつどねび
つどねび

ぉぎ

ばづひどはつびのつどねびのサイズを持つ論理型配列． この配列はそれぞれの次元が周期的（ぴひふづ）か非周期的（てちぬびづ）を示す．

ぉぎ

ひづはひつづひ

ランク番号を変更してよい 〨ぴひふづ〩 か否か（てちぬびづ）（論
理型）

くさご

っはねねたっちひぴ

新しいカルテシアントポロジーを持つコミュニケー
タ（ハンドル）

〱〹

ぉぎ

〲〰

ぉぎ

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

カルテシアン格子の次元数 〨整数型〩
各次元毎のプロセス数を指定するのつどねび個の要素を持つ整数配列

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

どのぴ きぐぉたぃちひぴたっひづちぴづ〨きぐぉたぃはねね っはねねたはぬつ〬 どのぴ のつどねび〬 どのぴ 〪つどねび〬 どのぴ 〪ばづひどはつび〬
どのぴ ひづはひつづひ〬 きぐぉたぃはねね 〪っはねねたっちひぴ〩
きぐぉたぃぁげごたぃげぅぁごぅ〨ぃくききたくがい〬 ぎいぉきこ〬 いぉきこ〬 ぐぅげぉくいこ〬 げぅくげいぅげ〬 ぃくききたぃぁげご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたくがい〬 ぎいぉきこ〬 いぉきこ〨〪〩〬 ぃくききたぃぁげご〬 ぉぅげげくげ
がくぇぉぃぁが ぐぅげぉくいこ〨〪〩〬 げぅくげいぅげ{きぐぉ〺〺ぃちひぴっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺ぃひづちぴづたっちひぴ〨どのぴ のつどねび〬 っはのびぴ どのぴ つどねびせそ〬
っはのびぴ ぢははぬ ばづひどはつびせそ〬 ぢははぬ ひづはひつづひ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたぃぁげごたぃげぅぁごぅは，カルテシアントポロジー情報を付加した新しいコミュニケー
タのハンドルを返す．ひづはひつづひ 〽 てちぬびづであれば，新規グループの中の各プロセスのランク
は旧グループでのそれと同じである．そうでない場合は，（仮想トポロジーを物理的マシンへ有効に埋め込むことを選択できるように）この関数はプロセスを並べ替える場合がある．カルテシアン格子の総サイズがグループっはねねたはぬつ1 のサイズよりも小さければ，
きぐぉたぃくききたこぐがぉごの場合と同様に，いくつかのプロセスにはきぐぉたぃくききたぎさががを返す．
のつどねびが〰の場合，〰次元のカルテシアントポロジーが生成される．この関数がグループサ

〴〶
〴〷
〴〸

訳者註：MPI-2.2ではcommとなっているが，これはcomm_oldの誤りであり，MPI-3では修正されている．
〱

〷〮〵〮 トポロジーコンストラクタ〲〵〹

イズよりも大きな格子を指定した場合，またはのつどねびが負の値の場合，この呼び出しは誤
りとなる．

〱
〲
〳
〴

7.5.2 カルテシアン支援関数: MPI_DIMS_CREATE〵

カルテシアントポロジーでは関数きぐぉたいぉきこたぃげぅぁごぅを使用して，バランスをとるべきグループ内のプロセスの個数と，ユーザが指定できる任意の制約に応じて，座標 軸 毎 に バ ラ ン ス の と れ た プ ロ セ ス 配 置 を 選 ぶ こ と が で き る． こ れ に は（グ ル ー
プきぐぉたぃくききたしくげがいのサイズの）全てのプロセスをn次元トポロジーに分割するという用途がある．

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

きぐぉたいぉきこたぃげぅぁごぅ〨ののはつづび〬 のつどねび〬 つどねび〩
ぉぎ
ぉぎ
ぉぎくさご

ののはつづび
のつどねび
つどねび

〱〴

格子内のノード数（整数型）〱〵

カルテシアントポロジーの次元数（整数）〱〶〱〷

各次元に対してそのノード数を指定したサイズ のつどねびの
〱〸
整数配列
〱〹

どのぴ きぐぉたいどねびたっひづちぴづ〨どのぴ ののはつづび〬 どのぴ のつどねび〬 どのぴ 〪つどねび〩
きぐぉたいぉきこたぃげぅぁごぅ〨ぎぎくいぅこ〬 ぎいぉきこ〬 いぉきこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぎぎくいぅこ〬 ぎいぉきこ〬 いぉきこ〨〪〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねばふぴづたつどねび〨どのぴ ののはつづび〬 どのぴ のつどねび〬 どのぴ つどねびせそ〩 （廃止された呼び出し
形式, 第15.2節を参照）}
配列つどねびのエントリは，のつどねび次元でかつ全部でののはつづび個のノードのカルテシアン格子を記述するように設定される．次元は適切な分割アルゴリズムを使用して，できるだけ互いに近い値になるように設定される．呼び出し側はさらに配列つどねびの要素を指定する
ことで，このルーチンの操作を制限することができる．つどねびせどそが正数に設定されている場合，このルーチンは次元どのノードの個数を変更しない．つどねびせどそ 〽 〰となっている
エントリのみが，このルーチンの呼び出しにより変更される．
Y
つどねびせどその入力値が負の場合は誤りとなる．ののはつづびが
dimsせiそ の倍数でない
i,dims[i]6=0

場合も誤りとなる．
呼 び 出 し に よ り 設 定 さ れ たつどねびせどそは 非 増 加 順 に 並 べ ら れ る． 配 列つどねびは ル ー チンきぐぉたぃぁげごたぃげぅぁごぅへの入力として使用するのに適している．きぐぉたいぉきこたぃげぅぁごぅは
ローカルである．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

例 7.1

呼び出し前のつどねび関数呼び出し〨〰〬〰〩〨〰〬〰〩〨〰〬〳〬〰〩〨〰〬〳〬〰〩

きぐぉたいぉきこたぃげぅぁごぅ〨〶〬 〲〬 つどねび〩
きぐぉたいぉきこたぃげぅぁごぅ〨〷〬 〲〬 つどねび〩
きぐぉたいぉきこたぃげぅぁごぅ〨〶〬 〳〬 つどねび〩
きぐぉたいぉきこたぃげぅぁごぅ〨〷〬 〳〬 つどねび〩

戻った後の
つどねび
〨〳〬〲〩
〨〷〬〱〩
〨〲〬〳〬〱〩
呼び出しエラー

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〷〮 プロセストポロジー〲〶〰
〱

7.5.3 一般（グラフ）コンストラクタ

〲
〳
〴
〵

きぐぉたぇげぁぐえたぃげぅぁごぅ〨っはねねたはぬつ〬 ののはつづび〬 どのつづへ〬 づつでづび〬 ひづはひつづひ〬 っはねねたでひちばと〩

〸

ぉぎ

〹

ぉぎ

〱〰

ぉぎ

っはねねたはぬつののはつづび
どのつづへ
づつでづび
ひづはひつづひ

くさごっはねねたでひちばと

ぉぎ

〶
〷

ぉぎ

〱〱
〱〲
〱〳

入力コミュニケータ（ハンドル）

グラフトポロジーを付け加えたコミュニケータ（ハンドル）

グラフにおけるノードの個数（整数型）
ノードの次数を表す整数配列（下記参照）
グラフのエッジを表わす整数配列（下記参照）
ランク番号を変更してよい（ぴひふづ）か否か（てちぬびづ〩（論理型）

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

どのぴ きぐぉたぇひちばとたっひづちぴづ〨きぐぉたぃはねね っはねねたはぬつ〬 どのぴ ののはつづび〬 どのぴ 〪どのつづへ〬 どのぴ 〪づつでづび〬
どのぴ ひづはひつづひ〬 きぐぉたぃはねね 〪っはねねたでひちばと〩
きぐぉたぇげぁぐえたぃげぅぁごぅ〨ぃくききたくがい〬 ぎぎくいぅこ〬 ぉぎいぅじ〬 ぅいぇぅこ〬 げぅくげいぅげ〬 ぃくききたぇげぁぐえ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたくがい〬 ぎぎくいぅこ〬 ぉぎいぅじ〨〪〩〬 ぅいぇぅこ〨〪〩〬 ぃくききたぇげぁぐえ〬 ぉぅげげくげ
がくぇぉぃぁが げぅくげいぅげ{きぐぉ〺〺ぇひちばとっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺ぃひづちぴづたでひちばと〨どのぴ ののはつづび〬 っはのびぴ どのぴ どのつづへせそ〬
っはのびぴ どのぴ づつでづびせそ〬 ぢははぬ ひづはひつづひ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたぇげぁぐえたぃげぅぁごぅは，グラフトポロジー情報が付加された新しいコミュニケータ
のハンドルを返す．ひづはひつづひ 〽 てちぬびづであれば，新規グループの中の各プロセスのランク
は旧グループでのそれと同一である．そうでない場合には，この関数はプロセスを並べ替える場合がある．グラフのサイズののはつづびがっはねねたはぬつ2 のグループのサイズよりも小さければ，きぐぉたぃぁげごたぃげぅぁごぅおよびきぐぉたぃくききたこぐがぉごと同様に，いくつかのプロセスにはきぐぉたぃくききたぎさががを返す．グラフが空，つまりののはつづび 〽〽 〰の場合，全てのプロセス
できぐぉたぃくききたぎさががが返される．この呼び出しを入力コミュニケータのグループサイズ
よりも大きなグラフを指定して呼び出すと，誤りとなる．
〳つのパラメータののはつづび，どのつづへ，づつでづびでグラフ構造を定義する．ののはつづびはグラフのノードの個数である．ノードには〰からののはつづび〭〱までの番号が付けられる．配列どのつづへ のど番
目のエントリには，最初のど個のグラフのノードの隣接の総数が格納される．ノード〰〬〱〬 〮〮〮〬 ののはつづび〭〱の隣接のリストは，配列づつでづびの中の連続した位置に格納される．配列づつでづびはエッジリストを平坦化した表現である． どのつづへのエントリの総数はののはつづびで，づつでづびのエントリの総数はグラフのエッジの本数に等しい．
引数ののはつづび，どのつづへ，づつでづびの定義については，以下の簡単な例で説明する．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

例 7.2 以下の隣接行列を持つ〴個のプロセス〰，〱，〲，〳があるとする．
訳者註：MPI-2.2ではcommとなっているが，これはcomm_oldの誤りであり，MPI-3では修正されている．
〲

〷〮〵〮 トポロジーコンストラクタ
ばひはっづびび
〰
〱
〲
〳

〲〶〱
〱

のづどでとぢはひび

〲

〱〬 〳
〰
〳
〰〬 〲

〳
〴
〵
〶
〷

この場合，入力引数は次の通りである．

ののはつづび 〽
どのつづへ 〽
づつでづび 〽

〴〲〬 〳〬 〴〬 〶〱〬 〳〬 〰〬 〳〬 〰〬 〲

〸
〹
〱〰
〱〱

したがってぃ言語では，どのつづへせ〰そはノード〰の次数であり，どのつづへせどそ 〭 どのつづへせど〭〱そは
ノードど〬 ど〽〱〬 〮〮〮〬 ののはつづび〭〱の次数である．ノード〰の隣接リストは〰 ≤ な ≤ どのつづへせ〰そ−〱についてづつでづびせなそに格納され，ノードどの隣接リストはどのつづへせど−〱そ ≤ な ≤ どのつづへせどそ−〱について づつでづびせなそに格納される．
うはひぴひちの言語では，どのつづへ〨〱〩はノード〰の次数であり，どのつづへ〨ど〫〱〩 〭 どのつづへ〨ど〩はノー
ドど〬 ど〽〱〬 〮〮〮〬 ののはつづび〭〱の次数である．ノード〰 の隣接リストは〱 ≤ な ≤ どのつづへ〨〱〩についてづつでづび〨な〩に格納され，ノードど，ど > 〰の隣接リストはどのつづへ〨ど〩 〫 〱 ≤ な ≤ どのつづへ〨ど 〫〱〩について づつでづび〨な〩に格納される．
プロセスの隣接リスト内で〱つのプロセスを複数回定義することができる（つまり，〲つのプロセスの間に複数のエッジが存在する可能性がある）．また，プロセスはそれ自体の隣接とすることもできる（つまり，グラフ内の自己参照ループ）．隣接行列は非対称とすることができる．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

ユーザへのアドバイス 複数のエッジまたは非対称の隣接行列を使用した場合の性能の詳細は定義されていない．ノード隣接エッジの定義では通信の方向は示されていない． （ユーザへのアドバイス終わり）
実装者へのアドバイス 以下のトポロジー情報がコミュニケータに格納されるであ
ろう．

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

• トポロジーのタイプ（カルテシアン／グラフ），• カルテシアントポロジーの場合〱〮 のつどねび （次元数）〲〮 つどねび （各座標軸におけるプロセスの個数）〳〮 ばづひどはつび （周期情報）〴〮 はぷのたばはびどぴどはの （格子内での自位置，ひちのにとつどねびから計算で求めることも可能）• グラフトポロジーの場合

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

〱〮 どのつづへ〬〴〷〲〮 づつでづび〬〴〸第 〷〮 プロセストポロジー〲〶〲〱

これらはグラフ構造を定義するベクトルである．

〲
〳
〴
〵
〶
〷

グラフ構造については，ノードの個数はグループ内のプロセスの個数に等しい．し
たがって，ノードの個数は明示的に格納しなくてもよい．配列 どのつづへの最初に〰を挿入すると，トポロジー情報へのアクセスが簡単になる． （実装者へのアドバイス
終わり）

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

7.5.4 分散（グラフ）コンストラクタ
一般的なグラフコンストラクタでは，各プロセスが十分な（大域的な）通信グラフを呼び出しに渡すことが前提となる．これによりこのコンストラクタのスケーラビリティが制限される．分散グラフインターフェイスを使用することにより，十分に分散した形で通信グラフが指定される．各プロセスで指定されるのは，認識している通信グラフの一部のみである．通常，これで考えられるのは，プロセスが最終的にデータを受信または取得する元となるプロセスの集合，あるいはプロセスがデータを送信または配置する先となるプロセスの集合，あるいはこのようなエッジの組み合わせである．分散グラ
フトポロジーを作成するために，〲種類のインターフェイスを使用することができる．
きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎごでは，各プロセスの論理通信グラフ内で全ての入力および出力（隣接）エッジを指定して分散グラフコミュニケータを作成するため，作成中に最小限の通信が必要となる．きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅは柔軟性に優れていて，プロセスは通信が他のプロセス対で発生することを示すことができる．
きぐぉライブラリによる最適化の可能性を促進するため，分散グラフコンストラクタでは重み付け通信エッジを使用したり，プロセスの並べ替えやきぐぉライブラリによる最適化にさらに影響を及ぼしうるどのては引数を使用したりすることができる．例えば，エッジの重み付けの解釈方法，並べ替えの質，グラフ処理のためにきぐぉライブラリに許容される時間などに関するヒントが得られる．

〷〮〵〮 トポロジーコンストラクタ〲〶〳

きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎご〨っはねねたはぬつ〬 どのつづでひづづ〬 びはふひっづび〬 びはふひっづぷづどでとぴび〬 はふぴ〭
つづでひづづ〬 つづびぴどのちぴどはのび〬 つづびぴぷづどでとぴび〬 どのては〬 ひづはひつづひ〬 っはねねたつどびぴたでひちばと〩
ぉぎ
ぉぎ
ぉぎ

っはねねたはぬつどのつづでひづづ
びはふひっづび

入力コミュニケータ（ハンドル）
びはふひっづびおよびびはふひっづぷづどでとぴび配列のサイズ（非負の整
数型）

〱
〲
〳
〴
〵

呼び出しプロセスを送信先とするプロセスのランク（非負の整数の配列）

〶

〸

〷

ぉぎ

びはふひっづぷづどでとぴび

呼び出しプロセスへのエッジの重み付け（非負の整
数の配列）

ぉぎ

はふぴつづでひづづ

つづびぴどのちぴどはのびおよびつづびぴぷづどでとぴび配列のサイズ（非負の
整数型）

ぉぎ

つづびぴどのちぴどはのび

呼び出しプロセスを送信元とするプロセスのランク（非負の整数の配列）

ぉぎ

つづびぴぷづどでとぴび

呼び出しプロセスからのエッジの重み付け（非負の整数の配列）

ぉぎ

重み付けの最適化と解釈のヒント（ハンドル）

ぉぎ

どのては
ひづはひつづひランク付けを変更してよい〨ぴひふづ〩か否か 〨てちぬびづ〩（論理
型）〩

〱〸

くさご

っはねねたつどびぴたでひちばと分散グラフトポロジーとのコミュニケータ（ハンドル）〲〰

どのぴ きぐぉたいどびぴたでひちばとたっひづちぴづたちつなちっづのぴ〨きぐぉたぃはねね っはねねたはぬつ〬 どのぴ どのつづでひづづ〬
どのぴ びはふひっづびせそ〬 どのぴ びはふひっづぷづどでとぴびせそ〬 どのぴ はふぴつづでひづづ〬 どのぴ つづびぴどのちぴどはのびせそ〬 どのぴ
つづびぴぷづどでとぴびせそ〬 きぐぉたぉのては どのては〬 どのぴ ひづはひつづひ〬 きぐぉたぃはねね 〪っはねねたつどびぴたでひちばと〩
きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎご〨ぃくききたくがい〬 ぉぎいぅぇげぅぅ〬 こくさげぃぅこ〬 こくさげぃぅしぅぉぇえごこ〬
くさごいぅぇげぅぅ〬 いぅこごぉぎぁごぉくぎこ〬 いぅこごしぅぉぇえごこ〬 ぉぎうく〬 げぅくげいぅげ〬 ぃくききたいぉこごたぇげぁぐえ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたくがい〬 ぉぎいぅぇげぅぅ〬 こくさげぃぅこ〨〪〩〬 こくさげぃぅしぅぉぇえごこ〨〪〩〬 くさごいぅぇげぅぅ〬
いぅこごぉぎぁごぉくぎこ〨〪〩〬 いぅこごしぅぉぇえごこ〨〪〩〬 ぉぎうく〬 ぃくききたいぉこごたぇげぁぐえ〬 ぉぅげげくげ
がくぇぉぃぁが げぅくげいぅげ{きぐぉ〺〺いどびぴでひちばとっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺いどびぴたでひちばとたっひづちぴづたちつなちっづのぴ〨どのぴ
どのつづでひづづ〬 っはのびぴ どのぴ びはふひっづびせそ〬 っはのびぴ どのぴ びはふひっづぷづどでとぴびせそ〬
どのぴ はふぴつづでひづづ〬 っはのびぴ どのぴ つづびぴどのちぴどはのびせそ〬
っはのびぴ どのぴ つづびぴぷづどでとぴびせそ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬 ぢははぬ ひづはひつづひ〩
っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺いどびぴでひちばとっはねね
きぐぉ〺〺ぉのぴひちっはねね〺〺いどびぴたでひちばとたっひづちぴづたちつなちっづのぴ〨どのぴ どのつづでひづづ〬
っはのびぴ どのぴ びはふひっづびせそ〬 どのぴ はふぴつづでひづづ〬 っはのびぴ どのぴ つづびぴどのちぴどはのびせそ〬
っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬 ぢははぬ ひづはひつづひ〩 っはのびぴ （廃止された呼び出し形
式, 第15.2節を参照）}

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

〱〹

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎごは分散グラフトポロジー情報が付加された新規コミュニケータへのハンドルを返す．各プロセスはエッジに関する全ての情報を仮想分散グラフトポロジー内の隣接に渡す．呼び出しプロセスでは，送信元プロセスと送信先プロセスで同じ重み付けによりグラフの各エッジが記述されるようにする必要がある．指定の〨びはふひっづ〬つづびぴ〩ペアに対して複数のエッジがある場合，これらのエッジの重み付けの順序は問題にならない．完全な通信トポロジーはっはねねたはぬつの全てのプロセスのびはふひっづび配列で示される全てのエッジの組み合わせであり，これはつづびぴどのちぴどはのび配列で示される全てのエッジの組み合わせと同じでなければならない．送信元と送信先のランク

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〲〶〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〷〮 プロセストポロジー

はっはねねたはぬつのプロセスのランクでなければならない．これにより，通信グラフの指定を完全に分散することができる．孤立プロセス（出力または入力エッジのないプロセス，
つまりどのつづでひづづおよびはふぴつづでひづづが〰として指定されているため，グラフ指定で送信元または送信先のランクとして機能しないプロセス）とすることもできる．
この呼び出しでは，トポロジー情報が付加されている分散グラフトポロジーの型の新規コミュニケータっはねねたつどびぴたでひちばとが生成される．っはねねたつどびぴたでひちばと内のプロセスの数
はっはねねたはぬつ内のプロセスの数と同じである．きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎごの呼び出しは集団的である．
重み付けは非負の整数型として指定され，プロセスの再マッピング戦略やその他のきぐぉ内部の最適化に影響を及ぼすために使用できる．例えば，特定のエッジと一緒にその後の通信呼び出しの概数の引数をエッジの重み付けとして使用することができる．同様に，エッジの多重度を利用することで，プロセスのペア間の通信を強化するすることができる．しかし，エッジの重み付けの正確な意味はきぐぉ標準では規定されておらず，実装に任されている．ぃ言語または うはひぴひちの言語では，全てのエッジが同じ重みを持つ（事実上は重み付けなしと同じ）ことを示す重み付けの配列用の特別な
値きぐぉたさぎしぅぉぇえごぅいをアプリケーションで供給することができる．ぃ〫〫言語ではこの定数は存在せず，重み付けの引数を引数リストから除外することができる．っはねねたはぬつの全部ではなく一部のプロセスできぐぉたさぎしぅぉぇえごぅいを供給したり， ぃ〫〫言語で重み付けの配列を除外したりすると，誤りとなる． きぐぉたさぎしぅぉぇえごぅいは特別な重み付けの値ではな
く，配列全体の引数のための特別な値であることに注意すること．ぃ言語では，ぎさががと同等となる．うはひぴひちの言語では，きぐぉたさぎしぅぉぇえごぅいはきぐぉたあくごごくきのようなオブジェクト（初期化や割り当てには使用できない）である． 第〲〮〵〮〴節を参照すること．
どのてはおよびひづはひつづひ引数の意味については，以下のルーチンの説明で定義する．

〷〮〵〮 トポロジーコンストラクタ〲〶〵

きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅ〨っはねねたはぬつ〬 の〬 びはふひっづび〬 つづでひづづび〬 つづびぴどのちぴどはのび〬 ぷづどでとぴび〬 どのては〬 ひづ〭
はひつづひ〬 っはねねたつどびぴたでひちばと〩
ぉぎ
ぉぎ
ぉぎ

ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

っはねねたはぬつのびはふひっづび

つづでひづづび
つづびぴどのちぴどはのび
ぷづどでとぴび
どのては
ひづはひつづひっはねねたつどびぴたでひちばと〱〲

入力コミュニケータ（ハンドル）〳

このプロセスがエッジを指定する対象となる送信元
ノードの数（非負の整数型）〴

このプロセスがエッジを指定する対象となるの個の送信元ノードが記述された配列（非負の整数の配列）〶

送信元ノード配列内の各送信元ノードのための送信先の数を指定する配列（非負の整数の配列）

〹

〵

〷
〸

〱〰

送信元ノード配列内の送信元ノードのための送信先ノード（非負の整数の配列）〱〱

送信先エッジに対する送信元のための重み付け（非負の整数の配列）〱〳

重み付けの最適化と解釈に関するヒント（ハンドル）〱〵

プロセス順序を変更してよい 〨ぴひふづ〩 か否か〨てちぬびづ〩
（論理型）

〱〷

分散グラフトポロジーが付加されたコミュニケータ
（ハンドル）

〱〹

〱〲

〱〴

〱〶

〱〸

〲〰
〲〱

どのぴ きぐぉたいどびぴたでひちばとたっひづちぴづ〨きぐぉたぃはねね っはねねたはぬつ〬 どのぴ の〬 どのぴ びはふひっづびせそ〬
どのぴ つづでひづづびせそ〬 どのぴ つづびぴどのちぴどはのびせそ〬 どのぴ ぷづどでとぴびせそ〬 きぐぉたぉのては どのては〬
どのぴ ひづはひつづひ〬 きぐぉたぃはねね 〪っはねねたつどびぴたでひちばと〩
きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅ〨ぃくききたくがい〬 ぎ〬 こくさげぃぅこ〬 いぅぇげぅぅこ〬 いぅこごぉぎぁごぉくぎこ〬 しぅぉぇえごこ〬ぉぎうく〬 げぅくげいぅげ〬 ぃくききたいぉこごたぇげぁぐえ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたくがい〬 ぎ〬 こくさげぃぅこ〨〪〩〬 いぅぇげぅぅこ〨〪〩〬 いぅこごぉぎぁごぉくぎこ〨〪〩〬しぅぉぇえごこ〨〪〩〬 ぉぎうく〬 ぃくききたいぉこごたぇげぁぐえ〬 ぉぅげげくげ
がくぇぉぃぁが げぅくげいぅげ{きぐぉ〺〺いどびぴでひちばとっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺いどびぴたでひちばとたっひづちぴづ〨どのぴ の〬っはのびぴ どのぴ びはふひっづびせそ〬 っはのびぴ どのぴ つづでひづづびせそ〬 っはのびぴ どのぴ
つづびぴどのちぴどはのびせそ〬 っはのびぴ どのぴ ぷづどでとぴびせそ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬
ぢははぬ ひづはひつづひ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{きぐぉ〺〺いどびぴでひちばとっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺いどびぴたでひちばとたっひづちぴづ〨どのぴ の〬っはのびぴ どのぴ びはふひっづびせそ〬 っはのびぴ どのぴ つづでひづづびせそ〬
っはのびぴ どのぴ つづびぴどのちぴどはのびせそ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬 ぢははぬ ひづはひつづひ〩
っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅは分散グラフトポロジー情報が付加された新規コミュニ
ケータへのハンドルを返す． 具体的には，以下のように各プロセスが有向〨びはふひっづ〬つづびぴどのちぴどはの〩通信エッジの集合を指定して コンストラクタを呼び出す． 各プロ
セスはびはふひっづび配列内のの個の送信元ノードの配列を渡す． 各送信元ノードについて，
送信先ノードの非負の数がつづでひづづび配列で指定される． 送信先ノードはつづびぴどのちぴどはのび配列の該当する連続のセグメントに格納される． 正確に言うと，びはふひっづび内のど番目のノードがびの場合，つづびぴどのちぴどはのびせつづでひづづびせ〰そ〮〮〮〫〫つづでひづづびせど〭〱そ〫なそに格納されたな番目のエッジのつにより，つづでひづづびせどそのエッジ〨び〬つ〩が指定される． このエッジの重み付けはぷづどでとぴびせつづでひづづびせ〰そ〮〮〮〫〫つづでひづづびせど〭〱そ〫なそに格納される．びはふひっづびおよびつづびぴどのちぴどはのびの両方の配列には同じノードを複数回含むことができ，送信先または送信元のノードはどの順序で

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〲〶〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

第 〷〮 プロセストポロジー

記述しても影響しない．同様に，異なるプロセスで同じ送信元および送信先ノードによりエッジを指定することもできる．送信元および送信先ノードはっはねねたはぬつのプロセスラ
ンクでなければならない．プロセスごとに，指定する送信元ノードおよび送信先ノードの数を変えることもできるし，送信元／送信先のエッジを変えることもできる．これにより，通信グラフの指定を完全に分散させることができる．孤立プロセス（出力または入力エッジのないプロセス，つまり，グラフ指定で送信元または送信先ノードとして機能しないプロセス）とすることもできる．
この呼び出しは，トポロジー情報が付加されている分散グラフトポロジーの型の新規コミュニケータっはねねたつどびぴたでひちばとを生成する． っはねねたつどびぴたでひちばと内のプロセスの数
はっはねねたはぬつ内のプロセスの数と同じである．きぐぉたいどびぴたでひちばとたっひづちぴづの呼び出しは集団的である．
ひづはひつづひ 〽 てちぬびづの場合，っはねねたつどびぴたでひちばと内の全てのプロセスのランクはっはねねたはぬつ内のものと同じになる．ひづはひつづひ 〽 ぴひふづの場合，通信グラフのエッジでの通信を向上させる
ため，きぐぉライブラリを他の（っはねねたはぬつの）プロセスに自由に再マッピングすることができる．各エッジに関連付けられた重み付けはそのエッジでの通信の量と強弱に関す
るきぐぉライブラリのヒントで，最適な並べ替えを計算するのに使用できる．
重み付けは非負の整数型として指定され，プロセスの再マッピング戦略やその他のきぐぉ内部の最適化に影響を及ぼすために使用できる．例えば，特定のエッジと一緒にその後の通信呼び出しの概数の引数をエッジの重み付けとして使用することができる．同様に，エッジの多重度を利用することで，プロセスのペア間の通信を強化するすることができる．しかし，エッジの重み付けの正確な意味はきぐぉ標準では規定されておらず，実装に任されている．ぃ言語またはうはひぴひちの言語では，全てのエッジが同じ重みを持つ（事実上は重み付けなしと同じ）ことを示す重み付けの配列用の特別な
値きぐぉたさぎしぅぉぇえごぅいをアプリケーションで供給することができる．ぃ〫〫言語ではこの定数は存在せず，重み付けの引数を引数リストから除外することができる．っはねねたはぬつ の
全部ではなく一部のプロセスできぐぉたさぎしぅぉぇえごぅいを供給したり，ぃ〫〫言語で重み付けの配列を除外したりすると，誤りとなる． きぐぉたさぎしぅぉぇえごぅいは特別な重み付けの値ではなく，配列全体の引数のための特別な値であることに注意すること．ぃ〫〫言語では，のふぬぬと同等となる．うはひぴひちの言語では， きぐぉたさぎしぅぉぇえごぅいはきぐぉたあくごごくきのようなオブジ
ェクト（初期化や割り当てには使用できない）である．第〲〮〵〮〴節を参照すること．
ぷづどでとぴび引数の意味はどのては引数の影響を受ける可能性がある．ぉのては引数はマッピングをガ
イドするのに使用できる．例えば，異なる こきぐノード上のプロセス間でエッジの最大数を最小限に抑えたり，このようなエッジの合計数を最小限に抑えたりできる．きぐぉ実
装は特定のヒントに従う必要はなく，並べ替えを行わないきぐぉ実装において有効である．
きぐぉ実装では，より多くのどのてはのキー値のペアを指定することができる．すべてのプロセ
スで，同じどのてはのキーと値のペアの集合を指定する必要がある．

〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス きぐぉ実装では，追加でサポートするどのてはのキーと値のペアを明文化する必要がある． きぐぉたぉぎうくたぎさがが は常に有効でデフォルトが分散グラフト
ポロジーであるときぐぉライブラリに示すこともある．

〷〮〵〮 トポロジーコンストラクタ〲〶〷

実装では明示的に分散したトポロジーの部品から〱つのトポロジーを構成する必要はない．しかし，全てのプロセスが分散の指定を受けた完全なトポロジーを構成し，これをきぐぉたぇげぁぐえたぃげぅぁごぅの呼び出しで使用してトポロジーを生成することができる．これは機能の参照実装として機能させることができ，小さなコミュニケー
タで使用することができる．しかし，質の高いスケーラブルな実装ではトポロジー
グラフが分散されて保存される． （実装者へのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸

例 7.3 例〷〮〲と同様に，以下の隣接行列とユニットのエッジの重み付けを持つ〴個のプロセス〰，〱，〲，〳があるとする．

〹
〱〰
〱〱

ばひはっづびび
〰
〱
〲
〳

〱〲

のづどでとぢはひび

〱〳

〱〬 〳
〰
〳
〰〬 〲

〱〴
〱〵
〱〶
〱〷
〱〸

きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅを使用して，このグラフをさまざまな方法で構成することができる．例えば，各プロセスで出力エッジを指定することができる．プロセスごとの引数は次のようになる．

〱〹
〲〰
〲〱
〲〲

ばひはっづびびのびはふひっづび

つづでひづづび

つづびぴどのちぴどはのび

ぷづどでとぴび

〲〳

〰
〱
〲
〳

〱
〱
〱
〱

〰
〱
〲
〳

〲
〱
〱
〲

〱〬〳
〰
〳
〰〬〲

〱〬〱
〱
〱
〱〬〱

〲〴

プロセス〰でグラフ全体を渡すこともできる．この場合，プロセスごとの引数は次のよ
うになる．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

ばひはっづびびのびはふひっづび

つづでひづづび

つづびぴどのちぴどはのび

ぷづどでとぴび

〰
〱
〲
〳

〴
〰
〰
〰

〰〬〱〬〲〬〳〭〭〭〲〬〱〬〱〬〲〭〭〭〱〬〳〬〰〬〳〬〰〬〲〭〭〭〱〬〱〬〱〬〱〬〱〬〱〭〭

上記のどちらの場合も，アプリケーションで明示的に同じ重み付けを指定する代わりに，きぐぉたさぎしぅぉぇえごぅいを供給することができる．
このグラフはきぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎごに次に示す引数を渡すことで作ることができる．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〷〮 プロセストポロジー

〲〶〸
〱
〲
〳
〴
〵
〶

ばひはっづびび〰
〱〲〳どのつづでひづづ

びはふひっづび

びはふひっづぷづどでとぴび

はふぴつづでひづづ

つづびぴどのちぴどはのび

つづびぴぷづどでとぴび

〲
〱
〱
〲

〱〬〳
〰
〳
〰〬〲

〱〬〱
〱
〱
〱〬〱

〲
〱
〱
〲

〱〬〳
〰
〳
〰〬〲

〱〬〱
〱
〱
〱〬〱

〷
〸
〹
〱〰
〱〱
〱〲

例 7.4 次元と対角線のエッジを使用して全てのプロセスが通信する〲次元の P × Qトーラスの例．カルテシアントポロジーによってモデル化することはできないが，以下のコードに示すようにきぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅを使用して容易に取得することができる．
この例では，次元を使用した通信の重みは対角線を使用した通信の〲倍となる．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

〪〯
ぉのばふぴ〺
つどねづのびどはのび ぐ〬 けぃはのつどぴどはの〺 のふねぢづひ はて ばひはっづびびづび づぱふちぬ ぴは ぐ〪け〻 はぴとづひぷどびづ はのぬべ
ひちのにび びねちぬぬづひ ぴとちの ぐ〪け ばちひぴどっどばちぴづ〪〯
どのぴ ひちのに〬 へ〬 べ〻
どのぴ びはふひっづびせ〱そ〬 つづでひづづびせ〱そ〻
どのぴ つづびぴどのちぴどはのびせ〸そ〬 ぷづどでとぴびせ〸そ〻
きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ひちのに〩〻

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

〪〯 でづぴ へ ちのつ べ つどねづのびどはの 〪〯べ〽ひちのに〯ぐ〻 へ〽ひちのに〥ぐ〻〪〯 でづぴ ねべ っはねねふのどっちぴどはの ばちひぴのづひび ちぬはので へ つどねづのびどはの 〪〯つづびぴどのちぴどはのびせ〰そ 〽 ぐ〪べ〫〨へ〫〱〩〥ぐ〻 ぷづどでとぴびせ〰そ 〽 〲〻つづびぴどのちぴどはのびせ〱そ 〽 ぐ〪べ〫〨ぐ〫へ〭〱〩〥ぐ〻 ぷづどでとぴびせ〱そ 〽 〲〻〪〯 でづぴ ねべ っはねねふのどっちぴどはの ばちひぴのづひび ちぬはので べ つどねづのびどはの 〪〯つづびぴどのちぴどはのびせ〲そ 〽 ぐ〪〨〨べ〫〱〩〥け〩〫へ〻 ぷづどでとぴびせ〲そ 〽 〲〻つづびぴどのちぴどはのびせ〳そ 〽 ぐ〪〨〨け〫べ〭〱〩〥け〩〫へ〻 ぷづどでとぴびせ〳そ 〽 〲〻

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

〪〯 でづぴ ねべ っはねねふのどっちぴどはの ばちひぴのづひび ちぬはので つどちではのちぬび 〪〯つづびぴどのちぴどはのびせ〴そ 〽 ぐ〪〨〨べ〫〱〩〥け〩〫〨へ〫〱〩〥ぐ〻 ぷづどでとぴびせ〴そ 〽 〱〻つづびぴどのちぴどはのびせ〵そ 〽 ぐ〪〨〨け〫べ〭〱〩〥け〩〫〨へ〫〱〩〥ぐ〻 ぷづどでとぴびせ〵そ 〽 〱〻つづびぴどのちぴどはのびせ〶そ 〽 ぐ〪〨〨べ〫〱〩〥け〩〫〨ぐ〫へ〭〱〩〥ぐ〻 ぷづどでとぴびせ〶そ 〽 〱〻つづびぴどのちぴどはのびせ〷そ 〽 ぐ〪〨〨け〫べ〭〱〩〥け〩〫〨ぐ〫へ〭〱〩〥ぐ〻 ぷづどでとぴびせ〷そ 〽 〱〻びはふひっづびせ〰そ 〽 ひちのに〻
つづでひづづびせ〰そ 〽 〸〻
きぐぉたいどびぴたでひちばとたっひづちぴづ〨きぐぉたぃくききたしくげがい〬 〱〬 びはふひっづび〬 つづでひづづび〬 つづびぴどのちぴどはのび〬
ぷづどでとぴび〬 きぐぉたぉぎうくたぎさがが〬 〱〬 っはねねたつどびぴたでひちばと〩

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

7.5.5 トポロジー問い合わせ関数
上記関数のいずれか〱つを用いてトポロジーを定義している場合，問い合わせ関数を使用してトポロジー情報を調べることができる．これらは全てローカルな呼び出しである．

〷〮〵〮 トポロジーコンストラクタ〲〶〹

きぐぉたごくぐくたごぅこご〨っはねね〬 びぴちぴふび〩
ぉぎ
くさご

っはねね
びぴちぴふび〱

コミュニケータ（ハンドル）
コミュニケータっはねねの トポロジー型（ステート型）〲〳〴

どのぴ きぐぉたごはばはたぴづびぴ〨きぐぉたぃはねね っはねね〬 どのぴ 〪びぴちぴふび〩
きぐぉたごくぐくたごぅこご〨ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぃはねね〺〺ぇづぴたぴはばはぬはでべ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〵

関数きぐぉたごくぐくたごぅこごはコミュニケータに付加されたトポロジーの型を返す．
出力値びぴちぴふびは次のうちのいずれかである．

〹

〶
〷
〸

〱〰
〱〱
〱〲

きぐぉたぇげぁぐえ
きぐぉたぃぁげご
きぐぉたいぉこごたぇげぁぐえ
きぐぉたさぎいぅうぉぎぅい

グラフトポロジー
カルテシアントポロジー
分散グラフトポロジー
トポロジーなし

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

きぐぉたぇげぁぐえいぉきこたぇぅご〨っはねね〬 ののはつづび〬 のづつでづび〩
グラフ構造を持つコミュニケータ（ハンドル）

くさご

っはねね
ののはつづび

くさごのづつでづびグラフのエッジの個数（整数型）

ぉぎ

〱〹
〲〰
〲〱

グラフのノードの個数（整数型）（グラフの中のプ
ロセスの数と等しい）

どのぴ きぐぉたぇひちばとつどねびたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ 〪ののはつづび〬 どのぴ 〪のづつでづび〩
きぐぉたぇげぁぐえいぉきこたぇぅご〨ぃくきき〬 ぎぎくいぅこ〬 ぎぅいぇぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎぎくいぅこ〬 ぎぅいぇぅこ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぇひちばとっはねね〺〺ぇづぴたつどねび〨どのぴ ののはつづびせそ〬 どのぴ のづつでづびせそ〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}
関数きぐぉたぇげぁぐえいぉきこたぇぅごおよびきぐぉたぇげぁぐえたぇぅご はきぐぉたぇげぁぐえたぃげぅぁごぅによってコミュニケータに付加されたグラフトポロジー情報を検索する関数である．
きぐぉたぇげぁぐえいぉきこたぇぅごから得られる情報を使用すると，きぐぉたぇげぁぐえたぇぅごの以下の呼び出しで，ベクトルどのつづへおよび づつでづびのサイズを正確に決めることができる．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

きぐぉたぇげぁぐえたぇぅご〨っはねね〬 ねちへどのつづへ〬 ねちへづつでづび〬 どのつづへ〬 づつでづび〩
ぉぎ
ぉぎ
ぉぎ
くさご
くさご

っはねね
ねちへどのつづへ
ねちへづつでづび
どのつづへ
づつでづび

グラフ構造を持つコミュニケータ（ハンドル）〳〷〳〸

呼び出し側プログラムのベクトルどのつづへ のサイズ
（整数型）

〳〹

呼び出し側プログラムのベクトルづつでづび のサイズ
（整数型）

〴〱

〴〰

〴〲

グラフ構造を格納した整数配列（詳細はきぐぉたぇげぁぐえたぃげぅぁごぅの定義を参照）〴〳

グラフ構造を格納した整数配列

〴〵

〴〴

〴〶

どのぴ きぐぉたぇひちばとたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ ねちへどのつづへ〬 どのぴ ねちへづつでづび〬 どのぴ 〪どのつづへ〬
どのぴ 〪づつでづび〩〴〷〴〸

第 〷〮 プロセストポロジー

〲〷〰
〱
〲
〳
〴

きぐぉたぇげぁぐえたぇぅご〨ぃくきき〬 きぁじぉぎいぅじ〬 きぁじぅいぇぅこ〬 ぉぎいぅじ〬 ぅいぇぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 きぁじぉぎいぅじ〬 きぁじぅいぇぅこ〬 ぉぎいぅじ〨〪〩〬 ぅいぇぅこ〨〪〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぇひちばとっはねね〺〺ぇづぴたぴはばは〨どのぴ ねちへどのつづへ〬 どのぴ ねちへづつでづび〬 どのぴ どのつづへせそ〬
どのぴ づつでづびせそ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〵
〶
〷
〸

きぐぉたぃぁげごいぉきたぇぅご〨っはねね〬 のつどねび〩
ぉぎ

っはねね

カルテシアン構造を持つコミュニケータ（ハンド
ル）

くさご

のつどねび

カルテシアン構造の次元数（整数型）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

どのぴ きぐぉたぃちひぴつどねたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ 〪のつどねび〩
きぐぉたぃぁげごいぉきたぇぅご〨ぃくきき〬 ぎいぉきこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎいぉきこ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぃちひぴっはねね〺〺ぇづぴたつどね〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
関数きぐぉたぃぁげごいぉきたぇぅごおよびきぐぉたぃぁげごたぇぅご はきぐぉたぃぁげごたぃげぅぁごぅによってコミュニケータに付加されたカルテシアントポロジー情報を返す． っはねねに〰次元のカルテシアントポロジーが付加されている場合，きぐぉたぃぁげごいぉきたぇぅご はのつどねび〽〰を返し，きぐぉたぃぁげごたぇぅごは全ての出力引数を変更しないで保持する．

〲〰
〲〱
〲〲
〲〳

きぐぉたぃぁげごたぇぅご〨っはねね〬 ねちへつどねび〬 つどねび〬 ばづひどはつび〬 っははひつび〩
ぉぎ

っはねね

カルテシアン構造を持つコミュニケータ（ハンドル）ぉぎ

ねちへつどねび

呼び出し側プログラムのベクトルつどねび， ばづひどはつび，
っははひつびのサイズ（整数型）

くさご

カルテシアン次元ごとのプロセスの数（整数配列）

くさご

つどねび
ばづひどはつび

くさご

っははひつび

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

カルテシアン次元のそれぞれについて周期的か否か（ぴひふづ〯てちぬびづ）（論理型配列）
カルテシアン構造中の呼び出しプロセスの座標（整
数配列）

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

どのぴ きぐぉたぃちひぴたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ ねちへつどねび〬 どのぴ 〪つどねび〬 どのぴ 〪ばづひどはつび〬
どのぴ 〪っははひつび〩
きぐぉたぃぁげごたぇぅご〨ぃくきき〬 きぁじいぉきこ〬 いぉきこ〬 ぐぅげぉくいこ〬 ぃくくげいこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 きぁじいぉきこ〬 いぉきこ〨〪〩〬 ぃくくげいこ〨〪〩〬 ぉぅげげくげ
がくぇぉぃぁが ぐぅげぉくいこ〨〪〩{ぶはどつ きぐぉ〺〺ぃちひぴっはねね〺〺ぇづぴたぴはばは〨どのぴ ねちへつどねび〬 どのぴ つどねびせそ〬 ぢははぬ ばづひどはつびせそ〬
どのぴ っははひつびせそ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〰
〴〱
〴〲

きぐぉたぃぁげごたげぁぎか〨っはねね〬 っははひつび〬 ひちのに〩
ぉぎ

っはねね

カルテシアン構造を持つコミュニケータ（ハンドル）ぉぎ

っははひつびプロセスのカルテシアン座標を指定した（サイズのつどねびの）配列（整数配列）

くさご

ひちのに

指定したプロセスのランク（整数型）

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぃちひぴたひちのに〨きぐぉたぃはねね っはねね〬 どのぴ 〪っははひつび〬 どのぴ 〪ひちのに〩〷〮〵〮 トポロジーコンストラクタ〲〷〱

きぐぉたぃぁげごたげぁぎか〨ぃくきき〬 ぃくくげいこ〬 げぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくくげいこ〨〪〩〬 げぁぎか〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぃちひぴっはねね〺〺ぇづぴたっちひぴたひちのに〨っはのびぴ どのぴ っははひつびせそ〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}〱

関数きぐぉたぃぁげごたげぁぎかは，カルテシアン構造を持つプロセスグループに対して，論理的プロセス座標を〱対〱ルーチンが使用するプロセスランクに変換する．
ばづひどはつび〨ど〩 〽 ぴひふづと な る 次 元どに つ い て， 座 標っははひつび〨ど〩 が 範 囲 外 で あ る， つ ま
りっははひつび〨ど〩 < 〰またはっははひつび〨ど〩 ≥ つどねび〨ど〩であれば，自動的に区間〰 ≤ っははひつび〨ど〩< つどねび〨ど〩へシフトされる．非周期的次元の場合には，範囲外の座標を指定すると誤りになる．
っはねねに〰次元のカルテシアントポロジーが付加されている場合，っははひつびは意味を持たず，ひちのにに〰が返される．

〵

〲
〳
〴

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

きぐぉたぃぁげごたぃくくげいこ〨っはねね〬 ひちのに〬 ねちへつどねび〬 っははひつび〩
ぉぎ

っはねね

ぉぎ

ひちのに
ねちへつどねびくさご

っははひつびぉぎ〱〶

カルテシアン構造を持つコミュニケータ（ハンドル）〱〷

グループっはねねの中でのプロセスのランク（整数型）〱〹

呼び出し側プログラムのベクトルっははひつびのサイズ
（整数型）

〱〸

〲〰
〲〱
〲〲

指定したプロセスのカルテシアン座標を格納する（サイズのつどねびの）配列（整数配列）〲〳〲〴

どのぴ きぐぉたぃちひぴたっははひつび〨きぐぉたぃはねね っはねね〬 どのぴ ひちのに〬 どのぴ ねちへつどねび〬 どのぴ 〪っははひつび〩
きぐぉたぃぁげごたぃくくげいこ〨ぃくきき〬 げぁぎか〬 きぁじいぉきこ〬 ぃくくげいこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 げぁぎか〬 きぁじいぉきこ〬 ぃくくげいこ〨〪〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃちひぴっはねね〺〺ぇづぴたっははひつび〨どのぴ ひちのに〬 どのぴ ねちへつどねび〬 どのぴ っははひつびせそ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}〲〵

きぐぉたぃぁげごたぃくくげいこは，逆のマッピングであるランクから座標への変換を行う．
っはねねに〰次元のカルテシアントポロジーが付加されている場合，っははひつびは変更されな
い．

〳〰

〲〶
〲〷
〲〸
〲〹

〳〱
〳〲
〳〳
〳〴

きぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご〨っはねね〬 ひちのに〬 ののづどでとぢはひび〩
ぉぎ

っはねね

グラフトポロジーを持つコミュニケータ（ハンド
ル）

ぉぎ

ひちのに
ののづどでとぢはひび

グループっはねねの中でのプロセスのランク（整数型）

くさご

指定したプロセスの隣接にあたるプロセスのランク（整数配列）

どのぴ きぐぉたぇひちばとたのづどでとぢはひびたっはふのぴ〨きぐぉたぃはねね っはねね〬 どのぴ ひちのに〬 どのぴ 〪ののづどでとぢはひび〩
きぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご〨ぃくきき〬 げぁぎか〬 ぎぎぅぉぇえあくげこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 げぁぎか〬 ぎぎぅぉぇえあくげこ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぇひちばとっはねね〺〺ぇづぴたのづどでとぢはひびたっはふのぴ〨どのぴ ひちのに〩 っはのびぴ （廃止された呼び出し形
式, 第15.2節を参照）}

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〷〮 プロセストポロジー

〲〷〲
〱
〲

きぐぉたぇげぁぐえたぎぅぉぇえあくげこ〨っはねね〬 ひちのに〬 ねちへのづどでとぢはひび〬 のづどでとぢはひび〩
ぉぎ

っはねね

グラフトポロジーを持つコミュニケータ（ハンド
ル）

ぉぎ

ひちのに
ねちへのづどでとぢはひびのづどでとぢはひび

グループっはねねの中でのプロセスのランク（整数型）

〳
〴
〵
〶
〷

ぉぎ
くさご

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

配列のづどでとぢはひび のサイズ（整数型）
指定したプロセスの隣接にあたるプロセスのランク（整数配列）

どのぴ きぐぉたぇひちばとたのづどでとぢはひび〨きぐぉたぃはねね っはねね〬 どのぴ ひちのに〬 どのぴ ねちへのづどでとぢはひび〬
どのぴ 〪のづどでとぢはひび〩
きぐぉたぇげぁぐえたぎぅぉぇえあくげこ〨ぃくきき〬 げぁぎか〬 きぁじぎぅぉぇえあくげこ〬 ぎぅぉぇえあくげこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 げぁぎか〬 きぁじぎぅぉぇえあくげこ〬 ぎぅぉぇえあくげこ〨〪〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぇひちばとっはねね〺〺ぇづぴたのづどでとぢはひび〨どのぴ ひちのに〬 どのぴ ねちへのづどでとぢはひび〬 どのぴのづどでとぢはひびせそ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎごおよびきぐぉたぇげぁぐえたぎぅぉぇえあくげこは一般的なグラフ
ト ポ ロ ジ ー の 隣 接 情 報 を 提 供 す る． 問 い 合 わ さ れ た ラ ン ク に 対 し て 返 さ れ る 隣 接の 数 と 配 列 で は， 全 て の 隣 接 が 対 象 と さ れ， きぐぉたぇげぁぐえたぃげぅぁごぅの 最 初 の 呼 び 出
し で 指 定 さ れ た の と 同 じ エ ッ ジ の 順 序 が 反 映 さ れ る． 特 に，きぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご ときぐぉたぇげぁぐえたぎぅぉぇえあくげこは，
きぐぉたぇげぁぐえたぃげぅぁごぅに渡された最初のどのつづへおよびづつでづび配列に基づいて（どのつづへせ〭〱そが実質的に〰であると仮定して）値を返す．
• きぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎごから返されるっはふのぴは〨どのつづへせひちのにそ〭 どのつづへせひちのに〭〱そ〩となる．
• きぐぉたぇげぁぐえたぎぅぉぇえあくげこか ら 返 さ れ るのづどでとぢはひび配 列 はづつでづびせどのつづへせひちのに〭〱そそからづつでづびせどのつづへせひちのにそ〭〱そまでとなる．

〳〰
〳〱
〳〲

例 7.5
以下の隣接行列を持つ〴個のプロセス〰，〱，〲，〳があるとするは〲回以上示される）．

（一部の隣接

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ばひはっづびび〰
〱〲〳のづどでとぢはひび〱〬 〱〬 〳〰〬 〰
〳〰〬 〲〬 〲

そのため，きぐぉたぇげぁぐえたぃげぅぁごぅの入力引数は以下のようになる．
ののはつづび 〽
どのつづへ 〽
づつでづび 〽

〴〳〬 〵〬 〶〬 〹〱〬 〱〬 〳〬 〰〬 〰〬 〳〬 〰〬 〲〬 〲したがって，〴つの各プロセスに対する呼び出しきぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎごお
よびきぐぉたぇげぁぐえたぎぅぉぇえあくげこは以下を返す．

〷〮〵〮 トポロジーコンストラクタ
Input rank

Count

〰
〱
〲
〳

〳
〲
〱
〳

〲〷〳
〱

Neighbors〲〱〬 〱〬 〳〰〬 〰
〳〰〬 〲〬 〲

〳
〴
〵
〶
〷
〸

例 7.6 っはねねはシャッフルエクスチェンジを持つコミュニケータとする．このグループ
は〲n 個のメンバを持つ．各プロセス にはa1 , . . . , an ，ここでai ∈ {〰, 〱}，というラベルが付けられており，それぞれ〳個の隣接を持つ．エクスチェンジとはづへっとちのでづ〨a1 , . . . , an 〩 〽
a1 , . . . , an−1 , a〖n 〨〖a 〽 〱 − a〩，シャッフルとは びとふ』づ〨a1 , . . . , an 〩 〽 a2 , . . . , an , a1 ，アンシャッフルとはふのびとふ』づ〨a1 , . . . , an 〩 〽 an , a1 , . . . , an−1 であるとする．n 〽 〳ではグラフの隣接リストは以下の通りである．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

node
〰
〱
〲
〳
〴
〵
〶
〷

〨〰〰〰〩
〨〰〰〱〩
〨〰〱〰〩
〨〰〱〱〩
〨〱〰〰〩
〨〱〰〱〩
〨〱〱〰〩
〨〱〱〱〩

exchangeのづどでとぢはひび〨〱〩shuffleのづどでとぢはひび〨〲〩unshuffleのづどでとぢはひび〨〳〩

〱
〰
〳
〲
〵
〴
〷
〶

〰
〲
〴
〶
〱
〳
〵
〷

〰
〴
〱
〵
〲
〶
〳
〷

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

コミュニケータっはねねには上記トポロジーが付加されているとする．以下の部分コードはこの〳種類の隣接を順繰りに巡り，それぞれに適切な置換を実行する．

〳〱
〳〲
〳〳

ぃ
ぃ
ぃ
ぃ
ぃ

ちびびふねづ〺 づちっと ばひはっづびび とちび びぴはひづつ ち ひづちぬ のふねぢづひ ぁ〮
づへぴひちっぴ のづどでとぢはひとははつ どのてはひねちぴどはのぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ねべひちのに〬 どづひひ〩
ぃぁがが きぐぉたぇげぁぐえたぎぅぉぇえあくげこ〨っはねね〬 ねべひちのに〬 〳〬 のづどでとぢはひび〬 どづひひ〩
ばづひてはひね づへっとちのでづ ばづひねふぴちぴどはのぃぁがが きぐぉたこぅぎいげぅぃざたげぅぐがぁぃぅ〨ぁ〬 〱〬 きぐぉたげぅぁが〬 のづどでとぢはひび〨〱〩〬 〰〫〬のづどでとぢはひび〨〱〩〬 〰〬 っはねね〬 びぴちぴふび〬 どづひひ〩
ばづひてはひね びとふててぬづ ばづひねふぴちぴどはのぃぁがが きぐぉたこぅぎいげぅぃざたげぅぐがぁぃぅ〨ぁ〬 〱〬 きぐぉたげぅぁが〬 のづどでとぢはひび〨〲〩〬 〰〫〬のづどでとぢはひび〨〳〩〬 〰〬 っはねね〬 びぴちぴふび〬 どづひひ〩
ばづひてはひね ふのびとふててぬづ ばづひねふぴちぴどはのぃぁがが きぐぉたこぅぎいげぅぃざたげぅぐがぁぃぅ〨ぁ〬 〱〬 きぐぉたげぅぁが〬 のづどでとぢはひび〨〳〩〬 〰〫〬のづどでとぢはひび〨〲〩〬 〰〬 っはねね〬 びぴちぴふび〬 どづひひ〩

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎごおよびきぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこは分散
グラフトポロジーの隣接情報を提供する．

〴〷〴〸

第 〷〮 プロセストポロジー

〲〷〴
〱
〲

きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご〨っはねね〬 どのつづでひづづ〬 はふぴつづでひづづ〬 ぷづどでとぴづつ〩
ぉぎ

っはねね

分散グラフトポロジーを持つコミュニケータ（ハン
ドル）

くさご

どのつづでひづづ
はふぴつづでひづづ
ぷづどでとぴづつ

このプロセスへのエッジの数（非負の整数型）

〳
〴
〵
〶
〷

くさご
くさご

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

このプロセスからのエッジの数（非負の整数型）
生成中にきぐぉたさぎしぅぉぇえごぅいが渡される場合はてちぬびづ，
それ以外の場合はぴひふづ（論理型）

どのぴ きぐぉたいどびぴたでひちばとたのづどでとぢはひびたっはふのぴ〨きぐぉたぃはねね っはねね〬 どのぴ 〪どのつづでひづづ〬
どのぴ 〪はふぴつづでひづづ〬 どのぴ 〪ぷづどでとぴづつ〩
きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご〨ぃくきき〬 ぉぎいぅぇげぅぅ〬 くさごいぅぇげぅぅ〬 しぅぉぇえごぅい〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぎいぅぇげぅぅ〬 くさごいぅぇげぅぅ〬 ぉぅげげくげ
がくぇぉぃぁが しぅぉぇえごぅい{ぶはどつ きぐぉ〺〺いどびぴでひちばとっはねね〺〺ぇづぴたつどびぴたのづどでとぢはひびたっはふのぴ〨どのぴ〦 どのつづでひづづ〬
どのぴ〦 はふぴつづでひづづ〬 ぢははぬ〦 ぷづどでとぴづつ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〱〷
〱〸
〱〹
〲〰

きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこ〨っはねね〬 ねちへどのつづでひづづ〬 びはふひっづび〬 びはふひっづぷづどでとぴび〬 ねちへはふぴつづでひづづ〬
つづびぴどのちぴどはのび〬 つづびぴぷづどでとぴび〩
ぉぎ

っはねね

分散グラフトポロジーを持つコミュニケータ（ハンドル）ぉぎ

ねちへどのつづでひづづ

びはふひっづびおよびびはふひっづぷづどでとぴび配列のサイズ（非負の整
数型）

くさご

びはふひっづび

呼び出しプロセスが送信先となるプロセス（非負の整数から成る配列）

くさご

びはふひっづぷづどでとぴび

呼び出しプロセスへのエッジの重み付け（非負の 整数から成る配列）ぉぎ

ねちへはふぴつづでひづづ

つづびぴどのちぴどはのびおよびつづびぴぷづどでとぴび配列のサイズ（非負の
整数型）

くさご

つづびぴどのちぴどはのび

呼び出しプロセスが送信元となるプロセス（非負の整数からなる配列）

くさご

つづびぴぷづどでとぴび

呼び出しプロセスからのエッジの重み付け（非負の整数から成る配列）

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたいどびぴたでひちばとたのづどでとぢはひび〨きぐぉたぃはねね っはねね〬 どのぴ ねちへどのつづでひづづ〬 どのぴ びはふひっづびせそ〬
どのぴ びはふひっづぷづどでとぴびせそ〬 どのぴ ねちへはふぴつづでひづづ〬 どのぴ つづびぴどのちぴどはのびせそ〬
どのぴ つづびぴぷづどでとぴびせそ〩
きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこ〨ぃくきき〬 きぁじぉぎいぅぇげぅぅ〬 こくさげぃぅこ〬 こくさげぃぅしぅぉぇえごこ〬
きぁじくさごいぅぇげぅぅ〬 いぅこごぉぎぁごぉくぎこ〬 いぅこごしぅぉぇえごこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 きぁじぉぎいぅぇげぅぅ〬 こくさげぃぅこ〨〪〩〬 こくさげぃぅしぅぉぇえごこ〨〪〩〬 きぁじくさごいぅぇげぅぅ〬
いぅこごぉぎぁごぉくぎこ〨〪〩〬 いぅこごしぅぉぇえごこ〨〪〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺いどびぴでひちばとっはねね〺〺ぇづぴたつどびぴたのづどでとぢはひび〨どのぴ ねちへどのつづでひづづ〬
どのぴ びはふひっづびせそ〬 どのぴ びはふひっづぷづどでとぴびせそ〬 どのぴ ねちへはふぴつづでひづづ〬
どのぴ つづびぴどのちぴどはのびせそ〬 どのぴ つづびぴぷづどでとぴびせそ〩 （廃止された呼び出し形式,
第15.2節を参照）}
これらの呼び出しはローカルである． きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎごによ
っ て 返 さ れ る プ ロ セ ス と の 間 で や り と り さ れ る エ ッ ジ の 数 は，きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎごまたは きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅの呼び出し〷〮〵〮 トポロジーコンストラクタ〲〷〵

で（きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅの場合はおそらく呼び出しプロセス以外のプロセス
によって）渡されるこのようなエッジの総数である． 複数回定義されているエッジ
は きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこによって全てカウントされ，ある順序で返される．
びはふひっづぷづどでとぴびまたはつづびぴぷづどでとぴびあるいは両方に対しきぐぉたさぎしぅぉぇえごぅいが渡されていた場
合，あるいはグラフ作成時にきぐぉたさぎしぅぉぇえごぅいが指定されていた場合，それに対応する重みの情報は何も返されない．びはふひっづびとつづびぴどのちぴどはのびの値の順序に関する要件は，同じ入力引数っはねねを使用したルーチンの〲つの呼び出しがエッジを同じ順序で返すことのみ で あ る． ねちへどのつづでひづづま た はねちへはふぴつづでひづづがきぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげたぃくさぎごによって返された数字よりも小さい場合，リスト全体のうちの最初の部分のみが返される．返されるエッジの順序は， きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎごを使用した場
合にっはねねの作成時に与えられた順序と同じでなくても構わない．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

実装者へのアドバイス 問い合わせ呼び出しはローカルとして定義されるため，各プロセスは入力エッジと出力エッジにより隣接のリストを格納する必要があ
る． 分散グラフ指定から各プロセスの隣接リストを計算するため，
きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅの集団呼び出しで通信が必要となる． （実装者へのア
ドバイス終わり）

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

7.5.6 カルテシアン座標のシフト〲〳

プロセストポロジーがカルテシアン構造であれば，座標方向に沿った
きぐぉたこぅぎいげぅぃざ操作を使用して，データのシフトを実行したい場合がある．
きぐぉたこぅぎいげぅぃざは入力として，受信については送信元プロセスのランクを，送信については送信先プロセスのランクをとる． カルテシアンプロセスグループに対して関数きぐぉたぃぁげごたこえぉうごが呼ばれると，呼び出しプロセスに上記の識別子を与える．これはきぐぉたこぅぎいげぅぃざに渡すことができる．ユーザは，座標方向と（正または負の）シフト
するステップ数を指定する．この関数はローカルである．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

きぐぉたぃぁげごたこえぉうご〨っはねね〬 つどひづっぴどはの〬 つどびば〬 ひちのにたびはふひっづ〬 ひちのにたつづびぴ〩

〳〴
〳〵

ぉぎ

っはねね

カルテシアン構造を持つコミュニケータ（ハンドル）ぉぎ

つどひづっぴどはの
つどびば

シフトを行なう座標の次元（整数型）

ひちのにたびはふひっづ
ひちのにたつづびぴ

送信元プロセスのランク（整数）〴〱

送信先プロセスのランク（整数）

〴〲

ぉぎ
くさご
くさご

変位（> 〰：上方へのシフト < 〰：下方へのシフト）（整数型）

〳〶
〳〷
〳〸
〳〹
〴〰

〴〳

どのぴ きぐぉたぃちひぴたびとどてぴ〨きぐぉたぃはねね っはねね〬 どのぴ つどひづっぴどはの〬 どのぴ つどびば〬
どのぴ 〪ひちのにたびはふひっづ〬 どのぴ 〪ひちのにたつづびぴ〩
きぐぉたぃぁげごたこえぉうご〨ぃくきき〬 いぉげぅぃごぉくぎ〬 いぉこぐ〬 げぁぎかたこくさげぃぅ〬 げぁぎかたいぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 いぉげぅぃごぉくぎ〬 いぉこぐ〬 げぁぎかたこくさげぃぅ〬 げぁぎかたいぅこご〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃちひぴっはねね〺〺ことどてぴ〨どのぴ つどひづっぴどはの〬 どのぴ つどびば〬 どのぴ〦 ひちのにたびはふひっづ〬
どのぴ〦 ひちのにたつづびぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〴
〴〵
〴〶
〴〷
〴〸

第 〷〮 プロセストポロジー

〲〷〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

引数つどひづっぴどはのはシフトの次元，つまりシフトで値が変更される座標を示している．
のつどねびを次元数とすると，座標には 〰からのつどねび〭〱までの番号が付けられる．
きぐぉたぃぁげごたこえぉうごは，指定された座標方向におけるカルテシアングループが周期的か否かに応じて，循環シフトかまたは非循環シフトの識別子を提供する．非循環シフトの場合，値きぐぉたぐげくぃたぎさがが をひちのにたびはふひっづまたはひちのにたつづびぴに返すことがある．これは，シフトの送信元または送信先が範囲外であることを示している．
負の値またはカルテシアンコミュニケータの次元数以上の値を指定してきぐぉたぃぁげごたこえぉうごを呼び出すと，誤りになる．このことは，〰次元のカルテシアントポ
ロジーが付加されたっはねねを使用してきぐぉたぃぁげごたこえぉうごを呼び出した場合も誤りになることを示している．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

例 7.7 コミュニケータっはねねには〲次元周期的カルテシアントポロジーが付加されているとする．また，げぅぁが型の〲次元配列〱プロセスにつき〱要素という形で変数ぁに格納されているとする．この配列を列どがどステップだけシフトするように（垂直に，つまり列に沿って）変形したい．
〮〮〮〮
ぃ てどのつ ばひはっづびび ひちのにぃぁがが きぐぉたぃくききたげぁぎか〨っはねね〬 ひちのに〬 どづひひ〩
ぃ てどのつ ぃちひぴづびどちの っははひつどのちぴづびぃぁがが きぐぉたぃぁげごたぃくくげいこ〨っはねね〬 ひちのに〬 ねちへつどねび〬 っははひつび〬 どづひひ〩
ぃ っはねばふぴづ びとどてぴ びはふひっづ ちのつ つづびぴどのちぴどはのぃぁがが きぐぉたぃぁげごたこえぉうご〨っはねね〬 〰〬 っははひつび〨〲〩〬 びはふひっづ〬 つづびぴ〬 どづひひ〩
ぃ びにづぷ ちひひちべぃぁがが きぐぉたこぅぎいげぅぃざたげぅぐがぁぃぅ〨ぁ〬 〱〬 きぐぉたげぅぁが〬 つづびぴ〬 〰〬 びはふひっづ〬 〰〬 っはねね〫〬
びぴちぴふび〬 どづひひ〩〲〸

ユーザへのアドバイス うはひぴひちの言語において，いぉげぅぃごぉくぎ 〽 どで示される次元はいぉきこ〨ど〫〱〩個のノードを持つ．ここでいぉきこは格子を生成するのに使用した配列である．ぃ言語においては， つどひづっぴどはの 〽 ど で示される次元はつどねびせどそで指定される次元である． （ユーザへのアドバイス終わり）

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

7.5.7 カルテシアン構造の分割

〳〶
〳〷
〳〸
〳〹

きぐぉたぃぁげごたこさあ〨っはねね〬 ひづねちどのたつどねび〬 のづぷっはねね〩
ぉぎ

っはねね

カルテシアン構造を持つコミュニケータ（ハンドル）ぉぎ

ひづねちどのたつどねび

ひづねちどのたつどねびのど番目のエントリがぴひふづであれば部分格子に残り，てちぬびづ であれば部分格子に残らない，という指定をおこなう（論理型ベクトル）

くさごのづぷっはねね

呼び出しプロセスを含む部分格子を持つコミュニケータ（ハンドル）

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぃちひぴたびふぢ〨きぐぉたぃはねね っはねね〬 どのぴ 〪ひづねちどのたつどねび〬 きぐぉたぃはねね 〪のづぷっはねね〩
きぐぉたぃぁげごたこさあ〨ぃくきき〬 げぅきぁぉぎたいぉきこ〬 ぎぅしぃくきき〬 ぉぅげげくげ〩〷〮〵〮 トポロジーコンストラクタ〲〷〷

ぉぎごぅぇぅげ ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ
がくぇぉぃぁが げぅきぁぉぎたいぉきこ〨〪〩{きぐぉ〺〺ぃちひぴっはねね きぐぉ〺〺ぃちひぴっはねね〺〺こふぢ〨っはのびぴ ぢははぬ ひづねちどのたつどねびせそ〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}〱

カルテシアントポロジーをきぐぉたぃぁげごたぃげぅぁごぅで生成した場合には，関数
きぐぉたぃぁげごたこさあにより，より低い次元を持つカルテシアン部分格子を形成するサブグ
ループにコミュニケータを分割し，各サブグループごとに部分格子 となるようなコ
ミュニケータを生成することができる．ひづねちどのたつどねびの全てのエントリがてちぬびづか，またはっはねねにすでに〰次元のカルテシアントポロジーが付加されている場合，のづぷっはねねに〰次
元のカルテシアントポロジーが付加される．（この関数は，きぐぉたぃくききたこぐがぉごと密接に関係している．）

〵

〲
〳
〴

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

例 7.8 きぐぉたぃぁげごたぃげぅぁごぅ〨〮〮〮〬 っはねね〩によって〨〲 × 〳 × 〴〩格子が定義されていると仮定する．ひづねちどのたつどねび 〽 〨ぴひふづ〬 てちぬびづ〬 ぴひふづ〩 とすると，次の関数呼び出しにより，
きぐぉたぃぁげごたこさあ〨っはねね〬 ひづねちどのたつどねび〬 っはねねたのづぷ〩〬

〱〴
〱〵
〱〶
〱〷
〱〸

〲 × 〴カルテシアントポロジーを成す〸個のプロセスを持つ〳個のコミュニケータが生成される．ひづねちどのたつどねび 〽 〨てちぬびづ〬 てちぬびづ〬 ぴひふづ〩とすると，きぐぉたぃぁげごたこさあ〨っはねね〬
ひづねちどのたつどねび〬 っはねねたのづぷ〩の呼び出しで，〱次元カルテシアントポロジーを成す〴個のプロセスを持つ，重なり合わない〶個のコミュニケータが生成される．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

7.5.8 低レベルトポロジー関数〲〵〲〶

この節で紹介する〲つの追加関数を使用すると，他の全てのトポロジー関数を実装する
ことができる．一般に，これらはきぐぉが提供している機能に加えて仮想トポロジー機能を作成する場合でないかぎり，ユーザが直接呼び出すような関数ではない．

〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉたぃぁげごたきぁぐ〨っはねね〬 のつどねび〬 つどねび〬 ばづひどはつび〬 のづぷひちのに〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

っはねね
のつどねび
つどねび
ばづひどはつびのづぷひちのに〳〲

入力コミュニケータ（ハンドル）〳〳

カルテシアン構造の次元数（整数型）〳〴

各座標方向におけるプロセス数を指定したサイズのつどねびの整数配列〳〵

各座標方向に対しその格子が周期的か否かを指定したサイズのつどねびの論理型配列〳〷

呼び出しプロセスの再順序付けされたランク．呼び出しプロセスが格子に属さなければきぐぉたさぎいぅうぉぎぅいとなる．（整数型）

〳〹

〳〶

〳〸

〴〰
〴〱
〴〲

どのぴ きぐぉたぃちひぴたねちば〨きぐぉたぃはねね っはねね〬 どのぴ のつどねび〬 どのぴ 〪つどねび〬 どのぴ 〪ばづひどはつび〬
どのぴ 〪のづぷひちのに〩きぐぉたぃぁげごたきぁぐ〨ぃくきき〬 ぎいぉきこ〬 いぉきこ〬 ぐぅげぉくいこ〬 ぎぅしげぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎいぉきこ〬 いぉきこ〨〪〩〬 ぎぅしげぁぎか〬 ぉぅげげくげ
がくぇぉぃぁが ぐぅげぉくいこ〨〪〩{どのぴ きぐぉ〺〺ぃちひぴっはねね〺〺きちば〨どのぴ のつどねび〬 っはのびぴ どのぴ つどねびせそ〬 っはのびぴ ぢははぬ ばづひどはつびせそ〩
っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〷〮 プロセストポロジー

〲〷〸
〱
〲
〳
〴

きぐぉたぃぁげごたきぁぐは呼び出しプロセスの物理マシン上での「最適な」配置を計算する．
この関数の実装としては，常に呼び出しプロセスのランクを返す，つまり順序を変更しないものが考えられる．
実装者へのアドバイス 関数きぐぉたぃぁげごたぃげぅぁごぅ〨っはねね〬 のつどねび〬 つどねび〬 ばづひどはつび〬 ひづはひつづひ〬っはねねたっちひぴ〩 は，ひづはひつづひ 〽 ぴひふづ の場合には， きぐぉたぃぁげごたきぁぐ〨っはねね〬 のつどねび〬 つどねび〬
ばづひどはつび〬 のづぷひちのに〩を 呼 び 出 し， 次 にのづぷひちのに 6〽 きぐぉたさぎいぅうぉぎぅいで あ れ ば っはぬはひ 〽
〰とし，それ以外の場合にはっはぬはひ 〽 きぐぉたさぎいぅうぉぎぅい，そしてにづべ 〽 のづぷひちのにとしてきぐぉたぃくききたこぐがぉご〨っはねね〬 っはぬはひ〬 にづべ〬 っはねねたっちひぴ〩を呼び出すことで実装できる．

〵
〶
〷
〸
〹
〱〰
〱〱

関数きぐぉたぃぁげごたこさあ〨っはねね〬 ひづねちどのたつどねび〬 っはねねたのづぷ〩は，破棄する次元をまとめて〱つ の 数 に エ ン コ ー デ ィ ン グ し てっはぬはひと し， 残 す 次 元 を ま と め て〱つ の 数に エ ン コ ー デ ィ ン グ し た も の を 用 い て， きぐぉたぃくききたこぐがぉご〨っはねね〬 っはぬはひ〬 にづべ〬っはねねたのづぷ〩を呼び出すことで実装できる．

〱〲
〱〳
〱〴
〱〵
〱〶

他の全てのカルテシアントポロジー関数は，コミュニケータにキャッシュされているトポロジー情報を使用し，ローカルに実装できる． （実装者へのアドバイス終
わり）

〱〷
〱〸
〱〹
〲〰
〲〱

上の関数に対応する，一般的なグラフ構造のための新しい関数は次の通りである．

〲〲
〲〳
〲〴
〲〵

きぐぉたぇげぁぐえたきぁぐ〨っはねね〬 ののはつづび〬 どのつづへ〬 づつでづび〬 のづぷひちのに〩
ぉぎ
ぉぎ

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

ぉぎ
ぉぎ
くさご

っはねね
ののはつづび
どのつづへ

入力コミュニケータ（ハンドル）

づつでづびのづぷひちのにグラフ構造を指定する整数配列

グラフのノードの個数（整数）
グラフ構造を指定する整数型配列
きぐぉたぇげぁぐえたぃげぅぁごぅを参照
呼び出しプロセスの再順序付けられたランク．呼び出しプロセスがグラフに属さなければきぐぉたさぎいぅうぉぎぅいとなる（整数）

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

どのぴ きぐぉたぇひちばとたねちば〨きぐぉたぃはねね っはねね〬 どのぴ ののはつづび〬 どのぴ 〪どのつづへ〬 どのぴ 〪づつでづび〬
どのぴ 〪のづぷひちのに〩きぐぉたぇげぁぐえたきぁぐ〨ぃくきき〬 ぎぎくいぅこ〬 ぉぎいぅじ〬 ぅいぇぅこ〬 ぎぅしげぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎぎくいぅこ〬 ぉぎいぅじ〨〪〩〬 ぅいぇぅこ〨〪〩〬 ぎぅしげぁぎか〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぇひちばとっはねね〺〺きちば〨どのぴ ののはつづび〬 っはのびぴ どのぴ どのつづへせそ〬 っはのびぴ どのぴ づつでづびせそ〩
っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
実装者へのアドバイス 関数きぐぉたぇげぁぐえたぃげぅぁごぅ〨っはねね〬 ののはつづび〬 どのつづへ〬 づつでづび〬 ひづ〭
はひつづひ〬 っはねねたでひちばと〩 は，ひづはひつづひ 〽 ぴひふづの場合には，きぐぉたぇげぁぐえたきぁぐ〨っはねね〬 のの〭
はつづび〬 どのつづへ〬 づつでづび〬 のづぷひちのに〩を 呼 び 出 し， 次 にのづぷひちのに 6〽 きぐぉたさぎいぅうぉぎぅいで あ れ
ばっはぬはひ 〽 〰と し， そ れ 以 外 の 場 合 に はっはぬはひ 〽 きぐぉたさぎいぅうぉぎぅい， そ し てにづべ 〽
のづぷひちのにとしてきぐぉたぃくききたこぐがぉご〨っはねね〬 っはぬはひ〬 にづべ〬 っはねねたでひちばと〩を呼び出すことで実装できる．

〴〶〴〷〴〸他の全てのグラフトポロジー関数は，コミュニケータにキャッシュされているトポ
ロジー情報を使用し，ローカルに実装できる． （実装者へのアドバイス終わり）〷〮〶〮 アプリケーション例〲〷〹

7.6 アプリケーション例〱〲

例 7.9 図〷〮〱の例は，格子定義と問い合わせ関数をアプリケーションプログラムでどのように使用するかを示している．偏微分方程式，例えばポアソン方程式を矩形領域について解いてみる．まず，プロセス群を〲次元構造に組織する．各プロセスは〴方向（上下左右）の隣接のランクを問い合わせる．数値問題は反復法で解く．詳細はサブルーチ
ンひづぬちへの中に隠されている．
各緩和ステップで，各プロセスは自身が所有している全ての点について格子点に対する解関数の値を計算する．次に，プロセス間の境界の値を隣接プロセスと交換しなければならない．例えばサブルーチン づへっとちのでづに，更新された値を左側の隣接〨ど〭〱〬な〩に送るためのきぐぉたこぅぎい〨〮〮〮〬のづどでとたひちのに〨〱〩〮〮〮〬〩のような呼び出しを含むことができる．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〲〸〰

第 〷〮 プロセストポロジー

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

ぃ

〱〳
〱〴
〱〵
〱〶

ぃ

〱〷
〱〸
〱〹
〲〰

ぃ
ぃ

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

ぃ

〳〶
〳〷
〳〸
〳〹

ぃ

〴〰
〴〱
〴〲
〴〳

〱〰

どのぴづでづひ のつどねび〬 のふねたのづどでとぬはでどっちぬ ひづはひつづひ
ばちひちねづぴづひ 〨のつどねび〽〲〬 のふねたのづどでと〽〴〬 ひづはひつづひ〽〮ぴひふづ〮〩
どのぴづでづひ っはねね〬 っはねねたっちひぴ〬 つどねび〨のつどねび〩〬 のづどでとたつづて〨のつどねび〩〬 どづひひ
どのぴづでづひ のづどでとたひちのに〨のふねたのづどでと〩〬 はぷのたばはびどぴどはの〨のつどねび〩〬 ど〬 な
ぬはでどっちぬ ばづひどはつび〨のつどねび〩
ひづちぬ∗〸 ふ〨〰〺〱〰〱〬〰〺〱〰〱〩〬 て〨〰〺〱〰〱〬〰〺〱〰〱〩
つちぴち つどねび 〯 のつどねび ∗ 〰 〯っはねね 〽 きぐぉたぃくききたしくげがい
こづぴ ばひはっづびび でひどつ びどぺづ ちのつ ばづひどはつどっどぴべ
っちぬぬ きぐぉたいぉきこたぃげぅぁごぅ〨っはねね〬 のつどねび〬 つどねび〬どづひひ〩
ばづひどはつび〨〱〩 〽 〮ごげさぅ〮
ばづひどはつび〨〲〩 〽 〮ごげさぅ〮
ぃひづちぴづ ち でひどつ びぴひふっぴふひづ どの しくげがい でひはふば ちのつ どのぱふどひづ ちぢはふぴ はぷの ばはびどぴどはのっちぬぬ きぐぉたぃぁげごたぃげぅぁごぅ 〨っはねね〬 のつどねび〬 つどねび〬 ばづひどはつび〬 ひづはひつづひ〬 っはねねたっちひぴ〬どづひひ〩
っちぬぬ きぐぉたぃぁげごたぇぅご 〨っはねねたっちひぴ〬 のつどねび〬 つどねび〬 ばづひどはつび〬 はぷのたばはびどぴどはの〬どづひひ〩がははに ふば ぴとづ ひちのにび てはひ ぴとづ のづどでとぢはひび〮 くぷの ばひはっづびび っははひつどのちぴづび ちひづ 〨ど〬な〩〮ぎづどでとぢはひび ちひづ 〨ど〭〱〬な〩〬 〨ど〫〱〬な〩〬 〨ど〬な〭〱〩〬 〨ど〬な〫〱〩ど 〽 はぷのたばはびどぴどはの〨〱〩な 〽 はぷのたばはびどぴどはの〨〲〩のづどでとたつづて〨〱〩 〽 ど〭〱のづどでとたつづて〨〲〩 〽 な
っちぬぬ きぐぉたぃぁげごたげぁぎか 〨っはねねたっちひぴ〬 のづどでとたつづて〬 のづどでとたひちのに〨〱〩〬どづひひ〩のづどでとたつづて〨〱〩 〽 ど〫〱のづどでとたつづて〨〲〩 〽 な
っちぬぬ きぐぉたぃぁげごたげぁぎか 〨っはねねたっちひぴ〬 のづどでとたつづて〬 のづどでとたひちのに〨〲〩〬どづひひ〩のづどでとたつづて〨〱〩 〽 どのづどでとたつづて〨〲〩 〽 な〭〱
っちぬぬ きぐぉたぃぁげごたげぁぎか 〨っはねねたっちひぴ〬 のづどでとたつづて〬 のづどでとたひちのに〨〳〩〬どづひひ〩のづどでとたつづて〨〱〩 〽 どのづどでとたつづて〨〲〩 〽 な〫〱
っちぬぬ きぐぉたぃぁげごたげぁぎか 〨っはねねたっちひぴ〬 のづどでとたつづて〬 のづどでとたひちのに〨〴〩〬どづひひ〩ぉのどぴどちぬどぺづ ぴとづ でひどつ てふのっぴどはのび ちのつ びぴちひぴ ぴとづ どぴづひちぴどはのっちぬぬ どのどぴ 〨ふ〬 て〩つは 〱〰 どぴ〽〱〬〱〰〰
っちぬぬ ひづぬちへ 〨ふ〬 て〩ぅへっとちのでづ つちぴち ぷどぴと のづどでとぢはひ ばひはっづびびづび
っちぬぬ づへっとちのでづ 〨ふ〬 っはねねたっちひぴ〬 のづどでとたひちのに〬 のふねたのづどでと〩っはのぴどのふづ
っちぬぬ はふぴばふぴ 〨ふ〩
づのつ

〴〴
〴〵
〴〶
〴〷
〴〸

図 〷〮〱〺 〲次元並列ポアソンソルバーのプロセス構造のセットアップ

〱
〲
〳
〴
〵

第8章

〶
〷
〸
〹
〱〰

MPI環境管理

〱〱
〱〲
〱〳
〱〴

本章では，きぐぉの実装と実行環境（エラー処理など）に関連する各種パラメータの取得および設定（設定ついては適当な場合）を行うルーチンについて論じる．きぐぉ実行環
境へ入退場するための手続きについてもここで説明する．

〱〵
〱〶
〱〷
〱〸
〱〹

8.1 実装情報〲〰

8.1.1 バージョンの問い合わせ〲〲

きぐぉ標準の変更に対処するため，使っている環境において，きぐぉ標準のどのバージョン
を使用中であるかを確認するための，コンパイル時および実行時の両方の手段がある．
「バージョン」は，バージョンとサブバージョンを示す〲つの独立した整数によって表現される．ぃ言語およびぃ〫〫言語では以下のようになる．

〲〴

〲〱

〲〳

〲〵
〲〶
〲〷
〲〸
〲〹

〣つづてどのづ きぐぉたざぅげこぉくぎ〲〣つづてどのづ きぐぉたこさあざぅげこぉくぎ 〲〳〰
〳〱うはひぴひちの言語では以下のようになる．

〳〲〳〳

ぉぎごぅぇぅげ きぐぉたざぅげこぉくぎ〬 きぐぉたこさあざぅげこぉくぎ
ぐぁげぁきぅごぅげ 〨きぐぉたざぅげこぉくぎ〽 〲〩ぐぁげぁきぅごぅげ 〨きぐぉたこさあざぅげこぉくぎ 〽 〲〩

〳〴
〳〵
〳〶

実行時に知る方法は以下のとおりである．

〳〷
〳〸
〳〹

きぐぉたぇぅごたざぅげこぉくぎ〨 ぶづひびどはの〬 びふぢぶづひびどはの 〩
くさご
くさご

ぶづひびどはのびふぢぶづひびどはの〴〰

バージョン番号（整数型）〴〱

サブバージョン番号（整数型）〴〲〴〳

どのぴ きぐぉたぇづぴたぶづひびどはの〨どのぴ 〪ぶづひびどはの〬 どのぴ 〪びふぢぶづひびどはの〩
きぐぉたぇぅごたざぅげこぉくぎ〨ざぅげこぉくぎ〬 こさあざぅげこぉくぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ざぅげこぉくぎ〬 こさあざぅげこぉくぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぇづぴたぶづひびどはの〨どのぴ〦 ぶづひびどはの〬 どのぴ〦 びふぢぶづひびどはの〩 （廃止された呼び出し形式,
第15.2節を参照）}

〴〴
〴〵
〴〶
〴〷
〴〸

〲〸〱

第 〸〮 乍乐义環境管理

〲〸〲
〱
〲
〳
〴

きぐぉたぇぅごたざぅげこぉくぎはきぐぉたぉぎぉごの前ときぐぉたうぉぎぁがぉずぅの後に呼び出すことができる数
少 な い 関 数 の〱つ で あ る． きぐぉ標 準 の こ の バ ー ジ ョ ン と 以 前 の バ ー ジ ョ ン で 有 効 な〨きぐぉたざぅげこぉくぎ〬 きぐぉたこさあざぅげこぉくぎ〩のペアは 〨〲〬〲〩，〨〲〬〱〩，〨〲〬〰〩，および〨〱〬〲〩である．

〵〶

8.1.2 環境の問い合わせ

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

きぐぉが初期化される時，実行環境を記述する属性の集合がコミュニケータきぐぉたぃくききたしくげがいに結びつけられる．これらの属性の値を問い合わせるには，第〶章で説明した関数きぐぉたぃくききたぇぅごたぁごごげを使用する．これらの属性の削除，キーの解放，および値の変更をするのは誤りである．
定義済み属性キーとしては次のものがある．
MPIたTAGたUB タグ値の上限．

〱〵
〱〶
〱〷

MPIたHOST ホストプロセスが存在していればそのランク，そうでなければきぐぉたぐげくぃたぎさがが．

〱〸
〱〹
〲〰

MPIたIO 正規の入出力機能を持つノードのランク（場合によってはねべひちのに）．同じコミュ

ニケータでもノードごとにこのパラメータに対して異なる値を返す場合がある．

〲〱〲〲

MPIたWTIMEたISたGLOBAL クロックを同期させるかどうかを示す論理型変数．

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

ベンダーは実装依存のパラメータ（ノード番号，実メモリサイズ，仮想メモリサイズ，など）を追加してよい．
これらの定義済み属性の値はきぐぉ初期化〨きぐぉたぉぎぉご〩からきぐぉ終了 〨きぐぉたうぉぎぁがぉずぅ〩まで
変化せず，またユーザが更新したり削除したりすることはできない．

〲〹
〳〰
〳〱
〳〲

ユーザへのアドバイス ぃ言語の呼び出し形式では，これらの属性の返す値は要求された値を格納する変数（整数型）へのポインタである． （ユーザへのアドバイス
終わり）

〳〳
〳〴

必要なパラメータの値については以下で詳しく説明する．

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

タグ値
タグ値は〰からきぐぉたごぁぇたさあの返す値（きぐぉたごぁぇたさあを含む）までの範囲の値である．こ
れらの値はきぐぉプログラムの実行中に変化しないことが保証されている．さらに，タグ上限値は〳〲〷〶〷以上でなければならない．きぐぉの実装では， きぐぉたごぁぇたさあの値はこの値よりも大きくすることができる．例えば，値〲30 − 〱はきぐぉたごぁぇたさあの妥当な値である．
属性きぐぉたごぁぇたさあはきぐぉたぃくききたしくげがいに属す全てのプロセスで同じ値を持つ．

〸〮〱〮 実装情報〲〸〳

ホストランク〱〲きぐぉたえくこごの返す値は，コミュニケータきぐぉたぃくききたしくげがいに関連付けられたグルー

プ中のホストプロセス（もしあれば）のランクである． ホストがなければきぐぉたぐげくぃたぎさががが返される．きぐぉでは，プロセスがホストであるということの意味を指定しないし，またホストの存在さえ要求しない．
属性きぐぉたえくこごはきぐぉたぃくききたしくげがいに属す全てのプロセスで同じ値を持つ．

〳
〴
〵
〶
〷
〸
〹

入出力ランク〱〰
〱〱きぐぉたぉくの返す値は，言語標準の入出力機能を持つことができるプロセッサのランクである． うはひぴひちの言語では，うはひぴひちの言語の入出力操作の全てがサポートされていることを意味する（くぐぅぎ，げぅしぉぎい，しげぉごぅ など）．ぃ言語およびぃ〫〫言語では，ぉこく ぃ言語
およびぃ〫〫言語の入出力操作の全てがサポートされていることを意味する（てはばづの，てばひどのぴて，ぬびづづになど）．
全てのプロセスが言語標準の入出力機能を持つことができれば，値きぐぉたぁぎすたこくさげぃぅが返される．そうでない場合，呼び出しプロセスが言語標準の入出力機能を持つことができれば，それ自体のランクが返される．そうでない場合には，言語標準の入出力機能を提供できるプロセスがあれば，そのようなプロセスのうち〱つのプロ
セスのランクが返される．全てのプロセスが同じ値を返す必要はない．どのプロセスも言語標準の入出力機能を提供できない場合には，値きぐぉたぐげくぃたぎさががが返される．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ユーザへのアドバイス 入力は集団的ではなく，また，この属性はどのプロセスが入力を提供できるか，あるいは入力を提供しているのかを示してはいないことに注意すること． （ユーザへのアドバイス終わり）

〲〶
〲〷
〲〸
〲〹

クロック同期〳〰
〳〱

きぐぉたしごぉきぅたぉこたぇがくあぁがの返す値は， きぐぉたぃくききたしくげがいに属す全てのプロセスのクロ〳〲ックが同期していれば〱であり，そうでなければ〰である．同期させるための明示的な操作が行われている場合に，クロックの集団は同期していると考える．きぐぉたしごぉきぅの呼
び出しで測定される時間の変化は長さ〰のきぐぉメッセージが往復するのに要する時間の半分未満となることが期待される．あるプロセスの送信直前と，別のプロセスのマッチする受信直後に時間を測定した場合，受信側での時間は送信側での時間よりも常に後の時間を示さなければならない．
属性きぐぉたしごぉきぅたぉこたぇがくあぁがは，クロックが同期していない場合には存在する必要はない（ただし，属性キーきぐぉたしごぉきぅたぉこたぇがくあぁがは常に有効である）．この属性はきぐぉたぃくききたしくげがい以外のコミュニケータに関連付けることができる．
属性きぐぉたしごぉきぅたぉこたぇがくあぁがはきぐぉたぃくききたしくげがいに属す全てのプロセスで同じ値を持
つ．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〲〸〴
〱
〲

きぐぉたぇぅごたぐげくぃぅここくげたぎぁきぅ〨 のちねづ〬 ひづびふぬぴぬづの 〩
くさご

のちねづ

（仮想ノードではなく）実ノードに対する唯一の指定子

くさご

ひづびふぬぴぬづの

のちねづに返される結果の（印字可能文字の）長さ

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

どのぴ きぐぉたぇづぴたばひはっづびびはひたのちねづ〨っとちひ 〪のちねづ〬 どのぴ 〪ひづびふぬぴぬづの〩
きぐぉたぇぅごたぐげくぃぅここくげたぎぁきぅ〨 ぎぁきぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぎぁきぅ
ぉぎごぅぇぅげ げぅこさがごがぅぎ〬ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぇづぴたばひはっづびびはひたのちねづ〨っとちひ〪 のちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 （廃止された呼び出し形
式, 第15.2節を参照）}
このルーチンは，ルーチンを呼び出した時点のプロセッサの名前を返す．この名前は長さに制限のない文字列である．この値から，ハードウェアの特定の一部分が識別できなければならない．可能な値としては，〢ばひはっづびびはひ 〹 どの ひちっに 〴 はて ねばば〮っび〮はひで〢や〢〲〳〱〢（〲〳〱は稼働中の同一機種システムの実際のプロセッサ番号である）がある．引数のちねづは，
少なくともきぐぉたきぁじたぐげくぃぅここくげたぎぁきぅ文字の記憶域がなければならない．
きぐぉたぇぅごたぐげくぃぅここくげたぎぁきぅはこの文字数までのちねづの中に書き込める．
実際に書き込まれた文字数は出力引数ひづびふぬぴぬづのに返される．ぃ言語では加えて，のちねづせひづびふぬぴぬづのそにのふぬぬ文字が保存される．ひづびふぬぴぬづのは， きぐぉたきぁじたぐげくぃぅここくげたぎぁきぅ〭〱よりも大きくならない．うはひぴひちの言語では，のちねづの右にスペースがパディングされる．
ひづびふぬぴぬづのは，きぐぉたきぁじたぐげくぃぅここくげたぎぁきぅよりも大きくならない．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

根拠 この関数では，プロセスマイグレーションが生じて，移動した先のプロセッ
サを返すような，きぐぉ実装が可能である．ただし，プロセスマイグレーションの必要性や定義はきぐぉに含まれない．きぐぉたぇぅごたぐげくぃぅここくげたぎぁきぅのこの定義により，そのような実装が可能となるだけである． （根拠の終わり）
ユーザへのアドバイス ユーザは少なくともきぐぉたきぁじたぐげくぃぅここくげたぎぁきぅの大きさの領域をプロセッサ名を書き込むために用意しなければならない． プロセッサ名はこの長さまで許される．ユーザは名前の実際の長さを調べるために，出力引数ひづびふぬぴぬづのを調べる必要がある． （ユーザへのアドバイス終わり）

〳〵
〳〶
〳〷

定数きぐぉたあこぅぎいたくざぅげえぅぁいは，きぐぉたあこぅぎいの呼び出しによりバッファリングされたメッセージごとの固定オーバーヘッドの上限を定める（第〳〮〶〮〱節を参照）
．

〳〸
〳〹
〴〰

8.2 メモリ割り当て

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

一部のシステムでは，特別に割り当てられたメモリ（例えば，こきぐ上で通信するグループのプロセス間で共有されるメモリ）にアクセスすると，メッセージ通信およびリモートメモリアクセス 〨げきぁ〩 操作の動作が速くなる．きぐぉにはこのような特別なメモリの割当と解放を行うためのメカニズムが用意されている．メッセージ通信やげきぁのためにこのようなメモリを使用することは必須ではなく，このメモリは動的に割り当てられた他のメモリと同様に制限なしで使用できる．しかし，実装ではきぐぉたしぉぎたがくぃかおよ〸〮〲〮 メモリ割り当て〲〸〵

びきぐぉたしぉぎたさぎがくぃか関数の使用が，このようなメモリに割り当てられたウィンドウに制限される場合がある（第〱〱〮〴〮〳節を参照）
．

〱
〲
〳
〴

きぐぉたぁががくぃたきぅき〨びどぺづ〬 どのては〬 ぢちびづばぴひ〩
びどぺづ

ぉぎ
ぉぎ
くさご

どのては
ぢちびづばぴひ〵

メモリセグメントのサイズ（バイト単位）（非負の整数型）〶

どのては引数（ハンドル）〸割り当てられたメモリセグメントの先頭を指すポイ
ンタ

〹

〷

〱〰
〱〱

どのぴ きぐぉたぁぬぬはったねづね〨きぐぉたぁどのぴ びどぺづ〬 きぐぉたぉのては どのては〬 ぶはどつ 〪ぢちびづばぴひ〩
きぐぉたぁががくぃたきぅき〨こぉずぅ〬 ぉぎうく〬 あぁこぅぐごげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 こぉずぅ〬 あぁこぅぐごげ{ぶはどつ〪 きぐぉ〺〺ぁぬぬはったねづね〨きぐぉ〺〺ぁどのぴ びどぺづ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〩 （廃止された呼び出
し形式, 第15.2節を参照）}
どのては引数を使用して，割り当てられたメモリの望ましい場所を制御するための指示を与えることができる．このような指示によって呼び出しの意味が変わることはない．有効などのては値は実装依存である．のふぬぬの指示値どのては 〽 きぐぉたぉぎうくたぎさががは常に有効である．
関数きぐぉたぁががくぃたきぅきは，メモリ不足のために失敗したことを示すクラス
きぐぉたぅげげたぎくたきぅきのエラーコードを返す場合がある．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

きぐぉたうげぅぅたきぅき〨ぢちびづ〩
ぉぎ

ぢちびづ

きぐぉたぁががくぃたきぅきによって割り当てされたメモリ
セグメントの先頭アドレス（選択型）

〲〶
〲〷
〲〸

どのぴ きぐぉたうひづづたねづね〨ぶはどつ 〪ぢちびづ〩
きぐぉたうげぅぅたきぅき〨あぁこぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あぁこぅ〨〪〩ぉぎごぅぇぅげ ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うひづづたねづね〨ぶはどつ 〪ぢちびづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
関数きぐぉたうげぅぅたきぅきは，無効なぢちびづ引数を示すクラスきぐぉたぅげげたあぁこぅのエラーコードを返す場合がある．

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

根拠 きぐぉたぁががくぃたきぅきときぐぉたうげぅぅたきぅきのぃ言語およびぃ〫〫言語の呼び出し形
式はぃ言語ライブラリ呼び出しのねちぬぬはっおよびてひづづの呼び出し形式に似ており，
きぐぉたぁぬぬはったねづね〨〮〮〮〬 〦ぢちびづ〩の呼び出しはきぐぉたうひづづたねづね〨ぢちびづ〩の呼び出し（間接参照が〱段浅い）と対となる必要がある．型のキャストを容易にするため，両方の引数は同じぶはどつ〪型として宣言される． うはひぴひちの言語の呼び出し形式はぃ言語およ
びぃ〫〫言語の呼び出し形式と一貫しており，うはひぴひちの言語のきぐぉたぁががくぃたきぅき呼び
出しは割り当てられたメモリの（整数型の）アドレスをぢちびづばぴひに返す．
きぐぉたうげぅぅたきぅきのぢちびづ引数は選択型の引数で，その場所に格納された変数（の参照）を渡す． （根拠の終わり）

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〲〸〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

実装者へのアドバイス きぐぉたぁががくぃたきぅきで特別なメモリを割り当てる場合，セグメントを解放するときにメモリセグメントのサイズがわかるように，ぃ言語のねちぬぬはっおよびてひづづ 関数の設計と同様の設計を使用する必要がある．特別なメモリを使用しない場合，きぐぉたぁががくぃたきぅきは単にねちぬぬはっを呼び出し，
きぐぉたうげぅぅたきぅきはてひづづを呼び出す．
共有メモリシステムでは，共有メモリセグメントのメモリを割り当てるために，
きぐぉたぁががくぃたきぅきの呼び出しを使うことができる． （実装者へのアドバイス終わ
り）

〱〱
〱〲
〱〳

例 8.1 ポインタをサポートするうはひぴひちの言語でのきぐぉたぁががくぃたきぅきの使用例． 〴バイトのげぅぁがとし，そのポインタはアドレスサイズであるとする．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

げぅぁが ぁぐくぉぎごぅげ 〨ぐ〬 ぁ〨〱〰〰〬〱〰〰〩〩〡 のは ねづねはひべ どび ちぬぬはっちぴづつ
ぃぁがが きぐぉたぁががくぃたきぅき〨〴〪〱〰〰〪〱〰〰〬 きぐぉたぉぎうくたぎさがが〬 ぐ〬 ぉぅげげ〩〡 ねづねはひべ どび ちぬぬはっちぴづつ〮〮〮ぁ〨〳〬〵〩 〽 〲〮〷〱〻〮〮〮
ぃぁがが きぐぉたうげぅぅたきぅき〨ぁ〬 ぉぅげげ〩 〡 ねづねはひべ どび てひづづつ
標準のうはひぴひちの言語は（ぃ言語のような）ポインタをサポートしていないため，これ
はうはひぴひちの 〷〷言語のコードでもうはひぴひちの 〹〰言語のコードでもない．一部のコンパイラ（特に，本書の執筆時点ではで〷〷およびぉのぴづぬのうはひぴひちのコンパイラ）はこのコードに対応して
いない．

〲〷
〲〸

例 8.2 同じ例（ぃ言語）

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

てぬはちぴ 〨〪 て〩せ〱〰〰そせ〱〰〰そ 〻〪〯 のは ねづねはひべ どび ちぬぬはっちぴづつ 〪〯きぐぉたぁぬぬはったねづね〨びどぺづはて〨てぬはちぴ〩〪〱〰〰〪〱〰〰〬 きぐぉたぉぎうくたぎさがが〬 〦て〩〻〪〯 ねづねはひべ ちぬぬはっちぴづつ 〪〯〮〮〮〨〪て〩せ〵そせ〳そ 〽 〲〮〷〱〻〮〮〮
きぐぉたうひづづたねづね〨て〩〻

〳〶
〳〷
〳〸
〳〹
〴〰

8.3 エラー処理

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉの実装では，きぐぉ呼び出し中に発生するある種のエラーを処理できなかったり，処理しない選択をしたりすることがある．このようなエラーには，浮動小数点数エラーやアクセス違反など，例外やトラップを発生させるエラーがある．きぐぉで処理されるエラーの集合は実装依存である．これらのエラーのみMPI 例外が発生する．
上記の文は，本書の中のエラー処理に関する記述よりも優先される．特に，エラー処理されるという記述は，エラー処理される可能性があると読み替える必要がある．

〸〮〳〮 エラー処理〲〸〷

ユーザはエラーハンドラを〳種類のオブジェクト，つまりコミュニケータ，ウィンドウ，ファイルに関連付けることができる．このそれぞれのオブジェクトのためのきぐぉ呼
び出し中に起こったどのようなきぐぉ例外に対しても，その指定されたエラー処理ルーチンが使用される．どのオブジェクトとも関連しないきぐぉ呼び出しはコミュニケー
タきぐぉたぃくききたしくげがいに結びつけられていると考える．オブジェクトにエラーハンドラを結びつけることは完全にローカルであり，異なるプロセスでは異なるエラーハンドラ
を同じオブジェクトに結びつけることができる．
きぐぉではいくつかの定義済みエラーハンドラが利用できる．
MPIたERRORSたAREたFATAL このハンドラは，呼び出されると，実行中の全てのプロセス

を異常停止させる．これはこのハンドラを呼び出したプロセスできぐぉたぁあくげごが呼ばれたのと同じ効果を持つ．
MPIたERRORSたRETURN このハンドラはエラーコードをユーザに返すだけである．

実装では，さらに定義済みエラーハンドラを提供することもできるし，またプログラ
マが独自のエラーハンドラをコーディングすることもできる．
デフォルトでは初期化後にエラーハンドラきぐぉたぅげげくげこたぁげぅたうぁごぁがが， きぐぉたぃくきき〭
たしくげがいに関連付けられる．したがって，ユーザがエラー処理を制御しないようにしている場合，きぐぉが処理するエラーは全て致命的エラーとして取り扱われる．（ほとんど）
全てのきぐぉ呼び出しはエラーコードを生成するので，ユーザはメインプログラムでエラーを処理することを選択してよい．例えば，メインプログラムは，きぐぉ呼び出しの戻り値を調べ，呼び出しが失敗したなら，適切な復旧プログラムを実行することで，処理することができる．この場合，エラーハンドラきぐぉたぅげげくげこたげぅごさげぎが使用される．通常は，きぐぉ呼び出しごとにエラーのテストはせずに，そのエラーを（自明でない）きぐぉエラ
ーハンドラで適切に処理したほうが都合が良いし，また効率もよい．
エラーが検出された後，きぐぉの状態は未定義である．つまり，ユーザ定義エラーハ
ンドラ，またはきぐぉたぅげげくげこたげぅごさげぎを使用しても，必ずしも，エラー検出後にユーザがきぐぉを使用し続けられるとはかぎらない．これらのエラーハンドラの目的は，プログ
ラムが終了する前に，ユーザがユーザ定義エラーメッセージを発行し，きぐぉに関連しない処理（入出力バッファのフラッシュなど）を実行できるようにすることである．エラーの後きぐぉ処理が続行できるようにきぐぉを実装してもよいが，そうする必要はない．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

実装者へのアドバイス 質の高い実装では，可能な限り，エラーの影響を抑え，エラーハンドラが呼び出された後も通常処理が続行できるようにすることが望まれる．その実装解説書にはエラーの各クラスの起こりうる影響について情報を提供することが望まれる． （実装者へのアドバイス終わり）

〳〹
〴〰
〴〱
〴〲
〴〳

きぐぉエラーハンドラはハンドルによってアクセスされる不可視のオブジェクトである．新しいエラーハンドラを作成するためのきぐぉ呼び出し，オブジェクトにエラーハン
ドラを関連付けるためのきぐぉ呼び出し，およびどのエラーハンドラがオブジェクトに関連付けられているかをテストするためのきぐぉ呼び出しが用意されている．ぃ言語およ

〴〴
〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〲〸〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

びぃ〫〫言語には，コミュニケータ，ファイル，およびウィンドウ引数をとるユーザ定義
エラー処理コールバック関数のためのぴべばづつづてが用意されている． うはひぴひちの言語には，〳種類のユーザルーチンがある．
きぐぉたじじじたぃげぅぁごぅたぅげげえぁぎいがぅげ〨てふのっぴどはの〬 づひひとちのつぬづひ〩の呼び出しにより， エラーハ
ンドラオブジェクトが生成される．ここで， じじじはぃくきき， しぉぎ，またはうぉがぅに対応する．
きぐぉたじじじたこぅごたぅげげえぁぎいがぅげの呼び出しにより，コミュニケータ，ウィンドウ，またはファイルにエラーハンドラが結びつけられる． エラーハンドラは定義済みのエラ
ーハンドラ，または きぐぉたじじじたぃげぅぁごぅたぅげげえぁぎいがぅげ（該当するじじじを持つもの）を呼び出すことにより生成されたエラーハンドラとする必要がある． 定義済みのエラーハ
ンドラきぐぉたぅげげくげこたげぅごさげぎおよび きぐぉたぅげげくげこたぁげぅたうぁごぁがをコミュニケータ，ウィン
ドウ，ファイルに 結びつけることができる． ぃ〫〫言語では，定義済みのエラーハンド
ラきぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこを コミュニケータ，ウィンドウ，ファイルに結びつけることもできる．
現在コミュニケータ，ウィンドウ，ファイルに関連付けられているエラーハンドラは，
きぐぉたじじじたぇぅごたぅげげえぁぎいがぅげを呼び出すことにより取得することができる．
きぐぉたじじじたぃげぅぁごぅたぅげげえぁぎいがぅげを呼び出して生成されたエラーハンドラは， きぐぉ関
数きぐぉたぅげげえぁぎいがぅげたうげぅぅを使用して解放することができる．
きぐぉた{ぃくきき〬しぉぎ〬うぉがぅ}たぇぅごたぅげげえぁぎいがぅげの動作は，新しいエラーハンドラオブジ
ェクトが生成されるのと同様である． つまり，エラーハンドラが不要となった時点
で， きぐぉたぅげげえぁぎいがぅげたぇぅごま た はきぐぉた{ぃくきき〬しぉぎ〬うぉがぅ}たぇぅごたぅげげえぁぎいがぅげ か ら返されたエラーハンドラを使用してきぐぉたぅげげえぁぎいがぅげたうげぅぅ を呼び出し，エラーハ
ンドラを解放のためにマークする必要がある．この動作は，きぐぉたぃくききたぇげくさぐおよびきぐぉたぇげくさぐたうげぅぅと同様である．

〳〰

実装者へのアドバイス 高品質な実装では， きぐぉたじじじたぃげぅぁごぅたぅげげえぁぎいがぅげを呼
び出して生成されたエラーハンドラが きぐぉたすすすたこぅごたぅげげえぁぎいがぅげの呼び出しにより間違った型のオブジェクトに 結びつけられた場合，エラーを発生させる必要がある．そのために，各エラーハンドラで，関連付けられたユーザ関数のぴべばづつづてに関する情報を管理する必要がある． （実装者へのアドバイス終わり）

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

これらの呼び出しの構文を以下に示す．

〳〹〴〰

8.3.1 コミュニケータ用のエラーハンドラ

〴〱
〴〲
〴〳
〴〴

きぐぉたぃくききたぃげぅぁごぅたぅげげえぁぎいがぅげ〨てふのっぴどはの〬 づひひとちのつぬづひ〩
ぉぎ

〴〵
〴〶
〴〷
〴〸

くさご

てふのっぴどはのづひひとちのつぬづひ

ユーザ定義のエラー処理手続き（関数）きぐぉエラーハンドラ（ハンドル）

どのぴ きぐぉたぃはねねたっひづちぴづたづひひとちのつぬづひ〨きぐぉたぃはねねたづひひとちのつぬづひたてふのっぴどはの 〪てふのっぴどはの〬
きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩〸〮〳〮 エラー処理〲〸〹

きぐぉたぃくききたぃげぅぁごぅたぅげげえぁぎいがぅげ〨うさぎぃごぉくぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺ぅひひとちのつぬづひ
きぐぉ〺〺ぃはねね〺〺ぃひづちぴづたづひひとちのつぬづひ〨きぐぉ〺〺ぃはねね〺〺ぅひひとちのつぬづひたてふのっぴどはの〪てふのっぴどはの〩 （廃止された呼び出し形式, 第15.2節を参照）}
コミュニケータに結びつけることができるエラーハンドラを作成する．この関数は，廃止されたきぐぉたぅげげえぁぎいがぅげたぃげぅぁごぅと同じである．
ぃ言語では，ユーザルーチンはきぐぉたぃはねねたづひひとちのつぬづひたてふのっぴどはの型の関数でなければならな
い．これは次のように定義される．
ぴべばづつづて ぶはどつ きぐぉたぃはねねたづひひとちのつぬづひたてふのっぴどはの〨きぐぉたぃはねね 〪〬 どのぴ 〪〬 〮〮〮〩〻

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

最初の引数は使用するコミュニケータである． 〲番目の引数は，エラーを起こしたきぐぉルーチンが返すエラーコードである． このルーチンの返却値がきぐぉたぅげげたぉぎたこごぁごさこである場合，これはエラーハンドラが呼び出される原因となった要求が生じたステータス中で返されるエラーコードである．残りの引数はぜびぴつちひでび〢引数であり，その数と意味は実装依存である．実装の際はこれらの引数について明確に文書化しなければならなず，うはひぴひちの言語でハンドラを書けるようにアドレスを使用する．このぴべばづつづては，廃止されたきぐぉたえちのつぬづひたてふのっぴどはのに代わるものである．
うはひぴひちの言語では，ユーザルーチンは以下の形式でなければならない．
こさあげくさごぉぎぅ ぃくききたぅげげえぁぎいがぅげたうさぎぃごぉくぎ〨ぃくきき〬 ぅげげくげたぃくいぅ〩
ぉぎごぅぇぅげ ぃくきき〬 ぅげげくげたぃくいぅ
ぃ〫〫言語では，ユーザルーチンは以下の形式でなければならない．
{ぴべばづつづて ぶはどつ きぐぉ〺〺ぃはねね〺〺ぅひひとちのつぬづひたてふのっぴどはの〨きぐぉ〺〺ぃはねね 〦〬 どのぴ 〪〬 〮〮〮〩〻 （廃止された呼び出し形式．第15.2節を参照）}

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

根拠 可変引数リストを用いたのは，エラーハンドラに付加情報を提供するためのぉこく標準のフックを利用するためであるが，ぉこく ぃ言語ではこのフックを使用しないで引数を追加することは禁止されている． （根拠の終わり）
ユーザへのアドバイス 新しく生成されたコミュニケータは，「親」コミュニケータ
に関連付けられたエラーハンドラを継承する．特に，初期化の直後にコミュニケー
タきぐぉたぃくききたしくげがいにハンドラを関連付けることにより，全てのコミュニケータ
用の「グローバル」エラーハンドラを指定することができる． （ユーザへのアドバイス終わり）

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

きぐぉたぃくききたこぅごたぅげげえぁぎいがぅげ〨っはねね〬 づひひとちのつぬづひ〩
ぉぎくさご
ぉぎ

っはねね
づひひとちのつぬづひ〴〱

コミュニケータ（ハンドル）〴〲

コミュニケータ用の新しいエラーハンドラ（ハンド
ル）

〴〳
〴〴
〴〵

どのぴ きぐぉたぃはねねたびづぴたづひひとちのつぬづひ〨きぐぉたぃはねね っはねね〬 きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩
きぐぉたぃくききたこぅごたぅげげえぁぎいがぅげ〨ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ

〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〲〹〰
〱
〲
〳
〴
〵
〶
〷

{ぶはどつ きぐぉ〺〺ぃはねね〺〺こづぴたづひひとちのつぬづひ〨っはのびぴ きぐぉ〺〺ぅひひとちのつぬづひ〦 づひひとちのつぬづひ〩 （廃止された呼び出し形式, 第15.2節を参照）}
コミュニケータに新しいエラーハンドラを結びつける． エラーハンドラは定義済
みのエラーハンドラ，またはきぐぉたぃくききたぃげぅぁごぅたぅげげえぁぎいがぅげを呼び出して生成されるエラーハンドラとする必要がある． この呼び出しは，廃止された
きぐぉたぅげげえぁぎいがぅげたこぅごと同じである．

〸〹〱〰

きぐぉたぃくききたぇぅごたぅげげえぁぎいがぅげ〨っはねね〬 づひひとちのつぬづひ〩

〱〱

ぉぎ

〱〲

くさご

っはねね
づひひとちのつぬづひ

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

コミュニケータ（ハンドル）
コミュニケータに現在関連付けられているエラーハ
ンドラ（ハンドル）

どのぴ きぐぉたぃはねねたでづぴたづひひとちのつぬづひ〨きぐぉたぃはねね っはねね〬 きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
きぐぉたぃくききたぇぅごたぅげげえぁぎいがぅげ〨ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
{きぐぉ〺〺ぅひひとちのつぬづひ きぐぉ〺〺ぃはねね〺〺ぇづぴたづひひとちのつぬづひ〨〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
コミュニケータに現在関連付けられているエラーハンドラを取得する．この呼び出しは，廃止されたきぐぉたぅげげえぁぎいがぅげたぇぅごと同じである．
例：ライブラリ関数はその 入口で，コミュニケータに現在登録されている エラーハ
ンドラを退避しておき，このコミュニケータについてそれ自体のプライベートな エラー
ハンドラを設定し， 終了前に元のエラーハンドラに復元することができる．

〲〵
〲〶
〲〷

8.3.2 ウィンドウ用のエラーハンドラ

〲〸
〲〹
〳〰

きぐぉたしぉぎたぃげぅぁごぅたぅげげえぁぎいがぅげ〨てふのっぴどはの〬 づひひとちのつぬづひ〩

〳〱

ぉぎ

〳〲

くさご

てふのっぴどはのづひひとちのつぬづひ

ユーザ定義のエラー処理手続き（関数）きぐぉエラーハンドラ（ハンドル）

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたしどのたっひづちぴづたづひひとちのつぬづひ〨きぐぉたしどのたづひひとちのつぬづひたてふのっぴどはの 〪てふのっぴどはの〬
きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
きぐぉたしぉぎたぃげぅぁごぅたぅげげえぁぎいがぅげ〨うさぎぃごぉくぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺ぅひひとちのつぬづひ
きぐぉ〺〺しどの〺〺ぃひづちぴづたづひひとちのつぬづひ〨きぐぉ〺〺しどの〺〺ぅひひとちのつぬづひたてふのっぴどはの〪てふのっぴどはの〩 （廃止された呼び出し形式, 第15.2節を参照）}
ウィンドウオブジェクトに結びつけることができるエラーハンドラを作成する． ぃ言
語では，ユーザルーチンはきぐぉたしどのたづひひとちのつぬづひたてふのっぴどはの型の関数でなければならない．これは次のように定義される．
ぴべばづつづて ぶはどつ きぐぉたしどのたづひひとちのつぬづひたてふのっぴどはの〨きぐぉたしどの 〪〬 どのぴ 〪〬 〮〮〮〩〻
最初の引数は使用するウィンドウである． 〲番目の引数は返されるエラーコードである． うはひぴひちの言語では，ユーザルーチンは以下の形式でなければならない．

〸〮〳〮 エラー処理〲〹〱

こさあげくさごぉぎぅ しぉぎたぅげげえぁぎいがぅげたうさぎぃごぉくぎ〨しぉぎ〬 ぅげげくげたぃくいぅ〩
ぉぎごぅぇぅげ しぉぎ〬 ぅげげくげたぃくいぅ
ぃ〫〫言語では，ユーザルーチンは以下の形式でなければならない．
{ぴべばづつづて ぶはどつ きぐぉ〺〺しどの〺〺ぅひひとちのつぬづひたてふのっぴどはの〨きぐぉ〺〺しどの 〦〬 どのぴ 〪〬 〮〮〮〩〻 （廃止された呼び出し形式．第15.2節を参照）}

〱
〲
〳
〴
〵
〶
〷

きぐぉたしぉぎたこぅごたぅげげえぁぎいがぅげ〨ぷどの〬 づひひとちのつぬづひ〩
ぉぎくさご
ぉぎ

ぷどの
づひひとちのつぬづひ〸

ウィンドウ（ハンドル）〹

ウィンドウ用の新しいエラーハンドラ（ハンドル）〱〰
〱〱

どのぴ きぐぉたしどのたびづぴたづひひとちのつぬづひ〨きぐぉたしどの ぷどの〬 きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩
きぐぉたしぉぎたこぅごたぅげげえぁぎいがぅげ〨しぉぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺こづぴたづひひとちのつぬづひ〨っはのびぴ きぐぉ〺〺ぅひひとちのつぬづひ〦 づひひとちのつぬづひ〩 （廃止された
呼び出し形式, 第15.2節を参照）}
ウィンドウに新しいエラーハンドラを結びつける． エラーハンドラは定義済みのエラ
ーハンドラ，または きぐぉたしぉぎたぃげぅぁごぅたぅげげえぁぎいがぅげを呼び出して生成されるエラー
ハンドラとする必要がある．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

きぐぉたしぉぎたぇぅごたぅげげえぁぎいがぅげ〨ぷどの〬 づひひとちのつぬづひ〩
ぉぎ
くさご

ぷどの
づひひとちのつぬづひ〲〲

ウィンドウ（ハンドル）〲〳

ウィンドウに現在関連付けられているエラーハンドラ（ハンドル）〲〴〲〵〲〶

どのぴ きぐぉたしどのたでづぴたづひひとちのつぬづひ〨きぐぉたしどの ぷどの〬 きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
きぐぉたしぉぎたぇぅごたぅげげえぁぎいがぅげ〨しぉぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
{きぐぉ〺〺ぅひひとちのつぬづひ きぐぉ〺〺しどの〺〺ぇづぴたづひひとちのつぬづひ〨〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
ウィンドウに現在関連付けられているエラーハンドラを取得する．

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

8.3.3 ファイル用のエラーハンドラ〳〵〳〶

きぐぉたうぉがぅたぃげぅぁごぅたぅげげえぁぎいがぅげ〨てふのっぴどはの〬 づひひとちのつぬづひ〩ぉぎ
くさごてふのっぴどはのづひひとちのつぬづひ

ユーザ定義のエラー処理手続き（関数）きぐぉエラーハンドラ（ハンドル）

〳〷
〳〸
〳〹
〴〰
〴〱

どのぴ きぐぉたうどぬづたっひづちぴづたづひひとちのつぬづひ〨きぐぉたうどぬづたづひひとちのつぬづひたてふのっぴどはの 〪てふのっぴどはの〬
きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
きぐぉたうぉがぅたぃげぅぁごぅたぅげげえぁぎいがぅげ〨うさぎぃごぉくぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺ぅひひとちのつぬづひ
きぐぉ〺〺うどぬづ〺〺ぃひづちぴづたづひひとちのつぬづひ〨きぐぉ〺〺うどぬづ〺〺ぅひひとちのつぬづひたてふのっぴどはの〪てふのっぴどはの〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〲〹〲
〱
〲
〳
〴

ファイルオブジェクトに結びつけることができるエラーハンドラを作成する．ぃ言語
では，ユーザルーチンはきぐぉたうどぬづたづひひとちのつぬづひたてふのっぴどはの型の関数でなければならない．これは次のように定義される．
ぴべばづつづて ぶはどつ きぐぉたうどぬづたづひひとちのつぬづひたてふのっぴどはの〨きぐぉたうどぬづ 〪〬 どのぴ 〪〬 〮〮〮〩〻

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

最初の引数は使用するファイルである．〲番目の引数は返されるエラーコードである．
うはひぴひちの言語では，ユーザルーチンは以下の形式でなければならない．
こさあげくさごぉぎぅ うぉがぅたぅげげえぁぎいがぅげたうさぎぃごぉくぎ〨うぉがぅ〬 ぅげげくげたぃくいぅ〩
ぉぎごぅぇぅげ うぉがぅ〬 ぅげげくげたぃくいぅ
ぃ〫〫言語では，ユーザルーチンは以下の形式でなければならない．
{ぴべばづつづて ぶはどつ きぐぉ〺〺うどぬづ〺〺ぅひひとちのつぬづひたてふのっぴどはの〨きぐぉ〺〺うどぬづ 〦〬 どのぴ 〪〬 〮〮〮〩〻 （廃止された呼び出し形式．第15.2節を参照）}

〱〳
〱〴
〱〵

きぐぉたうぉがぅたこぅごたぅげげえぁぎいがぅげ〨「ぬづ〬 づひひとちのつぬづひ〩

〱〶

ぉぎくさご

〱〷

ぉぎ

「ぬづ
づひひとちのつぬづひ

ファイル（ハンドル）
ファイル用の新しいエラーハンドラ（ハンドル）

〱〸
〱〹
〲〰
〲〱
〲〲

どのぴ きぐぉたうどぬづたびづぴたづひひとちのつぬづひ〨きぐぉたうどぬづ てどぬづ〬 きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩
きぐぉたうぉがぅたこぅごたぅげげえぁぎいがぅげ〨うぉがぅ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うぉがぅ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺こづぴたづひひとちのつぬづひ〨っはのびぴ きぐぉ〺〺ぅひひとちのつぬづひ〦 づひひとちのつぬづひ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〳
〲〴
〲〵
〲〶

ファイルに新しいエラーハンドラを結びつける．エラーハンドラは定義済みのエラー
ハンドラ，またはきぐぉたうぉがぅたぃげぅぁごぅたぅげげえぁぎいがぅげを呼び出して生成されるエラーハン
ドラとする必要がある．

〲〷
〲〸
〲〹

きぐぉたうぉがぅたぇぅごたぅげげえぁぎいがぅげ〨「ぬづ〬 づひひとちのつぬづひ〩

〳〰

ぉぎ

〳〱

くさご

「ぬづ
づひひとちのつぬづひ〳〲

ファイル（ハンドル）
ファイルに現在関連付けられているエラーハンドラ（ハンドル）

〳〳
〳〴
〳〵
〳〶
〳〷

どのぴ きぐぉたうどぬづたでづぴたづひひとちのつぬづひ〨きぐぉたうどぬづ てどぬづ〬 きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
きぐぉたうぉがぅたぇぅごたぅげげえぁぎいがぅげ〨うぉがぅ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うぉがぅ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
{きぐぉ〺〺ぅひひとちのつぬづひ きぐぉ〺〺うどぬづ〺〺ぇづぴたづひひとちのつぬづひ〨〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}〳〸〳〹

ファイルに現在関連付けられているエラーハンドラを取得する．

〴〰
〴〱

8.3.4 エラーハンドラの解放とエラー文字列の取得

〴〲
〴〳
〴〴
〴〵

きぐぉたぅげげえぁぎいがぅげたうげぅぅ〨 づひひとちのつぬづひ 〩ぉぎくさご

づひひとちのつぬづひ

きぐぉエラーハンドラ（ハンドル）

〴〶
〴〷
〴〸

どのぴ きぐぉたぅひひとちのつぬづひたてひづづ〨きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
きぐぉたぅげげえぁぎいがぅげたうげぅぅ〨ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩〸〮〴〮 エラーコードおよびクラス〲〹〳ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぅひひとちのつぬづひ〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
このルーチンはづひひとちのつぬづひに関連したエラーハンドラを解放のためにマークし，
づひひとちのつぬづひをきぐぉたぅげげえぁぎいがぅげたぎさががに設定する．このエラーハンドラは，これを関連付けられた全てのオブジェクト（コミュニケータ，ウィンドウ，ファイル）の解放後に解
放される．

〱
〲
〳
〴
〵
〶
〷
〸
〹

きぐぉたぅげげくげたこごげぉぎぇ〨 づひひはひっはつづ〬 びぴひどので〬 ひづびふぬぴぬづの 〩
ぉぎ
くさご
くさご

づひひはひっはつづびぴひどのでひづびふぬぴぬづの〱〰

きぐぉルーチンによって返されるエラーコード〱〱

づひひはひっはつづに対応する文〱〲

びぴひどのでに返される結果の（印字可能文字の）長さ〱〳〱〴

どのぴ きぐぉたぅひひはひたびぴひどので〨どのぴ づひひはひっはつづ〬 っとちひ 〪びぴひどので〬 どのぴ 〪ひづびふぬぴぬづの〩
きぐぉたぅげげくげたこごげぉぎぇ〨ぅげげくげぃくいぅ〬 こごげぉぎぇ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃくいぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 こごげぉぎぇ{ぶはどつ きぐぉ〺〺ぇづぴたづひひはひたびぴひどので〨どのぴ づひひはひっはつづ〬 っとちひ〪 のちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 （廃止された呼び出し形式, 第15.2節を参照）}
このルーチンはエラーコードやエラークラスと関連付けられたエラー文字列を返す．
引数びぴひどのでは，少なくともきぐぉたきぁじたぅげげくげたこごげぉぎぇ文字の記憶域がなければならない．
実際に書き込まれた文字数は，出力引数ひづびふぬぴぬづのに返される．
根拠 この関数の形式は，うはひぴひちの言語とぃ言語の呼び出し形式が同様なものとなるように選択された． 文字列へのポインタを返すバージョンは難しい点が〲点ある． 第〱に，返却文字列は静的に割り当てられていなければならず，（連続するきぐぉたぅげげくげたこごげぉぎぇの呼び出しによって返されるポインタが正しいメッセージを指すようにするには）エラーメッセージごとに領域が異なっていなければならないということである．第〲に，うはひぴひちの言語では，ぃえぁげぁぃごぅげ〪〨〪〩を返すように宣言された関数は，例えばぐげぉぎご文などの文中で参照することができないということである． （根拠の終わり）

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

8.4 エラーコードおよびクラス
きぐぉで返されるエラーコードは，（きぐぉたこさぃぃぅここを除いて）完全に実装に委ねられている．これは，実装時に（きぐぉたぅげげくげたこごげぉぎぇで使われる） エラーコードにできるだけ多くの情報を入れることができるようにするためである．
ア プ リ ケ ー シ ョ ン が エ ラ ー コ ー ド を 解 釈 で き る よ う に，ル ー チ ン
きぐぉたぅげげくげたぃがぁここはエラーコードをエラークラスと呼ばれる標準エラーコードの小さな集合のうちの〱つに変換する．有効なエラークラスを表〸〮〱および表〸〮〲に示す．
エラークラスはエラーコードの部分集合である．きぐぉ関数はエラークラス番号を返す
ことができ，関数きぐぉたぅげげくげたこごげぉぎぇを使用してエラークラスと関連付けられたエラ

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〲〹〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

きぐぉたこさぃぃぅここ
きぐぉたぅげげたあさううぅげ
きぐぉたぅげげたぃくさぎご
きぐぉたぅげげたごすぐぅ
きぐぉたぅげげたごぁぇ
きぐぉたぅげげたぃくきき
きぐぉたぅげげたげぁぎか
きぐぉたぅげげたげぅけさぅこご
きぐぉたぅげげたげくくご
きぐぉたぅげげたぇげくさぐ
きぐぉたぅげげたくぐ
きぐぉたぅげげたごくぐくがくぇす
きぐぉたぅげげたいぉきこ
きぐぉたぅげげたぁげぇ
きぐぉたぅげげたさぎかぎくしぎ
きぐぉたぅげげたごげさぎぃぁごぅ
きぐぉたぅげげたくごえぅげ
きぐぉたぅげげたぉぎごぅげぎ
きぐぉたぅげげたぉぎたこごぁごさこ
きぐぉたぅげげたぐぅぎいぉぎぇきぐぉたぅげげたかぅすざぁがきぐぉたぅげげたぎくたきぅき

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉたぅげげたあぁこぅ
きぐぉたぅげげたぉぎうくたかぅす
きぐぉたぅげげたぉぎうくたざぁがさぅ
きぐぉたぅげげたぉぎうくたぎくかぅす
きぐぉたぅげげたこぐぁしぎ
きぐぉたぅげげたぐくげご〳〲〳〳

きぐぉたぅげげたこぅげざぉぃぅ〳〴〳〵

きぐぉたぅげげたぎぁきぅ

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

きぐぉたぅげげたしぉぎ
きぐぉたぅげげたこぉずぅ
きぐぉたぅげげたいぉこぐ
きぐぉたぅげげたぉぎうく
きぐぉたぅげげたがくぃかごすぐぅ
きぐぉたぅげげたぁここぅげご
きぐぉたぅげげたげきぁたぃくぎうがぉぃご
きぐぉたぅげげたげきぁたこすぎぃ

エラーなし
無効なバッファポインタ
無効なカウント引数
無効なデータ型引数
無効なタグ引数
無効なコミュニケータ
無効なランク
無効な要求（ハンドル）
無効なルート
無効なグループ
無効な操作
無効なトポロジー
無効な次元引数
その他の無効な引数
未知のエラー
受信時にメッセージが切り詰められた
このリストの中に載っていない既知のエラー
きぐぉ内部（実装）エラー
ステータス中のエラーコード
保留要求
無効なにづべぶちぬが渡された
メモリ不足のためきぐぉたぁががくぃたきぅきに失敗した
きぐぉたうげぅぅたきぅきに無効なぢちびづ引数が渡されたキーがきぐぉたきぁじたぉぎうくたかぅすより長い
値がきぐぉたきぁじたぉぎうくたざぁがより長い
きぐぉたぉぎうくたいぅがぅごぅに無効なキーが渡された
プロセス生成に失敗
きぐぉたぃくききたぃくぎぎぅぃごに無効なポート名が渡された
きぐぉたさぎぐさあがぉこえたぎぁきぅに 無 効 な サ ー ビ ス 名が渡された
きぐぉたがくくかさぐたぎぁきぅに無効なサービス名が渡された
無効な ぷどの 引数
無効な びどぺづ 引数
無効な つどびば 引数
無効な どのては 引数
無効な ぬはっにぴべばづ 引数
無効な ちびびづひぴ 引数
ウィンドウへのアクセスの衝突
げきぁ呼び出しの同期エラー

〴〵
〴〶
〴〷
〴〸

表 〸〮〱〺 エラークラス（第〱部）

〸〮〴〮 エラーコードおよびクラス〲〹〵
無効なファイルハンドル
全てのプロセスで同一でない集団的引数，またはプロセスごとに異なる順序で呼び出される集団的ルーチン

きぐぉたぅげげたうぉがぅ
きぐぉたぅげげたぎくごたこぁきぅ

きぐぉたうぉがぅたくぐぅぎに 渡 さ れ たちねはつづに 関 す る エラーきぐぉたぅげげたさぎこさぐぐくげごぅいたいぁごぁげぅぐ

きぐぉたぅげげたさぎこさぐぐくげごぅいたくぐぅげぁごぉくぎきぐぉたぅげげたうぉがぅたぉぎたさこぅ
きぐぉたぅげげたいさぐたいぁごぁげぅぐ

きぐぉたぅげげたぃくぎざぅげこぉくぎ
きぐぉたぅげげたぉく
きぐぉたぅげげたがぁこごぃくいぅ

〲
〳
〴
〵

きぐぉたぅげげたぁきくいぅ

きぐぉたぅげげたぎくたこさぃえたうぉがぅ
きぐぉたぅげげたうぉがぅたぅじぉこごこ
きぐぉたぅげげたあぁいたうぉがぅ
きぐぉたぅげげたぁぃぃぅここ
きぐぉたぅげげたぎくたこぐぁぃぅ
きぐぉたぅげげたけさくごぁ
きぐぉたぅげげたげぅぁいたくぎがす〱

きぐぉたうぉがぅたこぅごたざぉぅしにサポートされていない
つちぴちひづばが渡された
サポートされていない操作．例えば，逐次アクセスのみがサポートされるファイルのシークなどファイルが存在しない
ファイルが存在する
無効なファイル名（長すぎるパス名など）
操作権限なし領域不足
割り当て量を超過した
読み取り専用のファイルまたはファイルシステ
ム
ファイルがなんらかのプロセスで現在開かれているため，ファイル操作が完了しなかった
定義済みのデータ表現識別子がきぐぉたげぅぇぉこごぅげたいぁごぁげぅぐに渡されたため，変換関数が登録できなかった
ユーザ提供のデータ変換関数でエラーが発生した
その他の入出力エラー
最後のエラーコード

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

表 〸〮〲〺 エラークラス（第〲部）

〳〲
〳〳
〳〴

ー文字列を作ることができる．きぐぉエラークラスは有効なきぐぉエラーコードである．特に，きぐぉエラークラス用に定義された値は有効なきぐぉエラーコードである．
エラーコードは以下の式を満たす．

〳〵
〳〶
〳〷
〳〸

〰 〽 きぐぉたこさぃぃぅここ < きぐぉたぅげげた〮〮〮 ≤ きぐぉたぅげげたがぁこごぃくいぅ.

〳〹〴〰

根拠 きぐぉたぅげげたさぎかぎくしぎときぐぉたぅげげたくごえぅげとの違いは， きぐぉたぅげげたくごえぅげに関してはきぐぉたぅげげくげたこごげぉぎぇが有用な情報を返すことができるという点にある．

〴〱

ぃ言語での慣例と一致させるためにはきぐぉたこさぃぃぅここ 〽 〰 が必要である．エラークラスとエラーコードを分けることで，上のようにエラークラスを定義することができる．既知のがぁこごぃくいぅがあることは，多くの場合正確な判断検査になる． （根拠の
終わり）

〴〴

〴〲
〴〳

〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〲〹〶
〱
〲

きぐぉたぅげげくげたぃがぁここ〨 づひひはひっはつづ〬 づひひはひっぬちびび 〩
ぉぎ

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

くさご

づひひはひっはつづ
づひひはひっぬちびび

きぐぉルーチンによって返されるエラーコード
づひひはひっはつづに関連付けられたエラークラス

どのぴ きぐぉたぅひひはひたっぬちびび〨どのぴ づひひはひっはつづ〬 どのぴ 〪づひひはひっぬちびび〩
きぐぉたぅげげくげたぃがぁここ〨ぅげげくげぃくいぅ〬 ぅげげくげぃがぁここ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃくいぅ〬 ぅげげくげぃがぁここ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぇづぴたづひひはひたっぬちびび〨どのぴ づひひはひっはつづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぅげげくげたぃがぁここ関数は標準エラーコード（エラークラス）をそれ自体にマッピン
グする．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

8.5 エラークラス，エラーコード，エラーハンドラ
既存のきぐぉ実装の上に，独自のエラーコードおよびエラークラスの集合を持つことができる階層ライブラリを作成したい場合がある．このようなライブラリの例は，きぐぉに基づく入出力ライブラリである（〴〰〵ページの第〱〳章を参照）．このため，以下の機能が必要である．

〲〰
〲〱〱〮 既知のきぐぉ実装のエラークラスに新しいエラークラスを追加する．

〲〲
〲〳
〲〴

〲〮 きぐぉたぅげげくげたぃがぁここが有効になるように，このエラークラスにエラーコードを関連
付ける．

〲〵
〲〶
〲〷

〳〮 きぐぉたぅげげくげたこごげぉぎぇが有効になるように，これらのエラーコードに文字列を関連
付ける．

〲〸
〲〹
〳〰

〴〮 コミュニケータ，ウィンドウ，オブジェクトに関連付けられたエラーハンドラを呼
び出す．

〳〱
〳〲
〳〳
〳〴
〳〵

このための関数がいくつか用意されている．これらは全てローカルである． エラークラスまたはエラーコードは，アプリケーションで大量に生成されることはないと考えられるため，解放するための関数は用意されていない．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

きぐぉたぁいいたぅげげくげたぃがぁここ〨づひひはひっぬちびび〩
くさご

づひひはひっぬちびび

新しいエラークラスの値（整数型）

どのぴ きぐぉたぁつつたづひひはひたっぬちびび〨どのぴ 〪づひひはひっぬちびび〩
きぐぉたぁいいたぅげげくげたぃがぁここ〨ぅげげくげぃがぁここ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃがぁここ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぁつつたづひひはひたっぬちびび〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
新しいエラークラスを作成し，その値を返す．

〴〶
〴〷
〴〸

根拠 既存のエラーコードおよびエラークラスとのコンフリクトを避けるため，値の設定はユーザではなく，実装によって行われる． （根拠の終わり）〸〮〵〮 エラークラス，エラーコード，エラーハンドラ〲〹〷

実装者へのアドバイス 高品質な実装では，全てのプロセスで 同じ決定論的な方法により新しいづひひはひっぬちびびの値が返される． （実装者へのアドバイス終わり）〱〲〳

ユーザへのアドバイス きぐぉたぁいいたぅげげくげたぃがぁここの呼び出しはローカルであるため，この呼び出しを行った全てのプロセスで同じづひひはひっぬちびびが返されない場合がある．そのため，プロセスの集合で同時に新しいエラーを登録すれば全てのプロセス
で同じづひひはひっぬちびびが生成されると考えるのは安全ではない．しかし，実装で決定論的な方法により新しいづひひはひっぬちびびが返され， それらが，同じプロセスの集合（例えば，全てのプロセス）で常に同じ順序で生成される場合，値は同じになる．ただし，決定論的アルゴリズムを使用した場合でも，値がプロセスごとに異なる可能性がある．これは例えば，異なるが重なり合っているプロセスのグループにより一連の呼び出しが行われる場合に発生しうる．こうした問題のため，複数のプロセスで「同じ」エラーが発生しても，同じ値のエラーコードが生成されない場合がある．
（ユーザへのアドバイス終わり）

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

きぐぉたぅげげたがぁこごぃくいぅの値は定数値で，新しいユーザ定義のエラーコードおよびエラー

クラスの影響を受けない．その代わり，定義済みの属性キーきぐぉたがぁこごさこぅいぃくいぅがきぐぉたぃくききたしくげがいに関連付けられる．このキーに対応する属性値は，ユーザ定義のエラークラスを含めて現在のエラークラスの最大値となる．これはローカル値で，プロセスごとに異なる可能性がある．このキーによって返される値は常にきぐぉたぅげげたがぁこごぃくいぅ以
上となる．
ユーザへのアドバイス キーきぐぉたがぁこごさこぅいぃくいぅによって返される値は，ユーザが関数を呼び出して明示的にエラークラス／コードを追加するまで変更されない．マ
ルチスレッド環境では，この値が変更されていないという前提に特に注意を払う必要がある．エラーコードとエラークラスは必ずしも密集しているわけではない．
きぐぉたがぁこごさこぅいぃくいぅ未満の各エラークラスが有効であると想定することはできな
い． （ユーザへのアドバイス終わり）

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

きぐぉたぁいいたぅげげくげたぃくいぅ〨づひひはひっぬちびび〬 づひひはひっはつづ〩ぉぎ
くさご

づひひはひっぬちびび
づひひはひっはつづ

エラークラス（整数型）
づひひはひっぬちびびに関連付ける新しいエラーコード （整数
型）

〳〵
〳〶
〳〷
〳〸
〳〹

どのぴ きぐぉたぁつつたづひひはひたっはつづ〨どのぴ づひひはひっぬちびび〬 どのぴ 〪づひひはひっはつづ〩きぐぉたぁいいたぅげげくげたぃくいぅ〨ぅげげくげぃがぁここ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃがぁここ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぁつつたづひひはひたっはつづ〨どのぴ づひひはひっぬちびび〩 （廃止された呼び出し形式, 第15.2節を参照）}
づひひはひっぬちびびに関連付ける新しいエラーコードを生成し，づひひはひっはつづにその値を返す．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

根拠 既存のエラーコードおよびエラークラスとのコンフリクトを避けるため，新しいエラーコードの値の設定はユーザではなく，実装によって行われる． （根拠
の終わり）

〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理〲〹〸

実装者へのアドバイス 高品質な実装では，全てのプロセスで同じ決定論的な方法により新しいづひひはひっはつづの値が返される． （実装者へのアドバイス終わり）

〱
〲
〳
〴
〵
〶

きぐぉたぁいいたぅげげくげたこごげぉぎぇ〨づひひはひっはつづ〬 びぴひどので〩

〷

ぉぎ

〸

ぉぎ

づひひはひっはつづびぴひどのでエラーコードまたはエラークラス（整数型）
づひひはひっはつづに対応する文（文字列）

〹
〱〰
〱〱
〱〲
〱〳
〱〴

どのぴ きぐぉたぁつつたづひひはひたびぴひどので〨どのぴ づひひはひっはつづ〬 っとちひ 〪びぴひどので〩きぐぉたぁいいたぅげげくげたこごげぉぎぇ〨ぅげげくげぃくいぅ〬 こごげぉぎぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃくいぅ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 こごげぉぎぇ{ぶはどつ きぐぉ〺〺ぁつつたづひひはひたびぴひどので〨どのぴ づひひはひっはつづ〬 っはのびぴ っとちひ〪 びぴひどので〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

エ ラ ー 文 字 列 を エ ラ ー コ ー ド ま た は エ ラ ー ク ラ ス に 関 連 付 け る． 文 字 列 の 長 さはきぐぉたきぁじたぅげげくげたこごげぉぎぇを 超 え て は な ら な い． 文 字 列 の 長 さ は 呼 び 出 し 言 語 内 で
定 義 さ れ て い る． ぃ言 語 ま た はぃ〫〫言 語 で は，のふぬぬ終 端 文 字 は 文 字 列 の 長 さ に 含 まれない． うはひぴひちの言語では，末尾の空白は除外される． すでに文字列が格納されているづひひはひっはつづに対してきぐぉたぁいいたぅげげくげたこごげぉぎぇを呼び出すと，古い文字列が新しい文字列で置換される．値がきぐぉたぅげげたがぁこごぃくいぅ以下のエラーコードまたはエラークラスに対してきぐぉたぁいいたぅげげくげたこごげぉぎぇを呼び出すのは誤りである．
文字列が設定されていない状態できぐぉたぅげげくげたこごげぉぎぇを呼び出すと，空の文字列（うはひぴひちの言語では全てが空白文字，ぃ言語およびぃ〫〫言語では〢〢）が返される．

〲〶
〲〷
〲〸

〲〸〶ページの第〸〮〳節で，エラーハンドラを生成し，コミュニケータ，ファイル，ウィンドウに関連付ける方法を説明する．

〲〹
〳〰
〳〱

きぐぉたぃくききたぃぁががたぅげげえぁぎいがぅげ 〨っはねね〬 づひひはひっはつづ〩

〳〲

ぉぎ

〳〳

ぉぎ

っはねね
づひひはひっはつづ

エラーハンドラを持つコミュニケータ（ハンドル）
エラーコード（整数型）

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

どのぴ きぐぉたぃはねねたっちぬぬたづひひとちのつぬづひ〨きぐぉたぃはねね っはねね〬 どのぴ づひひはひっはつづ〩きぐぉたぃくききたぃぁががたぅげげえぁぎいがぅげ〨ぃくきき〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぃちぬぬたづひひとちのつぬづひ〨どのぴ づひひはひっはつづ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
この関数は，エラーコードが設定されてコミュニケータに割当てられたエラーハン
ドラを呼び出す．この関数は，エラーハンドラが正常に呼び出された場合，（そのプロセスを異常停止せず，エラーハンドラが戻ると仮定すると）ぃ言語およびぃ〫〫言語ではきぐぉたこさぃぃぅここを返し，ぉぅげげくげに同じ値を返す．

〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス デフォルトのエラーハンドラはきぐぉたぅげげくげこたぁげぅたうぁごぁがである．そのため，このコミュニケータまたは，コミュニケータが生成される前の親コミュニケータに対してデフォルトのエラーハンドラが変更されていない場合，

〸〮〵〮 エラークラス，エラーコード，エラーハンドラ〲〹〹きぐぉたぃくききたぃぁががたぅげげえぁぎいがぅげ 呼び出しはっはねねのプロセスを異常停止する．
（ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵

きぐぉたしぉぎたぃぁががたぅげげえぁぎいがぅげ 〨ぷどの〬 づひひはひっはつづ〩
ぉぎ
ぉぎ

ぷどの
づひひはひっはつづ〶

エラーハンドラを持つウィンドウ（ハンドル）〷

エラーコード（整数型）〸〹

どのぴ きぐぉたしどのたっちぬぬたづひひとちのつぬづひ〨きぐぉたしどの ぷどの〬 どのぴ づひひはひっはつづ〩きぐぉたしぉぎたぃぁががたぅげげえぁぎいがぅげ〨しぉぎ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺ぃちぬぬたづひひとちのつぬづひ〨どのぴ づひひはひっはつづ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
この関数は，エラーコードが設定されてウィンドウに割当てられたエラーハンド
ラを呼び出す． この関数は，エラーハンドラが正常に呼び出された場合，（そのプロセスを異常停止せず，エラーハンドラが戻ると仮定すると）ぃ言語およびぃ〫〫言語ではきぐぉたこさぃぃぅここを返し，ぉぅげげくげに同じ値を返す．
ユーザへのアドバイス コミュニケータの場合と同様，ウィンドウのデフォルトの
エラーハンドラも きぐぉたぅげげくげこたぁげぅたうぁごぁがである． （ユーザへのアドバイス終わ
り）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

きぐぉたうぉがぅたぃぁががたぅげげえぁぎいがぅげ 〨てと〬 づひひはひっはつづ〩
ぉぎ
ぉぎ

てと
づひひはひっはつづ

エラーハンドラを持つファイル（ハンドル）
エラーコード（整数型）

〲〶
〲〷
〲〸
〲〹
〳〰

どのぴ きぐぉたうどぬづたっちぬぬたづひひとちのつぬづひ〨きぐぉたうどぬづ てと〬 どのぴ づひひはひっはつづ〩きぐぉたうぉがぅたぃぁががたぅげげえぁぎいがぅげ〨うえ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺ぃちぬぬたづひひとちのつぬづひ〨どのぴ づひひはひっはつづ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
この関数は，エラーコードが設定されてファイルに割当てられたエラーハンドラを呼び出す． この関数は，エラーハンドラが正常に呼び出された場合，（そのプロセ
スを異常停止せず，エラーハンドラが戻ると仮定すると）ぃ言語およびぃ〫〫言語ではきぐぉたこさぃぃぅここを返し，ぉぅげげくげに同じ値を返す．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

ユーザへのアドバイス コミュニケータやウィンドウのエラーとは異なり，ファイ
ルのデフォルトの動作は きぐぉたぅげげくげこたげぅごさげぎを持つ． （ユーザへのアドバイス
終わり）

〴〱
〴〲
〴〳
〴〴
〴〵

ユーザへのアドバイス ユーザは，きぐぉたぃくききたぃぁががたぅげげえぁぎいがぅげ，
きぐぉたうぉがぅたぃぁががたぅげげえぁぎいがぅげ， ま た はきぐぉたしぉぎたぃぁががたぅげげえぁぎいがぅげに よ り 再帰的にハンドラを呼び出さないよう注意する必要がある． 再帰的な呼び出しを

〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理〳〰〰

行うと，再帰が無限に繰り返される可能性がある． この状況は，
きぐぉたぃくききたぃぁががたぅげげえぁぎいがぅげ，きぐぉたうぉがぅたぃぁががたぅげげえぁぎいがぅげ，またはきぐぉたしぉぎたぃぁががたぅげげえぁぎいがぅげをエラーハンドラ内で呼び出した場合に発生する可能性がある．

〱〲〳〴〵

エラーコードとエラークラスはプロセスに関連付けられる．そのため，これらを任意のエラーハンドラ内で使用することができる． エラーハンドラは，与えられた
任意のエラーコードに対応できるように準備する必要がある．さらに，適切なエラーコードだけを使用してエラーハンドラを呼び出すことをお勧めする．例えば，通常はファイルエラーはファイルエラーハンドラに送信される． （ユーザへのアドバイス終わり）

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

8.6 時刻関数と同期

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉは時刻関数を定義する．時刻関数そのものは「メッセージ通信」の範疇ではないが，きぐぉではこれを規格化する．なぜなら，「性能デバッギング」では並列プログラムの時間を計ることが重要であり，かつ（ぐくこぉじ 〱〰〰〳〮〱〭〱〹〸〸と〱〰〰〳〮〴い 〱〴〮〱やうはひぴひちの 〹〰言語中の）既存の時刻関数は不便であったり，高精度な時刻へ適切にアクセスできる関数として提供されていないからである． 〲〵ページの第〲〮〶〮〵節も参照すること．

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

きぐぉたしごぉきぅ〨〩つはふぢぬづ きぐぉたしぴどねづ〨ぶはどつ〩
いくさあがぅ ぐげぅぃぉこぉくぎ きぐぉたしごぉきぅ〨〩{つはふぢぬづ きぐぉ〺〺しぴどねづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたしごぉきぅは，ある過去の時刻からの経過時間を表す秒数を浮動小数点数で返す．
「過去の時刻」は，プロセスの存続期間中変更されないことが保証されている．ユー
ザは，大きな秒数を他の単位に変換したい場合には自分で変換を行わなければならな
い．
この関数は可搬であり（「時計の刻み数」ではなく秒数を返す），高精度であることも可能であり，不要な処理も必要ない．次のように使用する．

〳〷
〳〸

ほ
つはふぢぬづ びぴちひぴぴどねづ〬 づのつぴどねづ〻
びぴちひぴぴどねづ 〽 きぐぉたしぴどねづ〨〩〻〮〮〮〮 びぴふてて ぴは ぢづ ぴどねづつ 〮〮〮づのつぴどねづ〽 きぐぉたしぴどねづ〨〩〻
ばひどのぴて〨〢ごとちぴ ぴははに 〥て びづっはのつびぜの〢〬づのつぴどねづ〭びぴちひぴぴどねづ〩〻

〳〹
〴〰
〴〱
〴〲

ぽ

〴〳
〴〴
〴〵

返される時刻はそれを呼び出したノードにローカルなものである．異なるノードが「同じ時刻」を返す必要はない（きぐぉたしごぉきぅたぉこたぇがくあぁがの説明も参照すること）
．

〴〶
〴〷
〴〸

きぐぉたしごぉぃか〨〩〸〮〷〮 起動〳〰〱

つはふぢぬづ きぐぉたしぴどっに〨ぶはどつ〩
いくさあがぅ ぐげぅぃぉこぉくぎ きぐぉたしごぉぃか〨〩{つはふぢぬづ きぐぉ〺〺しぴどっに〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱
〲
〳
〴

きぐぉたしごぉぃかは，きぐぉたしごぉきぅの精度を秒数で返す．すなわち，時計の刻み幅の秒数を倍精度値として返す．例えば，時計が〱ミリ秒ごとに増加するカウンターとしてハードウ
ェアにより実装されている場合，きぐぉたしごぉぃかが返す値は 〱〰−3 でなければならない．

〵
〶
〷
〸
〹

8.7 起動〱〰
〱〱きぐぉの〱つの目標はソースコードの可搬性を実現することである．これは，きぐぉを使って適切な言語標準に準拠して作成されたプログラムはそのままで 可搬であり，あるシステムから別のシステムへ移したときにソースコードの変更を必要としてはいけないということを意味する．このことは，コマンドラインからきぐぉプログラムを起動する方
法やきぐぉプログラムの実行環境をセットアップするためにユーザがしなければならない
ことについては何も明確に述べてはいない．しかし，実装では他のきぐぉルーチンが呼ばれる前に何らかのセットアップを実行する必要がある場合もある．この場合に備えて，
きぐぉには初期化ルーチンきぐぉたぉぎぉごがある．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたぉぎぉご〨〩〲〳〲〴どのぴ きぐぉたぉのどぴ〨どのぴ 〪ちひでっ〬 っとちひ 〪〪〪ちひでぶ〩
きぐぉたぉぎぉご〨ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぉのどぴ〨どのぴ〦 ちひでっ〬 っとちひ〪〪〦 ちひでぶ〩 （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺ぉのどぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
全てのきぐぉプログラムでは，初期化ルーチンきぐぉたぉぎぉごまたはきぐぉたぉぎぉごたごえげぅぁいを〱回だけ呼び出す必要がある．初期化ルーチンを〲回以上呼び出すのは誤りである．きぐぉ初期化ルーチンを呼び出す前に呼び出すことができるきぐぉ関数は，きぐぉたぇぅごたざぅげこぉくぎ，
きぐぉたぉぎぉごぉぁがぉずぅい， きぐぉたうぉぎぁがぉずぅいのみである．ぉこく ぃ言語の場合は，ねちどのへの引数により渡されるちひでっとちひでぶ，またはぎさががが使用できる．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ〩
ほきぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻

〳〷
〳〸
〳〹

〪〯 ばちひびづ ちひでふねづのぴび 〪〪〯〯 ねちどの ばひはでひちね〪〯〴〰

きぐぉたうどのちぬどぺづ〨〩〻〴〲〪〯 びづづ ぢづぬはぷ 〪〯ぽうはひぴひちの言語の場合は，ぉぅげげくげのみが使用できる．
ぃ言語およびぃ〫〫言語のアプリケーションでねちどののちひでっおよびちひでぶ引数にぎさががを渡せるようにするには，適合するきぐぉの実装が必要となる．ぃ〫〫言語では，これらの引数をまったくとらないきぐぉ〺〺ぉのどぴのための代替の 呼び出し形式がある．

〴〱

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〳〰〲
〱
〲
〳
〴
〵

根拠 一部のアプリケーションでは，ライブラリからきぐぉたぉのどぴが呼び出され，ねちどのの
ちひでっとちひでぶにアクセスしない場合がある．環境に関する特別な情報やねばどづへづっによって提供される情報を必要とするアプリケーションでは，環境変数から情報を取得できると考えられる． （根拠の終わり）〶〷〸

きぐぉたうぉぎぁがぉずぅ〨〩

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

どのぴ きぐぉたうどのちぬどぺづ〨ぶはどつ〩
きぐぉたうぉぎぁがぉずぅ〨ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどのちぬどぺづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
このルーチンは全てのきぐぉ状態を終了させる． 各プロセスは，終了の前にきぐぉたうぉぎぁがぉずぅを呼び出す必要がある．きぐぉたぁあくげごが呼び出されていない場合，各プロ
セスではきぐぉたうぉぎぁがぉずぅを呼び出す前に保留中のノンブロッキング通信が（ローカルに）完了していなければならない．また，最後のプロセスがきぐぉたうぉぎぁがぉずぅを呼び出した時点
で，保留中の全ての送信が対になる受信とマッチされ，保留中の全ての受信が対になる送信とマッチされなければならない．
例えば，以下のプログラムは正しく動作する．
ぐひはっづびび 〰
〭〭〭〭〭〭〭〭〭
きぐぉたぉのどぴ〨〩〻きぐぉたこづのつ〨つづびぴ〽〱〩〻きぐぉたうどのちぬどぺづ〨〩〻

ぐひはっづびび 〱〭〭〭〭〭〭〭〭〭
きぐぉたぉのどぴ〨〩〻きぐぉたげづっぶ〨びひっ〽〰〩〻きぐぉたうどのちぬどぺづ〨〩〻

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

マッチする受信がない場合，プログラムは誤りである．
ぐひはっづびび 〰
〭〭〭〭〭〭〭〭〭〭〭
きぐぉたぉのどぴ〨〩〻きぐぉたこづのつ 〨つづびぴ〽〱〩〻きぐぉたうどのちぬどぺづ〨〩〻

ぐひはっづびび 〱〭〭〭〭〭〭〭〭〭〭〭
きぐぉたぉのどぴ〨〩〻きぐぉたうどのちぬどぺづ〨〩〻

ブロッキング通信操作や，きぐぉたしぁぉごまたはきぐぉたごぅこごから正常に戻った場合，バッファの再使用が可能になり，ユーザによる通信が完了していることを示しているが，ローカルプロセスの処理が残っていないことを保証するものではない．きぐぉたぉこぅぎいによって生成された要求ハンドルを使用したきぐぉたげぅけさぅこごたうげぅぅから正常に戻った場合，ハンドルが無効化されるが，操作の完了を保証するわけではない．きぐぉたぉこぅぎいが完了するのは，何らかの方法によってマッチする受信が完了していることが確認できたときのみである．きぐぉたうぉぎぁがぉずぅは，戻る前に，ユーザが完了した通信によって必要とされるローカルな全ての処理が実際に実行されることを保証する．
きぐぉたうぉぎぁがぉずぅは，完了していない保留中の通信については何も保証しない（完了はきぐぉたしぁぉご，きぐぉたごぅこご，きぐぉたげぅけさぅこごたうげぅぅと他の完了の確認の組み合わせによってのみ保証される）．

〴〷〴〸

例 8.3 このプログラムは正しく動作する．

〸〮〷〮 起動〳〰〳

ひちのに 〰
ひちのに 〱〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽
〮〮〮〮〮〮
きぐぉたぉびづのつ〨〩〻きぐぉたげづっぶ〨〩〻
きぐぉたげづぱふづびぴたてひづづ〨〩〻
きぐぉたあちひひどづひ〨〩〻
きぐぉたあちひひどづひ〨〩〻
きぐぉたうどのちぬどぺづ〨〩〻きぐぉたうどのちぬどぺづ〨〩〻
づへどぴ〨〩〻
づへどぴ〨〩〻

〱
〲
〳
〴
〵
〶
〷
〸
〹

例 8.4 このプログラムは誤りであり，動作は未定義である．

〱〰

ひちのに 〰
ひちのに 〱〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽
〮〮〮〮〮〮
きぐぉたぉびづのつ〨〩〻きぐぉたげづっぶ〨〩〻
きぐぉたげづぱふづびぴたてひづづ〨〩〻
きぐぉたうどのちぬどぺづ〨〩〻きぐぉたうどのちぬどぺづ〨〩〻
づへどぴ〨〩〻
づへどぴ〨〩〻

〱〲

〱〱

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

きぐぉたあさううぅげたいぅごぁぃえがきぐぉたあこぅぎい（またはバッファリング付き送信）ときぐぉたうぉぎぁがぉずぅの間に実行されない場合，きぐぉたうぉぎぁがぉずぅにより黙示的にきぐぉたあさううぅげたいぅごぁぃえが実行される．

〲〰
〲〱
〲〲
〲〳
〲〴

例 8.5 このプログラムは正しく動作し，きぐぉたうどのちぬどぺづの実行後にはバッファの切り離しが行われている．

〲〵〲〶〲〷

ひちのに 〰
ひちのに 〱〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽
〮〮〮〮〮〮
ぢふててづひ 〽 ねちぬぬはっ〨〱〰〰〰〰〰〰〩〻
きぐぉたげづっぶ〨〩〻
きぐぉたあふててづひたちぴぴちっと〨〩〻きぐぉたうどのちぬどぺづ〨〩〻きぐぉたあびづのつ〨〩〻づへどぴ〨〩〻
きぐぉたうどのちぬどぺづ〨〩〻てひづづ〨ぢふててづひ〩〻
づへどぴ〨〩〻

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

例 8.6 こ の 例 で は，きぐぉたぉばひはぢづ〨〩はうぁがこぅフ ラ グ を 返 す 必 要 が あ る．
きぐぉたごづびぴたっちのっづぬぬづつ〨〩は，プロセス〰 のきぐぉたぃちのっづぬ〨〩とプロセス〱のきぐぉたうどのちぬどぺづ〨〩の実行の相対順序に関係なく，ごげさぅフラグを返す必要がある．
きぐぉたぉばひはぢづ〨〩呼び出しは，ユーザが送信先にぜぴちで〱〢メッセージが存在することをユー
ザに認識させずに，処理系には認識させておくためのものである．

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

ひちのに 〰
ひちのに 〱〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽
きぐぉたぉのどぴ〨〩〻きぐぉたぉのどぴ〨〩〻きぐぉたぉびづのつ〨ぴちで〱〩〻きぐぉたあちひひどづひ〨〩〻
きぐぉたあちひひどづひ〨〩〻

〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〳〰〴
〱
〲

きぐぉたあちひひどづひ〨〩〻

〳
〴
〵
〶
〷
〸

きぐぉたぉばひはぢづ〨ぴちで〲〩〻きぐぉたあちひひどづひ〨〩〻
きぐぉたうどのちぬどぺづ〨〩〻
づへどぴ〨〩〻

きぐぉたぃちのっづぬ〨〩〻
きぐぉたしちどぴ〨〩〻きぐぉたごづびぴたっちのっづぬぬづつ〨〩〻
きぐぉたうどのちぬどぺづ〨〩〻
づへどぴ〨〩〻

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

実装者へのアドバイス 実装では，後から発生する可能性のあるメッセージの取り消しの処理が全て完了するまで，きぐぉたうぉぎぁがぉずぅ からの戻りを遅らせる必要がある
場合もある．考えられる〱つの解決策は，きぐぉたうぉぎぁがぉずぅの内部にバリアを設置することである． （実装者へのアドバイス終わり）

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

きぐぉたうぉぎぁがぉずぅが戻った後では，きぐぉたぇぅごたざぅげこぉくぎ，きぐぉたぉぎぉごぉぁがぉずぅい，きぐぉたうぉぎぁがぉずぅい以外のきぐぉルーチンは（きぐぉたぉぎぉごでさえ）呼び出すことはできない．各プロセスはきぐぉたうぉぎぁがぉずぅを呼び出す前に開始した保留中の通信を全て完了する必要がある． 呼び出しが戻れば，各プロセスはローカルの処理を続行することも，その後の他のプロセスとのきぐぉ通信に参加せずに終了することもできる．きぐぉたうぉぎぁがぉずぅは
接 続 さ れ て い る 全 て の プ ロ セ ス に 対 し て 集 団 的 で あ る． ス ポ ー ン（びばちぷの），アク
セプト（ちっっづばぴ），またはコネクト（っはののづっぴ）が行われたプロセスがない場合，これはきぐぉたぃくききたしくげがいが対象となる．それ以外の場合，かつて接続していたまたは現在も接続中である全てのプロセスの集合に対して集団的である．これらの事項は，〳〴〳ページの第〱〰〮〵〮〴節で説明している．
実装者へのアドバイス プロセスが開始した全ての通信を完了した場合でも，このような通信は下位のきぐぉシステムから見ると完了していない可能性がある．例
えば，ブロッキング送信は，データが送信側にバッファリングされた状態でも完了している可能性がある．きぐぉ実装では，きぐぉたうぉぎぁがぉずぅが戻る前にプロセスが全てのきぐぉ通信への関与を完了していることを保証する必要がある． そのため，
きぐぉたうぉぎぁがぉずぅの呼び出し後にプロセスが終了した場合，継続中の通信のエラーが発生することはない． （実装者へのアドバイス終わり）

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

全てのプロセスがきぐぉたうぉぎぁがぉずぅから戻る必要はないが，計算のきぐぉ部分が完了していることがユーザにわかるように，少なくともきぐぉたぃくききたしくげがいのプロセス〰は戻る必要がある．また，ぐくこぉじ環境では，きぐぉたうぉぎぁがぉずぅから戻る各プロセスに対して終了コードを記述することが望ましい場合もある．
例 8.7 以下に，少なくとも〱つのプロセスが戻り，戻ったプロセスの〱つがプロセス〰であることが確認できることを必要とする使用法を示す．以下のようなコードを使用すれば，どれだけ多数のプロセスが戻っても正しく動作する．

〸〮〷〮 起動〳〰〵〮〮〮
きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ねべひちのに〩〻〮〮〮きぐぉたうどのちぬどぺづ〨〩〻
どて 〨ねべひちのに 〽〽 〰〩 ほ
ひづびふぬぴてどぬづ 〽 てはばづの〨〢はふぴてどぬづ〢〬〢ぷ〢〩〻
つふねばたひづびふぬぴび〨ひづびふぬぴてどぬづ〩〻
てっぬはびづ〨ひづびふぬぴてどぬづ〩〻ぽづへどぴ〨〰〩〻

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

きぐぉたぉぎぉごぉぁがぉずぅい〨 」ちで 〩
くさご

」ちで

〱〳

きぐぉたぉぎぉごが呼び出された場合にフラグはぴひふづとな
り，それ以外はてちぬびづとなる．

〱〴
〱〵
〱〶

どのぴ きぐぉたぉのどぴどちぬどぺづつ〨どのぴ 〪てぬちで〩きぐぉたぉぎぉごぉぁがぉずぅい〨うがぁぇ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげくげ
{ぢははぬ きぐぉ〺〺ぉびたどのどぴどちぬどぺづつ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
こ の ル ー チ ン は， きぐぉたぉぎぉごの 呼 び 出 し が 完 了 し て い る か ど う か の 確 認 の た め に使用することができる． きぐぉたぉぎぉごぉぁがぉずぅいは，呼び出しプロセスですでにきぐぉたぉぎぉごが
呼び出されている場合にぴひふづを返す． きぐぉたうぉぎぁがぉずぅが呼び出されているかどうかは，
きぐぉたぉぎぉごぉぁがぉずぅいの動作に影響しない．これはきぐぉたぉぎぉごが呼び出される前に呼び出すことのできる数少ないルーチンの〱つである．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

きぐぉたぁあくげご〨 っはねね〬 づひひはひっはつづ 〩
ぉぎ
ぉぎ

っはねね
づひひはひっはつづ〲〹

異常停止すべきタスクのコミュニケータ

〳〰

呼び出し環境に返すエラーコード〳〱

どのぴ きぐぉたぁぢはひぴ〨きぐぉたぃはねね っはねね〬 どのぴ づひひはひっはつづ〩きぐぉたぁあくげご〨ぃくきき〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺ぁぢはひぴ〨どのぴ づひひはひっはつづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
このルーチンは，っはねねのグループ中の全てのタスクを「できるかぎり」異常停止しようとする．この関数は呼び出し環境でエラーコードに応じた処理を要求しない．しかし，さのどへやぐくこぉじ環境では，これをメインプログラムからのひづぴふひのづひひはひっはつづとして処理する必要がある．
これがプロセスの部分集合である場合， きぐぉ実装が っはねねによって表わされるプロセ
スだけを異常停止する ことができない場合もある．この場合， きぐぉ実装はコネクトされた全てのプロセスを異常停止すべきであるが，コネクトされていないどんなプロセスも異常停止すべきでない ．スポーン（びばちぷの），アクセプト（ちっっづばぴ），またはコネクト（っはののづっぴ）が行われたプロセスがない場合，きぐぉたぃくききたしくげがいに関連付けられた全てのプロセスが異常停止される．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〳〰〶
〱
〲
〳
〴
〵

根拠 今後，環境へのきぐぉの拡張として動的なプロセス管理などが行えるように，コミュニケータの引数が用意されている．特に，これを使用してきぐぉ実装でのきぐぉたぃくききたしくげがいの部分集合の異常停止を行うことができるが，必須ではない．
（根拠の終わり）〶〷〸〹

ユーザへのアドバイス エラーコードが実行可能ファイルから返されるかきぐぉプロセスの起動メカニズム（ねばどづへづっなど）から返されるかは，きぐぉライブラリの品質に関する事柄であり，必須事項ではない． （ユーザへのアドバイス終わり）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

実装者へのアドバイス 高品質な実装では，可能なかぎり，きぐぉプロセスの起動メ
カニズム（ねばどづへづっ，シングルトンどのどぴなど）からエラーコードを返そうとする．
（実装者へのアドバイス終わり）〱〶〱〷

8.7.1 プロセス終了時のユーザ関数の実行

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉプロセスの終了時に処理を実行できれば便利な場合がある．例えば，きぐぉジョブ（または，動的に生成されたプロセスの場合に終了させるジョブのその部分）の完了まで有益である初期化をルーチンで実行することができる．きぐぉでこれを実現するには， コ
ールバック関数を使用してきぐぉたぃくききたこぅがうに属性を結びつける． きぐぉたうぉぎぁがぉずぅが呼び出されると，まずきぐぉたぃくききたこぅがうで きぐぉたぃくききたうげぅぅと同等の機能が実行される．これにより， きぐぉたぃくききたこぅがうに関連付けられた全てのキーで， きぐぉたぃくききたこぅがうで設定されたのと逆の順序で削除コールバック関数が実行される． きぐぉたぃくききたこぅがうにキーが結びつけられていない場合コールバックは呼び出されない． きぐぉたぃくききたこぅがうの「解放」は，
きぐぉの他の部分が影響を受ける前に行われる．そのため，例えばこれらのコールバック
関数できぐぉたうぉぎぁがぉずぅいを呼び出すとてちぬびづが返される． きぐぉたぃくききたこぅがうについて処理が完了すると，きぐぉたうぉぎぁがぉずぅが行う残りの処理と順序は規定されていない．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

実装者へのアドバイス 属性はサポートされる任意の言語から追加することができるため， きぐぉ実装では正しいコールバックが実行されるように，生成時の言語を記憶しておく必要がある．内部できぐぉたぃくききたこぅがうで属性削除コールバックを使用する実装では，ライブラリまたはアプリケーションにアプリケーションレベルのコー
ルバックの実行前にシャットダウンされるきぐぉ実装の部分がないことを保証するため，きぐぉたぉぎぉご 〯 きぐぉたぉぎぉごたごえげぅぁいから戻る前に内部コールバックを登録する必要がある． （実装者へのアドバイス終わり）〴〱〴〲

8.7.2 MPIが終了しているかどうかの確認

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉの目標の〱つは，階層ライブラリを利用できるようにすることであった． ライ
ブラリでこれをすっきりとした形で行うために，きぐぉがアクティブであるかどうかを知る必要がある． きぐぉでは，きぐぉが初期化されているかどうかを確認するための関数
きぐぉたぉぎぉごぉぁがぉずぅいが用意された． 問題は，きぐぉが終了済であるかどうかを知ろうとする〸〮〸〮 可搬な乍乐义プロセスの起動〳〰〷ときに発生する．それは，一度きぐぉが終了してしまうと，もはやアクティブでなくなり，再始動することも不可能となるからである． ライブラリが適切に機能するには，この状態を確認できなければならない．そのため，以下の関数が必要となる．

〱
〲
〳
〴
〵

きぐぉたうぉぎぁがぉずぅい〨」ちで〩
くさご

」ちで

〶

きぐぉが終了した場合にぴひふづ（論理型）〷〸

どのぴ きぐぉたうどのちぬどぺづつ〨どのぴ 〪てぬちで〩きぐぉたうぉぎぁがぉずぅい〨うがぁぇ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげくげ
{ぢははぬ きぐぉ〺〺ぉびたてどのちぬどぺづつ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〹
〱〰
〱〱
〱〲
〱〳

このルーチンは，きぐぉたうぉぎぁがぉずぅが完了しているとぴひふづを返す．きぐぉたうぉぎぁがぉずぅいの呼び
出しは，きぐぉたぉぎぉごの前やきぐぉたうぉぎぁがぉずぅの後に行っても問題ない．

〱〴

ユーザへのアドバイス きぐぉたぉぎぉごが完了していてきぐぉたうぉぎぁがぉずぅが完了していない
場合，きぐぉは「アクティブ」であるため，きぐぉ関数を呼び出しても安全である．ラ
イブラリが，きぐぉがアクティブかどうかを知るための他の方法を提供していない場
合，きぐぉたぉぎぉごぉぁがぉずぅいおよびきぐぉたうぉぎぁがぉずぅいを使用してこれを確認することができる．例えば，きぐぉはきぐぉたうぉぎぁがぉずぅの実行中に呼び出されたコールバック関数内で「アクティブ」である． （ユーザへのアドバイス終わり）

〱〷

〱〵
〱〶

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

8.8 可搬なMPIプロセスの起動〲〶〲〷

きぐぉの多数の実装において，きぐぉプログラム用の以下の形式の起動コマンドが用意さ
れている．

〲〸
〲〹
〳〰

ねばどひふの 〼ねばどひふの ちひでふねづのぴび〾 〼ばひはでひちね〾 〼ばひはでひちね ちひでふねづのぴび〾〳〱〳〲

プログラムの起動用のコマンドをプログラム自体と分離することにより，特にネットワークや異機種の実装での自由度が高くなっている．例えば，起動スクリプトはきぐぉプ
ログラム自体を実行しているマシン上で実行する必要はない．
標準の起動メカニズムを備えているため，これらを管理するコマンドラインやス
クリプトにまできぐぉプログラムの可搬性が拡張される．例えば，何百というプログラ
ムを実行する検証スイートスクリプトは，このような標準の起動メカニズムを使用して記述すると，可搬なスクリプトにすることができる．「標準の」コマンドと，標準でなく実装間で可搬でない既存の実行方法とを混同しないために， ねばどひふの の代わりにきぐぉはねばどづへづっを規定する．
標準の起動メカニズムはきぐぉの使いやすさの向上に役立つが，環境の範囲が非常に広い（例えば，コマンドラインインターフェイスさえない場合もある）ため，きぐぉでこのよ
うなメカニズムの使用を必須と定めることはできない．その代わり，きぐぉではねばどづへづっ起動コマンドを規定し，これを推奨しているが，必須とはしていない．（実装者へのアドバ

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〳〰〸
〱
〲
〳
〴
〵

イス）
．しかし，ねばどづへづっというコマンドが用意されている実装の場合，以下の形式を使用する必要がある．
以下の形式
ねばどづへづっ 〭の 〼のふねばひはっび〾 〼ばひはでひちね〾

〶
〷
〸
〹

を，初期きぐぉたぃくききたしくげがいを使用し，グループに〼のふねばひはっび〾個のプロセスが含まれる〼ばひはでひちね〾を起動する少なくとも〱つの方法として提案する．ねばどづへづっのその他の引数は 実装依存である．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

実装者へのアドバイス きぐぉプログラム用の特別な起動コマンドを用意する場合，
以下の形式を使用することをお勧めする． この構文は〬ねばどづへづっをきぐぉたぃくききたこぐぁしぎのコマンドラインバージョンとして見なせるように選択されている（第〱〰〮〳〮〴節を参照）．
きぐぉたぃくききたこぐぁしぎと同様，

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ねばどづへづっ 〭の〼ねちへばひはっび〾〭びはてぴ 〼〾〭とはびぴ 〼〾
〭ちひっと 〼〾
〭ぷつどひ 〼〾
〭ばちぴと 〼〾〭てどぬづ 〼〾〮〮〮
〼っはねねちのつ ぬどのづ〾

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

アプリケーションプログラム用の〱つのコマンドラインとその引数で十分な場合，
上記のようになる．これらの引数の意味については，第〱〰〮〳〮〴節を参照すること．
きぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅに対応するケースでは，〲通りの形式が使用でき
る．
形式ぁ：

〳〳
〳〴

ねばどづへづっ ほ 〼ちぢはぶづ ちひでふねづのぴび〾 ぽ 〺 ほ 〮〮〮 ぽ 〺 ほ 〮〮〮 ぽ 〺 〮〮〮 〺 ほ 〮〮〮 ぽ

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

きぐぉたぃくききたこぐぁしぎと同様，引数は全てオプションである（〭の へ 引数もオプシ
ョンで，デフォルトは実装依存である． 〱となることも，環境変数から取得され る こ と も，コ ン パ イ ル 時 に 指 定 さ れ る こ と も あ る）
． 引 数 の 名 前 と 意 味 は，きぐぉたぃくききたこぐぁしぎのどのては引数のキーから取得される．このほか，実装依存の引数を使用することもできる．
形式ぁは，入力するには便利であるが，コロンをプログラムの引数として使用することはできない．そのため，代わりにファイルベースの形式が利用できる．
形式あ：

〴〶
〴〷
〴〸

ねばどづへづっ 〭っはのてどでてどぬづ 〼てどぬづのちねづ〾〸〮〸〮 可搬な乍乐义プロセスの起動〳〰〹

ここで，<てどぬづのちねづ>の各行は形式ぁでコロンで区切られた部分に相当する． だ〣〧 で始まる行はコメントである．行が複数にまたがる場合は各行の最後にだぜ〧を付けて続けることができる．

〱
〲
〳
〴
〵

例 8.8 現在のマシンまたはデフォルトのマシンでねべばひはでという〱〶個のインスタンスを起動する．

〶〷〸

ねばどづへづっ 〭の 〱〶 ねべばひはで

〹
〱〰
〱〱
〱〲

例 8.9 てづひひちひどというマシン上で〱〰個のプロセスを起動する．

〱〳〱〴

ねばどづへづっ 〭の 〱〰 〭とはびぴ てづひひちひど ねべばひはで

〱〵
〱〶
〱〷
〱〸

例 8.10 同じプログラムの〳個のコピーを，それぞれ異なるコマンドラインの引数を使用して起動する．

〱〹
〲〰
〲〱

ねばどづへづっ ねべばひはで どのてどぬづ〱 〺 ねべばひはで どのてどぬづ〲 〺 ねべばひはで どのてどぬづ〳

〲〲
〲〳
〲〴
〲〵

例 8.11 〵台のこふのではっづちのプログラムを起動し，〱〰台のげこ〯〶〰〰〰でちぴねはびプログラムを起動する．

〲〶
〲〷
〲〸
〲〹

ねばどづへづっ 〭の 〵 〭ちひっと びふの はっづちの 〺 〭の 〱〰 〭ちひっと ひび〶〰〰〰 ちぴねはび
この場合の実装では，適切なタイプのホストを選択するための方法があることが前提となる．そのランクは指定した順序となる．

〳〰
〳〱
〳〲
〳〳
〳〴

例 8.12 〵台のこふのではっづちのプログラムを起動し，〱〰台のげこ〯〶〰〰〰でちぴねはびプログラムを起動する（形式あ）
．

〳〵
〳〶
〳〷

ねばどづへづっ 〭っはのてどでてどぬづ ねべてどぬづ〳〸〳〹

ここで，ねべてどぬづの内容は次のとおりである．

〴〰
〴〱〭の 〵 〭ちひっと びふの
はっづちの〭の 〱〰 〭ちひっと ひび〶〰〰〰 ちぴねはび

〴〲
〴〳
〴〴
〴〵
〴〶

（実装者へのアドバイス終わり）

〴〷
〴〸

〳〱〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〸〮 乍乐义環境管理

〱
〲
〳
〴
〵

第9章

〶
〷
〸
〹
〱〰

Infoオブジェクト

〱〱
〱〲
〱〳
〱〴

きぐぉの多くのルーチンは引数どのてはを取る．どのてはは， ぃ言語ではきぐぉたぉのては型のハンドル，ぃ〫〫言語ではきぐぉ〺〺ぉのては型のハンドル， うはひぴひちの言語ではぉぎごぅぇぅげ型のハンドルを持つ不可視オブジェクトである． このオブジェクトは順序不定の 〨にづべ〬ぶちぬふづ〩ペアの集合（にづべもぶちぬふづも文字列）を保管する． 〱つのキーは〱つの値しか持つことができない． きぐぉには複数のキーが予約されていて，予約されたキーを 実装が使う場合，そのキーで決められた機能を提供する必要がある． 実装では必ずしもこれらのキーをサポートする必要はな
く， きぐぉで予約されていないキーをサポートすることもできる．
実装では，キーを認識できるかどうかに関係なく，どのてはオブジェクトを任意の〨にづべ〬
ぶちぬふづ〩ペアのキャッシュとしてサポートする必要がある．認識できないキーを無視するため， きぐぉたぉのてはの形式でヒントを取得する各関数を用意する必要がある． どのてはオブジ
ェクトのこの記述は，実装がキーを認識できるが関連付けられた値を認識できない場
合に，特定の関数が対処する方法を定義するものではない． きぐぉたぉぎうくたぇぅごたぎかぅすこ，
きぐぉたぉぎうくたぇぅごたぎごえかぅす， きぐぉたぉぎうくたぇぅごたざぁがさぅがぅぎ，きぐぉたぉぎうくたぇぅごは，階層機能でも ぉのてはオブジェクトを使用できるように，すべての〨にづべ〬ぶちぬふづ〩ペアを保持する必要があ
る．
キーには実装で定義される最大長きぐぉたきぁじたぉぎうくたかぅすがあり，この範囲は〳〲〜〲〵〵である．値には実装で定義される最大長 きぐぉたきぁじたぉぎうくたざぁががある． うはひぴひちの言語では，先頭および末尾の両方の空白文字が除外される． 戻り値は，これらの最大長を超えることはない．にづべもぶちぬふづも大文字と小文字が区別される．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

根 拠 キ ー に は 最 大 長 が 決 め ら れ て い る． そ れ は， 既 知 の キ ー の 集 合 は 常 に有限であって 実装で把握されており，またキーを複雑にする理由がないため
で あ る． こ の よ う に 最 大 サ イ ズ は 小 さ い の で， ア プ リ ケ ー シ ョ ン で は サ イ
ズきぐぉたきぁじたぉぎうくたかぅすのキーを宣言することができる．値のサイズの制限について
は，実装で任意の長さの文字列を扱う必要がないようにするために設ける必要がある． （根拠の終わり）

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

ユーザへのアドバイス きぐぉたきぁじたぉぎうくたざぁがは非常に大きくなることがあるため，そのサイズの文字列を宣言することは賢明でない場合がある． （ユーザへのアドバ
〳〱〱

〴〷
〴〸

第 〹〮 义乎乆乏オブジェクト〳〱〲
イス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

ノンブロッキングルーチンの引数である場合，どのてははそのルーチンが戻る前に解析されるため，戻った直後に変更または解放ができるようになっている．
記述がキーまたは値を論理型，整数型，またはリストとして参照する場合，これらの型の文字列表現を意味する． 実装ではどのては値の文字列を他の型に変換する方法に関する独自の規則を定義することができるが，可搬性を保証するため，すべての実装で以下の表現をサポートする必要がある．論理型の正規の値には文字列 ぜぴひふづ〢およびぜてちぬびづ〢（す
べて小文字）が含まれていなければならない． 整数型の場合，正規の値には，プログラ
ムの標準の整数型の範囲内である整数の 〱〰進値の文字列表現が含まれていなければならない．（しかし，正規の整数が必ずしも指定のキーに対する正規の値とならない可能性がある．）正の数の場合，〫符号はオプションである．〫または−の符号と数字の先頭の桁の間に空白文字を入れてはならない．カンマ区切りのリストの場合，文字列はカンマで区切られた正規の要素を含んでいなければならない．上記のどのては値の型やカンマ区切りのリストの各要素では，先頭および末尾の空白文字は自動的に除外される．これらの規則はこれらの型のすべてのどのては値に適用される． 実装では，他のどのてはキーの値に対して異なる解釈を自由に指定できる．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

きぐぉたぉぎうくたぃげぅぁごぅ〨どのては〩
くさご

どのては

生成されるどのてはオブジェクト（ハンドル）

どのぴ きぐぉたぉのてはたっひづちぴづ〨きぐぉたぉのては 〪どのては〩きぐぉたぉぎうくたぃげぅぁごぅ〨ぉぎうく〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺ぉのては きぐぉ〺〺ぉのては〺〺ぃひづちぴづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〹
〳〰
〳〱

きぐぉたぉぎうくたぃげぅぁごぅは新しいどのてはオブジェクトを生成する．新しく生成されたオブジェ
クトにはキー／値ペアは含まれていない．

〳〲
〳〳
〳〴

きぐぉたぉぎうくたこぅご〨どのては〬 にづべ〬 ぶちぬふづ〩

〳〵

ぉぎくさご

〳〶

ぉぎ

〳〷

ぉぎ

どのては
にづべ
ぶちぬふづ

どのてはオブジェクト（ハンドル）キー（文字列）値（文字列）

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

どのぴ きぐぉたぉのてはたびづぴ〨きぐぉたぉのては どのては〬 っとちひ 〪にづべ〬 っとちひ 〪ぶちぬふづ〩
きぐぉたぉぎうくたこぅご〨ぉぎうく〬 かぅす〬 ざぁがさぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす〬 ざぁがさぅ{ぶはどつ きぐぉ〺〺ぉのては〺〺こづぴ〨っはのびぴ っとちひ〪 にづべ〬 っはのびぴ っとちひ〪 ぶちぬふづ〩 （廃止された呼び出し形
式, 第15.2節を参照）}

〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぉぎうくたこぅごは〨にづべ〬ぶちぬふづ〩ペアをどのてはに追加し，同じキーの値がすでに設定されている場合，値を上書きする． ぃ言語ではにづべとぶちぬふづはのふぬぬで終わる文字列である． うはひぴひちの言
語では，にづべとぶちぬふづの先頭および末尾の空白文字は除外される． にづべまたはぶちぬふづが許〳〱〳
容最大サイズを超える場合，それぞれエラー きぐぉたぅげげたぉぎうくたかぅすまたはきぐぉたぅげげたぉぎうくたざぁがさぅが発生する．

〱
〲
〳
〴

きぐぉたぉぎうくたいぅがぅごぅ〨どのては〬 にづべ〩
ぉぎくさご
ぉぎ

どのては
にづべ

〵

どのてはオブジェクト（ハンドル）〶キー（文字列）〷〸

どのぴ きぐぉたぉのてはたつづぬづぴづ〨きぐぉたぉのては どのては〬 っとちひ 〪にづべ〩
きぐぉたぉぎうくたいぅがぅごぅ〨ぉぎうく〬 かぅす〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす{ぶはどつ きぐぉ〺〺ぉのては〺〺いづぬづぴづ〨っはのびぴ っとちひ〪 にづべ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぉぎうくたいぅがぅごぅはどのてはから〨にづべ〬ぶちぬふづ〩ペアを削除する． どのてはににづべが定義されていな
い場合，この呼び出しで クラスきぐぉたぅげげたぉぎうくたぎくかぅすのエラーが発生する．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

きぐぉたぉぎうくたぇぅご〨どのては〬 にづべ〬 ぶちぬふづぬづの〬 ぶちぬふづ〬 」ちで〩
ぉぎ
ぉぎ
ぉぎ
くさご
くさご

どのては
にづべ
ぶちぬふづぬづの
ぶちぬふづ
」ちで

〱〸

どのてはオブジェクト（ハンドル）〱〹

キー（文字列）〲〰

ぶちぬふづ引数の長さ（整数型）
値（文字列）にづべが定義されている場合は ぴひふづ，定義されていない
場合はてちぬびづ（論理型）

どのぴ きぐぉたぉのてはたでづぴ〨きぐぉたぉのては どのては〬 っとちひ 〪にづべ〬 どのぴ ぶちぬふづぬづの〬 っとちひ 〪ぶちぬふづ〬
どのぴ 〪てぬちで〩きぐぉたぉぎうくたぇぅご〨ぉぎうく〬 かぅす〬 ざぁがさぅがぅぎ〬 ざぁがさぅ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ざぁがさぅがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす〬 ざぁがさぅ
がくぇぉぃぁが うがぁぇ
{ぢははぬ きぐぉ〺〺ぉのては〺〺ぇづぴ〨っはのびぴ っとちひ〪 にづべ〬 どのぴ ぶちぬふづぬづの〬 っとちひ〪 ぶちぬふづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
この関数は，その前のきぐぉたぉぎうくたこぅごの呼び出しでキーに関連付けられた値を取得する．このような値が存在する場合，」ちでにぴひふづを設定し， ぶちぬふづに値を返す．値が存在しない場合，」ちでにてちぬびづを設定し，ぶちぬふづは変更しない．ぶちぬふづぬづのは ぶちぬふづで使用可能な文字数を示す．これが値の実際のサイズよりも小さい場合，収まらない分が値から切り詰められる．ぃ言語では，のふぬぬ終端文字を格納するため， ぶちぬふづぬづのは割り当てた領域のサイズより〱文字少なくすべきである．
にづべがきぐぉたきぁじたぉぎうくたかぅすのサイズより大きい場合， 呼び出しは誤りである．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〹〮 义乎乆乏オブジェクト

〳〱〴
〱
〲

きぐぉたぉぎうくたぇぅごたざぁがさぅがぅぎ〨どのては〬 にづべ〬 ぶちぬふづぬづの〬 」ちで〩
ぉぎ

〳
〴

ぉぎ

〵

くさご

〶

くさご

どのては
にづべ
ぶちぬふづぬづの
」ちで

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

どのてはオブジェクト（ハンドル）キー（文字列）ぶちぬふづ引数の長さ（整数型）にづべが定義されている場合はぴひふづ，定義されていない
場合はてちぬびづ（論理型）

どのぴ きぐぉたぉのてはたでづぴたぶちぬふづぬづの〨きぐぉたぉのては どのては〬 っとちひ 〪にづべ〬 どのぴ 〪ぶちぬふづぬづの〬
どのぴ 〪てぬちで〩きぐぉたぉぎうくたぇぅごたざぁがさぅがぅぎ〨ぉぎうく〬 かぅす〬 ざぁがさぅがぅぎ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ざぁがさぅがぅぎ〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす{ぢははぬ きぐぉ〺〺ぉのては〺〺ぇづぴたぶちぬふづぬづの〨っはのびぴ っとちひ〪 にづべ〬 どのぴ〦 ぶちぬふづぬづの〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}にづべに関連付けられたぶちぬふづの長さを取得する． にづべが定義されている場合，ぶちぬふづぬづのには
その関連付けられた値の長さが設定され，」ちでにぴひふづが設定される． にづべが定義されていない場合，ぶちぬふづぬづのは変更されず， 」ちでにてちぬびづが設定される．ぃ言語またはぃ〫〫言語で返される長さには，文字列終端文字は含まれない．
にづべがきぐぉたきぁじたぉぎうくたかぅすのサイズより大きい場合， 呼び出しは誤りである．

〲〲
〲〳
〲〴

きぐぉたぉぎうくたぇぅごたぎかぅすこ〨どのては〬 のにづべび〩

〲〵

ぉぎ

〲〶

くさご

どのては
のにづべび

どのてはオブジェクト（ハンドル）定義されたキーの数（整数型）

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

どのぴ きぐぉたぉのてはたでづぴたのにづべび〨きぐぉたぉのては どのては〬 どのぴ 〪のにづべび〩
きぐぉたぉぎうくたぇぅごたぎかぅすこ〨ぉぎうく〬 ぎかぅすこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぎかぅすこ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぉのては〺〺ぇづぴたのにづべび〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぉぎうくたぇぅごたぎかぅすこは どのてはに現在定義されているキーの数を返す．

〳〳〳〴

きぐぉたぉぎうくたぇぅごたぎごえかぅす〨どのては〬 の〬 にづべ〩

〳〵
〳〶

ぉぎ

〳〷

ぉぎ

〳〸

くさご

どのては
の
にづべ

どのてはオブジェクト（ハンドル）
キー番号（整数型）
キー（文字列）

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぉのてはたでづぴたのぴとにづべ〨きぐぉたぉのては どのては〬 どのぴ の〬 っとちひ 〪にづべ〩
きぐぉたぉぎうくたぇぅごたぎごえかぅす〨ぉぎうく〬 ぎ〬 かぅす〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす{ぶはどつ きぐぉ〺〺ぉのては〺〺ぇづぴたのぴとにづべ〨どのぴ の〬 っとちひ〪 にづべ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
この関数は， どのてはに定義されたの番目のキーを返す． キーは 〰 . . . N − 〱 の番号が与えられており， N はきぐぉたぉぎうくたぇぅごたぎかぅすこによって返された値である．〰からN −〱のすべてのキーは，定義されていることが保証されている． 与えられたキー番号〳〱〵
はきぐぉたぉぎうくたこぅごまたは きぐぉたぉぎうくたいぅがぅごぅによってどのてはが変更されないかぎり，変化し
ない．

〱
〲
〳
〴

きぐぉたぉぎうくたいさぐ〨どのては〬 のづぷどのては〩
ぉぎ
くさご

どのては
のづぷどのては〵

どのてはオブジェクト（ハンドル）〶

どのてはオブジェクト（ハンドル）〷〸

どのぴ きぐぉたぉのてはたつふば〨きぐぉたぉのては どのては〬 きぐぉたぉのては 〪のづぷどのては〩きぐぉたぉぎうくたいさぐ〨ぉぎうく〬 ぎぅしぉぎうく〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぎぅしぉぎうく〬 ぉぅげげくげ
{きぐぉ〺〺ぉのては きぐぉ〺〺ぉのては〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぉぎうくたいさぐは既存のどのてはオブジェクトを複製し， 同じ〨にづべ〬ぶちぬふづ〩ペア，および同
じキー順序を持つ 新しいオブジェクトを生成する．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

きぐぉたぉぎうくたうげぅぅ〨どのては〩
ぉぎくさご

どのては

〱〷

どのてはオブジェクト（ハンドル）〱〸〱〹

どのぴ きぐぉたぉのてはたてひづづ〨きぐぉたぉのては 〪どのては〩きぐぉたぉぎうくたうげぅぅ〨ぉぎうく〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぉのては〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〲〰

この関数はどのてはを解放し，きぐぉたぉぎうくたぎさががを設定する． どのては引数の値は，どのてはがルーチンに渡されるたびに解釈される． ルーチンから戻った後にどのてはが変更された場合，その解釈には反映されない．

〲〴

〲〱
〲〲
〲〳

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〱〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〹〮 义乎乆乏オブジェクト

〱
〲
〳
〴
〵

第10章

〶
〷
〸
〹

プロセスの生成と管理

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

10.1 はじめに〱〶きぐぉ は主に，プロセスやリソース管理よりも通信が主題である．しかし，通信のための有益な枠組を定義するには，ある程度これらの事柄について考えておく必要がある．
この章では，実行環境に最小限の制限を課すものの，プロセスの管理へのさまざまなア
プローチが可能となる一群のきぐぉ インターフェイスを示す．
プロセスの生成のためのきぐぉ モデルでは，共通のきぐぉたぃくききたしくげがいのメンバシップ
により関連付けられる一群の初期プロセスの生成と，きぐぉ アプリケーションの起動後のプロセスの生成と管理が可能となる．この後半のプロセス生成の大きな推進力は，ぐざき
文献せ〲〳その研究によりもたらされた．この研究は，利点と落とし穴を併せ持つプロセス管
理とリソース制御における豊富な経験を提供してきた．
きぐぉ フォーラムは，既存の，また今後開発されるリソースおよびプロセスのコントロ
ーラの広範囲に適した可搬なインターフェースを設計できないと判断し，リソース制御を対象としないことを決定した．リソース管理では，仮想並列マシンでのノードの追加／削除， リソースの予約／スケジューリング，きぐぐの計算パーティションの管理，利用可能なリソースに関する情報の返却など，幅広い能力が求められる．ここでは，リソー
ス管理が，密に結合されたシステムの場合はコンピュータベンダーによって，または環境がワークステーションのクラスタの場合はサードパーティのソフトウェアパッケージ
によって，外部的に提供されるものと仮定している．
きぐぉ にプロセス管理を含める理由としては，技術的な面と実践的な面の両方がある．
ある種の重要なメッセージ通信アプリケーションはプロセス管理を必要とする．ここには，タスク並列，並列モジュールを利用したシリアルアプリケーション，起動が必要なプロセスの数とタイプを実行時に評価する必要がある問題など，が含まれる．実践的な面では，ぐざきからきぐぉ への移行を行うワークステーションクラスタの利用者は，プロセ
スとリソースの管理のためにぐざきの機能を使用することに慣れている場合がある．このような機能が欠落していれば，実際に移行に障害をきたすと考えられる．
以下の目標がきぐぉのプロセス管理の設計の中心となっている．
• きぐぉ のプロセスモデルが現在の並列環境の大部分に適用されなければならない．こ
〳〱〷

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理

〳〱〸
〱
〲

こには，緊密に統合されたきぐぐからワークステーションの異機種ネットワークまでの全てが含まれる．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

• きぐぉ がオペレーティングシステムの責任を引き受けてはならない．その代わり，ア
プリケーションとシステムソフトウェアの間の有益なインターフェイスを提供する必要がある．
• きぐぉは動的プロセスによる通信の非決定性を保証する必要がある．つまり，動的プ
ロセス管理により不可避の競合状態が発生することがあってはならない．
• きぐぉ は性能を犠牲にするような機能を備えていてはならない．
プロセス管理モデルは〲つの方法でこのような問題に対処する．まず，きぐぉ は主に通信ライブラリとしての機能を維持する．並列プログラムを実行する並列環境の管理は行
わず，アプリケーションおよび外部リソースとプロセスマネージャの間の最小限のイン
ターフェイスを提供する．
つぎに，きぐぉ はメンバの出現方法に関係なく， コミュニケータという一貫した概念を維持する．コミュニケータは生成後に変化することはなく，常に一意に決まる集団操作
によって生成される．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

10.2 動的プロセスモデル
動的プロセスモデルでは，きぐぉアプリケーションの起動後にプロセスを生成し協調的に終了することができる．このモデルは，新しく生成されたプロセスと既存のきぐぉアプ
リケーションの間の通信を確立するためのメカニズムを備えている．また，一方が他方によって「起動」されたのではない場合でも，〲 つの既存のきぐぉアプリケーションの間の通信を確立するためのメカニズムを備えている．

10.2.1 プロセスの起動
きぐぉ アプリケーションは，外部プロセスマネージャへのインターフェイスを通して新
しいプロセスを起動することもできる．
きぐぉたぃくききたこぐぁしぎはきぐぉプロセスを起動してこれらのプロセスとの通信を確立し，グループ間コミュニケータを返す． きぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅは複数の異なる
バイナリファイル（または異なる引数を持つ同じバイナリファイル）を起動し，同じきぐぉたぃくききたしくげがいに配置し，グループ間コミュニケータを返す．
きぐぉは既存のグループの抽象化を使用してプロセスを表現する．プロセスは 〨でひはふば〬
ひちのに〩のペアによって識別される．

〴〴〴〵

10.2.2 ランタイム環境

〴〶
〴〷
〴〸

きぐぉたぃくききたこぐぁしぎおよびきぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅルーチンはきぐぉときぐぉアプ
リケーションのランタイム環境とのインターフェイスとなる．問題は，非常に広範囲の〱〰〮〲〮 動的プロセスモデル〳〱〹

ランタイム環境とアプリケーションの要件であり，きぐぉが特定の対象に合わせて調整す
るわけにはいかないことにある．このような環境の例としては以下のものがある．

〱〲〳• バッチキューイングシステムによるMPPの管理．通常，バッチキューイングシス
テムはアプリケーションが開始される前にリソースを割り当て，リソースの使用（ぃぐさ時間，メモリの使用など）に制限を課し，ジョブの開始後のリソースの割当変更を許可しない．また，多くのきぐぐには特別な制限または拡張として，〱つのプ
ロセッサ上で動作可能なプロセスの数の制限，並列アプリケーションのギャングス
ケジュールプロセスの能力などがある．

〴
〵
〶
〷
〸
〹
〱〰
〱〱

• PVMによるワークステーションのネットワーク． ぐざきぐちひちぬぬづぬ ざどひぴふちぬ きちっとどのづ）を使用すると，ワークステーションのネットワークから「仮想マシン」を生成する
ことができる．アプリケーションでは，ぐざきライブラリを通して仮想マシンを拡張したり，プロセスを管理（生成，終了，出力のリダイレクトなど）したりすることができる．マシンやプロセスの管理要求は，外部リソースマネージャによって捕捉または処理することができる．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

• 負荷分散システムによるワークステーションのネットワーク管理．負荷分散システ
ムは，平均負荷などの動的な量に基づいて，スポーンされたプロセスの場所を選択することができる．リソースが利用不能になった場合，プロセスをマシンから別のマシンに透過的に移行することができる．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

• Unixによる大規模なSMP．アプリケーションはユーザによって直接実行され，オ
ペレーティングシステムによって下位レベルでスケジュールされる．プロセスは特別なスケジュール特性（ギャングスケジューリング，プロセッサアフィニティ，デッドラインスケジューリング，プロセッサのロックなど）を持つことができ，
くこのリソースの制限（プロセス数，メモリ容量など）の対象となる．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉでは，アプリケーションが動作する環境が存在することを黙示的に仮定している．
動作しているプロセスの問い合わせ，任意のプロセスの終了， ランタイム環境の属性（プロセッサの個数，メモリの容量など）の検索といった一般的な機能などの「オペレーティングシステム」のサービスは提供していない．
きぐぉアプリケーションとランタイム環境との複雑なやりとりは環境固有のぁぐぉを
通 し て 実 行 す る 必 要 が あ る． こ の よ う なぁぐぉの 例 はぐざきタ ス ク と マ シ ン 管 理 ル ーチン（ばぶねたちつつとはびぴび，ばぶねたっはのてどで，ばぶねたぴちびにびなど）で，おそらくこれは可能であれ
ばきぐぉの〨でひはふば〬ひちのに〩を返すように変更されている．他に，ぃはのつはひやぐあこ ぁぐぉを利用する方法もある．
下位レベルでは確かにきぐぉがランタイムシステムとやり取りできなければならないが，
このやりとりはアプリケーションレベルでは意識されず，やりとりの詳細はきぐぉ標準では規定されていない．
多くの場合，きぐぉの機能を大幅に犠牲にすることなく環境固有の情報をきぐぉインター
フェイスから切り離しておくことはできない．アプリケーションで環境固有の機能を利

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理

〳〲〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

用できるようにするため，多くの きぐぉルーチンがアプリケーションで環境固有の情報を指定可能とするためのどのては引数を採用している．機能と可搬性の間にトレードオフがある，どのてはを使用するアプリケーションは可搬でない．
きぐぉは下位に「仮想マシン」モデルが存在する必要があると規定していない．このモデルはきぐぉアプリケーションと黙示的な「オペレーティングシステム」によるリソースとプロセスの管理の一貫したグローバルなビューを備えたものである．そのため，例えば，あるタスクによってスポーンされたプロセスが別のタスクから認識できなかったり，あるプロセスによってランタイム環境に追加されたホストが別のプロセスから認識できなかったり，複数の異なるプロセスによって生成されたタスクが利用可能なリソース上で自動的に分散されなかったりする．
きぐぉとランタイム環境の間のやりとりは以下の領域に制限される．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

• プロセスはきぐぉたぃくききたこぐぁしぎおよびきぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅを使用して新しいプロセスを起動することができる．
プロセスが子プロセスをスポーンすると，どのては引数（オプション）を使用してプロセスの起動場所や起動方法をランタイム環境に通知することができる．この追加情報はきぐぉに対して不可視とすることができる．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

• きぐぉたぃくききたしくげがいの 属 性きぐぉたさぎぉざぅげこぅたこぉずぅは， 初 期 ラ ン タ イ ム 環 境 の「大 きさ」，すなわち，全体でいくつのプロセスを有効に起動することができるかをプログラムに伝える．この値からきぐぉたぃくききたしくげがいのサイズを差し引いて，すでに動作しているプロセスの他にいくつのプロセスを有効に起動させることが可能かを算出することができる．

〲〸
〲〹
〳〰

10.3 プロセスマネージャのインターフェイス

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

10.3.1 MPIのプロセス
プロセスはきぐぉでは〨でひはふば〬 ひちのに〩のペアによって表現される．〨でひはふば〬 ひちのに〩 のペアは唯一のプロセスを指すが，プロセスは複数のグループに属することがあるため，特定の〨でひはふば〬 ひちのに〩のペアは決定されない．

〳〷〳〸

10.3.2 プロセスの起動と通信の確立

〳〹
〴〰
〴〱

以下のルーチンは多数のきぐぉプロセスを起動し，これらのプロセスを使用して通信を確立し，グループ間コミュニケータを返す．

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス きぐぉでは静的こぐきいまたはきぐきいアプリケーションを起動するために，最初に〱つのプロセスを起動し，きぐぉたぃくききたこぐぁしぎを使用してそのプロセスから兄弟プロセスを起動することができる．この方法は，主に性能上の理由から推奨できない．できれば，全てのプロセスを〱つのきぐぉアプリケーションとして一度に起動するのが望ましい． （ユーザへのアドバイス終わり）〱〰〮〳〮 プロセスマネージャのインターフェイス〳〲〱

きぐぉたぃくききたこぐぁしぎ〨っはねねちのつ〬 ちひでぶ〬 ねちへばひはっび〬 どのては〬 ひははぴ〬 っはねね〬 どのぴづひっはねね〬
ちひひちべたはてたづひひっはつづび〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ

ぉぎ
ぉぎ
くさご
くさご

っはねねちのつ
ちひでぶ
ねちへばひはっび
どのては

ひははぴ
っはねね
どのぴづひっはねね
ちひひちべたはてたづひひっはつづび〱〲

スポーンされるプログラムの名前（文字列，ルート
でのみ意味を持つ）〳

っはねねちのつの引数（文字列配列，ルートでのみ意味を持つ）〵

プロセスの起動の最大数（整数型，ルートでのみ意
味を持つ）

〷

ランタイムシステムにプロセスの起動場所と起動方法を通知するにづべ〭ぶちぬふづのペアの集合（ハンドル，ルートでのみ意味を持つ）〹〱〰

前の引数を検査するプロセスのランク（整数型）〱〲

スポーンプロセスのグループが含まれるグループ内
コミュニケータ（ハンドル）〱〳元のグループと新しくスポーンされたグループの間のグループ間コミュニケータ（ハンドル）〱〵

プロセスごとの〱つのコード（整数配列）

〱〷

〴

〶

〸

〱〱

〱〴

〱〶

〱〸

どのぴ きぐぉたぃはねねたびばちぷの〨っとちひ 〪っはねねちのつ〬 っとちひ 〪ちひでぶせそ〬 どのぴ ねちへばひはっび〬 きぐぉたぉのては
どのては〬 どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪どのぴづひっはねね〬
どのぴ ちひひちべたはてたづひひっはつづびせそ〩
きぐぉたぃくききたこぐぁしぎ〨ぃくききぁぎい〬 ぁげぇざ〬 きぁじぐげくぃこ〬 ぉぎうく〬 げくくご〬 ぃくきき〬 ぉぎごぅげぃくきき〬
ぁげげぁすたくうたぅげげぃくいぅこ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぃくききぁぎい〬 ぁげぇざ〨〪〩ぉぎごぅぇぅげ ぉぎうく〬 きぁじぐげくぃこ〬 げくくご〬 ぃくきき〬 ぉぎごぅげぃくきき〬 ぁげげぁすたくうたぅげげぃくいぅこ〨〪〩〬ぉぅげげくげ{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺こばちぷの〨っはのびぴ っとちひ〪 っはねねちのつ〬っはのびぴ っとちひ〪 ちひでぶせそ〬 どのぴ ねちへばひはっび〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬
どのぴ ひははぴ〬 どのぴ ちひひちべたはてたづひひっはつづびせそ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺こばちぷの〨っはのびぴ っとちひ〪 っはねねちのつ〬っはのびぴ っとちひ〪 ちひでぶせそ〬 どのぴ ねちへばひはっび〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬
どのぴ ひははぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぃくききたこぐぁしぎはっはねねちのつで 指 定 さ れ たきぐぉプ ロ グ ラ ム と 同 じ
ねちへばひはっび個のコピーを起動し，これらとの通信を確立し，グループ間コミュニケータ
を返そうとする． 生成されたプロセスは子と呼ばれる． 子は親のものとは分離された独自のきぐぉたぃくききたしくげがいを持つ． きぐぉたぃくききたこぐぁしぎはっはねねに対して集団的であり，子できぐぉたぉぎぉごが呼び出されるまで戻らない場合もある．同様に，子のきぐぉたぉぎぉごは
全ての親がきぐぉたぃくききたこぐぁしぎを呼び出すまで戻らないことがある．この意味で，親のきぐぉたぃくききたこぐぁしぎと子のきぐぉたぉぎぉごは，親プロセスと子プロセスのかひづばぬちっづ結合和集合に対して 集団操作を形成する．きぐぉたぃくききたこぐぁしぎによって返されるグループ間コミュニケータはローカルグループの親プロセスとリモートグループの子
プロセスを持つ．ローカルグループでのプロセスの順序およびリモートグループでのプロセスの順序は，それぞれ親のっはねねのグループの順序および子のきぐぉたぃくききたしくげがいの順序と同じである．このグループ間コミュニケータは関数きぐぉたぃくききたぇぅごたぐぁげぅぎごを
通して子で取得することができる．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〲〲
〱
〲
〳
〴
〵
〶

第 〱〰〮 プロセスの生成と管理ユーザへのアドバイス 実装によってはは，子がきぐぉたぉぎぉごを呼び出す前に自動的に通信を確立するかもしれない．そのため，親できぐぉたぃくききたこぐぁしぎが完了したとしても，必ずしも子できぐぉたぉぎぉごの呼び出しが完了しているということにはならな
い（ただし，返されたグループ間コミュニケータはすぐに使用できる）． （ユーザへのアドバイス終わり）

〷
〸
〹
〱〰
〱〱
〱〲
〱〳

っはねねちのつ引数 っはねねちのつ引数はスポーンするプログラムの名前が格納された文字列である． ぃ言語の場合，文字列はのふぬぬで終わる．うはひぴひちの言語では，先頭および末尾の空白文
字は除外される．きぐぉでは，実行形式の検索方法や作業ディレクトリの規定方法は指定していない．これらの規則は実装内容によって決まり，ランタイム環境に対して適切でなければならない．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

実装者へのアドバイス 実装では，実行可能ファイルの検索と作業ディレクト
リ の 確 認 の た め に 自 然 な 規 則 に 従 う 必 要 が あ る． 例 え ば，グ ロ ー バ ル フ ァ イ
ルシステムを持つ同一機種システムではスポーンプロセスの作業ディレク
トリを最初に検索するか，またはさのどへのシェルと同様にぐぁごえ環境変数のディ
レ ク ト リ を 検 索し う る． ぐざきの上位 へ の 実装 で は，実行 可能 フ ァ イ ル（通常は〤えくきぅ〯ばぶね〳〯ぢどの〯〤ぐざきたぁげぃえ）を検索するためのぐざきの規則を使用する． ぉあき
こぐ上のぐくぅで動作するきぐぉ実装では，ぐくぅの実行可能ファイル検索方法に従う．
実装では実行可能ファイルの検索と作業ディレクトリの確認のための規則を文書化する必要があり，質の高い実装ではこれらの規則の一部の管理をユーザに任せるよ
うにする必要がある． （実装者へのアドバイス終わり）
っはねねちのつで名前を指定したプログラムがきぐぉたぉぎぉごを呼び出さず，その代わりにフォークしたプロセスできぐぉたぉぎぉごを呼び出す場合，その結果は未定義となる．実装でこのような場合が許可されることもあるが，必ずしもこのようにする必要はない．
ユーザへのアドバイス きぐぉでは，起動したプログラムがシェルスクリプトで，そのシェルスクリプトによって起動されるプログラムできぐぉたぉぎぉごが呼び出される場合の動作については規定していない．実装によってはこの操作が許可されている場合もあるが，シェルスクリプトに渡される引数をプログラムに渡すこと，環境の特定の部分を変更しないこと，などの要件が課されることもある． （ユーザへのアドバイス終わり）

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ちひでぶ引数 ちひでぶはプログラムに渡される引数が格納された文字列の配列である． ちひでぶの最初の要素はっはねねちのつに渡される最初の引数であり，一部で慣習となっているようなコマンドそのものではない． 引数リストはぃ言語およびぃ〫〫言語の場合はのふぬぬで終了し，うはひぴひちの言語の場合は空の文字列で終了する． うはひぴひちの言語では，先頭および末尾の空白文字は除外されるので，全てが空白文字で構成される文字列は空の文字列とみなされる．空の引数リストを示すため，ぃ言語，ぃ〫〫言語，およびうはひぴひちの言語で定数きぐぉたぁげぇざたぎさががを使用することができる．ぃ言語およびぃ〫〫言語では，この定数
はのふぬぬと同じになる．

〱〰〮〳〮 プロセスマネージャのインターフェイス〳〲〳

例 10.1 ぃ言語およびうはひぴひちの言語でのちひでぶの例
ぃ言語でプログラムぜはっづちの〢 を引数ぜ〭でひどつ「ぬづ〢および ぜはっづちの〱〮でひつ〢を使用して実行する方法：
っとちひ っはねねちのつせそ 〽 〢はっづちの〢〻
っとちひ 〪ちひでぶせそ 〽 ほ〢〭でひどつてどぬづ〢〬 〢はっづちの〱〮でひつ〢〬 ぎさががぽ〻きぐぉたぃはねねたびばちぷの〨っはねねちのつ〬 ちひでぶ〬 〮〮〮〩〻
または，コンパイル時に不明な項目がある場合の方法：

〱
〲
〳
〴
〵
〶
〷
〸
〹

っとちひ 〪っはねねちのつ〻っとちひ 〪〪ちひでぶ〻
っはねねちのつ 〽 〢はっづちの〢〻
ちひでぶ〽〨っとちひ 〪〪〩ねちぬぬはっ〨〳 〪 びどぺづはて〨っとちひ 〪〩〩〻
ちひでぶせ〰そ 〽 〢〭でひどつてどぬづ〢〻
ちひでぶせ〱そ 〽 〢はっづちの〱〮でひつ〢〻ちひでぶせ〲そ 〽 ぎさがが〻きぐぉたぃはねねたびばちぷの〨っはねねちのつ〬 ちひでぶ〬 〮〮〮〩〻
うはひぴひちの言語の場合：

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

ぃえぁげぁぃごぅげ〪〲〵 っはねねちのつ〬 ちひでぶ〨〳〩っはねねちのつ 〽 〧 はっづちの 〧ちひでぶ〨〱〩 〽 〧 〭でひどつてどぬづ 〧ちひでぶ〨〲〩 〽 〧 はっづちの〱〮でひつ〧
ちひでぶ〨〳〩 〽 〧 〧っちぬぬ きぐぉたぃくききたこぐぁしぎ〨っはねねちのつ〬 ちひでぶ〬 〮〮〮〩

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

引数は，オペレーティングシステムによって許されている場合，プログラムに渡される． ぃ言語では，きぐぉたぃくききたこぐぁしぎのちひでぶ引数は〲つの点でねちどののちひでぶ引数と異なる．第〱 に，要素が〱つ分シフトする．特に，ねちどののちひでぶせ〰そは実装によって渡され，慣習的に（っはねねちのつによって渡された）プログラムの名前が格納される． 例えば，
ねちどののちひでぶせ〱そはきぐぉたぃくききたこぐぁしぎのちひでぶせ〰そに対応し，ねちどののちひでぶせ〲そはきぐぉたぃくききたこぐぁしぎのちひでぶせ〱そに 対 応 す る， な ど で あ る． 第〲に，きぐぉたぃくききたこぐぁしぎのちひでぶは，その長さを確定しうるにはのふぬぬで終了していなければならない． きぐぉたぁげぇざたぎさががのちひでぶをきぐぉたぃくききたこぐぁしぎに渡すと，ねちどのが受け取るちひでっは〱，
ちひでぶは要素〰が（慣習的に）プログラム名となる．
うはひぴひちの言語の実装で，プログラムにより引数が取得できるルーチンが提供されている
場合，そのメカニズムを通して引数を入手できる場合がある．ぃ言語では，オペレーティングシステムがねちどの〨〩のちひでぶの引数を〨わたさない〩サポートしていない場合，きぐぉ実
装でちひでぶに引数を追加し，これをきぐぉたぉぎぉごに渡すことができる．
きぐぉたぉぎぉごに渡すことができるように きぐぉ実装で追加することができる〮

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

ねちへばひはっび引数 きぐぉはねちへばひはっび個のプロセスのスポーンを試みる．ねちへばひはっび 個のプロセ
スをスポーンできない場合，エラークラスきぐぉたぅげげたこぐぁしぎ が発生する．
実装では，実装でねちへばひはっび個の 全てのプロセスがスポーンできない場合にエラーを発生させる代わりに指定より少ない数のプロセスを生成できるように， どのては引数により

〴〴
〴〵
〴〶
〴〷
〴〸

〳〲〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

第 〱〰〮 プロセスの生成と管理

デフォルト動作を変更することができる．原則的に， どのては引数はスポーンされたプロセスの数に対して許容される値の 任意の集合{mi 〺 〰 ≤ mi ≤ ねちへばひはっび} を指定することができる．集合{mi }は必ずしも値ねちへばひはっびを含まない．実装でこれらの許容されるプ
ロセス数のうちの〱つがスポーンできる場合， きぐぉたぃくききたこぐぁしぎは正常に戻り，スポーンされたプロセスの数mがどのぴづひっはねねのリモートグループのサイズによって渡される．
mがねちへばひはっより小さい場合，下記のように，他のプロセスがスポーンされなかった理由
がちひひちべたはてたづひひっはつづびに与えられる．許容される数のプロセスのうちの〱つがスポーンできない場合，きぐぉたぃくききたこぐぁしぎ によりエラークラスきぐぉたぅげげたこぐぁしぎが発生する．
デフォルト動作を持つスポーン呼び出しは hardと呼ばれる．ねちへばひはっび個より少ないプロセスが返される可能性のあるスポーン呼び出しはびはてぴと呼ばれる．どのてはのびはてぴキーについての詳細は， 〳〲〸ページの第〱〰〮〳〮〴節を参照すること．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

ユーザへのアドバイス デフォルトでは，要求はとちひつであり，きぐぉエラーは致命的エラーとなる．つまり，デフォルトでは，要求された全てのプロセスがきぐぉによって
スポーンできない場合は致命的エラーとなる．「最大をN 個とし，できるだけ多くのプロセスをスポーンする」という動作が求められる場合，ソフトスポーンを実行する必要がある．ここでは，許容される値{mi }の集合は{〰 . . . N }となる．しかし，実装においてびはてぴ生成をサポートすることは必須でないため，これは完全に可搬というわけではない． （ユーザへのアドバイス終わり）

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

どのては引数 この章の全てのルーチンのどのては引数は，ぃ言語の場合はきぐぉたぉのては型，ぃ〫〫言語の場合はきぐぉ〺〺ぉのては型，うはひぴひちの言語の場合は整数型の不可視ハンドルである．これはユー
ザ指定の多数の〨にづべ〬ぶちぬふづ〩のペアのコンテナである．にづべとぶちぬふづは文字列（ぃ言語の場合
はのふぬぬで終了するっとちひ〪，うはひぴひちの言語の場合はっとちひちっぴづひ〪〨〪〩）である． どのては引数の生成と操作を行うルーチンの詳細は， 〳〱〱ページの第〹節を参照すること．
こぐぁしぎ呼び出しの場合，どのてははきぐぉとランタイムシステムに対して，プロセスの起動方法に関する追加の（そして，実装内容によって決まる可能性のある）指示を提供する．ぃ言語またはうはひぴひちの言語では，アプリケーションはきぐぉたぉぎうくたぎさががを渡すことができる． プロセスの場所に対する詳細な制御を必要としない可搬なプログラムは，
きぐぉたぉぎうくたぎさががを使用する必要がある．
きぐぉはどのては引数の内容を規定して い ない． 特別なにづべ 値の数を予約し てい るだ けである（〳〲〸ページの第〱〰〮〳〮〴節を参照）．どのては引数は非常に自由度が高く，例えば，実行可能ファイルとそのコマンド行の引数を指定するためにも使用できる． この場合，
きぐぉたぃくききたこぐぁしぎ のっはねねちのつ引数は空にすることができる．これが可能なのは，きぐぉ
では実行可能ファイルの検索方法が規定されておらず，またどのては引数はランタイムシス
テムに実行可能ファイルぜ〢（空の文字列）の検索場所を伝えることができるためである．
当然，これを行うプログラムは複数のきぐぉ実装間で可搬ではない．

〴〵
〴〶
〴〷
〴〸

ひははぴ引数 ひははぴ引数の前の全ての引数は，っはねね のランクがひははぴであるプロセスでのみ検査される．他のプロセスでこれらの引数の値は無視される．

〱〰〮〳〮 プロセスマネージャのインターフェイス〳〲〵

ちひひちべたはてたづひひっはつづび引数 ちひひちべたはてたづひひっはつづびは，きぐぉが起動要求を出された各プロセスのス
テータスをきぐぉがレポートするときの長さねちへばひはっびの配列である． ねちへばひはっび個の全てのプロセスがスポーンされた場合，ちひひちべたはてたづひひっはつづびに値きぐぉたこさぃぃぅここが格納される．
m個（〰 ≤ m < ねちへばひはっび）のプロセスのみがスポーンされた場合，m個のエントリにはきぐぉたこさぃぃぅここが格納され，それ以外にはきぐぉでプロセスを起動できなかった理由を示す実装固有のエラーコードが格納される． きぐぉでは，どのエントリがエラーとなったプロセス に対応するか について は指定されな い． 実装では， 例えば，詳細仕様と〱対〱対応のエラーコードをどのては引数に格納することができる． 引数リストにエラーがない場合，これらのエラーコードは全てエラークラスきぐぉたぅげげたこぐぁしぎに属す
る． ぃ言語またはうはひぴひちの言語では，エラーコードが不要な場合はアプリケーション
できぐぉたぅげげぃくいぅこたぉぇぎくげぅを渡すことができる． ぃ〫〫言語では，この定数は存在せず，
ちひひちべたはてたづひひっはつづび引数を引数リストから省略することができる．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

実装者へのアドバイス うはひぴひちの言語ではきぐぉたぅげげぃくいぅこたぉぇぎくげぅは，
きぐぉたあくごごくきのような特別な定数の型である．〱〷ページの第〲〮〵〮〴節を参照すること． （実装者へのアドバイス終わり）

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

きぐぉたぃくききたぇぅごたぐぁげぅぎご〨ばちひづのぴ〩
くさご

ばちひづのぴ〲〲親コミュニケータ（ハンドル）〲〳〲〴

どのぴ きぐぉたぃはねねたでづぴたばちひづのぴ〨きぐぉたぃはねね 〪ばちひづのぴ〩
きぐぉたぃくききたぇぅごたぐぁげぅぎご〨ぐぁげぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぐぁげぅぎご〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぃはねね〺〺ぇづぴたばちひづのぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
プロセスがきぐぉたぃくききたこぐぁしぎまたはきぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅにより起動された場合，きぐぉたぃくききたぇぅごたぐぁげぅぎごは現在のプロセスの「親」 グループ間コミュニ
ケータを返す．このグループ間コミュニケータはきぐぉたぉぎぉご 内で黙示的に生成され，親のこぐぁしぎによって返されるのと同じグループ間コミュニケータである．
プロセスがこぐぁしぎによってスポーンされたものでなかった場合，
きぐぉたぃくききたぇぅごたぐぁげぅぎごはきぐぉたぃくききたぎさががを返す．
コミュニケータが解放または切断されると，きぐぉたぃくききたぇぅごたぐぁげぅぎごは
きぐぉたぃくききたぎさががを返す．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

ユーザへのアドバイス きぐぉたぃくききたぇぅごたぐぁげぅぎごは〱つのグループ間コミュニケ
ータのハンドルを返す．きぐぉたぃくききたぇぅごたぐぁげぅぎごの〲回目の呼び出しでは，同じグループ間コミュニケータのハンドルが返される． きぐぉたぃくききたいぉこぃくぎぎぅぃごま
たはきぐぉたぃくききたうげぅぅ によりハンドルを解放すると，そのグループ間コミュニケータへの他の参照は無効（参照先なし）になる．親コミュニケータでのきぐぉたぃくききたうげぅぅの呼び出しは有益ではないことに注意すること． （ユーザへのアドバイス終わり）

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理〳〲〶

根拠 フォーラムの狙いは，きぐぉたぃくききたしくげがいと同様の定数きぐぉたぃくききたぐぁげぅぎごを
生成することだった．ところが，明確に許可されているにもかかわらず，このような定数はきぐぉたぃくききたいぉこぃくぎぎぅぃごの引数として（構文的に）使用できない．
（根拠の終わり）

〱
〲
〳
〴
〵
〶
〷

10.3.3 複数の実行可能ファイルの起動と通信の確立

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

きぐぉたぃくききたこぐぁしぎはほとんどの場合に対応しているが，複数のバイナリファイ
ル，ま た は 複 数 の 引 数 の 集 合 を 持 つ 同 じ バ イ ナ リ フ ァ イ ル を ス ポ ー ン す る こ と はできない． 以下のルーチンは，複数のバイナリファイル，または複数の引数の集合を持つ同じバイナリファイルをスポーンし，これらとの通信を確立し，これらを同じきぐぉたぃくききたしくげがいに配置する．

〱〵
〱〶
〱〷
〱〸

きぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅ〨っはふのぴ〬 ちひひちべたはてたっはねねちのつび〬 ちひひちべたはてたちひでぶ〬 ちひひちべたはてたねちへばひはっび〬
ちひひちべたはてたどのては〬 ひははぴ〬 っはねね〬 どのぴづひっはねね〬 ちひひちべたはてたづひひっはつづび〩
ぉぎ

っはふのぴ

コマンドの数（正の整数型，きぐぉのルートでのみ意味を持つ— ユーザへのアドバイスを参照）ぉぎ

ちひひちべたはてたっはねねちのつび

実行するプログラム（文字列配列，ルートでのみ意
味を持つ）

ぉぎ

ちひひちべたはてたちひでぶっはねねちのつびの引数（文字列の配列，ルートでのみ意味
を持つ）

ぉぎ

ちひひちべたはてたねちへばひはっび

各コマンド用に起動するプロセスの最大数（整数配
列，ルートでのみ意味を持つ）

ぉぎ

ちひひちべたはてたどのてはプロセスの起動場所と起動方法をランタイムシステ
ムに伝えるどのてはオブジェクト（ハンドルの配列，ルートでのみ意味を持つ）

ぉぎ

ひははぴ

前の引数を検査する際のプロセスのランク（整数
型）

ぉぎ

っはねね

スポーンするプロセスのグループのためのグループ
内コミュニケータ（ハンドル）

くさご

どのぴづひっはねね

元のグループと新しくスポーンされたグループの間のグループ間コミュニケータ（ハンドル）

くさご

ちひひちべたはてたづひひっはつづび

プロセスごとに〱つのエラーコード（整数配列）

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぃはねねたびばちぷのたねふぬぴどばぬづ〨どのぴ っはふのぴ〬 っとちひ 〪ちひひちべたはてたっはねねちのつびせそ〬
っとちひ 〪〪ちひひちべたはてたちひでぶせそ〬 どのぴ ちひひちべたはてたねちへばひはっびせそ〬 きぐぉたぉのては ちひひちべたはてたどのてはせそ〬
どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪どのぴづひっはねね〬 どのぴ ちひひちべたはてたづひひっはつづびせそ〩
きぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅ〨ぃくさぎご〬 ぁげげぁすたくうたぃくききぁぎいこ〬 ぁげげぁすたくうたぁげぇざ〬
ぁげげぁすたくうたきぁじぐげくぃこ〬 ぁげげぁすたくうたぉぎうく〬 げくくご〬 ぃくきき〬 ぉぎごぅげぃくきき〬 ぁげげぁすたくうたぅげげぃくいぅこ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたぉぎうく〨〪〩〬 ぁげげぁすたくうたきぁじぐげくぃこ〨〪〩〬 げくくご〬 ぃくきき〬ぉぎごぅげぃくきき〬 ぁげげぁすたくうたぅげげぃくいぅこ〨〪〩〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ぁげげぁすたくうたぃくききぁぎいこ〨〪〩〬 ぁげげぁすたくうたぁげぇざ〨ぃくさぎご〬 〪〩{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺こばちぷのたねふぬぴどばぬづ〨どのぴ っはふのぴ〬
っはのびぴ っとちひ〪 ちひひちべたはてたっはねねちのつびせそ〬 っはのびぴ っとちひ〪〪 ちひひちべたはてたちひでぶせそ〬
っはのびぴ どのぴ ちひひちべたはてたねちへばひはっびせそ〬
っはのびぴ きぐぉ〺〺ぉのては ちひひちべたはてたどのてはせそ〬 どのぴ ひははぴ〬
どのぴ ちひひちべたはてたづひひっはつづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〰〮〳〮 プロセスマネージャのインターフェイス〳〲〷{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺こばちぷのたねふぬぴどばぬづ〨どのぴ っはふのぴ〬
っはのびぴ っとちひ〪 ちひひちべたはてたっはねねちのつびせそ〬 っはのびぴ っとちひ〪〪 ちひひちべたはてたちひでぶせそ〬
っはのびぴ どのぴ ちひひちべたはてたねちへばひはっびせそ〬
っはのびぴ きぐぉ〺〺ぉのては ちひひちべたはてたどのてはせそ〬 どのぴ ひははぴ〩 （廃止された呼び出し形
式, 第15.2節を参照）}
きぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅは，複数の実行可能ファイルが指定できる点を除いて，きぐぉたぃくききたこぐぁしぎと同じである． 第〱引数っはふのぴには指定の数を渡す． それに続く〴つの各引数は単にきぐぉたぃくききたこぐぁしぎ内の対応する引数の配列である． うはひぴひちの言語
用のちひひちべたはてたちひでぶでは，要素ちひひちべたはてたちひでぶ〨ど〬な〩はコマンド番号 どのな番目の引数である．
根拠 うはひぴひちの言語の列優先順に慣れたうはひぴひちの言語のプログラマには，これは反対に見えるかもしれない．しかし，きぐぉたぃくききたこぐぁしぎの引数をまとめるにはこのようにする必要がある． ちひひちべたはてたちひでぶの先頭の次元はっはふのぴと同じでなければならないことに注意すること． （根拠の終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

ユーザへのアドバイス ちひひちべたはてたちひでぶと同様に，引数っはふのぴはルートでのみきぐぉによって解釈される．ちひひちべたはてたちひでぶの先頭の次元はっはふのぴであるため，ルート以外のノードでのっはふのぴが正の値でない場合，ちひひちべたはてたちひでぶがサブルーチンで無視されるとしても，理論上はランタイム境界チェックエラーが発生する．これが発生する場合，ルート以外のノードでっはふのぴに明示的に妥当な値を渡す必要がある． （ユーザへのア
ドバイス終わり）

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

どの言語でも，アプリケーションで定数きぐぉたぁげぇざこたぎさがが （ぃ言語では〨っとちひ〪〪〪〩〰のようになる）を使用することにより，引数をコマンドに渡さないよう指定することができる．ちひひちべたはてたちひでぶの個々の要素にきぐぉたぁげぇざたぎさががを設定した場合の影響は定義されない．一部の特定のコマンドの引数の指定では，引数なしのコマンドは対応するちひでぶの最初の要素をのふぬぬ（ぃ言語では〨っとちひ 〪〩〰，うはひぴひちの言語では空の文字列）とする必要がある．
ス ポ ー ン さ れ た 全 て の プ ロ セ ス は 同 じきぐぉたぃくききたしくげがいを 持 つ．
きぐぉたぃくききたしくげがい内 の ラ ン ク は， コ マ ン ド がきぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅで 指 定
さ れ た 順 序 に 直 接 対 応 す る． 例 え ば，m1 個 の プ ロ セ ス が 最 初 の コ マ ン ド で 生 成 され，m2 個のプロセスが〲番目のコマンドで生成されるとする． 最初のコマンドに対応するプロセスはランク 〰, 〱, . . . , m1 − 〱を持つ． 〲番目のコマンドのプロセスはラン
クm1 , m1 〫〱, . . . , m1 〫m2 −〱を持つ． 〳番目のコマンドのプロセスはランクm1 〫m2 , m1 〫m2 〫 〱, . . . , m1 〫 m2 〫 m3 − 〱を持つ．以下も同様となる．
きぐぉたぃくききたこぐぁしぎを複数回呼び出すと異なるきぐぉたぃくききたしくげがいを持つ多数の子の集合が生成されるが， きぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅを呼び出すと〱つのきぐぉたぃくききたしくげがいを持つ子が複数生成されるため，この〲つのメソッドは完全に等価ではない． 複数の実行可能ファイルをスポーンする必要がある場合に，きぐぉたぃくききたこぐぁしぎを複数回呼び出す代わりにきぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅを使用した方が良いという点については，〲つの性能上の理由もある．第〱に，複数の子を一度に生成すれば〱つずつ順に生成するよりも速く処理ができる．第〲に，いくつかの実装で

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理

〳〲〸
〱
〲
〳
〴
〵
〶

は同時に生成されたプロセス間の通信は個別に生成されたプロセス間の通信よりも速くできる．
P
ちひひちべたはてたづひひっはつづび引数はサイズ counti=1 ni の〱次元の配列で，ni はちひひちべたはてたねちへばひはっびのi番
hP
i
Pi−1
目の要素である．コマンド番号iはこの配列の要素 j=1
nj から ij=1 nj − 〱のni 個の連続するスロットに対応する．エラーコードはきぐぉたぃくききたこぐぁしぎと同様に扱われる．

〷
〸
〹
〱〰

例 10.2 ぃ言語およびうはひぴひちの言語でのちひひちべたはてたちひでぶの例
ぃ言語でプログラムぜはっづちの〢を引数ぜ〭でひどつ「ぬづ〢およびぜはっづちの〱〮でひつ〢を使用して実行し，プ
ログラムぜちぴねはび〢を引数ぜちぴねはび〮でひつ〢を使用して実行する方法：

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

っとちひ 〪ちひひちべたはてたっはねねちのつびせ〲そ 〽 ほ〢はっづちの〢〬 〢ちぴねはび〢ぽ〻っとちひ 〪〪ちひひちべたはてたちひでぶせ〲そ〻っとちひ 〪ちひでぶ〰せそ 〽 ほ〢〭でひどつてどぬづ〢〬 〢はっづちの〱〮でひつ〢〬 〨っとちひ 〪〩〰ぽ〻っとちひ 〪ちひでぶ〱せそ 〽 ほ〢ちぴねはび〮でひつ〢〬 〨っとちひ 〪〩〰ぽ〻ちひひちべたはてたちひでぶせ〰そ 〽 ちひでぶ〰〻
ちひひちべたはてたちひでぶせ〱そ 〽 ちひでぶ〱〻
きぐぉたぃはねねたびばちぷのたねふぬぴどばぬづ〨〲〬 ちひひちべたはてたっはねねちのつび〬 ちひひちべたはてたちひでぶ〬 〮〮〮〩〻

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

うはひぴひちの言語での実行方法：
ぃえぁげぁぃごぅげ〪〲〵 っはねねちのつび〨〲〩〬 ちひひちべたはてたちひでぶ〨〲〬 〳〩っはねねちのつび〨〱〩 〽 〧 はっづちの 〧ちひひちべたはてたちひでぶ〨〱〬 〱〩 〽 〧 〭でひどつてどぬづ 〧ちひひちべたはてたちひでぶ〨〱〬 〲〩 〽 〧 はっづちの〱〮でひつ〧
ちひひちべたはてたちひでぶ〨〱〬 〳〩 〽 〧 〧っはねねちのつび〨〲〩 〽 〧 ちぴねはび 〧ちひひちべたはてたちひでぶ〨〲〬 〱〩 〽 〧 ちぴねはび〮でひつ 〧ちひひちべたはてたちひでぶ〨〲〬 〲〩 〽 〧 〧っちぬぬ きぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅ〨〲〬 っはねねちのつび〬 ちひひちべたはてたちひでぶ〬 〮〮〮〩

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

10.3.4 予約されたキー
以下のキーが予約されている．これらのキーを実装が解釈することは必須ではないが，実装によってキーを解釈する場合，下記の機能を提供しなければならない．

〳〶
〳〷
〳〸
〳〹
〴〰

とはびぴ 値はホスト名．ホスト名の形式は実装によって決定される．
ちひっと 値はアーキテクチャ名．有効なアーキテクチャ名とその意味は実装によって決定さ

れる．

〴〱
〴〲

ぷつどひ 値はスポーンされたプロセスが実行されるマシン上のディレクトリの名前．このデ〴〳ィレクトリが実行中のプロセスの作業ディレクトリとなる．ディレクトリ名の形式
は実装によって決定される．

〴〴
〴〵
〴〶
〴〷
〴〸

ばちぴと 値は実装によって実行可能ファイルが検索されるディレクトリまたはディレクトリ

の集合．パスの形式は実装によって決定される．

〱〰〮〳〮 プロセスマネージャのインターフェイス〳〲〹「ぬづ 値は追加情報が指定されるファイルの名前．ファイル名の形式とファイルの内部形式

は実装によって決定される．

〱〲〳

びはてぴ 値はきぐぉたぃくききたこぐぁしぎ（など）が生成可能なプロセスの数の許容値である数字の集合を指す，値の形式はうはひぴひちの 〹〰言語の三つ組みのカンマ区切りの一覧で，それぞれは整数の集合であり，これらの集合が結合されて集合を構成する．この集合の負の値とねちへばひはっびより大きな値は無視される．きぐぉは，集合内の数字と一致する，
可能な限り最大に近い数のプロセスをスポーンする．三つ組みの順序は重要ではな
い．

〴
〵
〶
〷
〸
〹
〱〰
〱〱

うはひぴひちの 〹〰言語の三つ組みの意味は以下のとおりである．

〱〲〱〳〱〮 ちはaを意味する．

〱〴〲〮 ち〺ぢはa, a 〫 〱, a 〫 〲, . . . , bを意味する．
〳〮 ち〺ぢ〺っはa, a〫c, a〫〲c, . . . , a〫ckを意味する．ここで，c > 〰の場合，kはa〫ck ≤bを満たす最大の整数．c < 〰の場合，a 〫 ck ≥ bを満たす最大の整数． b > aの場合，cは正の数でなければならない．b < aの場合，cは負の数でなければな
らない．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

例：

〲〲
〲〳

〱〮 ち〺ぢはちからぢまでの範囲となる．

〲〴〲〵〲〮 〰〺ぎは完全な「ソフト」の機能を示す．
〳〮 〱〬〲〬〴〬〸〬〱〶〬〳〲〬〶〴〬〱〲〸〬〲〵〶〬〵〱〲〬〱〰〲〴〬〲〰〴〸〬〴〰〹〶では，〲のべき乗のプロセス数が生成できる．

〲〶
〲〷
〲〸
〲〹

〴〮 〲〺〱〰〰〰〰〺〲では偶数のプロセスが生成できる．
〵〮 〲〺〱〰〺〲〬〷では〲，〴，〶，〷，〸，または〱〰個のプロセスが生成できる．

〳〰
〳〱
〳〲
〳〳

10.3.5 スポーンの例〳〴

きぐぉたぃくききたこぐぁしぎ を使用したきちのちでづひ〭ぷはひにづひの例〳〵〳〶〪〯 ねちのちでづひ 〪〯〣どのっぬふつづ 〢ねばど〮と〢どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪ちひでぶせそ〩ほどのぴ ぷはひぬつたびどぺづ〬 ふのどぶづひびづたびどぺづ〬 〪ふのどぶづひびづたびどぺづば〬 てぬちで〻きぐぉたぃはねね づぶづひべはのづ〻〪〯 どのぴづひっはねねふのどっちぴはひ 〪〯っとちひ ぷはひにづひたばひはでひちねせ〱〰〰そ〻きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻
きぐぉたぃはねねたびどぺづ〨きぐぉたぃくききたしくげがい〬 〦ぷはひぬつたびどぺづ〩〻

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

どて 〨ぷはひぬつたびどぺづ 〡〽 〱〩づひひはひ〨〢ごはば とづちぶべ ぷどぴと ねちのちでづねづのぴ〢〩〻きぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 きぐぉたさぎぉざぅげこぅたこぉずぅ〬〦ふのどぶづひびづたびどぺづば〬 〦てぬちで〩〻

〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理

〳〳〰
〱
〲
〳
〴
〵

どて 〨〡てぬちで〩 ほ
ばひどのぴて〨〢ごとどび きぐぉ つはづび のはぴ びふばばはひぴ さぎぉざぅげこぅたこぉずぅ〮 えはぷ ねちのべぜのぜ
ばひはっづびびづび ぴはぴちぬ〿〢〩〻びっちのて〨〢〥つ〢〬 〦ふのどぶづひびづたびどぺづ〩〻
ぽ づぬびづ ふのどぶづひびづたびどぺづ 〽 〪ふのどぶづひびづたびどぺづば〻
どて 〨ふのどぶづひびづたびどぺづ 〽〽 〱〩 づひひはひ〨〢ぎは ひははね ぴは びぴちひぴ ぷはひにづひび〢〩〻〶〪〪〯 ぎはぷ びばちぷの ぴとづ ぷはひにづひび〮 ぎはぴづ ぴとちぴ ぴとづひづ どび ち ひふの〭ぴどねづ つづぴづひねどのちぴどはの〪 はて ぷとちぴ ぴべばづ はて ぷはひにづひ ぴは びばちぷの〬 ちのつ ばひづびふねちぢぬべ ぴとどび っちぬっふぬちぴどはの ねふびぴ
〪 ぢづ つはのづ ちぴ ひふの ぴどねづ ちのつ っちののはぴ ぢづ っちぬっふぬちぴづつ ぢづてはひづ びぴちひぴどので〪 ぴとづ ばひはでひちね〮 ぉて づぶづひべぴとどので どび にのはぷの ぷとづの ぴとづ ちばばぬどっちぴどはの どび〪 てどひびぴ びぴちひぴづつ〬 どぴ どび でづのづひちぬぬべ ぢづぴぴづひ ぴは びぴちひぴ ぴとづね ちぬぬ ちぴ はのっづ
〪 どの ち びどのでぬづ きぐぉたぃくききたしくげがい〮
〪〯

〷
〸
〹
〱〰
〱〱
〱〲
〱〳

っとははびづたぷはひにづひたばひはでひちね〨ぷはひにづひたばひはでひちね〩〻
きぐぉたぃはねねたびばちぷの〨ぷはひにづひたばひはでひちね〬 きぐぉたぁげぇざたぎさがが〬 ふのどぶづひびづたびどぺづ〭〱〬きぐぉたぉぎうくたぎさがが〬 〰〬 きぐぉたぃくききたこぅがう〬 〦づぶづひべはのづ〬
きぐぉたぅげげぃくいぅこたぉぇぎくげぅ〩〻〪〪〯 ぐちひちぬぬづぬ っはつづ とづひづ〮 ごとづ っはねねふのどっちぴはひ 〢づぶづひべはのづ〢 っちの ぢづ ふびづつ
〪 ぴは っはねねふのどっちぴづ ぷどぴと ぴとづ びばちぷのづつ ばひはっづびびづび〬 ぷとどっと とちぶづ ひちのにび 〰〮〮〬
〪 きぐぉたさぎぉざぅげこぅたこぉずぅ〭〱 どの ぴとづ ひづねはぴづ でひはふば はて ぴとづ どのぴづひっはねねふのどっちぴはひ〪 〢づぶづひべはのづ〢〮
〪〯

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたうどのちぬどぺづ〨〩〻
ひづぴふひの 〰〻

〲〳
〲〴

ぽ

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

〪〯 ぷはひにづひ 〪〯〣どのっぬふつづ 〢ねばど〮と〢どのぴ ねちどの〨どのぴ ちひでっ〬 っとちひ 〪ちひでぶせそ〩ほどのぴ びどぺづ〻
きぐぉたぃはねね ばちひづのぴ〻
きぐぉたぉのどぴ〨〦ちひでっ〬 〦ちひでぶ〩〻
きぐぉたぃはねねたでづぴたばちひづのぴ〨〦ばちひづのぴ〩〻
どて 〨ばちひづのぴ 〽〽 きぐぉたぃくききたぎさがが〩 づひひはひ〨〢ぎは ばちひづのぴ〡〢〩〻きぐぉたぃはねねたひづねはぴづたびどぺづ〨ばちひづのぴ〬 〦びどぺづ〩〻
どて 〨びどぺづ 〡〽 〱〩 づひひはひ〨〢こはねづぴとどので〧び ぷひはので ぷどぴと ぴとづ ばちひづのぴ〢〩〻〳〷〪〪〯 ぐちひちぬぬづぬ っはつづ とづひづ〪〮 ごとづ ねちのちでづひ どび ひづばひづびづのぴづつ ちび ぴとづ ばひはっづびび ぷどぴと ひちのに 〰 どの 〨ぴとづ ひづねはぴづ〪 でひはふば はて〩 ぴとづ ばちひづのぴ っはねねふのどっちぴはひ〮 ぉて ぴとづ ぷはひにづひび のづづつ ぴは っはねねふのどっちぴづ〪 ちねはので ぴとづねびづぬぶづび〬 ぴとづべ っちの ふびづ きぐぉたぃくききたしくげがい〮
〪〯

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

きぐぉたうどのちぬどぺづ〨〩〻
ひづぴふひの 〰〻

〴〴
〴〵
〴〶
〴〷
〴〸

ぽ

〱〰〮〴〮 通信の確立〳〳〱

10.4 通信の確立
ここでは，コミュニケータを共有しないきぐぉプロセスの〲つの集合の間で通信を確立するための関数を示す．
これらの関数は，以下のような状況で有益である．
〱〮 別々に起動されたアプリケーションの〲つの部分が通信する必要がある場合．

〱
〲
〳
〴
〵
〶
〷
〸

〲〮 可視化ツールを実行中のプロセスに結びつけたい場合．

〹〱〰

〳〮 サーバが複数のクライアントからの接続を受け付けたい場合．クライアントとサーバは両方とも並列プログラムとすることができる．
これらの各状況で，きぐぉはそれまでに存在しなかった，親／子関係のない通信経路を確立する必要がある．この節で説明するルーチンは， きぐぉグループ間コミュニケータを生成することにより，プロセスの〲つの集合間の通信を確立する．ここで，グループ間コミュニケータの〲つのグループは元のプロセスの集合である．
既存のコミュニケータを共有しない〲つのプロセスグループ間のコンタクトを確立する
ことは，集団であるが，非対称のプロセスである．〱つのプロセスグループは他のプロセ
スグループからの接続を受け付ける．クライアント／サーバ型のアプリケーションでない場合でも，このグループのことを（並列）サーバと呼ぶ．他方のグループはサーバへの接続を行う．このグループのことをクライアントと呼ぶ．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

ユーザへのアドバイス この節の全体を通してクライアントおよびサーバという名称を使用するが， きぐぉではクライアント／サーバシステムの従来の堅牢性を保証しない．この節で説明する機能は，同じアプリケーションの協調する〲つの部分が互いに通信できるようにするためのものである．例えば，クライアントでセグメンテ
ーション違反が発生して終了したり， クライアントが計算付集団的操作に参加しなかったりした場合， サーバがクラッシュまたはハングすることがある． （ユー
ザへのアドバイス終わり）

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

10.4.1 名前，アドレス，ポート，それら全て〳〴

きぐぉのクライアント／サーバルーチンの複雑さの大部分は「クライアントがサーバへのコンタクト方法をどのように見つけるか」という問題である，当然ながら，難しいのは，クライアントとサーバの間の既存の通信経路がなく，通信を確立するための待ち合
わせ場所にある程度合意しなければならないことである．
待ち合わせ場所の合意には常に第三者が介在する．第三者はそれ自体が 待ち合わせ場
所となることもあれば，サーバからクライアントへの待ち合わせ情報の伝達することもある．厄介なのは，クライアントはどのサーバにコンタクトすべきかを知りたいのではなく，その要求を扱うことができるサーバにコンタクトしたい，という点である．
きぐぉで幅広いランタイムシステムに対応しながら，シンプルで可搬なコードを記述する能力を維持できることが理想である．以下の項目はきぐぉと互換性を備えていなければ
ならない．

〳〶

〳〵

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〳〲
〱

第 〱〰〮 プロセスの生成と管理• サーバは既知のインターネットアドレスとはびぴ〺ばはひぴに常駐する．

〲〳〴• サーバは端末にアドレスを出力し，ユーザがこのアドレスをクライアントプロセス
に渡す．

〵
〶
〷

• サーバはネームサーバに関するアドレス情報を配置する．これは合意した名前により取得することができる．

〸〹〱〰

• クライアントが接続するサーバは実際にはブローカーであり，クライアントと実際のサーバとの仲介役として機能する．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

きぐぉはネームサーバを必要としないため，必ずしも全ての実装が上記の全てのシナリ
オをサポートできるわけではない．しかし，きぐぉにはオプションのネームサーバインタ
ーフェイスが用意されており，外部のネームサーバとの互換性がある．
ばはひぴたのちねづは，サーバにコンタクト可能な下位レベルのネットワークアドレスをエンコードするシステム提供文字列である．通常，これはぉぐアドレスとポート番号であるが，実装では自由に任意のプロトコルを使用できる．サーバはきぐぉたくぐぅぎたぐくげごルーチンを使用してばはひぴたのちねづを確立する．次に，きぐぉたぃくききたぁぃぃぅぐごを使用して，指定されたポートとの接続を受け付ける．クライアントはばはひぴたのちねづを使用してサーバへの接続を行う．
ばはひぴたのちねづのメカニズムはそれ自体では完全に可搬だが，ばはひぴたのちねづでクライアントとの通信を接続する必要があるため， 使用が難しい場合がある．サーバがアプリケーシ
ョンが提供するびづひぶどっづたのちねづを知っていて，クライアントがばはひぴたのちねづ を知らなくてもそのびづひぶどっづたのちねづに接続できれば，使い勝手が良くなる．
きぐぉ実装ではサーバがきぐぉたぐさあがぉこえたぎぁきぅを使用して 〨ばはひぴたのちねづ，びづひぶどっづたのちねづ〩のペアを公開し，クライアントがきぐぉたがくくかさぐたぎぁきぅを使用してサービス名からポート番号を取得することができる．これにより，〳つのレベルの可搬性が実現され，機能のレベルを向上させることができる．
〱〮 名前を公開する機能に依存しないアプリケーションが最も可搬性が高い．通常，
ばはひぴたのちねづは「手動」でサーバからクライアントに転送する必要がある．
〲〮 きぐぉたぐさあがぉこえたぎぁきぅメカニズムを使用するアプリケーションは，このサービスを備えた実装の間で完全に可搬である． 全ての実装間で可搬であるためには，名前が公開されていない場合に使用できるフォールバックメカニズムをこれらのアプリ
ケーションが備えている必要がある．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〮 アプリケーションはきぐぉの名前の公開機能を無視し，名前を公開するための独自の（可能であればシステム提供の）メカニズムを使用することができる．これにより自由度が高まるが，可搬ではない．

〱〰〮〴〮 通信の確立〳〳〳

10.4.2 サーバルーチン〱〲

サーバは〲つのルーチンにより，それ自体を利用できるようにする．まず，
きぐぉたくぐぅぎたぐくげごを呼び出して接触先となりうるばはひぴを確立する必要がある． 次に，きぐぉたぃくききたぁぃぃぅぐごを呼び出してクライアントからのコンタクトを受け付ける必要が
ある．

〳
〴
〵
〶
〷
〸

きぐぉたくぐぅぎたぐくげご〨どのては〬 ばはひぴたのちねづ〩
どのては

ぉぎ
くさご

ばはひぴたのちねづ〹

アドレスの確立方法に関する実装固有の情報（ハンドル）〱〰

新しく確立されたポート（文字列）

〱〲

〱〱

〱〳

どのぴ きぐぉたくばづのたばはひぴ〨きぐぉたぉのては どのては〬 っとちひ 〪ばはひぴたのちねづ〩
きぐぉたくぐぅぎたぐくげご〨ぉぎうく〬 ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺くばづのたばはひぴ〨っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬 っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出
し形式, 第15.2節を参照）}
この関数は，サーバがクライアントからの接続を受け付けることができる，
ばはひぴたのちねづ文字列にエンコードされたネットワークアドレスを確立する． ばはひぴたのちねづは可能であればどのては引数の情報を使用して，システムによって渡される．
きぐぉはシステム提供のポート名をばはひぴたのちねづにコピーする．ばはひぴたのちねづは新しくオープンされたポートを識別し，サーバへのコンタクトのためにクライアントが使用できる．
システムが提供可能な文字列の最大サイズはきぐぉたきぁじたぐくげごたぎぁきぅである．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

ユーザへのアドバイス ステムによりポート名がばはひぴたのちねづにコピーされる．アプリ
ケーションはこの値を保持するのに十分なサイズのバッファを渡す必要がある．
（ユーザへのアドバイス終わり）

〲〸
〲〹
〳〰
〳〱

ばはひぴたのちねづは基本的にはネットワークアドレスである．これは属している通信世界の中で一意であり（実装内容によって決まる），その通信世界内の任意のクライアントが使用できる．例えば，インターネット〨とはびぴ〺ばはひぴ〩アドレスの場合，インターネット上で一意となる．ぉあき こぐの下位レベルのスイッチアドレスの場合，そのこぐで一意となる．

〳〲

実装者へのアドバイス これらの例は実装を制約するためのものではない．
ばはひぴたのちねづには，例えば，適切に定義された通信ドメイン内で一意である限り，ユーザ名またはバッチジョブの名前を格納することができる．通信ドメインの規模が大きくなるほど，きぐぉのクライアント／サーバ機能は有益になる． （実装者へのア
ドバイス終わり）

〳〷

〳〳
〳〴
〳〵
〳〶

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

アドレスの適切な形式は実装で定義される．例えば，インターネットアドレスとしては，
ホスト名またはぉぐアドレス，あるいは実装によりぉぐアドレスにデコードできる任意のものを使用することができる．ポート名は，きぐぉたぃがくこぅたぐくげごを使用し，システムによる解放が行われた後で再使用することができる．

〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理〳〳〴

実装者へのアドバイス ばはひぴたのちねづはユーザが手入力することができるよう，読むことが可能で，空白を含まない形式を選択すると有益である． （実装者へのアドバ
イス終わり）

〱
〲
〳
〴
〵
〶
〷

どのてははアドレスの確立方法を実装に伝えるのに使用することができる．実装のデフォルトにするにはきぐぉたぉぎうくたぎさががとすることができ，通常はこのように設定される．

〸〹

きぐぉたぃがくこぅたぐくげご〨ばはひぴたのちねづ〩

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

ぉぎ

ばはひぴたのちねづ

ポート（文字列）

どのぴ きぐぉたぃぬはびづたばはひぴ〨っとちひ 〪ばはひぴたのちねづ〩
きぐぉたぃがくこぅたぐくげご〨ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃぬはびづたばはひぴ〨っはのびぴ っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
この関数はばはひぴたのちねづで表されるネットワークアドレスを解放する．

〱〹
〲〰
〲〱

きぐぉたぃくききたぁぃぃぅぐご〨ばはひぴたのちねづ〬 どのては〬 ひははぴ〬 っはねね〬 のづぷっはねね〩ぉぎ

ばはひぴたのちねづ
どのては
ひははぴ
っはねね

くさご

のづぷっはねね

〲〲

ぉぎ

〲〳

ぉぎ

〲〴

ぉぎ

〲〵
〲〶
〲〷
〲〸

ポート名（文字列，ひははぴでのみ使用）
実装依存の情報（ハンドル， ひははぴでのみ使用）
ルートノードのっはねね のランク（整数型）
呼び出しが集団であるグループ内コミュニケータ
（ハンドル）
リモートグループとしてのクライアントとの グルー
プ間コミュニケータ（ハンドル）

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

どのぴ きぐぉたぃはねねたちっっづばぴ〨っとちひ 〪ばはひぴたのちねづ〬 きぐぉたぉのては どのては〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪のづぷっはねね〩
きぐぉたぃくききたぁぃぃぅぐご〨ぐくげごたぎぁきぅ〬 ぉぎうく〬 げくくご〬 ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぎうく〬 げくくご〬 ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ
{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺ぁっっづばぴ〨っはのびぴ っとちひ〪 ばはひぴたのちねづ〬
っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬 どのぴ ひははぴ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたぃくききたぁぃぃぅぐごはクライアントとの通信を確立する．呼び出しコミュニケータ
において集団的である．クライアントとの通信を可能とするグループ間コミュニケータ
を返す．
ばはひぴたのちねづはきぐぉたくぐぅぎたぐくげごの呼び出しにより確立されていなければならない．
どのてははぁぃぃぅぐご呼び出しの微調整を可能にするための， 実装で定義される文字列であ
る．

〴〵
〴〶

10.4.3 クライアントルーチン〴〷〴〸

クライアント側のルーチンは〱つのみである．

〱〰〮〴〮 通信の確立〳〳〵

きぐぉたぃくききたぃくぎぎぅぃご〨ばはひぴたのちねづ〬 どのては〬 ひははぴ〬 っはねね〬 のづぷっはねね〩
ばはひぴたのちねづ
どのては

ぉぎ
ぉぎ

ぉぎ

ひははぴ
っはねね

くさご

のづぷっはねねぉぎ

ネットワークアドレス（文字列， ひははぴでのみ使用）〩
実装によって決まる情報（ハンドル， ひははぴでのみ使用）
ルートノードのっはねねのランク（整数型）

〱
〲
〳
〴
〵
〶

呼び出しが集団であるグループ内コミュニケータ
（ハンドル）〷

リモートグループとしてのサーバとのグループ間コ
ミュニケータ（ハンドル）〹

どのぴ きぐぉたぃはねねたっはののづっぴ〨っとちひ 〪ばはひぴたのちねづ〬 きぐぉたぉのては どのては〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪のづぷっはねね〩
きぐぉたぃくききたぃくぎぎぅぃご〨ぐくげごたぎぁきぅ〬 ぉぎうく〬 げくくご〬 ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぎうく〬 げくくご〬 ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ
{きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぉのぴひちっはねね〺〺ぃはののづっぴ〨っはのびぴ っとちひ〪 ばはひぴたのちねづ〬
っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬 どのぴ ひははぴ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
このルーチンはばはひぴたのちねづによって指定されたサーバとの通信を確立する．呼び出しコ
ミュニケータに対して集団で，リモートグループが きぐぉたぃくききたぁぃぃぅぐごに参加するグ
ループ間コミュニケータを返す．
名 前 付 き ポ ー ト が な い（あ る い は ク ロ ー ズ さ れ て い る）場 合，
きぐぉたぃくききたぃくぎぎぅぃごによりエラークラスきぐぉたぅげげたぐくげごが発生する．
ポートが存在し，保留中のきぐぉたぃくききたぁぃぃぅぐごがない場合，実装で定義された時間の経過後に接続がタイムアウトするか，サーバがきぐぉたぃくききたぁぃぃぅぐごを呼び出して成功する．タイムアウトが発生した場合，きぐぉたぃくききたぃくぎぎぅぃごによりエラークラ
スきぐぉたぅげげたぐくげごが発生する．

〸

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

実装者へのアドバイス タイムアウト時間は，短くも長くもできる．しかし，質の高い実装ではサーバが複数のクライアントからの同時の要求を処理できる
よう，接続要求がキューイングされる． 質の高い実装では，きぐぉたくぐぅぎたぐくげご，
きぐぉたぃくききたぁぃぃぅぐご，きぐぉたぃくききたぃくぎぎぅぃご のどのては引数を通して，ユーザがタ
イムアウトとキューイング動作を制御するためのメカニズムを提供することもできる． （実装者へのアドバイス終わり）

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

きぐぉは接続要求に対するサービスにおける公平さを保証しない．つまり，接続要求は
必ずしも開始された順序になるわけではなく，他の接続要求との競合により特定の接続要求が 通らなくなることもある．
ばはひぴたのちねづはサーバのアドレスである． これはサーバできぐぉたくぐぅぎたぐくげご によって返される名前と同じでなければならない． ここではある程度の自由が認められる．
ばはひぴたのちねづの形式が同等であれば，実装ではこれらも受け付けることができる．例えば，
ばはひぴたのちねづが〨とはびぴのちねづ〺ばはひぴ〩の場合，実装では 〨どばたちつつひづびび〺ばはひぴ〩も受け付ける．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理〳〳〶〱

10.4.4 名前の公開

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

この節で示すルーチンは名前を公開するためのメカニズムを提供している． 〨びづひぶどっづたのちねづ，ばはひぴたのちねづ〩のペアはサーバによって公開され，クライアントで取得するにはびづひぶどっづたのちねづのみを使用すればよい． きぐぉ実装ではびづひぶどっづたのちねづ の有効範囲，つまりびづひぶどっづたのちねづが取得できるドメインを定義する．ドメインが空のセットの場合，つまり，クライアントが情報を取得できない場合，名前の公開がサポートされていないことになる．実装では有効範囲の規定方法を文書化する必要がある．質の高い実装では名前公開関数のどのては引数を通して，ユーザがある程度の制御を行えるようにする．例は個々の関数の説明の中で示す．

〱〲
〱〳
〱〴

きぐぉたぐさあがぉこえたぎぁきぅ〨びづひぶどっづたのちねづ〬 どのては〬 ばはひぴたのちねづ〩

〱〵

ぉぎ

〱〶

ぉぎ

〱〷

ぉぎ

びづひぶどっづたのちねづ
どのては
ばはひぴたのちねづ

ポートに付加するサービス名（文字列）実装の情報（ハンドル）
ポート名（文字列）

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぐふぢぬどびとたのちねづ〨っとちひ 〪びづひぶどっづたのちねづ〬 きぐぉたぉのては どのては〬 っとちひ 〪ばはひぴたのちねづ〩
きぐぉたぐさあがぉこえたぎぁきぅ〨こぅげざぉぃぅたぎぁきぅ〬 ぉぎうく〬 ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 こぅげざぉぃぅたぎぁきぅ〬 ぐくげごたぎぁきぅ{ぶはどつ きぐぉ〺〺ぐふぢぬどびとたのちねづ〨っはのびぴ っとちひ〪 びづひぶどっづたのちねづ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬っはのびぴ っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
このルーチンは，アプリケーションが既知のびづひぶどっづたのちねづを使用してシステム提供のばはひぴたのちねづを取得できるように， 〨ばはひぴたのちねづ〬 びづひぶどっづたのちねづ〩のペアを公開する．
実装では公開されたサービス名の有効範囲，つまりサービス名が一意であるドメイン，
逆に言えば〨ばはひぴ のちねづ〬 びづひぶどっづ のちねづ〩 のペアが取得できるドメインを定義する必要がある．例えば，サービス名はジョブ（ジョブは分散オペレーティングシステムまたはバッ
チスケジューラによって定義される）で一意，マシンで一意，またはケルベロスのレル
ムで一意とすることができる．有効範囲はきぐぉたぐさあがぉこえたぎぁきぅのどのては引数によって異なることがある．
きぐぉでは，〱つのばはひぴたのちねづに対して複数のびづひぶどっづたのちねづを公開することができる． 逆に，どのてはによって規定された有効範囲内でびづひぶどっづたのちねづがすでに公開されている場合，
きぐぉたぐさあがぉこえたぎぁきぅの動作は未定義である．きぐぉ実装は，きぐぉたぐさあがぉこえたぎぁきぅのどのては引数のメカニズムを通して，複数のサーバに対して同じ有効範囲内で同じサービスを持つことができる方法を提供する．この場合，実装により定義されるポリシーによって，
きぐぉたがくくかさぐたぎぁきぅが複数のポート名のうちのどれを返すかが決まる．
びづひぶどっづたのちねづは有効範囲が制限されていても，実装次第により， ばはひぴたのちねづは実装によって使用される，通信世界内で常にグローバルな有効範囲（つまり，グローバルに一意）を持っていることに注意すること．
ばはひぴたのちねづはきぐぉたくぐぅぎたぐくげごによって確立されていて， きぐぉたぃがくこぅたぐくげごによって削除されていないポートの名前とする必要がある．そうでない場合の結果は未定義である．

〱〰〮〴〮 通信の確立〳〳〷

実装者へのアドバイス きぐぉ実装は，ユーザが直接アクセスできるネームサービスを使用する場合もある．この場合，きぐぉによって公開された名前がユーザによって公開された名前と容易に衝突する可能性がある．このような衝突を避けるため，きぐぉ
実装では同じサービスを使用するユーザコードと衝突しないようにサービス名を修飾する必要がある．当然，このような名前の修飾はユーザにとっては完全にトラン
スペアレントである．
実装でネームサーバを使用しようとする場合，次のような状況が問題となるが，避けることは難しい．〱台のマシンで複数のぜはっづちの〢インスタンスが動作しているとする．サービス名の有効範囲が〱つのジョブに限定されている場合，複数のはっづちのが共存する可能性がある．しかし，実装がサイト全体の有効範囲効範囲を持つ場合，〲回目以降のきぐぉたぐさあがぉこえたぎぁきぅ呼び出しは全て失敗するため，複数のインスタ
ンスを共存させることはできない．これに対する普遍的な解決策はない．
このような状況に対応するために，質の高い実装では名前を公開するドメインを制限できるようにする必要がある． （実装者へのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

きぐぉたさぎぐさあがぉこえたぎぁきぅ〨びづひぶどっづたのちねづ〬 どのては〬 ばはひぴたのちねづ〩
ぉぎ
ぉぎ
ぉぎ

びづひぶどっづたのちねづ
どのては
ばはひぴたのちねづ〲〱

サービス名（文字列）〲〲

実装固有の情報（ハンドル）〲〳

ポート名（文字列）〲〴〲〵

どのぴ きぐぉたさのばふぢぬどびとたのちねづ〨っとちひ 〪びづひぶどっづたのちねづ〬 きぐぉたぉのては どのては〬 っとちひ 〪ばはひぴたのちねづ〩
きぐぉたさぎぐさあがぉこえたぎぁきぅ〨こぅげざぉぃぅたぎぁきぅ〬 ぉぎうく〬 ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 こぅげざぉぃぅたぎぁきぅ〬 ぐくげごたぎぁきぅ{ぶはどつ きぐぉ〺〺さのばふぢぬどびとたのちねづ〨っはのびぴ っとちひ〪 びづひぶどっづたのちねづ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬っはのびぴ っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〲〶

このルーチンは，すでに公開されているサービス名を非公開にする． 公開されていな
いサービス名，またはすでに非公開にされているサービス名を非公開にしようとするとエラーとなり， エラークラスきぐぉたぅげげたこぅげざぉぃぅにより示される．
公開されているサービス名は全て，対応するポートがクローズされる前，および公開プロセスが終了する前に非公開にする必要がある．プロセスがそれ自体の公開していな
いサービス名を非公開にしようとした場合のきぐぉたさぎぐさあがぉこえたぎぁきぅの動作は，実装によって決まる．
きぐぉたぐさあがぉこえたぎぁきぅのどのては引数を使用してサービス名の公開方法を実装に伝えた場
合， サ ー ビ ス 名 を 非 公 開 に す る 方 法 を 実 装 に 伝 え る た め の 情 報 がきぐぉたさぎぐさあがぉこえたぎぁきぅに渡されたどのてはに含まれていることが実装によって求められることがある．

〳〲

〲〷
〲〸
〲〹
〳〰
〳〱

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理

〳〳〸
〱
〲

きぐぉたがくくかさぐたぎぁきぅ〨びづひぶどっづたのちねづ〬 どのては〬 ばはひぴたのちねづ〩
ぉぎ

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

ぉぎ
くさご

びづひぶどっづたのちねづ
どのては
ばはひぴたのちねづ

サービス名（文字列）
実装固有の情報（ハンドル）
ポート名（文字列）

どのぴ きぐぉたがははにふばたのちねづ〨っとちひ 〪びづひぶどっづたのちねづ〬 きぐぉたぉのては どのては〬 っとちひ 〪ばはひぴたのちねづ〩
きぐぉたがくくかさぐたぎぁきぅ〨こぅげざぉぃぅたぎぁきぅ〬 ぉぎうく〬 ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 こぅげざぉぃぅたぎぁきぅ〬 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺がははにふばたのちねづ〨っはのびぴ っとちひ〪 びづひぶどっづたのちねづ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬
っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
この関数は，びづひぶどっづたのちねづを使用してきぐぉたぐさあがぉこえたぎぁきぅによって公開された
ばはひぴたのちねづを取得する． びづひぶどっづたのちねづが公開されていない場合，エラークラス
きぐぉたぅげげたぎぁきぅのエラーが発生する． アプリケーションは，使用可能な最大サイズのポート名を保持できるだけの十分なばはひぴたのちねづのバッファを用意する必要がある（上記きぐぉたくぐぅぎたぐくげごの説明を参照）．
実装で同じ有効範囲内で同じびづひぶどっづたのちねづを持つ複数のエントリ持つことができる場
合，その実装で規定された方法で特定のばはひぴたのちねづが選択される．
きぐぉたぐさあがぉこえたぎぁきぅのどのては引数を使用して実装にサービス名の公開方法を伝える場
合，きぐぉたがくくかさぐたぎぁきぅでも同じどのては引数が必要になることがある．

〲〳
〲〴
〲〵
〲〶
〲〷

10.4.5 予約されたキー値
以下のキー値が予約されている．実装ではこれらのキー値を解釈する必要はないが，キー値を解釈する場合，以下の機能を備えていなければならない．

〲〸〲〹

どばたばはひぴ ばはひぴを確立するぉぐポート番号を含む値（きぐぉたくぐぅぎたぐくげご専用）
．

〳〰
〳〱

どばたちつつひづびび ばはひぴを確立するぉぐアドレスを含む値． このアドレスがきぐぉたくぐぅぎたぐくげご呼び〳〲

出 し の 行 わ れ る ホ ス ト の 有 効 なぉぐア ド レ ス で な い 場 合，結 果 は 未 定 義 で あ る（きぐぉたくぐぅぎたぐくげご専用）
．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

10.4.6 クライアント／サーバの例
最もシンプルな例 ぼ 完全に可搬
以下の例に，クライアント／サーバインターフェイスを使用する最もシンプルな方法を示す．ここではサービス名はまったく使用しない．
サーバ側：

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

っとちひ ねべばはひぴせきぐぉたきぁじたぐくげごたぎぁきぅそ〻
きぐぉたぃはねね どのぴづひっはねね〻〪〯 〮〮〮 〪〯きぐぉたくばづのたばはひぴ〨きぐぉたぉぎうくたぎさがが〬 ねべばはひぴ〩〻
ばひどのぴて〨〢ばはひぴ のちねづ どび〺 〥びぜの〢〬 ねべばはひぴ〩〻〱〰〮〴〮 通信の確立〳〳〹

きぐぉたぃはねねたちっっづばぴ〨ねべばはひぴ〬 きぐぉたぉぎうくたぎさがが〬 〰〬 きぐぉたぃくききたこぅがう〬 〦どのぴづひっはねね〩〻〪〯 つは びはねづぴとどので ぷどぴと どのぴづひっはねね 〪〯サーバが端末にポート名を出力する．ユーザはクライアントの起動時にこれを入力する必要がある（これが機能するようにきぐぉ実装でびぴつどの がサポートされているとする）．
クライアント側：

〱
〲
〳
〴
〵
〶
〷

きぐぉたぃはねね どのぴづひっはねね〻
っとちひ のちねづせきぐぉたきぁじたぐくげごたぎぁきぅそ〻
ばひどのぴて〨〢づのぴづひ ばはひぴ のちねづ〺 〢〩〻でづぴび〨のちねづ〩〻
きぐぉたぃはねねたっはののづっぴ〨のちねづ〬 きぐぉたぉぎうくたぎさがが〬 〰〬 きぐぉたぃくききたこぅがう〬 〦どのぴづひっはねね〩〻

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

くっづちの〯ぁぴねはびばとづひづ 〭 名前の公開に基づく
この例は，ぜはっづちの〢アプリケーションは海洋大気結合気候モデルの「サーバ」側である．ここでは，きぐぉ実装が名前を公開しているとする．

〱〵
〱〶
〱〷
〱〸
〱〹

きぐぉたくばづのたばはひぴ〨きぐぉたぉぎうくたぎさがが〬 ばはひぴたのちねづ〩〻
きぐぉたぐふぢぬどびとたのちねづ〨〢はっづちの〢〬 きぐぉたぉぎうくたぎさがが〬 ばはひぴたのちねづ〩〻
きぐぉたぃはねねたちっっづばぴ〨ばはひぴたのちねづ〬 きぐぉたぉぎうくたぎさがが〬 〰〬 きぐぉたぃくききたこぅがう〬 〦どのぴづひっはねね〩〻〪〯 つは びはねづぴとどので ぷどぴと どのぴづひっはねね 〪〯きぐぉたさのばふぢぬどびとたのちねづ〨〢はっづちの〢〬 きぐぉたぉぎうくたぎさがが〬 ばはひぴたのちねづ〩〻

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

クライアント側：〲〶〲〷

きぐぉたがははにふばたのちねづ〨〢はっづちの〢〬 きぐぉたぉぎうくたぎさがが〬 ばはひぴたのちねづ〩〻
きぐぉたぃはねねたっはののづっぴ〨 ばはひぴたのちねづ〬 きぐぉたぉぎうくたぎさがが〬 〰〬 きぐぉたぃくききたこぅがう〬〦どのぴづひっはねね〩〻

〲〸
〲〹
〳〰
〳〱
〳〲

シンプルなクライアント／サーバの例
これはシンプルな例であり， サーバは一度に〱つの接続のみを受け付け，クライアン
トが切断を要求するまでその接続に対するサービスを行う．サーバは〱つのプロセスである．
以下にサーバを示す．これは〱つの接続を受け付け，タグが〱のメッセージを 受信するまでデータを処理する．タグが〰のメッセージを受信するとサーバは終了する．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

〣どのっぬふつづ 〢ねばど〮と〢どのぴ ねちどの〨 どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ 〩ほきぐぉたぃはねね っぬどづのぴ〻
きぐぉたこぴちぴふび びぴちぴふび〻
っとちひ ばはひぴたのちねづせきぐぉたきぁじたぐくげごたぎぁきぅそ〻
つはふぢぬづ ぢふてせきぁじたいぁごぁそ〻
どのぴ
びどぺづ〬 ちでちどの〻

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理〳〴〰
〱

きぐぉたぉのどぴ〨 〦ちひでっ〬 〦ちひでぶ 〩〻きぐぉたぃはねねたびどぺづ〨きぐぉたぃくききたしくげがい〬 〦びどぺづ〩〻
どて 〨びどぺづ 〡〽 〱〩 づひひはひ〨うぁごぁが〬 〢こづひぶづひ ぴはは ぢどで〢〩〻きぐぉたくばづのたばはひぴ〨きぐぉたぉぎうくたぎさがが〬 ばはひぴたのちねづ〩〻
ばひどのぴて〨〢びづひぶづひ ちぶちどぬちぢぬづ ちぴ 〥びぜの〢〬ばはひぴたのちねづ〩〻
ぷとどぬづ 〨〱〩 ほ
きぐぉたぃはねねたちっっづばぴ〨 ばはひぴたのちねづ〬 きぐぉたぉぎうくたぎさがが〬 〰〬 きぐぉたぃくききたしくげがい〬〦っぬどづのぴ 〩〻
ちでちどの 〽 〱〻ぷとどぬづ 〨ちでちどの〩 ほ
きぐぉたげづっぶ〨 ぢふて〬 きぁじたいぁごぁ〬 きぐぉたいくさあがぅ〬
きぐぉたぁぎすたこくさげぃぅ〬 きぐぉたぁぎすたごぁぇ〬 っぬどづのぴ〬 〦びぴちぴふび 〩〻びぷどぴっと 〨びぴちぴふび〮きぐぉたごぁぇ〩 ほっちびづ 〰〺 きぐぉたぃはねねたてひづづ〨 〦っぬどづのぴ 〩〻きぐぉたぃぬはびづたばはひぴ〨ばはひぴたのちねづ〩〻
きぐぉたうどのちぬどぺづ〨〩〻
ひづぴふひの 〰〻っちびづ 〱〺 きぐぉたぃはねねたつどびっはののづっぴ〨 〦っぬどづのぴ 〩〻
ちでちどの 〽 〰〻ぢひづちに〻
っちびづ 〲〺 〪〯 つは びはねづぴとどので 〪〯〮〮〮つづてちふぬぴ〺〪〯 さのづへばづっぴづつ ねづびびちでづ ぴべばづ 〪〯きぐぉたぁぢはひぴ〨 きぐぉたぃくききたしくげがい〬 〱 〩〻
ぽ
ぽ
ぽ

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

ぽ
以下にクライアントを示す．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

〣どのっぬふつづ 〢ねばど〮と〢どのぴ ねちどの〨 どのぴ ちひでっ〬 っとちひ 〪〪ちひでぶ 〩ほきぐぉたぃはねね びづひぶづひ〻
つはふぢぬづ ぢふてせきぁじたいぁごぁそ〻
っとちひ ばはひぴたのちねづせきぐぉたきぁじたぐくげごたぎぁきぅそ〻〳〲

きぐぉたぉのどぴ〨 〦ちひでっ〬 〦ちひでぶ 〩〻びぴひっばべ〨ばはひぴたのちねづ〬 ちひでぶせ〱そ 〩〻〪〯 ちびびふねづ びづひぶづひ〧び のちねづ どび っねつ〭ぬどのづ ちひで 〪〯〳〳〳〴きぐぉたぃはねねたっはののづっぴ〨 ばはひぴたのちねづ〬 きぐぉたぉぎうくたぎさがが〬 〰〬 きぐぉたぃくききたしくげがい〬〦びづひぶづひ 〩〻

〳〵
〳〶
〳〷

ぷとどぬづ 〨〡つはのづ〩 ほ
ぴちで 〽 〲〻 〪〯 ぁっぴどはの ぴは ばづひてはひね 〪〯きぐぉたこづのつ〨 ぢふて〬 の〬 きぐぉたいくさあがぅ〬 〰〬 ぴちで〬 びづひぶづひ 〩〻〪〯 づぴっ 〪〯ぽきぐぉたこづのつ〨 ぢふて〬 〰〬 きぐぉたいくさあがぅ〬 〰〬 〱〬 びづひぶづひ 〩〻きぐぉたぃはねねたつどびっはののづっぴ〨 〦びづひぶづひ 〩〻きぐぉたうどのちぬどぺづ〨〩〻
ひづぴふひの 〰〻

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぽ

〱〰〮〵〮 その他の機能〳〴〱

10.5 その他の機能〱〲

10.5.1 ユニバースサイズ〳〴

多くの「動的」なきぐぉアプリケーションが，アプリケーションの実行前にリソースが割り当てされている静的なランタイム環境に存在すると考えられる．ユーザ（または，恐らくはバッチシステム）がこのような擬似静的アプリケーションを使用する場合，通常は起動する多数のプロセスと想定されるプロセスの総数を指定する．アプリケーショ
ンが知る必要のあるのは，存在するスロットの数，つまり，スポーンすべきプロセスの数である．
きぐぉには，可搬な方法でアプリケーションがこの情報を取得するためのきぐぉたぃくききたしくげがい， きぐぉたさぎぉざぅげこぅたこぉずぅの属性が用意されている． この属性は，想定されるプロセスの総数を示す． うはひぴひちの言語では，属性は整数値である． ぃ言語では，
属性は整数値へのポインタである． 通常，アプリケーションはきぐぉたさぎぉざぅげこぅたこぉずぅからきぐぉたぃくききたしくげがいのサイズを差し引いて，スポーンすべきプロセスの数を算出する．
きぐぉたさぎぉざぅげこぅたこぉずぅはきぐぉたぉぎぉごで初期化され，きぐぉによって変更されない．定義されると，きぐぉたぃくききたしくげがい の全てのプロセスで同じ値となる． きぐぉたさぎぉざぅげこぅたこぉずぅはきぐぉで規 定 さ れ な い 方 法 に よ り，ア プ リ ケ ー シ ョ ン 起 動 メ カ ニ ズ ム に よ っ て 決 定 さ れ る（きぐぉたぃくききたしくげがいのサイズはこのようなパラメータの別の例である）．
きぐぉたさぎぉざぅげこぅたこぉずぅは，例えば以下の方法によって設定可能である．

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

• きぐぉプロセスを起動する〭ふのどぶづひびづたびどぺづプログラムの引数〲〵〲〶• アプリケーションに割り当てられているプロセッサの数を知るための，バッチスケ
ジューラとの自動的なやりとり

〲〷
〲〸
〲〹

• ユーザが設定した環境変数〳〰
〳〱• どのては引数によりきぐぉたぃくききたこぐぁしぎに渡される追加情報
実装ではきぐぉたさぎぉざぅげこぅたこぉずぅの設定方法を文書化する必要がある． 実装できぐぉたさぎぉざぅげこぅたこぉずぅを設定する機能がサポートされていない場合がある．この場合，属性きぐぉたさぎぉざぅげこぅたこぉずぅは設定されない．
きぐぉたさぎぉざぅげこぅたこぉずぅは必ずしも厳格な制限ではなく，推奨値である． 例えば，ある実装では，要求すればアプリケーションでプロセッサごとに〵〰のプロセスをスポーンすることができる．しかし，プロセッサごとに〱つのプロセスのみを生成したいという場合もある．
きぐぉたさぎぉざぅげこぅたこぉずぅはアプリケーションの起動時に指定されていると仮定され，基本的にユーザが（ねばどづへづっなどの，きぐぉプロセス起動メカニズムを通して）アプリケーショ
ンに重要なランタイム情報を渡すことができる可搬なメカニズムである．ランタイム環
境とのやりとりは必要ないことに注意すること．アプリケーションの実行中にランタイ
ム環境でサイズが変更された場合でも， きぐぉたさぎぉざぅげこぅたこぉずぅは更新されず，アプリケー
ションはランタイムシステムと直接やりとりすることにより変更を知る必要がある．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〰〮 プロセスの生成と管理〳〴〲〱

10.5.2 シングルトンMPI_INIT

〲
〳
〴
〵
〶
〷
〸
〹

質の高い実装では，きぐぉたぉぎぉごを呼び出すことにより，任意のプロセス（「並列アプリケーション」メカニズムによって起動されていないものも含む）をきぐぉプロセスにすることができる．このようなプロセスはきぐぉたぃくききたぁぃぃぅぐごおよびきぐぉたぃくききたぃくぎぎぅぃごル
ーチンを使用して他のきぐぉプロセスと接続したり，他のきぐぉプロセスをスポーンしたりすることができる．きぐぉではこの動作を必須としていないが，技術的に実現可能であれば強く推奨している．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

実装者へのアドバイス 同じきぐぉたぃくききたしくげがいに属しているきぐぉプロセスを起動す
るには，特別な調整が必要となる．例えば，各プロセスを「同時に」起動する必要があり，各プロセスの通信を確立するためのメカニズムが必要である．ユーザまたはオペレーティングシステムが，単にプロセスを起動する以上の特別な手順を実行する必要がある．
アプリケーションできぐぉたぉぎぉごが開始されたら，これらの特別な手順が実行されたかどうかをアプリケーションで明確に確認できなければならない． プロセス
できぐぉたぉぎぉごが開始され，特別な手順が実行されていない（つまり，他のプロセス
によりきぐぉたぃくききたしくげがいを生成するための情報が渡されていない）ことが確認された場合，正常に ，シングルトンきぐぉプログラム，つまりきぐぉたぃくききたしくげがいがサイズ〱であるプログラム，を生成する．

〲〴
〲〵
〲〶
〲〷

実装によっては，きぐぉが「きぐぉ環境」なしでは機能できない場合もある．例えば，
きぐぉがデーモンの動作を必要としたり，きぐぉがきぐぐのフロントエンドでは全く動作しなかったりすることがある．この場合，きぐぉ実装は次のいずれかとなる．

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

〱〮 環境を作成する（デーモンの起動など）．
〲〮 環境を生成できず，環境が予め起動されていない場合，エラーが発生する．
質の高い実装ではシングルトンきぐぉプロセスの生成を試み，エラーは発生しない．
（実装者へのアドバイス終わり）〳〵〳〶

10.5.3 きぐぉたぁぐぐぎさき

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

きぐぉたぃくききたしくげがいには定義済みの属性きぐぉたぁぐぐぎさきがある． うはひぴひちの言語では，属性は整数値である．ぃ言語では，属性は整数値へのポインタである．プロセスがきぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅによってスポーンされた場合，きぐぉたぁぐぐぎさきは現在のプロセスを生成したコマンドの番号である． 番号は〰から始まる． プロセスがきぐぉたぃくききたこぐぁしぎにより生成された場合，きぐぉたぁぐぐぎさき は〰となる．
また，プロセスがスポーン呼び出しによってではなく，複数のプロセス指定の処理が可能な実装固有の起動メカニズムによって起動された場合， きぐぉたぁぐぐぎさきには該当する
プロセス指定の番号が設定されなければならない．特に，以下により起動された場合，〴〷〴〸

ねばどづへづっ びばづっ〰 せ〺 びばづっ〱 〺 びばづっ〲 〺 〮〮〮そ〱〰〮〵〮 その他の機能〳〴〳

きぐぉたぁぐぐぎさきには該当する指定の番号が設定されなければならない．

アプリケーションがきぐぉたぃくききたこぐぁしぎまたはきぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅによってスポーンされておらず， きぐぉたぁぐぐぎさきが実装固有の起動メカニズムにおいて意味を持たない場合，きぐぉたぁぐぐぎさきは設定されない．
きぐぉ実装はオプションにより，どのては引数を通してきぐぉたぁぐぐぎさきの値を上書きするためのメカニズムを提供することができる．きぐぉは全てのこぐぁしぎ呼び出し用に以下のキーを予約している．

〱
〲
〳
〴
〵
〶
〷
〸
〹

ちばばのふね 値には，子のきぐぉたぁぐぐぎさきのデフォルト値を上書きする整数が格納される．

〱〰
〱〱

根拠 〱つのアプリケーションが起動されたとき，きぐぉたぃくききたしくげがいのサイズを調べることにより，いくつのプロセスが存在するかを確認することができる．複数のこぐきいサブアプリケーションで構成されるアプリケーションには，いくつのサブ
アプリケーションが存在するか，プロセスがどのサブアプリケーションに属しているかを確認する方法はない．特別な場合にはこれを確認する方法があるが，一般的なメカニズムはない． きぐぉたぁぐぐぎさきはこのための一般的なメカニズムを提供する．
（根拠の終わり）

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

10.5.4 接続の解放
接続される前のクライアントとサーバは，はそれぞれ独立したきぐぉアプリケーション
である．一方のエラーが他方に影響することはない．きぐぉたぃくききたぃくぎぎぅぃごと
きぐぉたぃくききたぁぃぃぅぐごを使用して接続が確立されると，一方のエラーが他方に影響を及ぼすことがある．一方のエラーが他方に影響しないように．クライアントとサーバが切断できることが望ましい．同様に，子のエラーが親に影響したり，親のエラーが子に影響したりすることがないように，親と子が切断できることが望ましい場合がある．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

• 〲つのプロセスは，間に（直接または間接の）通信パスがある場合に接続される．
より正確には次のようになる．

〳〱
〳〲
〳〳

〱〮 〲つのプロセスは以下のいずれかの場合に接続される．

〳〴〳〵〨ち〩 同じコミュニケータに属している場合（きぐぉたぃくききたしくげがいを含むグループ間またはグループ内コミュニケータ），または〨ぢ〩 きぐぉたぃくききたいぉこぃくぎぎぅぃごではなくきぐぉたぃくききたうげぅぅによって解放されたコミュニケータに属していた場合，または

〳〶
〳〷
〳〸
〳〹
〴〰

〨っ〩 同じウィンドウまたはファイルハンドルのグループに属している場合〲〮 ぁがあに接続され，あがぃに接続されている場合，ぁはぃに接続されている．

〴〱
〴〲
〴〳

• 〲つのプロセスは，接続されていない場合は切断されている（独立した状態でもあ
る）
．

〴〴
〴〵
〴〶

• 上記の定義により接続は過渡的な属性であり， きぐぉプロセスの世界を切断された（独立した）プロセスの集合（同等のクラス）に分割する．

〴〷〴〸

第 〱〰〮 プロセスの生成と管理

〳〴〴
〱
〲
〳
〴
〵

• 接続されているが同じきぐぉたぃくききたしくげがいを共有していないプロセスは，間の通信パスがきぐぉたぃくききたいぉこぃくぎぎぅぃごによって遮断された場合は切断された（独立した）状態になることがある．
他の章でのきぐぉルーチンに以下の追加規則が適用される．

〶
〷
〸
〹
〱〰
〱〱
〱〲

• きぐぉたうぉぎぁがぉずぅは接続されたプロセスの集合に対して集団的である．
• きぐぉたぁあくげごは独立したプロセスを中断させない．（っはねね引数を無視して）呼び出
し元のきぐぉたぃくききたしくげがいの 全てのプロセスを中断させる可能性はある．また，っはねねのプロセスのみを中断させるよう「最大限要求する」が，接続されたプロセスも中断させることがある．

〱〳
〱〴
〱〵

• きぐぉたうぉぎぁがぉずぅを呼び出さずにプロセスを終了した場合，独立したプロセスは影響を受けないが，接続されたプロセスへの影響は未定義である．

〱〶
〱〷
〱〸
〱〹

きぐぉたぃくききたいぉこぃくぎぎぅぃご〨っはねね〩
ぉぎくさご

っはねね

コミュニケータ（ハンドル）

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

どのぴ きぐぉたぃはねねたつどびっはののづっぴ〨きぐぉたぃはねね 〪っはねね〩
きぐぉたぃくききたいぉこぃくぎぎぅぃご〨ぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぃはねね〺〺いどびっはののづっぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
この関数はっはねねの保留中の全ての通信が内部的に完了するのを待ち合わせ，コミュニ
ケータのオブジェクトを解放し，ハンドルをきぐぉたぃくききたぎさががに設定する．これは集団操作である．
コミュニケータきぐぉたぃくききたしくげがいまたはきぐぉたぃくききたこぅがうを使用して呼び出してはいけない．
バ ッ フ ァ リ ン グ さ れ た デ ー タ が 送 信 先 に 送 信 さ れ る よ う に，きぐぉたぃくききたいぉこぃくぎぎぅぃごの呼び出しは通信が完了し，一致している場合のみ行うことができる．この要件はきぐぉたうぉぎぁがぉずぅの場合と同様である．
きぐぉたぃくききたいぉこぃくぎぎぅぃごの動作はきぐぉたぃくききたうげぅぅと同じだが，保留中の通信が内部的に完了するのを待ち合わせ，切断されたプロセスの動作に関する保証を有効にする点が異なる．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

ユ ー ザ へ の ア ド バ イ ス 〲つ の プ ロ セ ス を 切 断 す る に は，きぐぉたぃくききたいぉこぃくぎぎぅぃご， きぐぉたしぉぎたうげぅぅ，およびきぐぉたうぉがぅたぃがくこぅを呼び出
して 〲つのプロセスの間の全ての通信パスを削除する必要がある場合がある．〲つのプロセスを完全に独立した状態にする前に，複数のコミュニケータを切断する（あるいは複数のウィンドウまたはファイルを解放する）必要がある場合もある．
（ユーザへのアドバイス終わり）

〴〶
〴〷
〴〸

根拠 代わりにきぐぉたぃくききたうげぅぅを使用することもできるのは便利だが，この関数は明示的に保留中の通信の完了の待ち合わせを行わない． （根拠の終わり）〱〰〮〵〮 その他の機能〳〴〵

10.5.5 MPI通信のもう1つの確立方法

〱
〲
〳
〴

きぐぉたぃくききたおくぉぎ〨てつ〬 どのぴづひっはねね〩
ぉぎ
くさご

てつ
どのぴづひっはねね

ソケットファイル記述子
新規グループ間コミュニケータ（ハンドル）

どのぴ きぐぉたぃはねねたなはどの〨どのぴ てつ〬 きぐぉたぃはねね 〪どのぴづひっはねね〩
きぐぉたぃくききたおくぉぎ〨うい〬 ぉぎごぅげぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うい〬 ぉぎごぅげぃくきき〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺ぉのぴづひっはねね きぐぉ〺〺ぃはねね〺〺おはどの〨っはのびぴ どのぴ てつ〩 （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたぃくききたおくぉぎは，あづひにづぬづべ こはっにづぴインターフェイス文献せ〳〳〬 〳〷そをサポートする環境に存在するきぐぉ実装を対象としている．あづひにづぬづべ こはっにづぴをサポートしない環境に存在する実装では，きぐぉたぃくききたおくぉぎのエントリポイントを用意し， きぐぉたぃくききたぎさががを返す必要がある．
この呼び出しは，ソケットによって接続される〲つのきぐぉプロセスの和集合からグループ間コミュニケータを生成する．ローカルおよびリモートプロセスが実装内容によって決まる同じきぐぉ通信世界にアクセスできる場合，きぐぉたぃくききたおくぉぎは正常に実行され
る．

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

ユーザへのアドバイス きぐぉ実装は，共有メモリセグメントや特別なスイッチなど，きぐぉ通信用の特定の通信媒体を必要とすることがある．この場合，これらを接続するソケットがあり，これらが同じきぐぉ実装を使用している場合でも，〲つのプロセスが正常に参加できない場合がある． （ユーザへのアドバイス終わり）

〲〴
〲〵
〲〶
〲〷
〲〸

実装者へのアドバイス 質の高い実装では，望ましい媒体が利用できない場合，低速の媒体を利用して通信を確立しようとする．実装でこれが行われない場合，ソケット（特にソケットがごぃぐ接続の場合）で使用される媒体によりきぐぉ通信が行えない理由を明文化する必要がある． （実装者へのアドバイス終わり）

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

てつはこくぃかたこごげぅぁき（信頼性の高い双方向のバイトストリーム接続）型のソケットを表わすファイル記述子である．ソケットに対しては，こぉぇぉくによるノンブロッキング入出力
および非同期通知を有効にしてはならない．ソケットは接続状態でなければならない．
ソケットは， きぐぉたぃくききたおくぉぎの呼び出し時に静止している必要がある（下記を参照）．
それは標準のソケットぁぐぉ呼び出しを使用してソケットを生成するアプリケーションの責任である．
きぐぉたぃくききたおくぉぎは，ソケットの両端のプロセスによって呼び出されなければならな
い．きぐぉたぃくききたおくぉぎは，両方のプロセスでの呼び出されるまで戻らない．〲つのプロセ
スはローカルプロセス〯リモートプロセスと呼ばれる．
きぐぉはソケットを使用してそれ自体のためのグループ間コミュニケータの生成をブー
トストラップ方式で行う．きぐぉたぃくききたおくぉぎから戻ると，ファイル記述子がオープンさ
れ，静止状態となる（下記を参照）
．

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〴〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

第 〱〰〮 プロセスの生成と管理

きぐぉがグループ間コミュニケータを生成できないが，ソケットを最初の状態のままにしておくことができ，保留中の通信がないのであれば，処理は成功で， どのぴづひっはねねに
きぐぉたぃくききたぎさががが設定される．
きぐぉたぃくききたおくぉぎが呼び出される前ときぐぉたぃくききたおくぉぎが戻った後は，ソケットが静止していなければならない．より具体的に言うと， きぐぉたぃくききたおくぉぎの開始時にソケットのひづちつは，リモートプロセスがきぐぉたぃくききたおくぉぎを呼び出す前にソケットに書き込まれたデータの読み取りを行わない．きぐぉたぃくききたおくぉぎの終了時に ひづちつ はリモートプロセスがきぐぉたぃくききたおくぉぎから戻る前にソケットに書き込んだデータの読み取りを行わない．最初の状態を保証するのはアプリケーションの責任で，〲番目の状態を保証するのはきぐぉ実装の責任である．マルチスレッドアプリケーションでは，あるスレッド
がきぐぉたぃくききたおくぉぎを呼び出している間に別のスレッドがソケットにアクセスしないこと，つまりきぐぉたぃくききたおくぉぎの同時呼び出しが行われないことを保証する必要がある．

〱〵
〱〶
〱〷
〱〸
〱〹

実装者へのアドバイス きぐぉは新しいコミュニケータ内のきぐぉメッセージのために，利用可能な任意の通信パスを自由に使用でき，ソケットは最初のハンドシェイキイ
ングにのみ使用される． （実装者へのアドバイス終わり）

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぃくききたおくぉぎはこのために非きぐぉ通信を使用する．非きぐぉ 通信と保留中のきぐぉ通
信とのやりとりの結果は未定義となる．そのため，接続された〲つのプロセスできぐぉたぃくききたおくぉぎを呼び出した結果も未定義となる（接続されたプロセスの定義については， 〳〴〳ページの第〱〰〮〵〮〴節を参照）．
返されたコミュニケータは，通常のきぐぉコミュニケータ作成メカニズムを通して，追加のプロセスとのきぐぉ 通信を確立するために使用できる．

〱
〲
〳
〴
〵

第11章

〶
〷
〸
〹

片方向通信

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

11.1 はじめに〱〶

リモートメモリアクセス〨げきぁ〩は，〱つのプロセスが，送信側と受信側の両方の全ての通信パラメータを指定可能にすることによって，きぐぉの通信メカニズムを拡張する．この通信モードは，プロセス間のデータの分布が固定されている（またはゆっくりとしか変化しない），しかしデータのアクセス箇所を動的に変えるアプリケーションにおいて，そのコーディングを容易にする．このような場合，各プロセスが，他のプロセスに置かれた，アクセスまたは更新する必要のあるデータが何かを計算することは可能である．
しかしプロセスには，自身のメモリ上のどこのデータがリモートプロセスによってアクセスまたは更新されるかわからないかもしれないし，アクセスまたは更新してくるリモ
ートプロセスの身元さえわからないかもしれない．したがって，その転送パラメータは片側でのみ，全て利用可能である．正規の送受信では送信側と受信側で操作をマッチさせる必要がある．マッチする操作を発行するには，アプリケーションが送受信の転送パ
ラメータを配布する必要がある．このためには，全てのプロセスが時間のかかるグロー
バル計算に参加したり，全てのプロセスが受信すべき潜在的な通信要求を定期的にポーリングしその通信要求に従って動作したりする必要があるかもしれない． げきぁ通信メカ
ニズムを利用すると，グローバル計算や明示的なポーリングの必要性を避けることができる．この一般的な例はぁ 〽 あ〨ねちば〩という形式の代入の実行である．ここで，ねちばは置換ベクトルであり，ぁ，あ，およびねちばは同一の方法で分散されている場合である．
メッセージ通信では， 送信側から受信側へのデータの通信， 送信側と受信側の同期という〲つの効果を達成する．げきぁ設計はこれらの〲つの関数を分離する．通信呼び出しとして，きぐぉたぐさご（リモート書き込み），きぐぉたぇぅご（リモート読み取り），およびきぐぉたぁぃぃさきさがぁごぅ（リモート更新）という〳種類が用意されている．同期のタイプに応じて，多数の同期呼び出しも用意されている．設計は疎結合メモリシステムのものと同様で，ユーザが同期呼び出しを使用してメモリアクセスの正しい順序を指定する必要があり，効率化のため，同期呼び出しが発生するまで実装は通信操作を遅延させることができる．
げきぁ関数の設計を利用することにより，一貫性のある共有メモリもしくは一貫性の
〳〴〷

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信

〳〴〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

ない共有メモリ，いきぁエンジン，ハードウェアでサポートされるプット／ゲット操作，
通信コプロセッサなど，多くの点で実装者は各種プラットフォームで提供される高速通
信メカニズムを利用することができる．最もよく使用されるげきぁ通信メカニズムをメッ
セージ通信の上位に階層化することができる．しかし，分散メモリ環境において，一部のげきぁ関数では非同期通信エージェント（ハンドラ，スレッドなど）をサポートする必要がある．
ここでは呼び出しを行うプロセスのことをオリジンと呼び，メモリにアクセスするプ
ロセスのことをターゲットと呼ぶ．そのため，プット操作では，送信元〽オリジン，送信先〽ターゲットとなり，ゲット操作では，送信元〽ターゲット，送信先〽オリジンとな
る．

〱〳
〱〴
〱〵

11.2 初期化

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

11.2.1 ウィンドウの生成
この初期化操作を使用すると，グループ内コミュニケータのグループ内の各プロセス
が，リモートプロセスによるアクセスを許可したメモリの「ウィンドウ」を指定することができる．この初期化操作は集団操作である．ある関連呼び出しでは，ウィンドウの集合を所有しかつそれにアクセスするプロセスのグループを表現する不可視オブジェク
トを返す．別の呼び出しは，初期化呼び出しで指定されたのと同じ各ウィンドウの属性
を返す．

〲〶
〲〷
〲〸
〲〹

きぐぉたしぉぎたぃげぅぁごぅ〨ぢちびづ〬 びどぺづ〬 つどびばたふのどぴ〬 どのては〬 っはねね〬 ぷどの〩
ぉぎ
ぉぎ

〳〰
〳〱

ぉぎ

ぢちびづ
びどぺづ
つどびばたふのどぴ

ウィンドウの先頭アドレス（選択型）

どのては
っはねね
ぷどの

どのては引数（ハンドル）

ウィンドウのサイズ（バイト単位）（非負の整数型）
変位のローカルユニットサイズ（バイト単位）（正
の整数型）

〳〲
〳〳

ぉぎ

〳〴

ぉぎ

〳〵

くさご

〳〶

コミュニケータ（ハンドル）
呼び出しによって返されるウィンドウオブジェクト（ハンドル）

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたしどのたっひづちぴづ〨ぶはどつ 〪ぢちびづ〬 きぐぉたぁどのぴ びどぺづ〬 どのぴ つどびばたふのどぴ〬 きぐぉたぉのては どのては〬きぐぉたぃはねね っはねね〬 きぐぉたしどの 〪ぷどの〩
きぐぉたしぉぎたぃげぅぁごぅ〨あぁこぅ〬 こぉずぅ〬 いぉこぐたさぎぉご〬 ぉぎうく〬 ぃくきき〬 しぉぎ〬 ぉぅげげくげ〩〼ぴべばづ〾 あぁこぅ〨〪〩ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 こぉずぅぉぎごぅぇぅげ いぉこぐたさぎぉご〬 ぉぎうく〬 ぃくきき〬 しぉぎ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺しどの きぐぉ〺〺しどの〺〺ぃひづちぴづ〨っはのびぴ ぶはどつ〪 ぢちびづ〬 きぐぉ〺〺ぁどのぴ びどぺづ〬 どのぴ
つどびばたふのどぴ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〬 っはのびぴ きぐぉ〺〺ぉのぴひちっはねね〦 っはねね〩（廃止された呼び出し形式, 第15.2節を参照）}
これはっはねねのグループ内の全てのプロセスによって実行される集団呼び出しである．
げきぁ操作を実行するためにこれらのプロセスで使用できるウィンドウオブジェクトを返〱〱〮〲〮 初期化〳〴〹

す．各プロセスは，っはねねのグループ内のプロセスによるげきぁアクセス用にエクスポー
ズする既存メモリのウィンドウを指定する．ウィンドウはアドレスぢちびづで始まるびどぺづバイ
トで構成される．びどぺづ 〽 〰を指定することにより，プロセスはメモリをエクスポーズしないことを選択してよい．
変位ユニット引数はげきぁ操作でのアドレス演算を容易にするために用意されている．
げきぁ操作のターゲットの変位引数はつどびばたふのどぴ倍される．ここでつどびばたふのどぴは，ターゲット
プロセスによってウィンドウ生成時に指定された係数つどびばたふのどぴである．

〱
〲
〳
〴
〵
〶
〷
〸
〹

根拠 ウィンドウのサイズは，〴ぇあを超えるアドレス空間のウィンドウが格納できるように，アドレスサイズの整数型を使用して指定する（物理的なメモリサイズ
が〴ぇあ未満の場合でもアドレスが連続していない場合，アドレスの範囲は〴ぇあを超えることがある）． （根拠の終わり）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

ユーザへのアドバイス 型ぴべばづが要素の配列で構成されるウィンドウの場合，
つどびばたふのどぴに対するよくみられる選択肢は〱（スケーリングなし）と，（ぃ言語の構
文 で）びどぺづはて〨ぴべばづ〩と で あ る． 後 者 の 選 択 肢 の 場 合，異 機 種 環 境 に お い て も，
げきぁ呼び出しで配列の添字を使用し，バイトの変位に正しくスケールさせることができる． （ユーザへのアドバイス終わり）
どのては引数は，そのウィンドウの期待される利用パターンについての最適化のヒントを，ランタイムに対し提供する．以下のどのてはキーが定義済みである．
のはたぬはっにび ぼ ぴひふづに設定すると，ローカルウィンドウが（きぐぉたしぉぎたがくぃかの呼び出しを使って）ロックされることはないと，実装は仮定してよい．これは次のことを意味する．つまりこのウィンドウは〳者間通信に使われることはなく，非同期エージェン
トの動作なしに（あるいは動作を削減して），げきぁを実装することができる．

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

っはねねグループの様々なプロセスで，領域，サイズ，変位ユニット，およびどのては引数のまったく異なる対象ウィンドウを指定することができる．特定のプロセスへの全てのゲット，プット，およびアキュムレートアクセスが特定の対象ウィンドウに適合している
限り，問題はない．メモリ内の同じ領域がそれぞれ異なるウィンドウオブジェクトに関連付けられ，複数のウィンドウに提示されることがある．しかし，別々であるが，重複するウィンドウへの同時並行的な通信は誤った結果を導くことがある．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

ユーザへのアドバイス ウィンドウはプロセスメモリの任意の部分で生成することができる．しかし，システムによっては，きぐぉたぁががくぃたきぅき（〲〸〴ページの第〸〮〲節を参照）によって割り当てた方がメモリ内のウィンドウの性能が高くなる．また，システムによっては，ウィンドウの境界を「自然な」境界（ワード，ダブルワー
ド，キャッシュライン，ページフレームなど）に合わせると性能が向上する． （ユーザへのアドバイス終わり）

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

実装者へのアドバイス げきぁ操作でメモリ領域ごとに異なるメカニズムを使用する場合（例えば，共有メモリセグメントにはロード／ストア，プライベート〴〷〴〸

第 〱〱〮 片方向通信

〳〵〰
〱
〲
〳
〴
〵
〶
〷
〸

メモリには非同期ハンドラのように）， きぐぉたしぉぎたぃげぅぁごぅ呼び出しではウィンド ウ で 使 用 す る メ モ リ の タ イ プ を 特 定 す る 必 要 が あ る． こ の た め に，きぐぉは，
きぐぉたぁががくぃたきぅきまたは他の実装固有のメカニズムによって割り当てられるメモ
リセグメントのリストを，割り当てられたメモリセグメントのタイプに関する情報と一緒に内部管理する．きぐぉたしぉぎたぃげぅぁごぅの呼び出し時に，きぐぉは，どのメモ
リセグメントがそれぞれのウィンドウを包含しているかを検査し，それに基づいてげきぁ操作に使用すべきメカニズムを決定する．

〹
〱〰
〱〱
〱〲

ベンダーは，片方向通信での使用に適したメモリ領域を割り当てたり，特定したりするための実装固有のメカニズムを追加してよい．特に，このようなメカニズム
は，静的変数をこのような望ましい領域に配置するのに使用できる．

〱〳
〱〴
〱〵

実装者はウィンドウのアライメントに関して性能上の影響を明文化する必要があ
る． （実装者へのアドバイス終わり）

〱〶
〱〷
〱〸

きぐぉたしぉぎたうげぅぅ〨ぷどの〩

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

ぉぎくさご

ぷどの

ウィンドウオブジェクト（ハンドル）

どのぴ きぐぉたしどのたてひづづ〨きぐぉたしどの 〪ぷどの〩
きぐぉたしぉぎたうげぅぅ〨しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
ウィンドウオブジェクトぷどのを解放し，のふぬぬハンドル（きぐぉたしぉぎたぎさががと等しい）を返す． こ れ は，ぷどのに関連付け ら れた グ ル ープ 内の全て の プロ セ ス に よっ て実行され る 集 団 呼 び 出 し で あ る． プ ロ セ ス が ウ ィ ン ド ウぷどの上 のげきぁ通 信 へ の 関 与 を 完 了した後でしか，きぐぉたしぉぎたうげぅぅ〨ぷどの〩を呼び出すことはできない． つまり，プロセスがきぐぉたしぉぎたうぅぎぃぅを呼び出したか，前のきぐぉたしぉぎたぐくこごの呼び出しにマッチする
きぐぉたしぉぎたしぁぉごを呼び出したか，前のきぐぉたしぉぎたこごぁげごの呼び出しにマッチする
きぐぉたしぉぎたぃくきぐがぅごぅを呼び出したか，前のきぐぉたしぉぎたがくぃかの呼び出しにマッチする
きぐぉたしぉぎたさぎがくぃかを呼び出した後となる．呼び出しが戻った時点で，ウィンドウメモ
リを解放することができる．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

実装者へのアドバイス きぐぉたしぉぎたうげぅぅはバリア同期を要求する．つまり，ぷどののグループ内の全てのプロセスが解放を呼び出すまで，どのプロセスも解放から復帰
しない可能性がある．これにより，ウィンドウの解放後にプロセスがリモートウィ
ンドウに（例えば，ぬはっに〯ふのぬはっににより）アクセスしないようにすることができる．
（実装者へのアドバイス終わり）〴〳〴〴

11.2.2 ウィンドウの属性

〴〵
〴〶
〴〷
〴〸

ウィンドウの生成時に，ウィンドウと一緒に以下の〳つの属性がキャッシングされる．

〱〱〮〳〮 通信呼び出し
きぐぉたしぉぎたあぁこぅ
きぐぉたしぉぎたこぉずぅ
きぐぉたしぉぎたいぉこぐたさぎぉご〳〵〱
ウィンドウのベースアドレス
ウィンドウのサイズ（バイト単位）
ウィンドウに関連付けられている変位ユニット

〱
〲
〳
〴

ぃ言語では，
きぐぉたしどのたでづぴたちぴぴひ〨ぷどの〬 きぐぉたしぉぎたあぁこぅ〬 〦ぢちびづ〬 〦」ちで〩 ，きぐぉたしどのたでづぴたちぴぴひ〨ぷどの〬 きぐぉたしぉぎたこぉずぅ〬 〦びどぺづ〬 〦」ちで〩 ，および
きぐぉたしどのたでづぴたちぴぴひ〨ぷどの〬 きぐぉたしぉぎたいぉこぐたさぎぉご〬 〦つどびばたふのどぴ〬 〦」ちで〩の呼び出しでそれぞれ，ぢちびづにウィンドウぷどのの開始点のポインタが返され，びどぺづおよ
びつどびばたふのどぴのポインタの指す場所に，そのウィンドウのサイズと変位ユニットが返される．ぃ〫〫言語でも同様である．
うはひぴひちの言語では，
きぐぉたしぉぎたぇぅごたぁごごげ〨ぷどの〬 きぐぉたしぉぎたあぁこぅ〬 ぢちびづ〬 」ちで〬 どづひひはひ〩 ，きぐぉたしぉぎたぇぅごたぁごごげ〨ぷどの〬 きぐぉたしぉぎたこぉずぅ〬 びどぺづ〬 」ちで〬 どづひひはひ〩 ，および
きぐぉたしぉぎたぇぅごたぁごごげ〨ぷどの〬 きぐぉたしぉぎたいぉこぐたさぎぉご〬 つどびばたふのどぴ〬 」ちで〬 どづひひはひ〩の呼び出しでぢちびづ，びどぺづ，およびつどびばたふのどぴにそれぞれウィンドウぷどののベースアドレス（の整数型表現），サイズ，および変位ユニットが返される．（ウィンドウ属性のアクセス関
数については，〲〴〱ページの第〶〮〷〮〳節で定義する．）
その他の「ウィンドウ属性」，つまりウィンドウに結びつけられたプロセスのグループ
は以下の呼び出しを使用して取得することができる．

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

きぐぉたしぉぎたぇぅごたぇげくさぐ〨ぷどの〬 でひはふば〩
ぉぎ
くさご

ぷどの
でひはふば

〲〶

ウィンドウオブジェクト（ハンドル）
ウィンドウへのアクセスを共有するプロセスのグループ（ハンドル）

〲〷
〲〸
〲〹
〳〰

どのぴ きぐぉたしどのたでづぴたでひはふば〨きぐぉたしどの ぷどの〬 きぐぉたぇひはふば 〪でひはふば〩
きぐぉたしぉぎたぇぅごたぇげくさぐ〨しぉぎ〬 ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぇげくさぐ〬 ぉぅげげくげ
{きぐぉ〺〺ぇひはふば きぐぉ〺〺しどの〺〺ぇづぴたでひはふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたしぉぎたぇぅごたぇげくさぐは，ぷどのに関連付けられたウィンドウを生成するのに使用されるコミュニケータのグループの複製を返す．グループはでひはふばに返される．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

11.3 通信呼び出し

〳〸
〳〹
〴〰

きぐぉは〳種類のげきぁ通信呼び出しをサポートしている．きぐぉたぐさごはデータを呼び出し
元のメモリ（オリジン）からターゲットのメモリに転送し，きぐぉたぇぅごはターゲットのメ
モリから呼び出し元のメモリにデータを転送し，きぐぉたぁぃぃさきさがぁごぅは，呼び出し元のメモリから送信された値をこれらの領域に追加するなど，ターゲットのメモリ内の領域の更新を行う．これらの操作はノンブロッキングで，呼び出しは転送を開始するが，呼び出しが戻った後も転送が継続されることがある．転送は，関与するウィンドウオブジ
ェクトに対して呼び出し元が後続の同期呼び出しを発行した時点で，オリジンとターゲ

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信

〳〵〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ットの両方で完了する．これらの同期呼び出しについては，〳〵〹ページの第〱〱〮〴節で説明する．
げきぁ呼び出しのローカル通信バッファは更新しないようにする必要があり，ゲット呼
び出しのローカル通信バッファはげきぁ呼び出しの後，後続の同期呼び出しが完了するまではアクセスしないようにする必要がある．
ウィンドウ内の同じメモリ領域への同時並行的な競合するアクセスは誤りである．例
えば，ある領域がプットまたはアキュムレート操作により更新された場合，ロードまたは別のげきぁ操作によるこの領域へのアクセスは，ターゲットで更新操作が完了するまではできない．この規則には〱つだけ例外があり，同じ領域は複数の同時並行的なアキュ
ムレート呼び出しによって更新できる．この場合の結果はまるで，ある順序でこれらの更新が起こったかのようになる．また，ウィンドウはプットまたはアキュムレート操作と，ローカルなストア操作により同時並行的に更新することはできない．これは，これらの〲つの更新がウィンドウ内の別の領域にアクセスする場合でも同様である．この最後の制限により，多くのシステムでより効率的なげきぁ操作の実装が可能になる．これらの制限については，〳〷〷ページの第〱〱〮〷節で詳しく説明する．
これらの呼び出しでは，オリジンとターゲットで通信バッファを指定するのに一般的なデータ型引数を使用する．そのため，転送操作は送信元でデータをギャザーし，送信
先でスキャッタすることもできる．しかし，両方の通信バッファを指定する全ての引数は呼び出し元で渡される．
これらの〳つの呼び出し全てで，ターゲットプロセスはオリジンプロセスと同じであってよい．つまり，そのプロセスのメモリ上のデータの移動にげきぁ操作を使ってよい．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

根拠 サポートする「自己通信」の選択は，メッセージ通信の場合と同様である．
これによりコードをシンプルにすることができ，アキュムレート操作で，ローカル変数に対するアトミックな更新を可能にするのに非常に便利である． （根拠の終
わり）

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

きぐぉたぐげくぃたぎさががはきぐぉ げきぁ呼び出しのきぐぉたぁぃぃさきさがぁごぅ，きぐぉたぇぅご，およびきぐぉたぐさごにおける有効なターゲットランクである． 効果はきぐぉの〱対〱通信のきぐぉたぐげくぃたぎさががの場合と同様である．ランクきぐぉたぐげくぃたぎさががをもつどんなげきぁ操作の後にも，それでもなお，そのアクセスエポックを開始した同期メソッドでアクセスエポ
ックを終わらせる必要がある．

〳〹〴〰

11.3.1 プット

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

プット操作の実行は，オリジンプロセスで送信を実行し，ターゲットプロセスでそれにマッチする受信を実行するのに似ている．明らかな違いは，全ての引数が〱つの呼び出
しで渡され，その呼び出しはオリジンプロセスによって実行される点である．

〱〱〮〳〮 通信呼び出し〳〵〳

きぐぉたぐさご〨はひどでどのたちつつひ〬 はひどでどのたっはふのぴ〬 はひどでどのたつちぴちぴべばづ〬 ぴちひでづぴたひちのに〬 ぴちひでづぴたつどびば〬 ぴちひでづぴたっはふのぴ〬
ぴちひでづぴたつちぴちぴべばづ〬 ぷどの〩〱〲はひどでどのたちつつひはひどでどのたっはふのぴ
はひどでどのたつちぴちぴべばづ

オリジンバッファの先頭アドレス（選択型）〳

オリジンバッファのエントリの数（非負の整数型）〴

ターゲットのランク（非負の整数型）

ぉぎ

ぴちひでづぴたひちのに
ぴちひでづぴたつどびばぉぎ

ぴちひでづぴたっはふのぴ

ターゲットバッファのエントリの数（非負の整数型）

ぉぎ

ぴちひでづぴたつちぴちぴべばづ

ターゲットバッファの各エントリのデータ型（ハン
ドル）

ぉぎ
ぉぎ
ぉぎ
ぉぎ

ぉぎ

ぷどの

オリジンバッファの各エントリのデータ型（ハンドル）ウィンドウの先頭からターゲットバッファまでの変位（非負の整数型）

通信に使用するウィンドウオブジェクト（ハンドル）

どのぴ きぐぉたぐふぴ〨ぶはどつ 〪はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 きぐぉたいちぴちぴべばづ
はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 きぐぉたぁどのぴ ぴちひでづぴたつどびば〬 どのぴ ぴちひでづぴたっはふのぴ〬
きぐぉたいちぴちぴべばづ ぴちひでづぴたつちぴちぴべばづ〬 きぐぉたしどの ぷどの〩
きぐぉたぐさご〨くげぉぇぉぎたぁいいげ〬 くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬
ごぁげぇぅごたいぉこぐ〬 ごぁげぇぅごたぃくさぎご〬 ごぁげぇぅごたいぁごぁごすぐぅ〬 しぉぎ〬 ぉぅげげくげ〩〼ぴべばづ〾 くげぉぇぉぎたぁいいげ〨〪〩ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ごぁげぇぅごたいぉこぐぉぎごぅぇぅげ くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬 ごぁげぇぅごたぃくさぎご〬
ごぁげぇぅごたいぁごぁごすぐぅ〬 しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺ぐふぴ〨っはのびぴ ぶはどつ〪 はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 きぐぉ〺〺ぁどのぴ
ぴちひでづぴたつどびば〬 どのぴ ぴちひでづぴたっはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦
ぴちひでづぴたつちぴちぴべばづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
オリジンプロセス1 のアドレスはひどでどのたちつつひ で始まる，はひどでどのたつちぴちぴべばづで指定された型のはひどでどのたっはふのぴ個の連続するエントリをぷどの，ぴちひでづぴたひちのにのペアで指定されたターゲットプ
ロセス2 に転送する．データはターゲットバッファのアドレスぴちひでづぴたちつつひ 〽 ぷどのつはぷたぢちびづ〫 ぴちひでづぴたつどびば×つどびばたふのどぴに書き込まれる．ここで，ぷどのつはぷたぢちびづとつどびばたふのどぴはウィンドウの初期化時にターゲットプロセスによって指定されたベースアドレスとウィンドウの変位ユニットである．
ターゲットバッファは引数ぴちひでづぴたっはふのぴとぴちひでづぴたつちぴちぴべばづによって指定される．
データ転送は，オリジンプロセスが引数 はひどでどのたちつつひ，はひどでどのたっはふのぴ，はひどでどのたつちぴちぴべばづ，
ぴちひでづぴたひちのに， ぴちで， お よ びっはねねに よ り 送 信 操 作 を 実 行 し， タ ー ゲ ッ ト プ ロ セ ス が 引
数ぴちひでづぴたちつつひ，ぴちひでづぴたっはふのぴ，ぴちひでづぴたつちぴちぴべばづ，びはふひっづ，ぴちで，っはねねにより受信操作を実行した場合に行われる処理と同じである．ぴちひでづぴたちつつひは上記のように算出したターゲット
バッファのアドレスで，っはねねはぷどののグループのコミュニケータである．
この通信についても，類似のメッセージ通信と同じ制限に従う必要がある．
ぴちひでづぴたつちぴちぴべばづではターゲットバッファの重複するエントリを指定できない．送信される〱〲

訳者註：原文 origin node
訳者註：原文 target node

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〵〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

第 〱〱〮 片方向通信

メッセージは，切り詰めることなくターゲットバッファに収まらなければならない．さらに，ターゲットバッファは対象ウィンドウにも適合する必要がある．
ぴちひでづぴたつちぴちぴべばづ引数は，オリジンプロセスで定義されたデータ型オブジェクトのハンドルである．しかし，このオブジェクトはターゲットプロセスで解釈され，結果は，オリジンプロセスで定義に使用した呼び出しと同じ順序により，ターゲットのデータ型オ
ブジェクトがターゲットプロセスで定義されたのと同様になる．ターゲットのデータ型に格納されるのは，絶対アドレスではなく，相対変位のみでなければならない．ゲット
およびアキュムレート操作の場合も，これと同様である．
ユーザへのアドバイス ぴちひでづぴたつちぴちぴべばづ引数はターゲットプロセスのメモリ内のデー
タのレイアウトを定義するものではあるが，オリジンプロセスで定義されたデータ型オブジェクトのハンドルである．可搬なデータ型のみを使用すれば（可搬なデー
タ型については，〱〳ページの第〲〮〴節で定義），同一機種環境でも異機種環境でも問題は起こらない．
プット転送の性能は，ウィンドウの領域や，オリジンバッファおよびターゲットバ
ッファの形状と領域の選択により，システムによっては大きな影響を受けることがある．例えば，きぐぉたぁががくぃたきぅきによって割り当てられたメモリ内の対象ウィン
ドウへの転送は共有メモリシステムの方が速かったり，連続バッファからの転送が（全部ではないにしても）大部分のシステムで速かったり，通信バッファのアライ
メントが性能に影響したりすることもある． （ユーザへのアドバイス終わり）

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス 高品質な実装では，そのプロセスによってエクスポーズされたウィンドウの外側のメモリへのリモートアクセスを防ごうとする．これはデバッグ面，およびげきぁを使用するクライアント／サーバのコードに対する保護面の両方の目的をもつ．このような高品質な実装では，できるだけ各げきぁ呼び出し時にウィンドウの境界をチェックし，境界違反が見つかった場合，呼び出し元できぐぉ例
外を発生させる．つまり，オリジンでこの例外条件をチェックすることが可能であることに注意すること．もちろん，こうしたチェックで達成される安全性は，そのチェックのための追加コストと比較検討されなければならない． （実装者へのア
ドバイス終わり）〱〱〮〳〮 通信呼び出し〳〵〵

11.3.2 ゲット〱〲〳

きぐぉたぇぅご〨はひどでどのたちつつひ〬 はひどでどのたっはふのぴ〬 はひどでどのたつちぴちぴべばづ〬 ぴちひでづぴたひちのに〬 ぴちひでづぴたつどびば〬 ぴちひでづぴたっはふのぴ〬
ぴちひでづぴたつちぴちぴべばづ〬 ぷどの〩〴〵はひどでどのたちつつひはひどでどのたっはふのぴ
はひどでどのたつちぴちぴべばづ

オリジンバッファの先頭アドレス（選択型）〶

オリジンバッファのエントリの数（非負の整数型）〷

ターゲットのランク（非負の整数型）

ぉぎ

ぴちひでづぴたひちのに
ぴちひでづぴたつどびばぉぎ

ぴちひでづぴたっはふのぴ

ターゲットバッファのエントリの数（非負の整数型）

ぉぎ

ぴちひでづぴたつちぴちぴべばづ

ターゲットバッファの各エントリのデータ型（ハン
ドル）

ぉぎ

ぷどの

通信に使用するウィンドウオブジェクト（ハンド
ル）

くさご
ぉぎ
ぉぎ

オリジンバッファの各エントリのデータ型（ハンド
ル）

〸
〹
〱〰

ぉぎ

ウィンドウの先頭からターゲットバッファの先頭までの変位（非負の整数型）

どのぴ きぐぉたぇづぴ〨ぶはどつ 〪はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 きぐぉたいちぴちぴべばづ
はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 きぐぉたぁどのぴ ぴちひでづぴたつどびば〬 どのぴ ぴちひでづぴたっはふのぴ〬
きぐぉたいちぴちぴべばづ ぴちひでづぴたつちぴちぴべばづ〬 きぐぉたしどの ぷどの〩
きぐぉたぇぅご〨くげぉぇぉぎたぁいいげ〬 くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬
ごぁげぇぅごたいぉこぐ〬 ごぁげぇぅごたぃくさぎご〬 ごぁげぇぅごたいぁごぁごすぐぅ〬 しぉぎ〬 ぉぅげげくげ〩〼ぴべばづ〾 くげぉぇぉぎたぁいいげ〨〪〩ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ごぁげぇぅごたいぉこぐぉぎごぅぇぅげ くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬 ごぁげぇぅごたぃくさぎご〬
ごぁげぇぅごたいぁごぁごすぐぅ〬 しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺ぇづぴ〨ぶはどつ 〪はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 きぐぉ〺〺ぁどのぴ
ぴちひでづぴたつどびば〬 どのぴ ぴちひでづぴたっはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦
ぴちひでづぴたつちぴちぴべばづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたぐさごと同様であるが，データ転送の方向が逆である．データはターゲットのメモ
リからオリジンのメモリにコピーされる．はひどでどのたつちぴちぴべばづではオリジンバッファの重複するエントリを指定できない．ターゲットバッファは対象ウィンドウ内からはみ出してはならないし，コピーされるデータは切り詰めることなくオリジンバッファに収まらなけ
ればならない．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

11.3.3 例〳〹

例 11.1 一 般 的 な 間 接 的 な 代 入ぁ 〽 あ〨ねちば〩の 実 装 方 法 を 示 す． こ こ で，ぁ，あ，お よ
びねちばは同一方法で分散され，ねちばは置換である．簡単化のため，ここでは等サイズのブロックによるブロック分割を仮定する．

〴〱

こさあげくさごぉぎぅ きぁぐざぁがこ〨ぁ〬 あ〬 ねちば〬 ね〬 っはねね〬 ば〩
さこぅ きぐぉ
ぉぎごぅぇぅげ ね〬 ねちば〨ね〩〬 っはねね〬 ばげぅぁが ぁ〨ね〩〬 あ〨ね〩

〴〰

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〵〶

第 〱〱〮 片方向通信

〱
〲
〳
〴
〵

ぉぎごぅぇぅげ はぴべばづ〨ば〩〬 はどのつづへ〨ね〩〬〦 〡 ふびづつ ぴは っはのびぴひふっぴ はひどでどの つちぴちぴべばづび
ぴぴべばづ〨ば〩〬 ぴどのつづへ〨ね〩〬〦 〡 ふびづつ ぴは っはのびぴひふっぴ ぴちひでづぴ つちぴちぴべばづび
っはふのぴ〨ば〩〬 ぴはぴちぬ〨ば〩〬〦
ぷどの〬 どづひひぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぬはぷづひぢはふのつ〬 びどぺづはてひづちぬ

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

〡 ごとどび ばちひぴ つはづび ぴとづ ぷはひに ぴとちぴ つづばづのつび はの ぴとづ ぬはっちぴどはのび はて あ〮〡 ぃちの ぢづ ひづふびづつ ぷとどぬづ ぴとどび つはづび のはぴ っとちのでづぃぁがが きぐぉたごすぐぅたぇぅごたぅじごぅぎご〨きぐぉたげぅぁが〬 ぬはぷづひぢはふのつ〬 びどぺづはてひづちぬ〬 どづひひ〩
ぃぁがが きぐぉたしぉぎたぃげぅぁごぅ〨あ〬 ね〪びどぺづはてひづちぬ〬 びどぺづはてひづちぬ〬 きぐぉたぉぎうくたぎさがが〬っはねね〬 ぷどの〬 どづひひ〩〦〡 ごとどび ばちひぴ つはづび ぴとづ ぷはひに ぴとちぴ つづばづのつび はの ぴとづ ぶちぬふづ はて ねちば ちのつ〡 ぴとづ ぬはっちぴどはのび はて ぴとづ ちひひちべび〮〡 ぃちの ぢづ ひづふびづつ ぷとどぬづ ぴとづびづ つは のはぴ っとちのでづ

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

〡 ぃはねばふぴづ のふねぢづひ はて づのぴひどづび ぴは ぢづ ひづっづどぶづつ てひはね づちっと ばひはっづびび
いく ど〽〱〬ばっはふのぴ〨ど〩 〽 〰
ぅぎい いくいく ど〽〱〬ねな 〽 ねちば〨ど〩〯ね〫〱
っはふのぴ〨な〩 〽 っはふのぴ〨な〩〫〱ぅぎい いく

〲〳
〲〴
〲〵
〲〶

ぴはぴちぬ〨〱〩 〽 〰
いく ど〽〲〬ば
ぴはぴちぬ〨ど〩 〽 ぴはぴちぬ〨ど〭〱〩 〫 っはふのぴ〨ど〭〱〩ぅぎい いく〲〷〲〸〲〹いく ど〽〱〬ばっはふのぴ〨ど〩 〽 〰
ぅぎい いく

〳〰
〳〱
〳〲
〳〳

〡 っはねばふぴづ はひどでどの ちのつ ぴちひでづぴ どのつどっづび はて づのぴひどづび〮〡 づのぴひべ ど ちぴ っふひひづのぴ ばひはっづびび どび ひづっづどぶづつ てひはね ぬはっちぴどはの〡 に ちぴ ばひはっづびび 〨な〭〱〩〬 ぷとづひづ ねちば〨ど〩 〽 〨な〭〱〩〪ね 〫 〨に〭〱〩〬〡 な 〽 〱〮〮ば ちのつ に 〽 〱〮〮ね

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

いく ど〽〱〬ねな 〽 ねちば〨ど〩〯ね〫〱に 〽 きくい〨ねちば〨ど〩〬ね〩〫〱
っはふのぴ〨な〩 〽 っはふのぴ〨な〩〫〱はどのつづへ〨ぴはぴちぬ〨な〩 〫 っはふのぴ〨な〩〩 〽 ど
ぴどのつづへ〨ぴはぴちぬ〨な〩 〫 っはふのぴ〨な〩〩 〽 にぅぎい いく〡 っひづちぴづ はひどでどの ちのつ ぴちひでづぴ つちぴちぴべばづび てはひ づちっと でづぴ はばづひちぴどはの
いく ど〽〱〬ばぃぁがが きぐぉたごすぐぅたぃげぅぁごぅたぉぎいぅじぅいたあがくぃか〨っはふのぴ〨ど〩〬 〱〬 はどのつづへ〨ぴはぴちぬ〨ど〩〫〱〩〬
きぐぉたげぅぁが〬 はぴべばづ〨ど〩〬 どづひひ〩
ぃぁがが きぐぉたごすぐぅたぃくききぉご〨はぴべばづ〨ど〩〬 どづひひ〩
ぃぁがが きぐぉたごすぐぅたぃげぅぁごぅたぉぎいぅじぅいたあがくぃか〨っはふのぴ〨ど〩〬 〱〬 ぴどのつづへ〨ぴはぴちぬ〨ど〩〫〱〩〬
きぐぉたげぅぁが〬 ぴぴべばづ〨ど〩〬 どづひひ〩
ぃぁがが きぐぉたごすぐぅたぃくききぉご〨ぴぴべばづ〨ど〩〬 どづひひ〩ぅぎい いく〦〦〱〱〮〳〮 通信呼び出し〳〵〷〱〡 ぴとどび ばちひぴ つはづび ぴとづ ちびびどでのねづのぴ どぴびづぬて
ぃぁがが きぐぉたしぉぎたうぅぎぃぅ〨〰〬 ぷどの〬 どづひひ〩
いく ど〽〱〬ばぃぁがが きぐぉたぇぅご〨ぁ〬 〱〬 はぴべばづ〨ど〩〬 ど〭〱〬 〰〬 〱〬 ぴぴべばづ〨ど〩〬 ぷどの〬 どづひひ〩ぅぎい いくぃぁがが きぐぉたしぉぎたうぅぎぃぅ〨〰〬 ぷどの〬 どづひひ〩

〲
〳
〴
〵
〶
〷

ぃぁがが きぐぉたしぉぎたうげぅぅ〨ぷどの〬 どづひひ〩
いく ど〽〱〬ばぃぁがが きぐぉたごすぐぅたうげぅぅ〨はぴべばづ〨ど〩〬 どづひひ〩
ぃぁがが きぐぉたごすぐぅたうげぅぅ〨ぴぴべばづ〨ど〩〬 どづひひ〩ぅぎい いくげぅごさげぎ
ぅぎい

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

例 11.2 よりシンプルな記述例では，ターゲットバッファ用にデータ型を作成する必要はない．しかし，以下のように，エントリごとに別のゲット呼び出しが必要となる．このコードは非常にシンプルであるが，通常は大きな配列ではあまり効率はよくない．
こさあげくさごぉぎぅ きぁぐざぁがこ〨ぁ〬 あ〬 ねちば〬 ね〬 っはねね〬 ば〩
さこぅ きぐぉ
ぉぎごぅぇぅげ ね〬 ねちば〨ね〩〬 っはねね〬 ばげぅぁが ぁ〨ね〩〬 あ〨ね〩ぉぎごぅぇぅげ ぷどの〬 どづひひぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぬはぷづひぢはふのつ〬 びどぺづはてひづちぬ

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ぃぁがが きぐぉたごすぐぅたぇぅごたぅじごぅぎご〨きぐぉたげぅぁが〬 ぬはぷづひぢはふのつ〬 びどぺづはてひづちぬ〬 どづひひ〩
ぃぁがが きぐぉたしぉぎたぃげぅぁごぅ〨あ〬 ね〪びどぺづはてひづちぬ〬 びどぺづはてひづちぬ〬 きぐぉたぉぎうくたぎさがが〬 〦っはねね〬 ぷどの〬 どづひひ〩

〲〶
〲〷
〲〸

ぃぁがが きぐぉたしぉぎたうぅぎぃぅ〨〰〬 ぷどの〬 どづひひ〩
いく ど〽〱〬ねな 〽 ねちば〨ど〩〯ねに 〽 きくい〨ねちば〨ど〩〬ね〩ぃぁがが きぐぉたぇぅご〨ぁ〨ど〩〬 〱〬 きぐぉたげぅぁが〬 な〬 に〬 〱〬 きぐぉたげぅぁが〬 ぷどの〬 どづひひ〩ぅぎい いくぃぁがが きぐぉたしぉぎたうぅぎぃぅ〨〰〬 ぷどの〬 どづひひ〩
ぃぁがが きぐぉたしぉぎたうげぅぅ〨ぷどの〬 どづひひ〩げぅごさげぎ
ぅぎい

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

11.3.4 アキュムレート関数〳〹〴〰

プット操作において，そこにあったデータを置き換えるのではなく，ターゲットプロ
セスに存在するデータと，ターゲットプロセスに転送するデータを計算して〱つにまとめた方が便利な場合がしばしばある．例えば，あるプロセスのメモリ内のびふね変数に，各プロセスの分担分を加算することにより，関与する全てのプロセスの累算〨ちっっふねふぬちぴどはの
はて ち びふね〩を可能にする．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信

〳〵〸
〱
〲
〳

きぐぉたぁぃぃさきさがぁごぅ〨はひどでどのたちつつひ〬 はひどでどのたっはふのぴ〬 はひどでどのたつちぴちぴべばづ〬 ぴちひでづぴたひちのに〬 ぴちひでづぴたつどびば〬 ぴちひ〭
でづぴたっはふのぴ〬 ぴちひでづぴたつちぴちぴべばづ〬 はば〬 ぷどの〩
バッファの先頭アドレス（選択型）

〷

ぉぎ

〸

ぉぎ

はひどでどのたちつつひはひどでどのたっはふのぴ
はひどでどのたつちぴちぴべばづ
ぴちひでづぴたひちのに
ぴちひでづぴたつどびばぉぎ

ぴちひでづぴたっはふのぴ

ターゲットバッファのエントリの数（非負の整数型）

ぉぎ

ぴちひでづぴたつちぴちぴべばづ

ターゲットバッファの各エントリのデータ型（ハン
ドル）

〱〴

ぉぎ
ぉぎ

はば
ぷどの

リデュース操作（ハンドル）

〱〵

〴

ぉぎ
ぉぎ

〵
〶

ぉぎ

〹
〱〰
〱〱
〱〲
〱〳

バッファのエントリの数（非負の整数型）
バッファの各エントリのデータ型（ハンドル）
ターゲットのランク（非負の整数型）
ウィンドウの先頭からターゲットバッファの先頭までの変位（非負の整数型）

ウィンドウオブジェクト（ハンドル）

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

どのぴ きぐぉたぁっっふねふぬちぴづ〨ぶはどつ 〪はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬
きぐぉたいちぴちぴべばづ はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 きぐぉたぁどのぴ ぴちひでづぴたつどびば〬
どのぴ ぴちひでづぴたっはふのぴ〬 きぐぉたいちぴちぴべばづ ぴちひでづぴたつちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたしどの ぷどの〩
きぐぉたぁぃぃさきさがぁごぅ〨くげぉぇぉぎたぁいいげ〬 くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬
ごぁげぇぅごたいぉこぐ〬 ごぁげぇぅごたぃくさぎご〬 ごぁげぇぅごたいぁごぁごすぐぅ〬 くぐ〬 しぉぎ〬 ぉぅげげくげ〩〼ぴべばづ〾 くげぉぇぉぎたぁいいげ〨〪〩ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ごぁげぇぅごたいぉこぐぉぎごぅぇぅげ くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬ごぁげぇぅごたげぁぎか〬 ごぁげぇぅごたぃくさぎご〬
ごぁげぇぅごたいぁごぁごすぐぅ〬 くぐ〬 しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺ぁっっふねふぬちぴづ〨っはのびぴ ぶはどつ〪 はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 っはのびぴ
きぐぉ〺〺いちぴちぴべばづ〦 はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 きぐぉ〺〺ぁどのぴ
ぴちひでづぴたつどびば〬 どのぴ ぴちひでづぴたっはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦
ぴちひでづぴたつちぴちぴべばづ〬 っはのびぴ きぐぉ〺〺くば〦 はば〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぁぃぃさきさがぁごぅは，操作はばを使って，オリジンバッファの内容をターゲットバ
ッファにアキュムレートする．ここで，オリジンバッファははひどでどのたちつつひ，はひどでどのたっはふのぴ，
お よ びはひどでどのたつちぴちぴべばづに よ っ て 定 義 さ れ る バ ッ フ ァ で あ り，タ ー ゲ ッ ト バ ッ フ ァ は，
ぴちひでづぴたひちのにおよびぷどので指定される対象ウィンドウの中のオフセットぴちひでづぴたつどびばの位置にある，引数ぴちひでづぴたっはふのぴおよびぴちひでづぴたつちぴちぴべばづで指定されるバッファである．
きぐぉたぁぃぃさきさがぁごぅは きぐぉたぐさごに似ているが，転送したデータでターゲット領域を上書きする代わりに，ターゲット領域と転送データとを計算してターゲット領域に〱つにまとめる点が異なる．
この関数は，きぐぉたげぅいさぃぅで使えるどの定義済みの操作も使うことができる． ユー
ザ定義の関数は使用できない．例えば，はばがきぐぉたこさきの場合，オリジンバッファの各要
素がターゲットバッファの対応する要素に加算され，ターゲットの以前の値は置換される．
はひどでどのたつちぴちぴべばづおよびぴちひでづぴたつちぴちぴべばづ引数は定義済みのデータ型または派生データ型でなければならない．また，派生データ型の全ての基本となるデータ型は同じ定義済みのデータ型でなければならない．両方のつちぴちぴべばづ引数は，同じ定義済みのデータ型から構成する必要がある．操作はばはその定義済みの型の要素に適用される．ぴちひでづぴたつちぴちぴべばづには〱〱〮〴〮 同期呼び出し〳〵〹

重複するエントリを指定してはならず，ターゲットバッファは対象ウィンドウに収まらなければならない．
新しい定義済みの操作きぐぉたげぅぐがぁぃぅが定義される．これは結合的な関数 f 〨a, b〩 〽 b に対応する．つまり，ターゲットメモリ内の現在の値はオリジンによって指定された値に置換される．
きぐぉたげぅぐがぁぃぅはきぐぉたぁぃぃさきさがぁごぅでのみ使用でき，きぐぉたげぅいさぃぅなどの集団リダク
ション操作では使用できない．

〱
〲
〳
〴
〵
〶
〷
〸
〹

ユーザへのアドバイス きぐぉたぐさごは操作きぐぉたげぅぐがぁぃぅを指定した
きぐぉたぁぃぃさきさがぁごぅの特別なケースと考えることができる．しかし，きぐぉたぐさごと
きぐぉたぁぃぃさきさがぁごぅとでは同時並行的な更新に関して異なる制約があることに注意すること． （ユーザへのアドバイス終わり）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

例 11.3 あ〨な〩 〽 map(i)=j ぁ〨ど〩を計算する．配列ぁ，あ，およびねちばは同一方法で分散されているとする．ここではシンプルなコードを記述する．
P

〱〶
〱〷
〱〸

こさあげくさごぉぎぅ こさき〨ぁ〬 あ〬 ねちば〬 ね〬 っはねね〬 ば〩
さこぅ きぐぉ
ぉぎごぅぇぅげ ね〬 ねちば〨ね〩〬 っはねね〬 ば〬 ぷどの〬 どづひひげぅぁが ぁ〨ね〩〬 あ〨ね〩ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぬはぷづひぢはふのつ〬 びどぺづはてひづちぬ

〱〹
〲〰
〲〱
〲〲
〲〳

ぃぁがが きぐぉたごすぐぅたぇぅごたぅじごぅぎご〨きぐぉたげぅぁが〬 ぬはぷづひぢはふのつ〬 びどぺづはてひづちぬ〬 どづひひ〩
ぃぁがが きぐぉたしぉぎたぃげぅぁごぅ〨あ〬 ね〪びどぺづはてひづちぬ〬 びどぺづはてひづちぬ〬 きぐぉたぉぎうくたぎさがが〬 〦っはねね〬 ぷどの〬 どづひひ〩

〲〴
〲〵
〲〶

ぃぁがが きぐぉたしぉぎたうぅぎぃぅ〨〰〬 ぷどの〬 どづひひ〩
いく ど〽〱〬ねな 〽 ねちば〨ど〩〯ねに 〽 きくい〨ねちば〨ど〩〬ね〩ぃぁがが きぐぉたぁぃぃさきさがぁごぅ〨ぁ〨ど〩〬 〱〬 きぐぉたげぅぁが〬 な〬 に〬 〱〬 きぐぉたげぅぁが〬
きぐぉたこさき〬 ぷどの〬 どづひひ〩ぅぎい いくぃぁがが きぐぉたしぉぎたうぅぎぃぅ〨〰〬 ぷどの〬 どづひひ〩

〲〷
〲〸
〲〹

〦

〳〰
〳〱
〳〲
〳〳

ぃぁがが きぐぉたしぉぎたうげぅぅ〨ぷどの〬 どづひひ〩げぅごさげぎぅぎい〳〴

このコードは〳〵〷ページの例〱〱〮〲のコードと基本的に同じであるが，ここではゲットの呼び出しがアキュムレートの呼び出しに置換されている．（ねちば が〱対〱の場合，コードは
あ 〽 ぁ〨ねちば−1 〩 を計算する．これは前の例での計算とは逆の代入である．）同様に，〳〵〵ページの例〱〱〮〱のゲットの呼び出しをアキュムレートの呼び出しに置換することにより，〲つのプロセス間で通信を〱回行うだけで計算を行うことができるようになる．

〳〷

〳〵
〳〶

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

11.4 同期呼び出し〴〵〴〶

げきぁ通信は以下の〲つのカテゴリに分類される．

〴〷
〴〸

〳〶〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

第 〱〱〮 片方向通信• アクティブターゲット通信：データがあるプロセスのメモリから別のプロセスのメ
モリに移動され，両方が明示的に通信に関与する．この通信のパターンはメッセー
ジ通信と同様であるが，ここではデータ転送引数は全て一方のプロセスによって渡され，他方のプロセスは同期に参加するのみである．
• パッシブターゲット通信：データがあるプロセスのメモリから別のプロセスのメモ
リに移動され，オリジンプロセスのみが明確に転送に関与する．そのため，〲つのオリジンプロセスが対象ウィンドウ内の同じ領域にアクセスすることにより，通信を行うことができる．対象ウィンドウを所有するプロセスは〲つの通信プロセスとは別であってもよく，この場合は明確に通信に参加しない．この通信パラダイムは共有メモリモデルに最も近く，共有データは領域に関係なく全てのプロセスからアクセスすることができる．

引数ぷどのを持つげきぁ通信呼び出しは，ぷどのがアクセスエポック区間にあるプロセス
でのみ行われなければならない． このようなアクセスエポックはぷどのでのげきぁ同期呼び出しで開始され，ぷどのでの〰個以上のげきぁ通信呼び出し（きぐぉたぐさご，きぐぉたぇぅご，またはきぐぉたぁぃぃさきさがぁごぅ）が行われ，ぷどのでの別の同期呼び出しで完了する．これにより，複数のデータ転送によって同期のオーバヘッドを〱回に抑えることができる．実装者はより高い自由度でげきぁ操作の実装を行うことができる．
同じプロセスのぷどのに対する個々のアクセスエポックは互いに重なり合ってはならな
い．それに対して，異なるぷどの引数に関するアクセスエポックは重なり合ってもよい．ア
クセスエポックの間，ローカル操作や他のきぐぉ呼び出しも行ってよい．
アクティブターゲット通信では，げきぁ操作による対象ウィンドウへのアクセスは，エクスポージャーエポックの間のみ行える．このようなエクスポージャーエポックは，ターゲットプロセスによって実行されるげきぁ同期呼び出しによって開始および完了する．
同じウィンドウのプロセスでの個々のエクスポージャーエポックは分割する必要がある
が，このようなエクスポージャーエポックは別のウィンドウのエクスポージャーエポッ
ク，あるいは同じまたは別のぷどの引数用のアクセスエポックと重複していてもよい．オリ
ジンプロセスのアクセスエポックとターゲットプロセスのエクスポージャーエポックの間には〱対〱の対応があり，対象ウィンドウに対してオリジンプロセスによって発行されたげきぁ操作は，同じアクセスエポックに発行された場合は（その場合に限り），同じエクスポージャーエポックにその対象ウィンドウにアクセスする．
パッシブターゲット通信では，ターゲットプロセスはげきぁ同期呼び出しを実行せず，
エクスポージャーエポックという概念はない．
きぐぉでは以下の〳つの同期メカニズムが用意されている．

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〮 きぐぉたしぉぎたうぅぎぃぅ集団的同期呼び出しは並列計算でよく使用されるシンプルな同期パターンをサポートする．つまり緩い同期モデルをサポートしており，ここではグローバルな計算フェーズがグローバルな通信フェーズと交互に発生する．このメカニズムは，通信プロセスのグラフが非常に頻繁に変化したり，各プロセスが他の多くのプロセスと通信したりする，緩い同期アルゴリズムにおいて最も便利である．

〱〱〮〴〮 同期呼び出し〳〶〱

この呼び出しはアクティブターゲット通信に使用される． オリジンプロセスの ア ク セ ス エ ポ ッ ク と タ ー ゲ ッ ト プ ロ セ ス の エ ク ス ポ ー ジ ャ ー エ ポ ッ ク は，きぐぉたしぉぎたうぅぎぃぅの呼び出しにより開始および終了する．プロセスはアクセスエポ
ックにぷどののグループの全てのプロセスのウィンドウにアクセスすることができ，
ローカルウィンドウには，エクスポージャーエポックにぷどののグループの全てのプ
ロセスがアクセスできる．

〱
〲
〳
〴
〵
〶
〷
〸

〲〮 〴つの関数きぐぉたしぉぎたこごぁげご，きぐぉたしぉぎたぃくきぐがぅごぅ，きぐぉたしぉぎたぐくこご，およびきぐぉたしぉぎたしぁぉごは，次のような場合，同期を最小限に抑えるのに使用できる．つまり，通信するプロセスのペアしか同期しない場合で，かつこれらのペアが同期す
るのが，そのウィンドウに対するローカルアクセスと，同じウィンドウへのげきぁア
クセスとを正確に順序づけする目的に限られる場合である．このメカニズムは，各プロセスがごく限られた（論理的）近傍プロセスとしか通信せず，通信グラフが固定かあまり変化しない場合に効率が向上する可能性がある．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

これらの呼び出しはアクティブターゲット通信に使用される．アクセスエポック
はオリジンプロセスできぐぉたしぉぎたこごぁげごの呼び出しにより開始され，きぐぉたしぉぎたぃくきぐがぅごぅの呼び出しにより終了する．スタート呼び出しは，そのア
クセスエポックのターゲットプロセスのグループを指定するでひはふば引数を備えている．エクスポージャーエポックはターゲットプロセスできぐぉたしぉぎたぐくこごの呼び出
しにより開始され，きぐぉたしぉぎたしぁぉごの呼び出しにより終了する．ポスト呼び出し
は，そのエクスポージャーエポックのオリジンプロセスの集合を指定するでひはふば引数を備えている．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

〳〮 最後に，共有ロックおよび排他ロックが，〲つの関数きぐぉたしぉぎたがくぃかおよび
きぐぉたしぉぎたさぎがくぃかで用意されている．ロック同期はきぐぉ呼び出しを介し共有メモ
リモデルを模倣するきぐぉアプリケーションで便利である．例えば，ぜぢどぬぬぢはちひつ〢モデ
ルの場合である．その場合，プロセスは不定回，ぢどぬぬぢはちひつの異なる部分にアクセスしたり更新したりすることができる．
これらの〲つの呼び出しはパッシブターゲット通信を備えている．アクセスエポッ
クはきぐぉたしぉぎたがくぃかの呼び出しにより開始され，きぐぉたしぉぎたさぎがくぃかの呼び出しにより終了する．ぷどののそのアクセスエポックの間，〱つの対象ウィンドウしかアクセスできない．

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

図〱〱〮〱に，アクティブターゲット通信の一般的な同期パターンを示す．
ばはびぴとびぴちひぴとの同期により，ターゲットプロセスが（ばはびぴ呼び出しにより）ウィ
ンドウをエクスポーズするまで，オリジンプロセスのプット呼び出しが開始しない
ことが保証される． また， ターゲットプロセスでのウィンドウのエクスポーズがウィンドウへのその前のローカルアクセスの完了後にのみ行われるよう保証される．
っはねばぬづぴづとぷちどぴとの同期により，ウィンドウが（ぷちどぴ呼び出しにより）アンエクスポー
ズされる前にオリジンプロセスのプット呼び出しが完了するよう保証される．ターゲッ

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信

〳〶〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

ORIGINPROCESSTARGET
PROCESS

.
.
.
.
.
.
.
.
.
start

wait
load

Local
windowaccesses

store
post

〲〱
〲〲

put

put

〲〳

executed〲〴in originput〲〵

memoryexecuted〲〶in target〲〷

memory

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

complete
.
.
.

.
.
.
.
.
.
.
.
.

wait
load

〳〴
〳〵
〳〶

Window is
exposedto RMA
accesses

store

Local
windowaccesses

post

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

図 〱〱〮〱〺 アクティブターゲット通信：点線の矢印は同期を示す（イベントの順序）〱〱〮〴〮 同期呼び出し〳〶〳
ORIGINPROCESSTARGET
PROCESS

.
.

wait

〱
〲
〳

start
load
put

〴

Local
windowaccesses

〸

put

post

〹

executedin originput
executedin target
memorycomplete
.
.
.
.
.
.
.
.
.

〶
〷

store

memory

〵

.
.
.
.
.
.
.
.
.

〱〰
〱〱

Window is
exposedto RMA
accesses

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

wait
load
store

〱〸

Local
windowaccesses

post

〱〹
〲〰
〲〱
〲〲
〲〳

図 〱〱〮〲〺 弱い同期のアクティブターゲット通信：点線の矢印は同期を示す（イベントの
順序）

〲〴
〲〵
〲〶

トプロセスによる対象ウィンドウへの次のローカルアクセスは，ぷちどぴが戻った後にのみ行われる．
図〱〱〮〱は，同期に基づく自然な時間的順序で発生する操作を示している．ばはびぴはマッ
チするびぴちひぴの前に実行され，っはねばぬづぴづはマッチするぷちどぴの前に実行される．しかし，このような強い同期はウィンドウの正しいアクセス順序のための要件より必要以上に厳しいので，きぐぉ呼び出しの意味論では図〱〱〮〲に示すような弱い同期も許している．
対象ウィンドウへのアクセスはばはびぴの後，ウィンドウがエクスポーズされるまで遅延される．ただし，プットされたデータがバッファリングされるよう実装されている場合，
びぴちひぴが早く完了し，ばふぴやっはねばぬづぴづも早く終了することがある．同期呼び出しはウィン
ドウのアクセス順序を正しくするが，必ずしも他の操作を同期はしない．この弱い同期により，より効率的な実装が可能になる．
図〱〱〮〳にパッシブターゲット通信の一般的な同期パターンを示す．最初のオリジンプ
ロセスがターゲットプロセスのメモリを通して〲番目のオリジンプロセスにデータを通信する．しかし，ターゲットプロセスは明示的にこの通信には関与しない．
ぬはっにおよびふのぬはっに呼び出しにより，〲つのげきぁアクセスが同時並行的に発生しないことが保証される．しかし，オリジン〱によるばふぴがオリジン〲によるでづぴより先に行われるとは限らない．

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信

〳〶〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

ORIGINPROCESS
1

ORIGINPROCESS2

TARGET
PROCESS

lock

.
.
.
.
.
.
.
.
.
.

〱〳
〱〴

put

〱〵

lock

〱〶
〱〷
〱〸
〱〹

.
.
.
.

〲〰

〲〳

unlock

〲〴

.
.
.
.
.
.
.
.

〲〷
〲〸
〲〹

put

memoryexecuted

.
.
.
.
.

.
.
unlock
get

lock
get
executed

〳〰
〳〱
〳〲
〳〳

lock

memory〲〲〲〶in originin target

〲〱

〲〵

put
executed.
.
.
.

in target

get

memoryexecutedin origin

.
.
.
.
.
.
.
.

memory〳〴unlock〳〵〳〶〳〷unlock

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

図 〱〱〮〳〺 パッシブターゲット通信：点線の矢印は同期を示す（イベントの順序）〱〱〮〴〮 同期呼び出し〳〶〵

11.4.1 フェンス

〱
〲
〳
〴

きぐぉたしぉぎたうぅぎぃぅ〨ちびびづひぴ〬 ぷどの〩ぉぎぉぎ

ちびびづひぴぷどのプログラムアサーション（整数型）
ウィンドウオブジェクト（ハンドル）

どのぴ きぐぉたしどのたてづのっづ〨どのぴ ちびびづひぴ〬 きぐぉたしどの ぷどの〩
きぐぉたしぉぎたうぅぎぃぅ〨ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺うづのっづ〨どのぴ ちびびづひぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

きぐぉ呼び出しきぐぉたしぉぎたうぅぎぃぅ〨ちびびづひぴ〬 ぷどの〩はぷどのに基づいてげきぁ呼び出しと同期する．
この呼び出しはぷどののグループに対して集団的である．あるプロセスでフェンス呼び出しの前に呼び出したぷどのに対する全てのげきぁ操作は，そのフェンス呼び出しが復帰するまでに，そのプロセスで必ず完了する．これらの操作は，ターゲットでフェンス呼び出しが戻る前にターゲットで完了する．フェンス呼び出しが戻った後でプロセスによって開始されたぷどの上のげきぁ操作は，きぐぉたしぉぎたうぅぎぃぅがターゲットプロセスによって呼び出された後でないと対象ウィンドウにアクセスできない．
この呼び出しによりげきぁのアクセスエポックが完了するのは，別のフェンス呼び出しが先に行われていて，これらの〲つの呼び出しの間にローカルプロセスがぷどの上でげきぁ通
信呼び出しを発行した場合である．この呼び出しによりげきぁのエクスポージャーエポッ
クが完了するのは，別のフェンス呼び出しが先に行われていて，ローカルウィンドウがこれらの〲つの呼び出しの間のげきぁアクセスのターゲットであった場合である．この呼び出しによりげきぁのアクセスエポックが開始するのは，別のフェンス呼び出しと，これらの〲回のフェンス呼び出しの間に発行されたげきぁ通信呼び出しがこの後に行われた場合である．この呼び出しによりエクスポージャーエポックが開始するのは，別のフェンス呼び出しがこの後に行われ，ローカルウィンドウがこれらの〲回のフェンス呼び出しの間のげきぁアクセスのターゲットである場合である．そのため，このフェンス呼び出しは
ポスト，スタート，コンプリート，およびウェイトのサブセットの呼び出しと等価である．
通常，フェンス呼び出しではバリア同期が必要となり，プロセスできぐぉたしぉぎたうぅぎぃぅの 呼 び 出 し が 完 了 す る の は，グ ル ー プ 内 の 他 の 全 て の プ ロ セ ス がマッチする呼び出しを開始した後である． しかし，終わらせるべきいかなるエポッ
ク も な い こ と が わ か っ て い るきぐぉたしぉぎたうぅぎぃぅの 呼 び 出 し（特 に，
ちびびづひぴ 〽 きぐぉたきくいぅたぎくぐげぅぃぅいぅの場合の呼び出し）は，必ずしもバリア同期の機能を果たさない．
ちびびづひぴ引数は呼び出しのコンテクスト上で，さまざまな最適化に使用してよいアサーシ
ョンを渡すのに供される．これについては，第〱〱〮〴〮〴節で説明する．ちびびづひぴ 〽 〰という値は常に有効である．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

ユーザへのアドバイス きぐぉたしぉぎたうぅぎぃぅの呼び出しは，フェンス呼び出しと同期されたプット，ゲット，またはアキュムレートの呼び出しの前後の両方に実行する〴〷〴〸第 〱〱〮 片方向通信〳〶〶必要がある． （ユーザへのアドバイス終わり）

〱
〲
〳
〴

11.4.2 一般的なアクティブターゲット同期〵〶〷

きぐぉたしぉぎたこごぁげご〨でひはふば〬 ちびびづひぴ〬 ぷどの〩

〸

ぉぎ

〹

ぉぎ

〱〰

ぉぎ

でひはふば
ちびびづひぴぷどのターゲットプロセスのグループ（ハンドル）プログラムのアサーション（整数型）
ウィンドウオブジェクト（ハンドル）

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

どのぴ きぐぉたしどのたびぴちひぴ〨きぐぉたぇひはふば でひはふば〬 どのぴ ちびびづひぴ〬 きぐぉたしどの ぷどの〩
きぐぉたしぉぎたこごぁげご〨ぇげくさぐ〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺こぴちひぴ〨っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〬 どのぴ ちびびづひぴ〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}
ぷどのに対しげきぁアクセスエポックを開始する．このアクセスエポック中にぷどの上で発行されたげきぁ呼び出しはでひはふば内のプロセスのウィンドウにしかアクセスしてはならない． でひはふば内の各プロセスはマッチするきぐぉたしぉぎたぐくこごの呼び出しを発行する必要がある．マッチするきぐぉたしぉぎたぐくこごの呼び出しがターゲットプロセスによって実行されるまで，必要に応じて各対象ウィンドウへのげきぁのアクセスは遅延される．対応するきぐぉたしぉぎたぐくこごの呼び出しが実行されるまできぐぉたしぉぎたこごぁげごをブロッキングすることができるが，これは必須ではない．
ちびびづひぴ引数は呼び出しのコンテクスト上で，さまざまな最適化に使用してよいアサーシ
ョンを渡すのに供される．これについては，第〱〱〮〴〮〴節で説明する．ちびびづひぴ 〽 〰という値は常に有効である．

〲〹〳〰

きぐぉたしぉぎたぃくきぐがぅごぅ〨ぷどの〩

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぉぎ

ぷどの

ウィンドウオブジェクト（ハンドル）

どのぴ きぐぉたしどのたっはねばぬづぴづ〨きぐぉたしどの ぷどの〩
きぐぉたしぉぎたぃくきぐがぅごぅ〨しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺ぃはねばぬづぴづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたしぉぎたこごぁげごの呼び出しによって開始されたぷどの上のげきぁのアクセスエポックを完了する．このアクセスエポック中にぷどの上で発行された全てのげきぁ通信呼び出しは，呼び出しが戻った時点でオリジンで完了している．
きぐぉたしぉぎたぃくきぐがぅごぅはオリジンでは，その前のげきぁ呼び出しを完了させるが，ター
ゲットでは完了を強制しない．オリジンでプットまたはアキュムレート呼び出しが完了
していても，ターゲットでは完了していない場合がある．
以下の例で呼び出しのシーケンスを考えてみる．
例 11.4〱〱〮〴〮 同期呼び出し〳〶〷

きぐぉたしどのたびぴちひぴ〨でひはふば〬 てぬちで〬 ぷどの〩〻
きぐぉたぐふぴ〨〮〮〮〬ぷどの〩〻
きぐぉたしどのたっはねばぬづぴづ〨ぷどの〩〻〱

きぐぉたしぉぎたぃくきぐがぅごぅの 呼 び 出 し は，プ ッ ト 呼 び 出 し が オ リ ジ ン で 完 了 す る ま で
戻 ら ず，対 象 ウ ィ ン ド ウ はきぐぉたしぉぎたこごぁげごの 呼 び 出 し と タ ー ゲ ッ ト プ ロ セ ス に よるきぐぉたしぉぎたぐくこごの呼び出しのマッチが完了するまでは，プット操作によりアクセス
されない．そのため，実装者は多くの選択が可能となる．全てのターゲットプロセス
でマッチするきぐぉたしぉぎたぐくこごの呼び出しが行われるまで，きぐぉたしぉぎたこごぁげごの呼び出
しをブロッキングすることができる． 他の実装方法として，きぐぉたしぉぎたこごぁげごの呼び出しはノンブロッキングだが，きぐぉたぐさごの呼び出しはマッチするきぐぉたしぉぎたぐくこごの呼び出しが行われるまでブロッキングされるようにすることもできる． 別の実装として，最初の〲つの呼び出しはノンブロッキングだが，きぐぉたしぉぎたぃくきぐがぅごぅ の呼び出しはきぐぉたしぉぎたぐくこごの呼び出しが行われるまでブロッキングされるようにすることもできる．さらに別の実装として，いずれかのターゲットプロセスできぐぉたしぉぎたぐくこごが呼び出される前に〳つの全ての呼び出しが完了するようにすることもできる． この最後のケー
スでは，ターゲットでの完了より早くオリジンでプットが完了することが可能なように，プットされたデータがバッファされなければならない．しかし，きぐぉたしぉぎたぐくこごの発行
後は，それ以上の依存性なしで上記のシーケンスは必ず完了する．

〵

〲
〳
〴

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

きぐぉたしぉぎたぐくこご〨でひはふば〬 ちびびづひぴ〬 ぷどの〩
ぉぎ
ぉぎ
ぉぎ

でひはふば
ちびびづひぴぷどの〲〵オリジンプロセスのグループ（ハンドル）〲〶プログラムのアサーション（整数型）〲〷

ウィンドウオブジェクト（ハンドル）〲〸〲〹

どのぴ きぐぉたしどのたばはびぴ〨きぐぉたぇひはふば でひはふば〬 どのぴ ちびびづひぴ〬 きぐぉたしどの ぷどの〩
きぐぉたしぉぎたぐくこご〨ぇげくさぐ〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺ぐはびぴ〨っはのびぴ きぐぉ〺〺ぇひはふば〦 でひはふば〬 どのぴ ちびびづひぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
ぷどのに関連付けられたローカルウィンドウのげきぁのエクスポージャーエポックを開始する． エクスポージャーエポック中のウィンドウぷどのに対し，でひはふば内のプロセ
ス し か，げきぁ呼 び 出 し で ア ク セ ス す べ き で な い． でひはふば内 の 各 プ ロ セ ス は マ ッ チ するきぐぉたしぉぎたこごぁげごの呼び出しを発行しなければならない．きぐぉたしぉぎたぐくこごはブロッキ
ングを行わない．

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

きぐぉたしぉぎたしぁぉご〨ぷどの〩
ぉぎ

ぷどの

ウィンドウオブジェクト（ハンドル）

どのぴ きぐぉたしどのたぷちどぴ〨きぐぉたしどの ぷどの〩
きぐぉたしぉぎたしぁぉご〨しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺しちどぴ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信〳〶〸
PROCESS 0〱

PROCESS 1

PROCESS 2post(0)
.
.
.
.
.
.
.
.
.
.
.
wait()

post(0,3)
.
.
.
.
.
.
.
.
.
.
.
wait()PROCESS 3〲〳〴

start(1,2)

〵〶put(1)〷put(2)〸〹

complete()

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

start(2)put(2)

complete()

図 〱〱〮〴〺 アクティブターゲット通信：点線の矢印は同期を示し，実線の矢印はデータ転
送を示す

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

ぷどの上できぐぉたしぉぎたぐくこごの呼び出しにより開始されたげきぁのエクスポージャーエポ
ックを完了する． この呼び出しは，このエクスポージャーエポック中にウィンドウへのアクセスが許可されていた各オリジンプロセスにより発行された
きぐぉたしぉぎたぃくきぐがぅごぅ〨ぷどの〩の呼び出しにマッチする．きぐぉたしぉぎたしぁぉごの呼び出しは，マッチする全てのきぐぉたしぉぎたぃくきぐがぅごぅの呼び出しが行われるまでブロッキングされる．
これにより，これらの全てのオリジンプロセスがローカルウィンドウへのげきぁアクセスを完了していることが保証される．呼び出しが戻った時点で，対象ウィンドウでのこれらの全てのげきぁアクセスは完了している．
図〱〱〮〴 はこれらの〴つの関数の使用法を示している．
プロセス〰はデータをプロセス〱および〲のウィンドウにプットし，プロセス〳はデータをプロセス〲のウィンドウにプットする．各スタート呼び出しは，アクセスされるウィンドウのプロセスのランクの一覧を指定し，各ポスト呼び出しは，ローカルウィンドウにアクセスするプロセスのランクの一覧を指定する．この図は強い同期を前提とした，各種イベントに対するありうるタイミングを説明している． 弱い同期では，スタート，プット，コンプリートの呼び出しが マッチするポスト呼び出しより前に発生することがあ
る．

〳〷
〳〸
〳〹

きぐぉたしぉぎたごぅこご〨ぷどの〬 」ちで〩

〴〰

ぉぎ

〴〱

くさご

ぷどの
」ちで

ウィンドウオブジェクト（ハンドル）
成功フラグ（論理型）

〴〲
〴〳
〴〴
〴〵
〴〶

どのぴ きぐぉたしどのたぴづびぴ〨きぐぉたしどの ぷどの〬 どのぴ 〪てぬちで〩きぐぉたしぉぎたごぅこご〨しぉぎ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
{ぢははぬ きぐぉ〺〺しどの〺〺ごづびぴ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〴〷〴〸

これはノンブロッキングバージョンのきぐぉたしぉぎたしぁぉごである．マッチする〱〱〮〴〮 同期呼び出し〳〶〹

きぐぉたしぉぎたぃくきぐがぅごぅ呼び出しによって完了が通知され，対応するきぐぉたしぉぎたぐくこご呼び出しでエクスポーズする対象とされたグループによるローカルウィンドウへの全てのアクセスが完了した場合，この関数は」ちで 〽 ぴひふづを返す．それ以外の場合は」ちで 〽
てちぬびづを返す．前者の場合，きぐぉたしぉぎたしぁぉごの呼び出しは，ただちに復帰するはずである．
きぐぉたしぉぎたごぅこごが」ちで 〽 ぴひふづを返した場合はきぐぉたしぉぎたしぁぉごが戻ったのと同じ作用である．」ちで 〽 てちぬびづが返された場合，呼び出しによる表立った作用はない．
きぐぉたしぉぎたごぅこごの呼び出しは，きぐぉたしぉぎたしぁぉごの呼び出しが可能な場合のみ行う必要がある．きぐぉたしぉぎたごぅこご呼び出しで」ちで 〽 ぴひふづが一度返されたら，ウィンドウに対し再度ポストが呼ばれるまできぐぉたしぉぎたごぅこごを呼び出してはならない．
ウィンドウぷどのに，ぷどののプロセスによって通信に使用される「隠れた」コミュニケー
タぷどのっはねねが関連付けられているとする．ポスト呼び出しとスタート呼び出しとの間のマッチング規則，およびコンプリート呼び出しとウェイト呼び出しとの間のマッチング
規則は，以下の（部分）モデル実装を検討してみることで，送信と受信のマッチング規則から導き出すことができる．
MPIたWINたPOST(group,0,win) ぷどのっはねねを 使 用 し，でひはふば内 の 各 プ ロ セ ス に 対 す る タ
グぴちで〰付きのノンブロッキングの送信を開始する．これらの送信の完了を待つ必要
はない．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

MPIたWINたSTART(group,0,win) ぷどのっはねねを使用し，でひはふば内の各プロセスからのタグ
ぴちで〰付きのノンブロッキングの受信を開始する．ターゲットプロセス i 内のウィン
ドウへのげきぁアクセスは，プロセス i からの受信が完了するまで遅延する．

〲〳
〲〴
〲〵
〲〶

MPIたWINたCOMPLETE(win) 前のスタート呼び出しのグループ内の各プロセスに対す
る，タグぴちで〱付きのノンブロッキングの送信を開始する．これらの送信の完了を待つ必要はない．

〲〷
〲〸
〲〹
〳〰

MPIたWINたWAIT(win) 前のポスト呼び出しのグループ内の各プロセスに対する，タ
グぴちで〱付きのノンブロッキングの受信を開始する．全ての受信の完了を待つ．

〳〱
〳〲
〳〳

正しいプログラムでは競合は発生しない．なぜなら，各送信は一意の受信とマッチし，逆も同様だからである．

〳〴

根拠 一般的なアクティブターゲット同期の設計では，ユーザが通信リンクの両端で通信パターンの詳細情報を提供する必要があるため，各オリジンでターゲットの一覧を指定し，各ターゲットでオリジンの一覧を指定する．これにより実装者の自由度が最大限に向上する（そのため，効率も向上する）．一方が他方の識別子を「知っている」ため，どちらからでも同期を開始することができる．これにより，発生しうる競合に対しても最大限の保護を行うことができる．しかし，一般的に，げきぁで求められるよりも多くの情報が必要となる．一般的にオリジンではターゲットのランクを知るだけで十分であるが，ターゲットではオリジンのランクを知るだけでは十分でない．「匿名」通信を利用するには，フェンスまたはロックのメカ
ニズムが必要となる． （根拠の終わり）

〳〷

〳〵
〳〶

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信〳〷〰

ユーザへのアドバイス 有向グラフ G 〽 < V, E > で表現される通信パターン
が あ る と す る． こ こ で， V 〽 {〰, . . . , n − 〱} お よ び ij ∈ E と し， オ リ ジ ン
プロセス i がターゲットプロセス j のウィンドウにアクセスするとする． そ
し て，そ れ ぞ れ の プ ロ セ ス i がきぐぉたしぉぎたぐくこご〨ingroupi 〬 〮 〮 〮 〩の 呼 び 出 し を 発
行し，続いてきぐぉたしぉぎたこごぁげご〨outgroupi 〮〬 〮 〮 〩の呼び出しを発行する． ここで，outgroupi 〽 {j 〺 ij ∈ E} および ingroupi 〽 {j 〺 ji ∈ E} である．でひはふば引数が空の場合，呼び出しは無操作であり，省略することができる．通信呼び出しの後，ス
タートを発行した各プロセスはコンプリートを発行する．最後に，ポストを発行した各プロセスはウェイトを発行する．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

各プロセスは，別のメンバを持つでひはふば引数を使用して呼び出すことができることに注意すること． （ユーザへのアドバイス終わり）

〱〲
〱〳
〱〴
〱〵
〱〶

11.4.3 ロック

〱〷
〱〸
〱〹

きぐぉたしぉぎたがくぃか〨ぬはっにたぴべばづ〬 ひちのに〬 ちびびづひぴ〬 ぷどの〩ぉぎ

ぬはっにたぴべばづ

きぐぉたがくぃかたぅじぃがさこぉざぅ またはきぐぉたがくぃかたこえぁげぅい（ステート型）

〲〲

ぉぎ
ぉぎ

ひちのに
ちびびづひぴぷどのロックされたウィンドウのランク（非負の整数型）

〲〳

〲〰
〲〱

〲〴

ぉぎ

プログラムのアサーション（整数型）
ウィンドウオブジェクト（ハンドル）

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

どのぴ きぐぉたしどのたぬはっに〨どのぴ ぬはっにたぴべばづ〬 どのぴ ひちのに〬 どのぴ ちびびづひぴ〬 きぐぉたしどの ぷどの〩
きぐぉたしぉぎたがくぃか〨がくぃかたごすぐぅ〬 げぁぎか〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ がくぃかたごすぐぅ〬 げぁぎか〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺がはっに〨どのぴ ぬはっにたぴべばづ〬 どのぴ ひちのに〬 どのぴ ちびびづひぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
げきぁのアクセスエポックを開始する．ランクがひちのにのプロセスのウィンドウのみが，
このアクセスエポック中にぷどの上のげきぁ操作によりアクセスできる．

〳〳
〳〴
〳〵
〳〶
〳〷

きぐぉたしぉぎたさぎがくぃか〨ひちのに〬 ぷどの〩
ぉぎ
ぉぎ

ひちのに
ぷどの

ウィンドウのランク（非負の整数型）
ウィンドウオブジェクト（ハンドル）

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたしどのたふのぬはっに〨どのぴ ひちのに〬 きぐぉたしどの ぷどの〩
きぐぉたしぉぎたさぎがくぃか〨げぁぎか〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぁぎか〬 しぉぎ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺しどの〺〺さのぬはっに〨どのぴ ひちのに〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたしぉぎたがくぃか〨〮〮〮〬ぷどの〩の呼び出しにより開始されたげきぁのアクセスエポックを完了する．このアクセスエポック中に発行されたげきぁ操作は，この呼び出しが戻った時点でオリジンとターゲットの両方で完了している．
ロックは，ぬはっに呼び出しとふのぬはっに呼び出しの間に発行されるげきぁ呼び出しの影響を受けるロック済みの対象ウィンドウへのアクセスを保護するため，かつぬはっに呼び出し〱〱〮〴〮 同期呼び出し〳〷〱とふのぬはっに呼び出しの間に実行されるロック済みのローカルウィンドウへのローカルなロード／ストアアクセスを保護するために使用される．排他ロックによって保護されるア
クセスはこのウィンドウのサイトにおいて，ロック保護された同じウィンドウへの他のアクセスと同時並行的にはならない．また，共有ロックによって保護されるアクセスは
このウィンドウのサイトにおいて，同じウィンドウへの排他ロックによって保護される
アクセスと，同時並行的にはならない．
ウィンドウを同時並行的にロック済かつエクスポーズ済（エクスポージャーエポック状態）にすることは誤りである．つまり，ターゲットプロセスがきぐぉたしぉぎたぐくこごを呼び出し済であり，かつきぐぉたしぉぎたしぁぉごをまだ呼び出していない場合，プロセスはその対象
ウィンドウをロックするためにきぐぉたしぉぎたがくぃかを呼び出してはならない．また，ローカ
ルウィンドウがロックされた状態で，きぐぉたしぉぎたぐくこごを呼び出すことは誤りである．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

根拠 代替案として，きぐぉがエクスポージャーエポックとロック期間との間で相互排他を強制する方法もある．しかし，この代替案は，ロック同期およびアクティブ
ターゲット同期の〲つの同期メカニズムの間で干渉しないとき，このような滅多におこらない相互干渉サポートのための，余分なオーバーヘッドを生じてしまう．こ
こで推奨するプログラミングスタイルは，〱組のウィンドウを使う場合，ある時点
では〱つの同期メカニズムしか使わず，ある同期メカニズムから別のメカニズムへのシフトでは，それ自体滅多に起こらないようにしつつ，グローバルな同期を伴うようにしながらシフトする，というものである． （根拠の終わり）

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

ユーザへのアドバイス ウィンドウでロック期間とエクスポージャーエポックとの間で相互排他を実行するには，明示的な同期コードを使用する必要がある． （ユーザへのアドバイス終わり）

〲〵
〲〶
〲〷
〲〸

実装者は，ぬはっに呼び出しによって同期されるげきぁ通信の使用を，きぐぉたぁががくぃたきぅきで割り当てたメモリ内のウィンドウに制限することができる（〲〸〴ページの第〸〮〲節）．ロッ
クは，このようなメモリでしか可搬に使えない．
根拠 メモリが共有されていない状態でパッシブターゲット通信の実装を行うには，
非同期エージェントが必要となる．特別に割り当てられたメモリだけに制限すれば，このようなエージェントをより容易に実装し，より高い性能を得ることができる．さらに共有メモリを使用する場合，このようなエージェントを完全に避けることが可能である．そのため，共有メモリマシン間の第〳者通信3 に対し共有メモリを使わせるという制約を課すことは自然であると考えられる．
その反面，パッシブターゲット通信は，非標準のうはひぴひちの言語の機能，つまりぃ言語のポインタのような機能を利用しないと利用できないことになるが，これらは一部
のうはひぴひちの言語のコンパイラ（本書の執筆時点ではで〷〷およびしどのつはぷび〯ぎごコンパイラ）ではサポートされていない．また，ぃくききくぎブロックや，他の静的に宣言されたうはひぴひちの言語の配列に対し，パッシブターゲット通信は可搬な対象とはなりえな
い． （根拠の終わり）〳

訳者註：MPIプロセス以外の通信

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信〳〷〲〱

以下の例で呼び出しのシーケンスを考えてみる．

〲
〳
〴
〵
〶

例 11.5
きぐぉたしどのたぬはっに〨きぐぉたがくぃかたぅじぃがさこぉざぅ〬 ひちのに〬 ちびびづひぴ〬 ぷどの〩
きぐぉたぐふぴ〨〮〮〮〬 ひちのに〬 〮〮〮〬 ぷどの〩
きぐぉたしどのたふのぬはっに〨ひちのに〬 ぷどの〩

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

きぐぉたしぉぎたさぎがくぃかの 呼 び 出 し は， オ リ ジ ン と タ ー ゲ ッ ト で プ ッ ト 転 送 が 完 了 するまで戻らない． これにより実装者の自由度が大幅に向上する． きぐぉたしぉぎたがくぃかの
呼び出しはウィンドウの排他ロックが得られるまでブロッキングされることがある． または，きぐぉたぐさごの呼び出しはロックが得られるまでブロッキングされるのに対 し てきぐぉたしぉぎたがくぃかの 呼 び 出 し は ブ ロ ッ キ ン グ さ れ な い こ と が あ る． あ る い は，きぐぉたしぉぎたさぎがくぃかはロックが得られるまでブロッキングされるのに対して，最初の〲つの呼び出しはブロッキングされないことがある．つまり対象ウィンドウの更新は
きぐぉたしぉぎたさぎがくぃかの呼び出しが行われるまで延期される．しかし，きぐぉたしぉぎたがくぃかの呼び出しを使用してローカルウィンドウのロックを行う場合，ぬはっに呼び出しが戻った後に発行されるウィンドウへのローカルなロード／ストアアクセスがロックによって保護されることがあるため，ロックが得られるまで呼び出しをブロッキングする必要があ
る．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

11.4.4 アサーション
きぐぉたしぉぎたぐくこご，きぐぉたしぉぎたこごぁげご，きぐぉたしぉぎたうぅぎぃぅ，およびきぐぉたしぉぎたがくぃか呼び
出しにおいて，ちびびづひぴ引数は，呼び出しのコンテクスト上でアサーションを渡すのに使用される．このアサーションは性能を最適化するために使うことができる．ちびびづひぴ引数は，プログラムの正しい情報を渡す場合，プログラムの意味論を変更しない．不正な情報を渡すことは誤りである．プログラムが特に何も約束しないような，普通のケースでは常にちびびづひぴ 〽 〰を渡してかまわない．
ユーザへのアドバイス ちびびづひぴの情報を利用していない実装も多く，一部の情報は一貫性のない共有メモリマシンにのみ関係している．各システムで有益な情報については，実装マニュアルを参照する必要がある．逆に，適用可能なときにつねに，正しいアサーションを渡すアプリケーションは可搬であるし，利用可能なときにはアサーション固有の最適化を生かすことができる． （ユーザへのアドバイス終わ
り）

〴〰
〴〱
〴〲
〴〳
〴〴

実装者へのアドバイス 実装では常にちびびづひぴ引数を無視することができる．実装者
は，実装で重要なちびびづひぴの値を明文化する必要がある． （実装者へのアドバイス終
わり）

〴〵
〴〶
〴〷
〴〸

ちびびづひぴは整数型定数きぐぉたきくいぅたぎくぃえぅぃか，きぐぉたきくいぅたぎくこごくげぅ，きぐぉたきくいぅたぎくぐさご，
きぐぉたきくいぅたぎくぐげぅぃぅいぅ，およびきぐぉたきくいぅたぎくこさぃぃぅぅいの〰個以上のビットベクトル くげである．各呼び出しの重要なオプションを以下に示す．

〱〱〮〴〮 同期呼び出し〳〷〳

ユーザへのアドバイス ぃ言語／ぃ〫〫言語ユーザは，次の定数を組み合わせるのに，ビットベクトル くげ 〨|〩 を使うことができる．うはひぴひちの 〹〰言語のユーザは固有のビットベクトルぉくげを使用することができる．うはひぴひちの 〷〷言語のユーザは，サポートするシステムでビットベクトルぉくげを（非可搬に）使用することができる．または，
うはひぴひちの言語のユーザは定数のくげ演算のために整数加算を可搬に使用できる（ただし，同一の定数を複数回加算することはできない）． （ユーザへのアドバイス終わ
り）

〱
〲
〳
〴
〵
〶
〷
〸
〹

MPIたWINたSTART:〱〰
〱〱

きぐぉたきくいぅたぎくぃえぅぃか ぼ きぐぉたしぉぎたこごぁげごの呼び出しの実行時に，マッチする

きぐぉたしぉぎたぐくこごの呼び出しは，全てのターゲットプロセスですでに完了している．スタート呼び出しでのはっとづっにオプションを指定できるのは，マッチする
各ポスト呼び出しで指定されている場合のみである．これは，ハンドシェイク
がコードで暗に示されている場合にハンドシェイクを省くことができる「準備完了送信〨ひづちつべ〭びづのつ〩」の最適化と同様である（しかし，スタートもポスト
も両方とものはっとづっにオプションを指定しなければならないのに対して，準備完
了送信は正規の受信とマッチする）．
MPIたWINたPOST:
きぐぉたきくいぅたぎくぃえぅぃか ぼ きぐぉたしぉぎたぐくこごの呼び出しの実行時に，対応する

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

きぐぉたしぉぎたこごぁげごの呼び出しがどのオリジンプロセスでも行われていない．ポスト呼び出しでのはっとづっにオプションを指定できるのは，マッチするスタート呼び出しで指定されている場合のみである．
きぐぉたきくいぅたぎくこごくげぅ ぼ ローカルウィンドウが前回の同期以来，ローカルなスト

ア（またはローカルなゲットまたは受信呼び出し）によって更新されていな
かった．これにより，ポスト呼び出しでのキャッシュ同期が不要になる場合がある．
きぐぉたきくいぅたぎくぐさご ぼ ローカルウィンドウは，後続の（ウェイト）同期まで，ポスト呼び出しの後のプットまたはアキュムレート呼び出しによって更新されない．これにより，ウェイト呼び出しでのキャッシュ同期が不要になる場合
がある．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

MPIたWINたFENCE:〴〰
〴〱

きぐぉたきくいぅたぎくこごくげぅ ぼ ローカルウィンドウが前回の同期以来，ローカルなスト

ア（またはローカルなゲットまたは受信呼び出し）によって更新されていな
かった．

〴〲
〴〳
〴〴
〴〵

きぐぉたきくいぅたぎくぐさご ぼ ローカルウィンドウは，次の（フェンス）同期まで，フェンス呼び出しの後のプットまたはアキュムレート呼び出しによって更新され
ない．

〴〶
〴〷
〴〸

第 〱〱〮 片方向通信〳〷〴〱

きぐぉたきくいぅたぎくぐげぅぃぅいぅ ぼ フェンスはローカルに発行されたげきぁ呼び出しのシ〲ーケンスを完了しない．このアサーションがウィンドウグループ内のいずれかのプロセスによって与えられる場合，グループ内の全てのプロセスによって与えられなければならない．

〳
〴
〵
〶

きぐぉたきくいぅたぎくこさぃぃぅぅい ぼ フェンスはローカルに発行されたげきぁ呼び出しのシ〷ーケンスを開始しない．このアサーションがウィンドウグループ内のいずれかのプロセスによって与えられる場合，グループ内の全てのプロセスによって与えられなければならない．

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

MPIたWINたLOCK:
きぐぉたきくいぅたぎくぃえぅぃか ぼ 呼び出し元がウィンドウロックを保持している間，他のプロセスは衝突するロックを保持しない，または取得しようとしない．これは，他の手段によって相互排他が達成されているが，ぬはっにおよびふのぬはっに呼び出しに付随する一貫性のある操作がなお必要な場合に有用である．

〱〸
〱〹
〲〰
〲〱

ユーザへのアドバイス のはびぴはひづおよびのはばひづっづつづフラグは呼び出しの前に行われていた処理に関する情報を提供し，のはばふぴおよびのはびふっっづづつフラグは呼び出しの後に行われる処理に関する情報を提供する． （ユーザへのアドバイス終わり）

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

11.4.5 その他の説明
げきぁルーチンが完了すれば，そのルーチンに引数として渡された不可視オブジェクトを解放しても安全である．例えば，きぐぉたぐさご呼び出しのつちぴちぴべばづ引数は，通信が完了していない可能性があっても，呼び出しが戻ればすぐに解放することができる．
メッセージ通信の場合と同様に，データ型をげきぁ通信で使う前にコミットする必要が
ある．

〳〱
〳〲
〳〳

11.5 例

〳〴
〳〵
〳〶
〳〷

例 11.6 下の例で，フェンス同期を使用した一般的な緩い同期の反復コードを示す．各プロセスのウィンドウは配列ぁで構成され，この配列にはプット呼び出しのオリジンバッ
ファとターゲットバッファが含まれる．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

〮〮〮
ぷとどぬづ〨〡っはのぶづひでづつ〨ぁ〩〩ほ
ふばつちぴづ〨ぁ〩〻きぐぉたしどのたてづのっづ〨きぐぉたきくいぅたぎくぐげぅぃぅいぅ〬 ぷどの〩〻てはひ〨ど〽〰〻 ど 〼 ぴはのづどでとぢはひび〻 ど〫〫〩きぐぉたぐふぴ〨〦てひはねぢふてせどそ〬 〱〬 てひはねぴべばづせどそ〬 ぴはのづどでとぢはひせどそ〬
ぴはつどびばせどそ〬 〱〬 ぴはぴべばづせどそ〬 ぷどの〩〻
きぐぉたしどのたてづのっづ〨〨きぐぉたきくいぅたぎくこごくげぅ ぼ きぐぉたきくいぅたぎくこさぃぃぅぅい〩〬 ぷどの〩〻
ぽ

〴〶
〴〷
〴〸

同じコードは，プットの代わりにゲットを使用して記述することができる．通信フェーズの間，各ウィンドウは同時並行的に読み取り（プットのオリジンバッファとして）〱〱〮〵〮 例〳〷〵と書き込み（プットのターゲットバッファとして）を行う．プットのターゲットバッフ
ァと他の通信バッファの間で重なりがない限り，これは問題ない．

〱〲〳

例 11.7 同様に一般的な例だが，計算／通信の重複が増える．ここでは更新フェーズ
を〲つのサブフェーズに分割するとする．〱つ目は通信に関係するぜぢはふのつちひべ〢が更新される場合で，〲つ目は通信データを使用も提供もしないぜっはひづ〢が更新される場合である．
〮〮〮
ぷとどぬづ〨〡っはのぶづひでづつ〨ぁ〩〩ほ
ふばつちぴづたぢはふのつちひべ〨ぁ〩〻きぐぉたしどのたてづのっづ〨〨きぐぉたきくいぅたぎくぐさご ぼ きぐぉたきくいぅたぎくぐげぅぃぅいぅ〩〬 ぷどの〩〻てはひ〨ど〽〰〻 ど 〼 てひはねのづどでとぢはひび〻 ど〫〫〩きぐぉたぇづぴ〨〦ぴはぢふてせどそ〬 〱〬 ぴはぴべばづせどそ〬 てひはねのづどでとぢはひせどそ〬てひはねつどびばせどそ〬 〱〬 てひはねぴべばづせどそ〬 ぷどの〩〻
ふばつちぴづたっはひづ〨ぁ〩〻きぐぉたしどのたてづのっづ〨きぐぉたきくいぅたぎくこさぃぃぅぅい〬 ぷどの〩〻ぽゲ ッ ト 通 信 と コ ア の 更 新 は， 同 じ 領 域 に ア ク セ ス し な い た め， 同 時 並 行 的 に 行
う こ と が で き る． ま た， ゲ ッ ト 呼 び 出 し に よ る オ リ ジ ン バ ッ フ ァ の ロ ー カ ル 更 新
はふばつちぴづたっはひづ呼び出しによるっはひづのローカル更新と同時並行的に行うことができる．プ
ット通信と同様の重複を得るには，っはひづ用とぢはふのつちひべ用に別のウィンドウを使用する必要がある．これが必要となるのは，同じまたは重なるウィンドウでローカルなストアとプットを同時並行的に行うことが許可されていないためである．

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

例 11.8 例〱〱〮〶と同じコードだが，ポスト－スタート－コンプリート－ウェイトを使用
して書き直している．

〲〴
〲〵
〲〶

〮〮〮
ぷとどぬづ〨〡っはのぶづひでづつ〨ぁ〩〩ほ
ふばつちぴづ〨ぁ〩〻きぐぉたしどのたばはびぴ〨てひはねでひはふば〬 〰〬 ぷどの〩〻
きぐぉたしどのたびぴちひぴ〨ぴはでひはふば〬 〰〬 ぷどの〩〻てはひ〨ど〽〰〻 ど 〼 ぴはのづどでとぢはひび〻 ど〫〫〩きぐぉたぐふぴ〨〦てひはねぢふてせどそ〬 〱〬 てひはねぴべばづせどそ〬 ぴはのづどでとぢはひせどそ〬
ぴはつどびばせどそ〬 〱〬 ぴはぴべばづせどそ〬 ぷどの〩〻
きぐぉたしどのたっはねばぬづぴづ〨ぷどの〩〻
きぐぉたしどのたぷちどぴ〨ぷどの〩〻
ぽ

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

例 11.9 例〱〱〮〷と同じ例だが，フェーズを分割している．
〮〮〮
ぷとどぬづ〨〡っはのぶづひでづつ〨ぁ〩〩ほ
ふばつちぴづたぢはふのつちひべ〨ぁ〩〻きぐぉたしどのたばはびぴ〨ぴはでひはふば〬 きぐぉたきくいぅたぎくぐさご〬 ぷどの〩〻
きぐぉたしどのたびぴちひぴ〨てひはねでひはふば〬 〰〬 ぷどの〩〻てはひ〨ど〽〰〻 ど 〼 てひはねのづどでとぢはひび〻 ど〫〫〩きぐぉたぇづぴ〨〦ぴはぢふてせどそ〬 〱〬 ぴはぴべばづせどそ〬 てひはねのづどでとぢはひせどそ〬てひはねつどびばせどそ〬 〱〬 てひはねぴべばづせどそ〬 ぷどの〩〻
ふばつちぴづたっはひづ〨ぁ〩〻きぐぉたしどのたっはねばぬづぴづ〨ぷどの〩〻
きぐぉたしどのたぷちどぴ〨ぷどの〩〻
ぽ

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〷〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

第 〱〱〮 片方向通信

例 11.10 チェッカーボード，またはダブルバッファ通信パターンで，計算／通信の重複の拡大が可能．配列ぁ〱の値を使用して配列ぁ〰が更新され，同様に逆の更新も行われる．
通信が対称的であると考え，プロセスぁがプロセスあからデータを取得する場合，プロセ
スあもプロセスぁからデータを取得する．ウィンドウぷどのどは配列ぁどで構成される．
〮〮〮
どて 〨〡っはのぶづひでづつ〨ぁ〰〬ぁ〱〩〩きぐぉたしどのたばはびぴ〨のづどでとぢはひび〬 〨きぐぉたきくいぅたぎくぃえぅぃか ぼ きぐぉたきくいぅたぎくぐさご〩〬 ぷどの〰〩〻
きぐぉたあちひひどづひ〨っはねね〰〩〻〪〯 ぴとづ ぢちひひどづひ どび のづづつづつ ぢづっちふびづ ぴとづ びぴちひぴ っちぬぬ どのびどつづ ぴとづ
ぬははば ふびづび ぴとづ のはっとづっに はばぴどはの 〪〯ぷとどぬづ〨〡っはのぶづひでづつ〨ぁ〰〬 ぁ〱〩〩ほ〪〯 っはねねふのどっちぴどはの はの ぁ〰 ちのつ っはねばふぴちぴどはの はの ぁ〱 〪〯ふばつちぴづ〲〨ぁ〱〬 ぁ〰〩〻 〪〯 ぬはっちぬ ふばつちぴづ はて ぁ〱 ぴとちぴ つづばづのつび はの ぁ〰 〨ちのつ ぁ〱〩 〪〯きぐぉたしどのたびぴちひぴ〨のづどでとぢはひび〬 きぐぉたきくいぅたぎくぃえぅぃか〬 ぷどの〰〩〻てはひ〨ど〽〰〻 ど 〼 のづどでとぢはひび〻 ど〫〫〩きぐぉたぇづぴ〨〦ぴはぢふて〰せどそ〬 〱〬 ぴはぴべばづ〰せどそ〬 のづどでとぢはひせどそ〬てひはねつどびば〰せどそ〬 〱〬 てひはねぴべばづ〰せどそ〬 ぷどの〰〩〻
ふばつちぴづ〱〨ぁ〱〩〻 〪〯 ぬはっちぬ ふばつちぴづ はて ぁ〱 ぴとちぴ どび
っはのっふひひづのぴ ぷどぴと っはねねふのどっちぴどはの ぴとちぴ ふばつちぴづび ぁ〰 〪〯きぐぉたしどのたばはびぴ〨のづどでとぢはひび〬 〨きぐぉたきくいぅたぎくぃえぅぃか ぼ きぐぉたきくいぅたぎくぐさご〩〬 ぷどの〱〩〻
きぐぉたしどのたっはねばぬづぴづ〨ぷどの〰〩〻
きぐぉたしどのたぷちどぴ〨ぷどの〰〩〻

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

〪〯 っはねねふのどっちぴどはの はの ぁ〱 ちのつ っはねばふぴちぴどはの はの ぁ〰 〪〯ふばつちぴづ〲〨ぁ〰〬 ぁ〱〩〻 〪〯 ぬはっちぬ ふばつちぴづ はて ぁ〰 ぴとちぴ つづばづのつび はの ぁ〱 〨ちのつ ぁ〰〩〪〯きぐぉたしどのたびぴちひぴ〨のづどでとぢはひび〬 きぐぉたきくいぅたぎくぃえぅぃか〬 ぷどの〱〩〻てはひ〨ど〽〰〻 ど 〼 のづどでとぢはひび〻 ど〫〫〩きぐぉたぇづぴ〨〦ぴはぢふて〱せどそ〬 〱〬 ぴはぴべばづ〱せどそ〬 のづどでとぢはひせどそ〬てひはねつどびば〱せどそ〬 〱〬 てひはねぴべばづ〱せどそ〬 ぷどの〱〩〻
ふばつちぴづ〱〨ぁ〰〩〻 〪〯 ぬはっちぬ ふばつちぴづ はて ぁ〰 ぴとちぴ つづばづのつび はの ぁ〰 はのぬべ〬
っはのっふひひづのぴ ぷどぴと っはねねふのどっちぴどはの ぴとちぴ ふばつちぴづび ぁ〱 〪〯どて 〨〡っはのぶづひでづつ〨ぁ〰〬ぁ〱〩〩きぐぉたしどのたばはびぴ〨のづどでとぢはひび〬 〨きぐぉたきくいぅたぎくぃえぅぃか ぼ きぐぉたきくいぅたぎくぐさご〩〬 ぷどの〰〩〻
きぐぉたしどのたっはねばぬづぴづ〨ぷどの〱〩〻
きぐぉたしどのたぷちどぴ〨ぷどの〱〩〻
ぽ

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

プロセスがぷどの〱に関連付けられたリモートウィンドウへのげきぁアクセスが完了する前に，ぷどの〰に関連付けられたローカルウィンドウをポストする．ぷちどぴ〨ぷどの〱〩呼び出しが復帰した時点で，呼び出しプロセスの全ての隣接プロセスはぷどの〰に関連付けられたウィン
ドウをポスト済である．逆に，プロセスがぷちどぴ〨ぷどの〰〩呼び出しが復帰した時点で，呼び出しプロセスの全ての隣接プロセスはぷどの〱に関連付けられた ウィンドウをポスト済である．そのため，きぐぉたしぉぎたこごぁげごの呼び出しと一緒にのはっとづっにオプションを使用することができる．
ふばつちぴづ〨ぁ〱〬 ぁ〰〩（またはふばつちぴづ〨ぁ〰〬 ぁ〱〩）呼び出しによって使用される配列ぁ〰（またはぁ〱）の領域がげきぁ通信によって変更される領域と重ならない場合，ゲット呼び出しの代わりにプット呼び出しを使用することができる．システムによっては，プット呼び
出しは一方向でしか情報交換を必要としないため，ゲット呼び出しよりもプット呼び出しの方が効率的な場合がある．

〱〱〮〶〮 エラー処理〳〷〷

11.6 エラー処理〱〲

11.6.1 エラーハンドラ〳〴

きぐぉたしぉぎたぃげぅぁごぅ〨〮〮〮〬っはねね〮〮〮〬〩の呼び出し中にエラーが発生すると，っはねねに現在関連付けられているエラーハンドラが呼び出される．その他の全てのげきぁ呼び出しは入力ぷどの 引数を備えている．このような呼び出しの途中でエラーが発生すると，ぷどのに現在関連付けられているエラーハンドラが呼び出される．
ぷどのに関連付けられているデフォルトのエラーハンドラはきぐぉたぅげげくげこたぁげぅたうぁごぁがである．ぷどのに明示的に新しいエラーハンドラを関連付けることにより，このデフォルトを変更することができる（〲〸〶ページの第〸〮〳節を参照）
．

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

11.6.2 エラークラス〱〵

片方向通信用に以下のエラークラスが定義されている．

〱〶〱〷

きぐぉたぅげげたしぉぎ
きぐぉたぅげげたあぁこぅ
きぐぉたぅげげたこぉずぅ
きぐぉたぅげげたいぉこぐ
きぐぉたぅげげたがくぃかごすぐぅ
きぐぉたぅげげたぁここぅげご
きぐぉたぅげげたげきぁたぃくぎうがぉぃご
きぐぉたぅげげたげきぁたこすぎぃ

不正なぷどの引数
不正なぢちびづ引数
不正なびどぺづ引数
不正なつどびば引数
不正なぬはっにぴべばづ引数
不正なちびびづひぴ引数
ウィンドウへの衝突するアクセス
げきぁ呼び出しの誤った同期

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

表 〱〱〮〱〺 片方向通信ルーチンのエラークラス

〲〷
〲〸
〲〹
〳〰

11.7 意味論と正しさ
げきぁ操作の意味論をよく理解するため，次の仮定をおく．まず，システムはウィンド
ウごとに，別々の公開コピーを管理しているとする．さらに，プロセスの元のメモリ領域（非公開ウィンドウコピー）を管理しているとする． プロセスのメモリ上には各変数のインスタンスが〱つしかないが，そのインスタンスを含むウィンドウごとに，その変数の別な公開コピーがある． ロードはプロセスメモリ内のインスタンスにアクセスする（ここにはきぐぉ びづのつが含まれる）．ストアはプロセスメモリ内のインスタンスにアクセスし，更新する（ここにはきぐぉ ひづっづどぶづが含まれる）が，更新は同じ領域の別の公開コピーに影響することがある．ウィンドウでのゲットはそのウィンドウの公開コピーにアクセスする．ウィンドウでのプットまたはアキュムレートはそのウィンドウの公開コピーにアクセスし，これを更新するが，プロセスメモリ内の同じ領域の非公開コピーと，重複する他のウィンドウの公開コピーに影響することがある．これについて，図〱〱〮〵に示す．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信〳〷〸
Window〱

RMA Update

〲
〳

PUT

GET

Local Update

PUT

〴
〵
〶
〷
〸
〹

public window copy
public window copy

? ? ? ? ?
? ? ? ? ?

? ? ? ? ?

〱〰

process memory〱〱? ? ? ? ?

〱〲
〱〳
〱〴
〱〵
〱〶

STORE

STORE

LOAD

〱〷
〱〸

図 〱〱〮〵〺 ウィンドウの概要図

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

以下の規則により，操作がオリジンまたはターゲットで完了していなければならない
最終時点を規定する．オリジンのプロセスメモリ内でゲット呼び出しによって実行される更新はオリジンでゲット操作が完了した時点で（あるいはそれより早く）検知可能になり，対象ウィンドウの公開コピー内でプットまたはアキュムレート呼び出しによって実行される更新はターゲットでプットまたはアキュムレートが完了した時点で（あるいはそれより早く）検知可能になる．この規則では，〱つのウィンドウコピーの更新が別の重なりのあるコピーで検知可能になる最終時点も規定される．

〲〸
〲〹
〳〰
〳〱

〱〮 げきぁ操作は，オリジンでこのアクセスを同期させる後続のきぐぉたしぉぎたぃくきぐがぅごぅ，きぐぉたしぉぎたうぅぎぃぅ，またはきぐぉたしぉぎたさぎがくぃか呼び出しにより，オリジンで完了す
る．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

〲〮 げきぁ操作がきぐぉたしぉぎたうぅぎぃぅの呼び出しによりオリジンで完了する場合，その操作はターゲットプロセスによるマッチするきぐぉたしぉぎたうぅぎぃぅの呼び出しにより，ター
ゲットで完了する．
〳〮 げきぁ操作がきぐぉたしぉぎたぃくきぐがぅごぅの呼び出しによりオリジンで完了する場合，その操作はターゲットプロセスによるマッチするきぐぉたしぉぎたしぁぉごの呼び出しにより，
ターゲットで完了する．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〴〮 げきぁ操作がきぐぉたしぉぎたさぎがくぃかの呼び出しによりオリジンで完了する場合，その操
作は同じきぐぉたしぉぎたさぎがくぃかの呼び出しによりターゲットで完了する．
〵〮 プロセスメモリ内の非公開ウィンドウコピーの領域の更新内容は，少なくともウィンドウの所有者によりそのウィンドウでその後にきぐぉたしぉぎたぐくこご，
きぐぉたしぉぎたうぅぎぃぅ，またはきぐぉたしぉぎたさぎがくぃかが実行されたときに，公開ウィンド
ウコピーで検知可能になる．

〱〱〮〷〮 意味論と正しさ〳〷〹〶〮 プットまたはアキュムレート呼び出しによる公開ウィンドウコピーに対する
更新の内容は，少なくともウィンドウの所有者によりそのウィンドウでその後にきぐぉたしぉぎたしぁぉご，きぐぉたしぉぎたうぅぎぃぅ，またはきぐぉたしぉぎたがくぃかが実行されたときに，プロセスメモリ内の非公開コピーで検知可能になる．

〱
〲
〳
〴
〵
〶

公開コピーから非公開コピーへの転送を完了させるきぐぉたしぉぎたうぅぎぃぅまたは
きぐぉたしぉぎたしぁぉご呼び出し〨〶〩は，ウィンドウコピー〨〲，〳〩 でプットまたはアキュムレ
ート操作を完了させるのと同じ呼び出しである． プットまたはアキュムレートアク
セスがロックと同期されている場合，公開ウィンドウコピーの更新は更新プロセス
がきぐぉたしぉぎたさぎがくぃかを実行するとすぐに完了する．逆に，プロセスメモリ内での非公開コピーの更新は，ターゲットプロセスがそのウィンドウで同期呼び出しを実行するまで遅延されることがある〨〶〩．そのため，プロセスメモリの更新は常に，プロセスが適切な同期呼び出しを実行するまで遅延される可能性がある．また，フェンスまたはポスト－スタート－コンプリート－ウェイト同期が使用されている場合，公開ウィンドウコピ
ーの更新は，ウィンドウの所有者が同期呼び出しを実行するまで遅延される可能性がある．ロック同期を使用する場合のみ，ウィンドウの所有者が関連する同期呼び出しを実行しない場合でも公開ウィンドウコピーの更新が必要となる．
上記の規則により，公開ウィンドウコピーの更新が別の重複する公開ウィンドウコ
ピーで検知可能になるタイミングも暗に定義される．例えば，重複する〲つのウィンド
ウぷどの〱およびぷどの〲を考えてみる．ウィンドウの所有者がきぐぉたしぉぎたうぅぎぃぅ〨〰〬 ぷどの〱〩を呼び出すと，プロセスメモリ内で前の更新がリモートプロセスによるウィンドウぷどの〱から検知可能になる．その後のきぐぉたしぉぎたうぅぎぃぅ〨〰〬 ぷどの〲〩の呼び出しでは，これらの更新
がぷどの〲の公開コピーで検知可能になる．
正しいプログラムは以下の規則に従う必要がある．

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

〱〮 ウィンドウ内の領域は，その領域の更新が開始されたら，その更新がプロセスメモ
リ内の非公開ウィンドウコピーで検知可能になるまで，ローカルにアクセスしては
ならない．

〳〰
〳〱
〳〲
〳〳
〳〴

〲〮 ウィンドウ内の領域は，その領域の更新が開始されたら，その更新が公開ウィンド
ウコピーで検知可能になるまで，げきぁ操作のターゲットとしてアクセスしてはな
らない．この規則には〱つ例外がある．同じ変数が，同じウィンドウで，同じ定義済みのデータ型を使用して，同じ操作を使用する〲つの同時並行的なアキュムレー
トにより更新される場合である．
〳〮 プットまたはアキュムレートは，別の（重複する）対象ウィンドウに対するプット
またはアキュムレート更新，またはローカルな更新が対象ウィンドウ内の領域で開始されたら，その更新がウィンドウの公開コピーで検知可能になるまで，対象ウィ
ンドウにアクセスしてはならない．逆に，ウィンドウ内の領域へのプロセスメモリのローカルな更新は，その対象ウィンドウへのプットまたはアキュムレート更新が開始されたら，プットまたはアキュムレート更新がプロセスメモリで検知可能にな

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信

〳〸〰
〱
〲

るまで，開始してはならない．どちらの場合も，ウィンドウの重ならない領域にアクセスする場合であっても，操作にこの制限が適用される．

〳〴

これらの規則に違反するプログラムは誤りである．

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

根拠 正しいげきぁアクセスに関する最後の制限は，ウィンドウ内の重複しない領域
への同時並行的なアクセスも禁止しているため，過度な制限に感じられるかもしれない．これを制限する理由は，アーキテクチャによっては，明示的な一貫性の回復操作が同期ポイントで必要となることがあるためである．ストアによってローカルに更新された領域と，プットまたはアキュムレート操作によってリモートに更新された領域とでは，異なる操作が必要となることがある．この制限がないと，きぐぉラ
イブラリにより，ウィンドウ内のどの領域がプットまたはアキュムレート呼び出しによって更新されたかを正確に追跡しなければならなくなる．このような情報を管理するための過剰なオーバーヘッドは許容できないであろう． （根拠の終わり）
ユーザへのアドバイス 以下の規則に従うことにより，正しいプログラムを記述することができる．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

フェンス： フェンス呼び出しの間の各期間中に，プットやアキュムレート呼び出
し，またはローカルなストアいずれかによって，各ウィンドウを更新してよいが，両方を行ってはならない．プットまたはアキュムレート呼び出しによって更新された領域は同じ期間中にアクセスしてはならない（ただし，複数のアキュムレート呼び出しにより同じ領域を同時並行的に更新する場合は例外）．ゲット呼び出しによってアクセスされる領域は，同じ期間中に更新してはならない．
ポスト－スタート－コンプリート－ウェイト： ウィンドウがポストされている間，
そのウィンドウに対しプットまたはアキュムレート呼び出しによる更新が行われている場合は，そのウィンドウはローカルに更新すべきでない．また，ウィンドウがポストされている間，プットまたはアキュムレート呼び出しにより更新された領域は，アクセスされるべきでない（ただし，複数のアキュム
レート呼び出しにより同じ領域を同時並行的に更新する場合は例外）．また，
ウィンドウがポストされている間，ゲット呼び出しによってアクセスされる
領域は，更新されるべきでない．
ポスト－スタート同期を使用すると，ターゲットプロセスはそのウィンドウ
がげきぁアクセスの可能な状態であることをオリジンプロセスに伝えることができ，コンプリート－ウェイト同期を使用すると，オリジンプロセスはそのウィンドウに対するげきぁアクセスが完了したことをターゲットプロセスに伝えることができる．
ロック： 衝突がありうる場合，ウィンドウの更新が排他ロックによって保護される．衝突のないアクセス（読み取り専用アクセス，アキュムレートアクセスなど）は，ローカルアクセスとげきぁアクセスの両方について，共有ロックによって保護される．

〱〱〮〷〮 意味論と正しさ〳〸〱

ウィンドウまたは同期モードの変更： プロセスメモリとウィンドウコピーの値が同じであることが保証されているときに，同期モードを変更したり，重複す
る〲つのウィンドウに属する領域へのアクセスに使用するウィンドウを変更したりすることができる．このことは，ウィンドウへのげきぁアクセスがフェンスで同期されている場合はローカルなきぐぉたしぉぎたうぅぎぃぅの呼び出しの後にも当てはまり，アクセスがポスト－スタート－コンプリート－ウェイトで同期されている場合はローカルなきぐぉたしぉぎたしぁぉごの呼び出しの後にも当てはまり，
アクセスがロックで同期されている場合はオリジン（ローカルまたはリモート）でのきぐぉたしぉぎたさぎがくぃかの呼び出しの後にも当てはまる．
また，プロセスはゲット操作が完了するまではゲット操作のローカルバッファにアクセスしてはならず，プットまたはアキュムレート操作が完了するまではプットまたはアキュムレート操作のローカルバッファを更新してはならない．
げきぁ同期操作は，更新が公開ウィンドウおよび非公開ウィンドウで検知可能になるのを保証するタイミングを定義する．更新がそれより早く検知可能になる場合があるが，このような動作は実装依存である． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

意味論を以下の例で説明する．

〲〲

例 11.11 規則〵〺
ぐひはっづびび ぁ〺〲〱〲〳

ぐひはっづびび あ〺
ぷどのつはぷ ぬはっちぴどはの じ

〲〴
〲〵
〲〶

きぐぉたしどのたぬはっに〨ぅじぃがさこぉざぅ〬あ〩びぴはひづ じ 〪〯 ぬはっちぬ ふばつちぴづ ぴは ばひどぶちぴづ っはばべ はて あ 〪〯きぐぉたしどのたふのぬはっに〨あ〩〪〯 のはぷ ぶどびどぢぬづ どの ばふぢぬどっ ぷどのつはぷ っはばべ 〪〯

〲〷
〲〸
〲〹
〳〰

きぐぉたあちひひどづひ

きぐぉたあちひひどづひ

きぐぉたしどのたぬはっに〨ぅじぃがさこぉざぅ〬あ〩きぐぉたぇづぴ〨じ〩 〪〯 はに〬 ひづちつ てひはね ばふぢぬどっ ぷどのつはぷ 〪〯きぐぉたしどのたふのぬはっに〨あ〩

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

例 11.12 規則〶〺〳〷〳〸

ぐひはっづびび ぁ〺

ぐひはっづびび あ〺
ぷどのつはぷ ぬはっちぴどはの じ〳〹〴〰

きぐぉたしどのたぬはっに〨ぅじぃがさこぉざぅ〬あ〩きぐぉたぐふぴ〨じ〩 〪〯 ふばつちぴづ ぴは ばふぢぬどっ ぷどのつはぷ 〪〯きぐぉたしどのたふのぬはっに〨あ〩〴〱きぐぉたあちひひどづひ〴〴

きぐぉたあちひひどづひ

〴〲
〴〳

〴〵

きぐぉたしどのたぬはっに〨ぅじぃがさこぉざぅ〬あ〩〪〯 のはぷ ぶどびどぢぬづ どの ばひどぶちぴづ っはばべ はて あ 〪〯ぬはちつ じきぐぉたしどのたふのぬはっに〨あ〩

〴〶
〴〷
〴〸

第 〱〱〮 片方向通信

〳〸〲
〱
〲

じの非公開コピーはバリアの後で必ずしも更新されていないため，プロセスあでぬはっに〯
ふのぬはっにを省略するとロードで更新前の値が返されることがある．

〳
〴
〵
〶
〷

例 11.13 規則では，以下のシーケンスおいて，あがロック前にローカルなストアによって更新したじの値が，プロセスぁで検知可能であることを保証していない．
ぐひはっづびび ぁ〺〸ぐひはっづびび あ〺
ぷどのつはぷ ぬはっちぴどはの じ

〹
〱〰
〱〱

きぐぉたあちひひどづひ

びぴはひづ じ 〪〯 ふばつちぴづ ぴは ばひどぶちぴづ っはばべ はて あ 〪〯きぐぉたしどのたぬはっに〨こえぁげぅい〬あ〩きぐぉたあちひひどづひ

〱〲
〱〳
〱〴
〱〵
〱〶

きぐぉたしどのたぬはっに〨こえぁげぅい〬あ〩きぐぉたぇづぴ〨じ〩 〪〯 じ ねちべ のはぴ ぢづ どの ばふぢぬどっ ぷどのつはぷ っはばべ 〪〯きぐぉたしどのたふのぬはっに〨あ〩きぐぉたしどのたふのぬはっに〨あ〩〪〯 ふばつちぴづ はの じ のはぷ ぶどびどぢぬづ どの ばふぢぬどっ ぷどのつはぷ 〪〯

〱〷
〱〸
〱〹
〲〰

例 11.14 以下のシーケンスで

〲〱
〲〲
〲〳

ぐひはっづびび ぁ〺
ぷどのつはぷ ぬはっちぴどはの じ
ぷどのつはぷ ぬはっちぴどはの す

ぐひはっづびび あ〺

〲〴
〲〵
〲〶

びぴはひづ すきぐぉたしどのたばはびぴ〨ぁ〬あ〩 〪〯 す ぶどびどぢぬづ どの ばふぢぬどっ ぷどのつはぷ 〪〯きぐぉたしどのたびぴちひぴ〨ぁ〩きぐぉたしどのたびぴちひぴ〨ぁ〩〲〷〲〸

びぴはひづ じ 〪〯 ふばつちぴづ ぴは ばひどぶちぴづ ぷどのつはぷ 〪〯

〲〹
〳〰
〳〱

きぐぉたしどのたっはねばぬづぴづ
きぐぉたしどのたっはねばぬづぴづ
きぐぉたしどのたぷちどぴ〪〯 ふばつちぴづ はの じ ねちべ のはぴ べづぴ ぶどびどぢぬづ どの ばふぢぬどっ ぷどのつはぷ 〪〯

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたあちひひどづひ

きぐぉたあちひひどづひ
きぐぉたしどのたぬはっに〨ぅじぃがさこぉざぅ〬ぁ〩きぐぉたぇづぴ〨じ〩 〪〯 ねちべ ひづぴふひの ちの はぢびはぬづぴづ ぶちぬふづ 〪〯きぐぉたぇづぴ〨す〩
きぐぉたしどのたふのぬはっに〨ぁ〩

プロセスぁによるきぐぉたしぉぎたしぁぉご呼び出しもきぐぉたしぉぎたぃくきぐがぅごぅ呼び出しも公開ウィンドウコピーでの検知可能性について保証していないため，プロセスあがじの値をプロセスぁによるローカルな更新に従って読み取ることを保証していない． あがぁに
よって格納されたじの値を読み取れるようにするには，ローカルなストアをローカル
なきぐぉたぐさごで置換し，公開ウィンドウコピーを更新する必要がある．この置換により，じがぁのプロセスメモリ内の非公開コピーで検知可能になるのは，プロセスぁできぐぉたしぉぎたしぁぉご呼び出しの後のみであることに注意すること． きぐぉたしぉぎたぐくこご呼び出しの前に行われたすの更新は，きぐぉたしぉぎたぐくこご呼び出しの後に公開ウィンドウで検知可能になり，プロセスあで正しく取得できるようになる． きぐぉたぇぅご〨す〩呼び出し

〱〱〮〷〮 意味論と正しさ〳〸〳

はきぐぉたしぉぎたこごぁげご操作によって開始されたアクセスエポックに移すことができ，その場合もプロセスあはぁによって格納された値を取得できる．

〱〲〳

例 11.15 最後に，以下のシーケンスでは〴ぐひはっづびび ぁ〺〶

ぐひはっづびび あ〺
ぷどのつはぷ ぬはっちぴどはの じ〵〷〸

きぐぉたしどのたぬはっに〨ぅじぃがさこぉざぅ〬あ〩きぐぉたぐふぴ〨じ〩 〪〯 ふばつちぴづ ぴは ばふぢぬどっ ぷどのつはぷ 〪〯きぐぉたしどのたふのぬはっに〨あ〩

〹
〱〰
〱〱

きぐぉたあちひひどづひ

きぐぉたあちひひどづひ
きぐぉたしどのたばはびぴ〨あ〩きぐぉたしどのたびぴちひぴ〨あ〩

〱〲
〱〳
〱〴
〱〵

ぬはちつ じ 〪〯 ちっっづびび ぴは ばひどぶちぴづ ぷどのつはぷ 〪〪〯〯 ねちべ ひづぴふひの ちの はぢびはぬづぴづ ぶちぬふづ 〪〯きぐぉたしどのたっはねばぬづぴづ
きぐぉたしどのたぷちどぴ
規則〨〵，〶〩は，あのじの非公開コピーの更新処理がロードの前に完了していることを保証していない．プロセスぁによってプットされた値を読み取れるようにするには，ロー
カルなロードをローカルなきぐぉたぇぅご操作に置換するか，またはきぐぉたしぉぎたしぁぉごの呼び出
し後に配置する必要がある．

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

11.7.1 アトミック性〲〷

同じ領域に対して，同じ操作と定義済みのデータ型を使用して同時並行的にアキュムレートを実行した結果は，ある順序で逐次にその領域に対しアキュムレートを実行したのと同じになる．逆に，〲つの領域が両方とも〲つのアキュムレート呼び出しによって更新された場合，〲つの領域で逆の順番で更新が行われる可能性もある． そのため，きぐぉたぁぃぃさきさがぁごぅの呼び出し全体がアトミックに実行されるという保証はない．アトミック性の欠如の影響は次のように限定的である．前の正当性の条件が暗に意味するとおり，（ターゲットで）きぐぉたぁぃぃさきさがぁごぅ呼び出しが完了するまでは，
きぐぉたぁぃぃさきさがぁごぅの呼び出しによって更新される領域をロードやアキュムレート以外のげきぁ呼び出しによってアクセスできない程度である．また，異なる計算順序は異なる結果を導く可能性があるが，コンピュータでの演算が真に結合的でも可換でもない場合のみである．

〲〹

〲〸

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

11.7.2 プログレス〴〳

片方向通信は〱対〱通信と同じプログレスの要件を有する．つまり，一度通信が可能になれば，完了することが保証される．このため，他のげきぁ呼び出しとの同期のために必要な場合を除いて，げきぁ呼び出しはローカルな意味論を持つ必要がある．

〴〵

〴〴

〴〶
〴〷
〴〸

第 〱〱〮 片方向通信〳〸〴〱

PROCESS 0

PROCESS 1

post(1)post(0)start(1)start(0)put(1)

put(0)

completecomplete

wait

wait

load

load

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

図 〱〱〮〶〺 対称な通信

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

げきぁ通信が可能になるタイミングの定義については，あいまいさがある．このあい
まいさにより，実装者にとっては〱対〱通信の場合よりも自由度が高まる．対応する同期（きぐぉたしぉぎたうぅぎぃぅ，きぐぉたしぉぎたぐくこごなど）の実行が完了すると，対象ウィンドウへのアクセスが可能になる．オリジンプロセスでは，対応するプット，ゲット，またはアキュムレート呼び出しが実行されるとすぐ，あるいは後続の同期呼び出しの発行を待ってから，げきぁ通信が可能になる．オリジンとターゲットの両方で通信が可能になったら，通信を完了させる必要がある．
〳〶〶ページの例〱〱〮〴の部分コードを考えてみる．対象ウィンドウがポストされていない
場合，一部の呼び出しはブロッキングされることがある．しかし，対象ウィンドウがポストされている場合，この部分コードは必ず完了する．データ転送はプット呼び出しが行われるとすぐに開始されることもあるが，後続のコンプリート呼び出しが行われるまで遅延することもある．
〳〷〲ページの例〱〱〮〵の部分コードを考えてみる．別のプロセスのロックとの衝突がある
場合，一部の呼び出しがブロッキングされることがある．しかし，ロックの競合がない
場合，当該部分コードは必ず完了する．
図〱〱〮〶に示すコードを考えてみる．
各プロセスはプット操作を使用して他のプロセスのウィンドウを更新し，それ自体のウィンドウにアクセスする．ポスト呼び出しはノンブロッキングであり，必ず完了する．
ポスト呼び出しが行われたら，そのウィンドウへのげきぁアクセスが可能になり，各プロ
セスでスタート－プット－コンプリートの呼び出しのシーケンスを完了させる必要がある．これらが完了したら，両方のプロセスでウェイト呼び出しを完了させる必要がある．
そのため，この通信はデータの転送量に関係なく，必然的にデッドロックは起きない．
最後の例で，各プロセスのポスト呼び出しとスタートの呼び出しの順序が逆であるとする．このとき，各プロセスはスタート呼び出しでブロッキングされ，マッチするポス
ト呼び出しが行われるのを待つため，コードがデッドロックすることがある．同様に，各プロセスのコンプリート呼び出しとウェイト呼び出しの順序が逆であるとすると，プ
ログラムがデッドロックする．

〱〱〮〷〮 意味論と正しさ〳〸〵
PROCESS 0

PROCESS 1

〱
〲

start

post

〳
〴

put

〵

recv

wait

complete

send

〶
〷

図 〱〱〮〷〺 デッドロックする場面
PROCESS 0

PROCESS 1

start

post

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

put

〱〵

complete

recv

send

wait

〱〶
〱〷
〱〸
〱〹

図 〱〱〮〸〺 デッドロックなし〲〰
〲〱

以下の〲つの例は，コンプリートとウェイトの同期が対称でないことを示している．つまり，ウェイト呼び出しはコンプリートが実行されるまでブロッキングされるが，この逆の状況にはならない．図〱〱〮〷のコードを考えてみる．
このコードはデッドロックする．プロセス〱のウェイトはプロセス〰がコンプリートを呼び出すまでブロッキングされ，プロセス〰の受信はプロセス〱が送信を呼び出すまでブロッキングされるためである．それに対して，図〱〱〮〸のコードを考えてみる．
このコードはデッドロックしない．プロセス〱がポストを呼び出すと，プロセス〰でス
タート，プット，コンプリートのシーケンスを進行させ，完了させることができる．プロセス〰は送信呼び出しに進み，プロセス〱の受信呼び出しを完了させることができる．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

根拠 きぐぉ実装では，きぐぉ呼び出しでブロッキングされている間も，参加している
有効な全ての通信でプロセスがプログレスするよう保証する必要がある．このことは，送受信でも同様であり，げきぁ通信にも適用される．そのため，図〱〱〮〸の例では，プロセス〰のプットおよびコンプリート呼び出しはプロセス〱が受信呼び出しでブロッキングされている間でも必ず完了する．このために，受信呼び出しでブロッキングされている間にプットされたデータを転送するなど，プロセス〱の関与が必要となることがある．
同様の問題として，プロセスの計算がビジー状態の場合や，きぐぉ以外の呼び出しでブロッキングされている場合にこのような進行を促す必要があるかどうかというものがある．最後の例で，送受信〨びづのつ〯ひづっづどぶづ〩のペアをソケットへの書き込み／ソケットからの読み取り〨ぷひどぴづ〭ぴは〭びはっにづぴ〯ひづちつ〭てひはね〭びはっにづぴ〩のペアに置き換えるとする．
このとき，きぐぉではデッドロックを避けるかどうかを規定しない．プロセス〱のブ

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信

〳〸〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

ロッキング受信呼び出しを非常に長い計算のループに置き換えるとする．ここで，きぐぉ標準の〱つの解釈に従って，プロセス〱がこの期間内にきぐぉ呼び出しに達していないとしても，プロセス〰は一定の遅延時間の後にコンプリート呼び出しから戻らなければならない．別の解釈に従えば，プロセス〱がウェイト呼び出しに達するか，
別のきぐぉ呼び出しに達するまで，コンプリート呼び出しをブロッキングさせることもできる．どちらの解釈においても，プロセスが計算の無限ループに入るのでなけ
れば，質的な動作は同じで，差は大きな問題とならないこともある．しかし，定量的に見ると違いがある．異なるきぐぉ実装にはこうした解釈の違いが反映される．このあいまいさは残念なことではあるが，多くの実際のコードには影響しないように見える．きぐぉフォーラムでは，この問題には異論も多く，決定が実装者には大きく影響してもユーザへの影響は小さいため，標準のどの解釈が正しいかという決定をしないことにした． （根拠の終わり）

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

11.7.3 レジスタとコンパイラの最適化
ユーザへのアドバイス この節の内容は全てユーザへのアドバイスである． （ユー
ザへのアドバイス終わり）

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

レジスタに保存される変数とこれらの変数のメモリ値の間には一貫性の問題がある．
げきぁ呼び出しはメモリ（またはキャッシュ）内の変数にアクセスするが，この変数の最新の値はレジスタ内にある．ゲットは変数の最新の値を返さず，レジスタの内容がメモリに格納されるときにプットが上書きされることがある．
この問題を以下のコードで示す〺

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

Source of Process 1

Source of Process 2

Executed in Process 2

ぢぢぢぢ 〽 〷〷〷っちぬぬ きぐぉたしぉぎたうぅぎぃぅっちぬぬ きぐぉたぐさご〨ぢぢぢぢ
どのぴは ぢふてて はて ばひはっづびび 〲〩ぢふてて 〽 〹〹〹
っちぬぬ きぐぉたしぉぎたうぅぎぃぅ

ひづでたぁ〺〽〹〹〹

っちぬぬ きぐぉたしぉぎたうぅぎぃぅっちぬぬ きぐぉたしぉぎたうぅぎぃぅっっっ 〽 ぢふてて

びぴはば ちばばぬ〮 ぴとひづちつぢふてて〺〽〷〷〷 どの ぐさご とちのつぬづひ
っはのぴどのふづ ちばばぬ〮 ぴとひづちつ

〳〵
〳〶
〳〷

っっっ〺〽ひづでたぁ

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

この例では，変数ぢふててはレジスタひづでたぁによって割り当てられるため，っっっには新しい値〷〷〷ではなく，ぢふてての古い値が格納される．
この問題は，いくつかのケースで送受信でも起きる問題であり，第〱〶〮〲〮〲節でより詳しく論じる．
きぐぉ実装により，標準に準拠したぃ言語のプログラムではこの問題が回避される．多く
のうはひぴひちの言語のコンパイラでは，コンパイラの最適化を無効にすることなく，この問題が回避される．しかし，完全に可搬な方法でレジスタの一貫性の問題を回避するには，
げきぁウィンドウの使用をぃくききくぎブロックに格納された変数か，ざくがぁごぉがぅと宣言された変〱〱〮〷〮 意味論と正しさ〳〸〷

数（ざくがぁごぉがぅはうはひぴひちの言語の標準の宣言ではないが，多くのうはひぴひちの言語のコンパイラ
でサポートされている）に制限する必要がある．詳細と追加の解決策については，〵〰〷ページの第〱〶〮〲〮〲節「レジスタ最適化での問題」で説明する．うはひぴひちの言語のそれ以外の問題については，〵〰〴ページの「データのコピーおよび連続領域配置による問題」も参照す
ること．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〸〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〱〮 片方向通信

〱
〲
〳
〴
〵

第12章

〶
〷
〸
〹

外部インターフェイス

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

12.1 はじめに〱〶

この章では，まずはじめに，汎用リクエストを生成するのに使用できる呼び出しについて説明する．汎用リクエストを使用すると，ユーザはきぐぉのものと同様のインターフ
ェースを使用して新しいノンブロッキング操作を生成することができる．これを使用することにより，きぐぉの上位に新しい機能を階層化することができる．次に，〱〲〮〳節ではびぴちぴふびの情報の設定について説明する．これは汎用リクエストのために必要である．
その後の第〱〲〮〴節では，きぐぉでのスレッドの扱いについて説明する．スレッドの準拠は必要ではないが，標準にはスレッド機能が提供されている場合の動作について規定す
る．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

12.2 汎用リクエスト〲〹〳〰

汎用リクエストの目的は，ユーザが新しいノンブロッキング操作を定義できるようにすることである．このような高度なノンブロッキング操作は（汎用化した）リクエストによって表現される．ノンブロッキング操作の基本的な特性は，この操作が非同期に完了に向かう，つまり通常のプログラム実行と同時に進行することである．通常，例えば，
独立したスレッドまたはシグナルハンドラで，ユーザコードの実行と同時にコードが実行される必要がある．オペレーティングシステムでは同時実行をサポートするさまざまなメカニズムが用意されている．きぐぉは標準化を推進するものでもこれらのメカニズムに代わる機能を提供するものでもなく，新しい非同期操作を定義しようとするプログラマが基本となるオペレーティングシステムによって提供されるメカニズムを使用することを想定している．そのため，この章で示す呼び出しは，汎用リクエストに適用した場
合に，きぐぉたしぁぉご，きぐぉたぃぁぎぃぅがなどのきぐぉ呼び出しの効果を定義するための手段と，汎用操作の完了をきぐぉに通知するための手段を提供するだけである．

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

根拠 ユーザ定義のノンブロッキング操作の同時実行を達成するためのきぐぉ標準メ
カニズムを定義することも魅力的である．しかし，オペレーティングシステムで使

〴〶
〴〷
〴〸

〳〸〹

第 〱〲〮 外部インターフェイス〳〹〰

用される特定のメカニズムを考慮することなく，このようなメカニズムを定義する
ことは非常に難しい．フォーラムでは，平行処理メカニズムは基本となるオペレー
ティングシステム管轄であり，きぐぉにより標準化すべきではなく，きぐぉ標準ではこのようなメカニズムときぐぉとの相互作用のみを扱うべきだと考えている． （根拠の
終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

通常のリクエストでは，リクエストに関連する操作はきぐぉ実装により実行され，操作はアプリケーションの介入なしで完了する．汎用リクエストでは，リクエストに関連する操作はアプリケーションによって実行されるため，アプリケーションは操作が完了した時点できぐぉに通知する必要がある．これは，きぐぉたぇげぅけさぅこごたぃくきぐがぅごぅを呼び出す
ことにより行われる．きぐぉは汎用リクエストの「完了」ステータスを管理する．それ以外のリクエストの状態は，ユーザが管理する必要がある．
新しい汎用リクエストは，以下で開始される．

〱〶
〱〷
〱〸

きぐぉたぇげぅけさぅこごたこごぁげご〨ぱふづひべたての〬 てひづづたての〬 っちのっづぬたての〬 づへぴひちたびぴちぴづ〬 ひづぱふづびぴ〩ぉぎ

ぱふづひべたてのリクエストステータスの問い合わせを行うときに呼び出されるコールバック関数（関数）ぉぎてひづづたてのリクエストを解放するときに呼び出されるコールバ
ック関数（関数）ぉぎ

っちのっづぬたてのリクエストを取り消すときに呼び出されるコールバ
ック関数（関数）〲〵ぉぎ

その他の状態〲〶

くさご

づへぴひちたびぴちぴづ
ひづぱふづびぴ

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

汎用リクエスト（ハンドル）

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

どのぴ きぐぉたぇひづぱふづびぴたびぴちひぴ〨きぐぉたぇひづぱふづびぴたぱふづひべたてふのっぴどはの 〪ぱふづひべたての〬きぐぉたぇひづぱふづびぴたてひづづたてふのっぴどはの 〪てひづづたての〬 きぐぉたぇひづぱふづびぴたっちのっづぬたてふのっぴどはの〪っちのっづぬたての〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたぇげぅけさぅこごたこごぁげご〨けさぅげすたうぎ〬 うげぅぅたうぎ〬 ぃぁぎぃぅがたうぎ〬 ぅじごげぁたこごぁごぅ〬 げぅけさぅこご〬ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげ
ぅじごぅげぎぁが けさぅげすたうぎ〬 うげぅぅたうぎ〬 ぃぁぎぃぅがたうぎ
ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ{びぴちぴどっ きぐぉ〺〺ぇひづぱふづびぴ
きぐぉ〺〺ぇひづぱふづびぴ〺〺こぴちひぴ〨っはのびぴ きぐぉ〺〺ぇひづぱふづびぴ〺〺けふづひべたてふのっぴどはの〪
ぱふづひべたての〬 っはのびぴ きぐぉ〺〺ぇひづぱふづびぴ〺〺うひづづたてふのっぴどはの〪 てひづづたての〬っはのびぴ きぐぉ〺〺ぇひづぱふづびぴ〺〺ぃちのっづぬたてふのっぴどはの〪 っちのっづぬたての〬ぶはどつ 〪づへぴひちたびぴちぴづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

ユーザへのアドバイス ぃ〫〫言語では汎用リクエストはクラスきぐぉ〺〺ぇひづぱふづびぴに属し，これは きぐぉ〺〺げづぱふづびぴの派生クラスであることに注意すること．これは，ぃ言語
とうはひぴひちの言語の通常のリクエストと同じ型である． （ユーザへのアドバイス終わ
り）

〴〵
〴〶
〴〷
〴〸

この呼び出しは汎用リクエストを開始し，ひづぱふづびぴにそのハンドルを返す．
コールバック関数の構文と意味を以下に示す．全てのコールバック関数は，
きぐぉたぇげぅけさぅこごたこごぁげご呼び出しを開始することにより，リクエストに付加された

〱〲〮〲〮 汎用リクエスト〳〹〱

づへぴひちたびぴちぴづ引数を渡される．これは，ユーザ定義のリクエストの状態を管理するのに使用できる．
ぃ言語では，問い合わせ関数は以下のようになる．
ぴべばづつづて どのぴ きぐぉたぇひづぱふづびぴたぱふづひべたてふのっぴどはの〨ぶはどつ 〪づへぴひちたびぴちぴづ〬
きぐぉたこぴちぴふび 〪びぴちぴふび〩〻
うはひぴひちの言語では以下のようになり，
こさあげくさごぉぎぅ ぇげぅけさぅこごたけさぅげすたうさぎぃごぉくぎ〨ぅじごげぁたこごぁごぅ〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
ぃ〫〫言語では以下のようになる．
{ぴべばづつづて どのぴ きぐぉ〺〺ぇひづぱふづびぴ〺〺けふづひべたてふのっぴどはの〨ぶはどつ〪 づへぴひちたびぴちぴづ〬
きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩〻 （廃止された呼び出し形式．第15.2節を参照）}
ぱふづひべたての関数は汎用リクエスト用に返す必要のあるステータスを計算する． ステー
タスにはリクエストの取消しの成功／失敗に関する情報も含まれる（
きぐぉたごぅこごたぃぁぎぃぅががぅいによって返される結果）．
ぱふづひべたてのコールバックは，このコールバックに関連する汎用リクエストを完了させたきぐぉた{しぁぉご|ごぅこご}{ぁぎす|こくきぅ|ぁがが} 呼び出しによって呼び出される． コールバッ ク 関 数 は，リ ク エ ス ト が 呼 び 出 し の 発 生 時 に 完 了 し て い る 場 合，きぐぉたげぅけさぅこごたぇぅごたこごぁごさこの呼び出しによっても呼び出される．どちらの場合も，コールバックはユーザによってきぐぉ 呼び出しに渡された対応するステータス変数への参照を渡され，コールバック関数によって設定されたステータスがきぐぉ呼び出しによって返される．ぱふづひべたてのを呼び出す原因となったきぐぉ関数にユーザがきぐぉたこごぁごさこたぉぇぎくげぅま
たはきぐぉたこごぁごさこぅこたぉぇぎくげぅを渡した場合，きぐぉはぱふづひべたてのに有効なステータスオブジェ
クトを渡し，このステータスはコールバック関数が戻ると無視される． ぱふづひべたての はリ ク エ ス ト に 対 し てきぐぉたぇげぅけさぅこごたぃくきぐがぅごぅが 呼 び 出 さ れ た 後 に の み 呼 び 出 され，例えばこのリクエストに対してユーザがきぐぉたげぅけさぅこごたぇぅごたこごぁごさこを複数回呼び出した場合，同じ汎用リクエストに対して複数回呼び出されることがある． また，
きぐぉた{しぁぉご|ごぅこご}{こくきぅ|ぁがが} の呼び出しにより，きぐぉ呼び出しで汎用リクエストが完了するたびに，ぱふづひべたてのコールバック関数が複数回呼び出されることがある．これらの呼び出しの順序はきぐぉでは指定されない．
ぃ言語では，解放関数は以下のようになる．
ぴべばづつづて どのぴ きぐぉたぇひづぱふづびぴたてひづづたてふのっぴどはの〨ぶはどつ 〪づへぴひちたびぴちぴづ〩〻
うはひぴひちの言語では以下のようになる．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

こさあげくさごぉぎぅ ぇげぅけさぅこごたうげぅぅたうさぎぃごぉくぎ〨ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ

〴〱
〴〲
〴〳

ぃ〫〫言語では以下のようになる．
{ぴべばづつづて どのぴ きぐぉ〺〺ぇひづぱふづびぴ〺〺うひづづたてふのっぴどはの〨ぶはどつ〪 づへぴひちたびぴちぴづ〩〻 （廃止された呼び出し形式．第15.2節を参照）}

〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〲〮 外部インターフェイス

〳〹〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

てひづづたての関数は，ユーザが割り当てたリソースをクリーンアップするために，汎用リク
エストの解放時に呼び出される．
てひづづたてのコールバックは，このコールバックに関連する汎用リクエストを完了させたきぐぉた{しぁぉご|ごぅこご}{ぁぎす|こくきぅ|ぁがが} 呼び出しによって呼び出される．てひづづたてのは同じ
リクエストに対するぱふづひべたてのの呼び出しの後に呼び出される．しかし，きぐぉリクエスト
で複数の汎用リクエストが完了した場合，てひづづたてのコールバック関数が呼び出される順序はきぐぉでは指定されない．
てひづづたてのコールバックはきぐぉたげぅけさぅこごたうげぅぅの呼び出しによって解放される汎用リ
ク エ ス ト の た め に も 呼 び 出 さ れ る（こ の よ う な リ ク エ ス ト に 対 し てしぁぉごた{しぁぉご|ごぅこご}{ぁぎす|こくきぅ|ぁがが} は呼び出されない）． この場合，コールバック
関 数 はきぐぉ呼 び 出 しきぐぉたげぅけさぅこごたうげぅぅ〨ひづぱふづびぴ〩ま た はきぐぉ呼 び 出 しきぐぉたぇげぅけさぅこごたぃくきぐがぅごぅ〨ひづぱふづびぴ〩のうち，後に発生した方で呼び出される．つまり，
この場合，実際の解放コードはきぐぉたげぅけさぅこごたうげぅぅときぐぉたぇげぅけさぅこごたぃくきぐがぅごぅの両方の呼び出しが行われた後すぐに実行される．ひづぱふづびぴはてひづづたてのが完了する後まで解放されない．てひづづたてのは，正しいプログラムによりリクエストごとに〱回だけ呼び出される．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

ユーザへのアドバイス きぐぉたげぅけさぅこごたうげぅぅ〨ひづぱふづびぴ〩を呼び出すとひづぱふづびぴハンド
ルがきぐぉたげぅけさぅこごたぎさががに設定される． これにより，汎用リクエストへのこの
ハンドルは無効になる． しかし，きぐぉではてひづづたてのの完了後までオブジェクトを解放しないため，このハンドルのユーザコピーはその時点までは有効である．
きぐぉたぇげぅけさぅこごたぃくきぐがぅごぅの後までてひづづたてのは呼び出されないため，この呼び出しのためにこのハンドルのユーザコピーを使用することができる．きぐぉによるオブジェクトの解放はてひづづたてのの実行後に行われることに注意する必要がある．この時点で，ひづぱふづびぴハンドルのユーザコピーは有効なリクエストを指さなくなる．この場
合，きぐぉはユーザコピーをきぐぉたげぅけさぅこごたぎさががに設定しないため，ユーザの責任でこの古いハンドルにアクセスしないようにする必要がある．これは，きぐぉがオブジ
ェクトの解放を後の時点まで保留し，ユーザもそれを知っている特別なケースである． （ユーザへのアドバイス終わり）

〳〴
〳〵

〳〷

ぃ言語では，取消し関数は以下のようになる．
ぴべばづつづて どのぴ きぐぉたぇひづぱふづびぴたっちのっづぬたてふのっぴどはの〨ぶはどつ 〪づへぴひちたびぴちぴづ〬 どのぴ っはねばぬづぴづ〩〻〳〸うはひぴひちの言語では以下のようになる．

〳〹

こさあげくさごぉぎぅ ぇげぅけさぅこごたぃぁぎぃぅがたうさぎぃごぉくぎ〨ぅじごげぁたこごぁごぅ〬 ぃくきぐがぅごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
がくぇぉぃぁが ぃくきぐがぅごぅ

〳〶

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぃ〫〫言語では以下のようになる．
{ぴべばづつづて どのぴ きぐぉ〺〺ぇひづぱふづびぴ〺〺ぃちのっづぬたてふのっぴどはの〨ぶはどつ〪 づへぴひちたびぴちぴづ〬
ぢははぬ っはねばぬづぴづ〩〻 （廃止された呼び出し形式．第15.2節を参照）}
っちのっづぬたての関 数 は 汎 用 リ ク エ ス ト の 取 消 し を 開 始 す る た め に 呼 び 出 さ れ る． こ れはきぐぉたぃぁぎぃぅが〨ひづぱふづびぴ〩に よ っ て 呼 び 出 さ れ る． リ ク エ ス ト で〱〲〮〲〮 汎用リクエスト〳〹〳

きぐぉたぇげぅけさぅこごたぃくきぐがぅごぅがすでに呼び出されている場合はきぐぉはコールバック関
数にっはねばぬづぴづ〽ぴひふづを渡し，それ以外の場合はっはねばぬづぴづ〽てちぬびづを渡す．
全てのコールバック関数はエラーコードを返す．コールバック関数を呼び出したきぐぉ関数により，返されたコードは適切なエラーコードとして扱われる．たとえば，エラーコードが返される場合，コールバック関数によって返されるエラーコードは，そのコールバック関数を呼び出したきぐぉ関数によって返される．ぱふづひべたてのとてひづづたてのの両方を呼び出すきぐぉた{しぁぉご|ごぅこご}{ぁぎす} 呼び出しの場合，きぐぉ呼び出しは最後のコールバック，
つまりてひづづたてのによって返されるエラーコードを返す．きぐぉた{しぁぉご|ごぅこご}{こくきぅ|ぁがが}の呼び出しの〱つ以上のリクエストがエラーとなった場合，きぐぉ呼び出しはきぐぉたぅげげたぉぎたこごぁごさこを返す． このような場合，きぐぉ呼び出しがステータスの配列を渡されたとすると，きぐぉは完了した汎用リクエストに対応する各ステータスに，対応す
るてひづづたてのコールバック関数の呼び出しによって返されたエラーコードを返す．しかし，きぐぉ関数がきぐぉたこごぁごさこぅこたぉぇぎくげぅを渡された場合，各コールバック関数によって返された個々のエラーコードは消失する．
ユーザへのアドバイス びぴちぴふび ぱふづひべたてのはきぐぉたしぁぉごまたはきぐぉたごぅこごによって呼び出されることがあり，この場合はびぴちぴふびのエラーフィールドを変更することはできないため，ぱふづひべたてのではびぴちぴふびのエラーフィールドを設定してはならない．きぐぉライ
ブラリはぱふづひべたてのが呼び出される「コンテクスト」を知っており，返されるエラー
コードをびぴちぴふびのエラーフィールドに設定するタイミングを正しく決定することができる． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

きぐぉたぇげぅけさぅこごたぃくきぐがぅごぅ〨ひづぱふづびぴ〩ぉぎくさご

ひづぱふづびぴ〲〸汎用リクエスト（ハンドル）〲〹〳〰

どのぴ きぐぉたぇひづぱふづびぴたっはねばぬづぴづ〨きぐぉたげづぱふづびぴ ひづぱふづびぴ〩
きぐぉたぇげぅけさぅこごたぃくきぐがぅごぅ〨げぅけさぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺ぇひづぱふづびぴ〺〺ぃはねばぬづぴづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
こ の 呼 び 出 し は， 汎 用 リ ク エ ス トひづぱふづびぴに よ っ て 示 さ れ る 操 作 が 完 了 し た こ とをきぐぉ に通知する（第〲〮〴節の定義を参照）． きぐぉたしぁぉご〨ひづぱふづびぴ〬びぴちぴふび〩の呼び出しが戻り，きぐぉたごぅこご〨ひづぱふづびぴ〬 」ちで〬 びぴちぴふび〩の呼び出しが」ちで〽ぴひふづを返すのは，
きぐぉたぇげぅけさぅこごたぃくきぐがぅごぅの呼び出しによりこれらの操作が完了したと宣言された後のみである．
きぐぉはコールバック関数によって実行されるコードに制限を課さない．しかし，新しいノンブロッキング操作は，きぐぉたごぅこご，きぐぉたげぅけさぅこごたうげぅぅ，きぐぉたぃぁぎぃぅがといっ
たきぐぉ呼び出しに関する一般的な意味規則が守られるように定義される必要がある．例
えば，これらの呼び出しはすべてローカルであり，ノンブロッキングであると考えられる．そのため，コールバック関数ぱふづひべたての，てひづづたての，またはっちのっづぬたてのによるブロッキン
グきぐぉ通信呼び出しを呼び出すのは，これらの呼び出しが有限の時間内に戻ることが保証されるようなコンテクストに制限する必要がある．きぐぉたぃぁぎぃぅがが呼び出されたら，

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〲〮 外部インターフェイス

〳〹〴
〱
〲
〳
〴
〵

他のプロセスの状態に関係なく（操作は「ローカル」の意味を獲得している），取消し操
作は一定の時間内に完了しなければならない．成功の場合も，失敗の場合も，副作用が発生してはならない．ユーザは新しく定義した操作に対して，これらの同じ特性を保証する必要がある．

〶

実装者へのアドバイス きぐぉたぇげぅけさぅこごたぃくきぐがぅごぅを呼び出すと，ブロッキング
されているユーザプロセス〯スレッドのブロッキング状態が解除されることがある．
きぐぉライブラリは，ブロッキングされていたユーザの計算が再開されるよう保証する必要がある． （実装者へのアドバイス終わり）

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

12.2.1 例
例 12.1 この例では，バイナリツリーを使用してどのぴでのユーザ定義のリデュース操作を行うためのコードを示す．ルート以外の各ノードが〲つのメッセージを受信し，これらを合計し，上位ノードに送信する．ステータスが返されないものとし，操作は取り消せないものとする．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ぴべばづつづて びぴひふっぴ ほきぐぉたぃはねね っはねね〻
どのぴ ぴちで〻
どのぴ ひははぴ〻
どのぴ ぶちぬどの〻
どのぴ 〪ぶちぬはふぴ〻
きぐぉたげづぱふづびぴ ひづぱふづびぴ〻
ぽ ぁげぇこ〻

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

どのぴ ねべひづつふっづ〨きぐぉたぃはねね っはねね〬 どのぴ ぴちで〬 どのぴ ひははぴ〬
どのぴ ぶちぬどの〬 どのぴ 〪ぶちぬはふぴ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
ほぁげぇこ 〪ちひでび〻
ばぴとひづちつたぴ ぴとひづちつ〻〳〲〪〯 びぴちひぴ ひづぱふづびぴ 〪〯きぐぉたぇひづぱふづびぴたびぴちひぴ〨ぱふづひべたての〬 てひづづたての〬 っちのっづぬたての〬 ぎさがが〬 ひづぱふづびぴ〩〻〳〳〳〴

ちひでび 〽 〨ぁげぇこ〪〩ねちぬぬはっ〨びどぺづはて〨ぁげぇこ〩〩〻
ちひでび〭〾っはねね 〽 っはねね〻
ちひでび〭〾ぴちで 〽 ぴちで〻ちひでび〭〾ひははぴ 〽 ひははぴ〻
ちひでび〭〾ぶちぬどの 〽 ぶちぬどの〻
ちひでび〭〾ぶちぬはふぴ 〽 ぶちぬはふぴ〻
ちひでび〭〾ひづぱふづびぴ 〽 〪ひづぱふづびぴ〻

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

〪〯 びばちぷの ぴとひづちつ ぴは とちのつぬづ ひづぱふづびぴ 〪〪〯〯 ごとづ ちぶちどぬちぢどぬどぴべ はて ぴとづ ばぴとひづちつたっひづちぴづ っちぬぬ どび びべびぴづね つづばづのつづのぴ 〪〯ばぴとひづちつたっひづちぴづ〨〦ぴとひづちつ〬 ぎさがが〬 ひづつふっづたぴとひづちつ〬 ちひでび〩〻

〴〲
〴〳
〴〴
〴〵

ひづぴふひの きぐぉたこさぃぃぅここ〻
ぽ

〴〶
〴〷
〴〸

〪〯 ぴとひづちつ っはつづ 〪〯ぶはどつ〪 ひづつふっづたぴとひづちつ〨ぶはどつ 〪ばぴひ〩〱〲〮〲〮 汎用リクエスト

〳〹〵
〱

ほ
どのぴ ぬっとどぬつ〬 ひっとどぬつ〬 ばちひづのぴ〬 ぬぶちぬ〬 ひぶちぬ〬 ぶちぬ〻きぐぉたげづぱふづびぴ ひづぱせ〲そ〻ぁげぇこ 〪ちひでび〻〲

ちひでび 〽 〨ぁげぇこ〪〩ばぴひ〻

〵

〳
〴

〶

〪〯 っはねばふぴづ ぬづてぴ〬ひどでとぴ っとどぬつ ちのつ ばちひづのぴ どの ぴひづづ〻 びづぴ
ぴは きぐぉたぐげくぃたぎさがが どて つはづび のはぴ づへどびぴ 〪〪〯〯 っはつづ のはぴ びとはぷの 〪〯
〮〮〮

〷
〸
〹
〱〰

きぐぉたぉひづっぶ〨〦ぬぶちぬ〬 〱〬 きぐぉたぉぎご〬 ぬっとどぬつ〬 ちひでび〭〾ぴちで〬 ちひでび〭〾っはねね〬 〦ひづぱせ〰そ〩〻きぐぉたぉひづっぶ〨〦ひぶちぬ〬 〱〬 きぐぉたぉぎご〬 ひっとどぬつ〬 ちひでび〭〾ぴちで〬 ちひでび〭〾っはねね〬 〦ひづぱせ〱そ〩〻きぐぉたしちどぴちぬぬ〨〲〬 ひづぱ〬 きぐぉたこごぁごさこぅこたぉぇぎくげぅ〩〻
ぶちぬ 〽 ぬぶちぬ 〫 ちひでび〭〾ぶちぬどの 〫 ひぶちぬ〻きぐぉたこづのつ〨 〦ぶちぬ〬 〱〬 きぐぉたぉぎご〬 ばちひづのぴ〬 ちひでび〭〾ぴちで〬 ちひでび〭〾っはねね 〩〻どて 〨ばちひづのぴ 〽〽 きぐぉたぐげくぃたぎさがが〩 〪〨ちひでび〭〾ぶちぬはふぴ〩 〽 ぶちぬ〻きぐぉたぇひづぱふづびぴたっはねばぬづぴづ〨〨ちひでび〭〾ひづぱふづびぴ〩〩〻てひづづ〨ばぴひ〩〻
ひづぴふひの〨ぎさがが〩〻
ぽ

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

どのぴ ぱふづひべたての〨ぶはどつ 〪づへぴひちたびぴちぴづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
ほ〪〯 ちぬぷちべび びづのつ なふびぴ はのづ どのぴ 〪〯きぐぉたこぴちぴふびたびづぴたづぬづねづのぴび〨びぴちぴふび〬 きぐぉたぉぎご〬 〱〩〻〪〯 っちの のづぶづひ っちのっづぬ びは ちぬぷちべび ぴひふづ 〪〯きぐぉたこぴちぴふびたびづぴたっちのっづぬぬづつ〨びぴちぴふび〬 〰〩〻〪〯 っとははびづ のはぴ ぴは ひづぴふひの ち ぶちぬふづ てはひ ぴとどび 〪〯びぴちぴふび〭〾きぐぉたこくさげぃぅ 〽 きぐぉたさぎいぅうぉぎぅい〻〪〯 ぴちで とちび のは ねづちのどので てはひ ぴとどび でづのづひちぬどぺづつ ひづぱふづびぴ 〪〯びぴちぴふび〭〾きぐぉたごぁぇ 〽 きぐぉたさぎいぅうぉぎぅい〻〪〯 ぴとどび でづのづひちぬどぺづつ ひづぱふづびぴ のづぶづひ てちどぬび 〪〯ひづぴふひの きぐぉたこさぃぃぅここ〻
ぽ

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

どのぴ てひづづたての〨ぶはどつ 〪づへぴひちたびぴちぴづ〩
ほ〪〯 ぴとどび でづのづひちぬどぺづつ ひづぱふづびぴ つはづび のはぴ のづづつ ぴは つは ちのべ てひづづどので 〪〪〯〯 ちび ち ひづびふぬぴ どぴ のづぶづひ てちどぬび とづひづ 〪〯ひづぴふひの きぐぉたこさぃぃぅここ〻
ぽ

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

どのぴ っちのっづぬたての〨ぶはどつ 〪づへぴひちたびぴちぴづ〬 どのぴ っはねばぬづぴづ〩
ほ〪〯 ごとどび でづのづひちぬどぺづつ ひづぱふづびぴ つはづび のはぴ びふばばはひぴ っちのっづぬぬどので〮ぁぢはひぴ どて のはぴ ちぬひづちつべ つはのづ〮 ぉて つはのづ ぴとづの ぴひづちぴ ちび どて っちのっづぬ てちどぬづつ〪〮〯どて 〨〡っはねばぬづぴづ〩 ほてばひどのぴて〨びぴつづひひ〬〢ぃちののはぴ っちのっづぬ でづのづひちぬどぺづつ ひづぱふづびぴ 〭 ちぢはひぴどので ばひはでひちねぜの〢〩〻きぐぉたぁぢはひぴ〨きぐぉたぃくききたしくげがい〬 〹〹〩〻
ぽ
ひづぴふひの きぐぉたこさぃぃぅここ〻
ぽ

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〲〮 外部インターフェイス

〳〹〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

12.3 情報とステータスの関連付け
きぐぉは，〱対〱操作以外にも何種類かのリクエストをサポートしている．ここには入出力用のきぐぉ呼び出しから汎用リクエストまで，タイプの異なるものが含まれる．これらの呼び出しでは同じリクエストメカニズムを使用できるのが望ましい．そうすることにより，タイプの異なるリクエストで待ち合わせやテストを行うことができる．一方，
きぐぉた{ごぅこご|しぁぉご}{ぁぎす|こくきぅ|ぁがが} はリクエストに関する情報を持ったステータスを返す．リクエストの汎用化においては，ステータスオブジェクトに返す情報を定義する必要がある．
各きぐぉ呼び出しではステータスオブジェクトの適切なフィールドが埋められる．使われないフィールドの値は未定義となる．きぐぉた{ごぅこご|しぁぉご}{ぁぎす|こくきぅ|ぁがが} を呼び出すと，ステータスオブジェクトの任意の（訳者註：〱つ以上の）フィールドを変更することができる．特に，未定義のフィールドを変更することができる．指定のリクエストのための意味のある値を持つフィールドは，新しいリクエストの節で定義される．
汎用リクエストにはこれ以外にも検討すべき事項がある．ここで，ユーザはリクエス
トに対応するための関数を用意する．他のきぐぉ呼び出しと違い，ユーザはびぴちぴふびに返される情報を提供する必要がある．びぴちぴふび引数は，ステータスを設定する必要のあるコールバ
ック関数に直接渡される．ユーザは〵つのステータス値のうちの〳つを直接設定することができる．っはふのぴおよびっちのっづぬフィールドは不可視である．これに対処するため，以下の関数が用意されている．

〲〵
〲〶
〲〷

きぐぉたこごぁごさこたこぅごたぅがぅきぅぎごこ〨びぴちぴふび〬 つちぴちぴべばづ〬 っはふのぴ〩
ぉぎくさご

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

ぉぎ
ぉぎ

びぴちぴふびつちぴちぴべばづ
っはふのぴ

っはふのぴを関連付けるステータス（ステータス）
っはふのぴと関連付けるデータ型（ハンドル）
びぴちぴふびと関連付ける要素の数（整数型）

どのぴ きぐぉたこぴちぴふびたびづぴたづぬづねづのぴび〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
どのぴ っはふのぴ〩
きぐぉたこごぁごさこたこぅごたぅがぅきぅぎごこ〨こごぁごさこ〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺こぴちぴふび〺〺こづぴたづぬづねづのぴび〨っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ っはふのぴ〩（廃止された呼び出し形式, 第15.2節を参照）}
この呼び出しは，きぐぉたぇぅごたぅがぅきぅぎごこの呼び出しがっはふのぴ を返すように，びぴちぴふびの不可視部分を変更する．きぐぉたぇぅごたぃくさぎごは互換性のある値を返す．
根拠 要素の数は，整数でないデータ型の個数も扱えるため，カウントの代わりに設定される． （根拠の終わり）

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

後続のきぐぉたぇぅごたぃくさぎご〨びぴちぴふび〬 つちぴちぴべばづ〬 っはふのぴ〩またはきぐぉたぇぅごたぅがぅきぅぎごこ〨びぴちぴふび〬
つちぴちぴべばづ〬 っはふのぴ〩の呼び出しでは，きぐぉたこごぁごさこたこぅごたぅがぅきぅぎごこの呼び出しで使用したつちぴちぴべばづ引数と同じ型仕様を持つつちぴちぴべばづ引数を使用する必要がある．

〱〲〮〴〮 乍乐义とスレッド〳〹〷

根拠 これは，っはふのぴが受信操作によって設定される場合に課される制限と同様である．その場合，きぐぉたぇぅごたぃくさぎごおよびきぐぉたぇぅごたぅがぅきぅぎごこの呼び出しでは，受信呼び出しで使用されるデータ型と同じ型仕様を持つつちぴちぴべばづを使用する必要がある． （根拠の終わり）

〱
〲
〳
〴
〵
〶
〷

きぐぉたこごぁごさこたこぅごたぃぁぎぃぅががぅい〨びぴちぴふび〬 」ちで〩
ぉぎくさご
ぉぎ

びぴちぴふび」ちで取消しフラグを関連付けるステータス（ステータス）
リクエストが取り消された場合，ぴひふづ（論理型）

〸
〹
〱〰
〱〱
〱〲

どのぴ きぐぉたこぴちぴふびたびづぴたっちのっづぬぬづつ〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 どのぴ てぬちで〩きぐぉたこごぁごさこたこぅごたぃぁぎぃぅががぅい〨こごぁごさこ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
{ぶはどつ きぐぉ〺〺こぴちぴふび〺〺こづぴたっちのっづぬぬづつ〨ぢははぬ てぬちで〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〳」ちでフラグがぴひふづに設定されている場合，後続の きぐぉたごぅこごたぃぁぎぃぅががぅい〨びぴちぴふび〬 」ちで〩の呼び出しも」ちで 〽 ぴひふづを返す．それ以外の場合，てちぬびづを返す．

〱〹

〱〴
〱〵
〱〶
〱〷
〱〸

〲〰
〲〱

ユーザへのアドバイス 再利用が意図されていない値のステータスフィールドを再利用することはお勧めできない．再利用すると，ステータスオブジェクトの使用時に予期しない結果が生じることがある．例えば，値が範囲外の場合やこのようなエラーを検出できない場合，きぐぉたぇぅごたぅがぅきぅぎごこを呼び出すとエラーが発生することがある．汎用リクエストを備えるづへぴひちたびぴちぴづ引数は，ステータスに論理的に属していない情報を返すのに使用できる．また，きぐぉによって内部的に設定されるステータスの値（きぐぉたげぅぃざなど）を変更すると，予期しない結果が生じることがある
ため，変更しないことを強くアドバイスする． （ユーザへのアドバイス終わり）

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

12.4 MPIとスレッド
ここでは，きぐぉ呼び出しとスレッドの相互作用について規定する． スレッド対応のきぐぉ実装の最小限の要件を示し，スレッド環境の初期化に使用できる関数を定義する．
きぐぉは，スレッドがサポートされていないか，十分に機能しない環境でも実装できる．
そのため，すべてのきぐぉ実装でこの章に示すすべての要件を満たす必要はない．
この章では一般的にぐくこぉじスレッドと類似のスレッドパッケージを想定しているがせ〲〹そ，スレッドの呼び出しの構文と意味はここには示さない．これらは本書の対象範囲
ではない．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

12.4.1 全般〴〵〴〶

スレッド対応の実装では，きぐぉプロセスはマルチスレッド環境となることがある．各スレッドはきぐぉ呼び出しを発行することができるが，スレッドを個別に指定することは〴〷〴〸第 〱〲〮 外部インターフェイス

〳〹〸
〱
〲

できず，送信または受信呼び出しのランクはスレッドではなく，プロセスを識別する．
プロセスに送信されたメッセージはこのプロセス内の任意のスレッドで受信できる．

〳
〴
〵
〶
〷
〸
〹

根拠 このモデルはプロセス間通信のぐくこぉじモデルに対応しており，プロセスは単一スレッドではなく，マルチスレッド環境となるが，このことはこのプロセスの外部インターフェースには影響しない．きぐぉ「プロセス」が単一ぐくこぉじ プロセス内のぐくこぉじスレッドであるようなきぐぉ実装は，この定義によればスレッド対応ではない（実際にはその「プロセス」は単一スレッドである）． （根拠の終わり）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

ユーザへのアドバイス 同一アプリケーション内のスレッドが競合する通信呼び出しを発行する場合，競合を回避するのはユーザの責任である．ユーザは，スレッドごとに異なるコミュニケータを使用することにより，同一プロセス内の〲つのスレッドが競合する通信呼び出しを発行しないようにすることができる． （ユーザへのアドバイス終わり）
スレッド対応の実装の〲つの主な要件を以下に示す．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〮 きぐぉ呼び出しはすべて「スレッドセーフ」である．つまり，並行に実行される〲つのスレッドはきぐぉ呼び出しを行うことができ，その実行がインタリーブされた場合
でも，順番に呼び出しが行われたのと同じ結果となる．
〲〮 ブロッキングしうるきぐぉ呼び出しがブロックした場合，呼び出し側のスレッドのみ
がブロッキングされ，別のスレッドがあれば実行することができる．呼び出し側のスレッドは，待ち合わせているイベントが発生するまでブロッキングされる．ブロ
ッキングされていた通信が可能になり，開始できるようになると，有限時間内に呼び出しが完了し，スレッドは実行可能としてマークされる．あるスレッドがブロッキングされていても，同じプロセスの他の実行可能なスレッドの進行を妨げることはなく，きぐぉ呼び出しの実行を妨げることもない．
例 12.2 プロセス〰は〲つのスレッドで構成される．〱つ目のスレッドはブロッキング送信
呼び出しきぐぉたこづのつ〨ぢふ》〱〬 っはふのぴ〬 ぴべばづ〬 〰〬 〰〬 っはねね〩を実行し，〲つめのスレッドはブロッキ
ング受信呼び出しきぐぉたげづっぶ〨ぢふ》〲〬 っはふのぴ〬 ぴべばづ〬 〰〬 〰〬 っはねね〬 〦びぴちぴふび〩を実行する．つまり，〱つ目のスレッドがメッセージを送信し，〲つめのスレッドがそれを受信する．この通信は常に成功する．最初の要件に従い，この実行は〲つの呼び出しのインターリービングに対応する．〲つめの要件に従い，呼び出しは呼び出し側のスレッドのみをブロッキングすることができ，他方のスレッドの進行を妨げることはない．送信呼び出しが受信呼び出
しよりも先に進んだ場合，送信スレッドがブロッキングされることがあるが，これによって受信スレッドの実行が妨げられることはない．そのため，受信呼び出しが行われる．
両方の呼び出しが行われると，通信が可能になり，両方の呼び出しが完了する．それに対して，送信が発行され，その後で対応する受信が発行される単一スレッドのプロセス
ではデッドロックが発生することがある．マルチスレッド環境の実装では，ブロッキン
グされた呼び出しが他のスレッドの進行を妨げる可能性がないため，その進行にはより厳しい要件が課される．

〱〲〮〴〮 乍乐义とスレッド〳〹〹

実装者へのアドバイス きぐぉ呼び出しは，プロセスにグローバルな〱つのロックを使用してきぐぉコードを保護するなどの方法で〱つずつ順に実行することにより，スレッドセーフにすることができる．しかし，ブロッキングされた操作は，プロセス内の別のスレッドの進行を妨げることがあるため，ロックを保持することはできな
い．ロックは，送信の発行，送信の完了などのアトミックなでローカルに完了する
サブ操作の期間中のみ保持され，この間に解放される．精密なロックは同時並行性を高めることができるが，ロックのオーバーヘッドも高くなる．同時並行性は，
きぐぉプロトコルの一部を別のサーバースレッドで実行することでも実現できる．
（実装者へのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

12.4.2 明確化〱〳〱〴

初期化と完了 きぐぉたうぉぎぁがぉずぅの呼び出しは，きぐぉを初期化したのと同じスレッドで行う必要がある．このスレッドのことをメインスレッドと呼ぶ．この呼び出しは，すべてのプロセススレッドできぐぉ呼び出しが完了し，保留中の通信または入出力操作がない状態で行う必要がある．

〱〵
〱〶
〱〷
〱〸
〱〹

根拠 この制約により実装を簡素化できる． （根拠の終わり）

〲〰
〲〱
〲〲

マルチスレッドでの同じリクエストの完了 〲つのスレッドがブロッキングされ，同じリクエストで待ち合わせているプログラムはエラーになる．同様に，同じリクエストを含むリクエスト配列に対しきぐぉた{しぁぉご|ごぅこご}{ぁぎす|こくきぅ|ぁがが} を同時に呼び出すことはできない．きぐぉでは，〱つのリクエストは〱回のみ完了させることができる．この規則に違反するぷちどぴまたはぴづびぴの組み合わせはエラーとなる．
根拠 これは，マルチスレッド実行の結果によりきぐぉ呼び出しがインターリーブ
される，という見方と整合する．単一スレッドの実装では，リクエストでぷちどぴが発行されると，そのリクエストハンドルは，同じハンドルで〲回目のぷちどぴが発行可能になる前に無効化される．スレッドを使用して，リクエストを無効化することなくをブロッキングすることができるため，ユーザの責任により，別のスレッ
ドのきぐぉたしぁぉご{ぁぎす|こくきぅ|ぁがが} で同じリクエストを使用しないようにすること．
この制限により，通信や入出力イベントで〱つのスレッドのみがブロッキングされるため，実装を簡素化することができる． （根拠の終わり）

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

先 行 す るきぐぉたぐげくあぅま た はきぐぉたぉぐげくあぅの 呼 び 出 し に よ っ て 返 さ れ たびはふひっづお よ
びぴちで値を使用する受信呼び出しは，プローブの後かつその受信の前に他の一致する
受信がない場合のみ，プローブ呼び出しと一致するメッセージを受信する．マルチスレ
ッド環境では，適切な相互排他論理を使用してこの条件を適用するのはユーザの責任である．これを適用するには，各コミュニケータがプロセスごとに〱つのスレッドによってのみ使用されていることを確認する．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〴〰〰
〱
〲
〳
〴
〵
〶

第 〱〲〮 外部インターフェイス

集団呼び出し コミュニケータ，ウィンドウ，またはファイルハンドルでの集団呼び出
しの対応付けは，各プロセスで呼び出しが発行される順序に従って行われる．並行するスレッドが同じコミュニケータ，ウィンドウ，またはファイルハンドル上でこのような呼び出しを発行する場合，スレッド間同期を使用して呼び出しが正しい順序で行われることを確認するのはユーザの責任である．

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

ユーザへのアドバイス コミュニケータっはねねの各きぐぉプロセスがそれぞれ，〳つの並行するスレッドを使用して，各きぐぉプロセスのスレッドぁがっはねねで集団操作を呼び出し，スレッドあが前にっはねねでオープンされた既存のファイルハンドルでファイル操作を呼び出し，スレッドぃが同様に前にっはねねで生成された既存のウィンド
ウハンドルで片方向操作を呼び出すことができる． （ユーザへのアドバイス終わ
り）

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

根拠 きぐぉたうぉがぅたくぐぅぎおよびきぐぉたしぉぎたぃげぅぁごぅですでに規定されているように，
ファイルハンドルとウィンドウハンドルは，コミュニケータそのものではなく，基本となるコミュニケータのプロセスのグループのみを継承する．コミュニケータ，
ウィンドウハンドル，およびファイルハンドルへのアクセスは相互に影響を及ぼしてはならない． （根拠の終わり）
実装者へのアドバイス ファイルまたはウィンドウ操作の実装で内部的にきぐぉ通信が使用される場合，複製されたコミュニケータがファイルまたはウィンドウブジェク
トにキャッシュされることがある． （実装者へのアドバイス終わり）

〲〶
〲〷
〲〸
〲〹
〳〰

例外ハンドラ 例外ハンドラは必ずしも例外が発生したきぐぉ呼び出しのスレッドコンテ
クストで実行されるわけではなく，エラーコードを返すスレッドとは異なるスレッドによって実行されることもある．

〳〱
〳〲
〳〳
〳〴
〳〵

根拠 きぐぉ実装をマルチスレッド化することで，きぐぉ呼び出しを行ったスレッドとは異なるスレッドで通信プロトコルの一部が実行することができる．この設計により，例外が発生したスレッドで例外ハンドラを実行することが可能になる． （根拠の終わり）

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

シグナルと取消しの相互作用 きぐぉ呼び出しを実行するスレッドが（別のスレッドによって）取り消された場合，またはスレッドがきぐぉ呼び出しの実行中にシグナルを捕捉した場合，結果は未定義となる．きぐぉ呼び出しを実行していない場合は，きぐぉプロセスのス
レッドが終了したり，シグナルを補足したり．別のスレッドによって取り消さたりすることがある．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

根拠 シグナルセーフのぃ言語ライブラリ関数はほとんどなく，多くは取消しポイ
ント（それを実行するスレッドの取消しが行えるポイント）を持つ．この制限により実装が簡素化される（きぐぉライブラリが「非同期キャンセルセーフ」または「非同期シグナルセーフ」である必要はない）． （根拠の終わり）〱〲〮〴〮 乍乐义とスレッド〴〰〱

ユーザへのアドバイス ユーザは独立した非きぐぉスレッドでシグナルを捕捉することができる（きぐぉ 呼び出しスレッドでシグナルをマスクし，〱つ以上の非きぐぉスレッドでシグナルのマスク解除をすることにより）．優れたプログラミングのためには，
びどでぷちどぴの呼び出しで，発生が予測されるシグナルごとに，異なるスレッドをブロ
ッキングする必要がある．ユーザはきぐぉ実装によって使用されるシグナルを捕捉してはならない．各きぐぉ実装では内部で使用するシグナルを文書化する必要があるため，ユーザはこれらのシグナルの使用を避けることができる． （ユーザへのアドバイス終わり）
実装者へのアドバイス マルチスレッドで実行する場合，きぐぉライブラリではスレッドセーフでないライブラリ呼び出しを行ってはならない． （実装者へのアドバイ
ス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

12.4.3 初期化〱〶

きぐぉの初期化と，きぐぉスレッド環境の初期化のために，きぐぉたぉぎぉごの代わりに以下の関数を使用することができる．

〱〸

〱〷

〱〹
〲〰
〲〱

きぐぉたぉぎぉごたごえげぅぁい〨ひづぱふどひづつ〬 ばひはぶどつづつ〩ぉぎ
くさご

ひづぱふどひづつ
ばひはぶどつづつ〲〲望ましいスレッドサポートのレベル（整数型）
提供されるスレッドサポートのレベル（整数型）

〲〳
〲〴
〲〵

どのぴ きぐぉたぉのどぴたぴとひづちつ〨どのぴ 〪ちひでっ〬 っとちひ 〪〨〨〪ちひでぶ〩せそ〩〬 どのぴ ひづぱふどひづつ〬
どのぴ 〪ばひはぶどつづつ〩
きぐぉたぉぎぉごたごえげぅぁい〨げぅけさぉげぅい〬 ぐげくざぉいぅい〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぉげぅい〬 ぐげくざぉいぅい〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺ぉのどぴたぴとひづちつ〨どのぴ〦 ちひでっ〬 っとちひ〪〪〦 ちひでぶ〬 どのぴ ひづぱふどひづつ〩 （廃止された呼び出
し形式, 第15.2節を参照）}{どのぴ きぐぉ〺〺ぉのどぴたぴとひづちつ〨どのぴ ひづぱふどひづつ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

ユーザへのアドバイス ぃ言語およびぃ〫〫言語では，ちひでっとちひでぶの受渡しは任意である．ぃ言語では，これは適切なポインタを渡すことによって達成される．ぃ〫〫言語
では，これらの〲つの場合に対応する〲つの呼び出し形式を使用して達成される．これは，第〸〮〷節で説明したきぐぉたぉぎぉごを使用するのと同様である． （ユーザへのアドバイス終わり）

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

この呼び出しは，きぐぉたぉぎぉごを呼び出した場合と同様にきぐぉを初期化する．また，スレッド環境も初期化する．引数ひづぱふどひづつは望ましいスレッドサポートのレベルを指定するのに使用する．使用できる値をスレッドサポートの昇順で示す．

〴〱
〴〲
〴〳
〴〴

MPIたTHREADたSINGLE 〱つのスレッドのみを実行する．

〴〵〴〶

MPIたTHREADたFUNNELED プロセスはマルチスレッドとすることができるが，アプリケ〴〷ーションではメインスレッドでのみきぐぉ呼び出しが行われるようにする必要があ

〴〸

〴〰〲
〱
〲
〳

第 〱〲〮 外部インターフェイス
る（メインスレッドの定義については，〴〰〳ページのきぐぉたぉこたごえげぅぁいたきぁぉぎを参照）．

〴

MPIたTHREADたSERIALIZED プロセスはマルチスレッドにすることができ，複数のスレ〵

ッドできぐぉ呼び出しを行うことができるが，〱度に〱つしか呼び出しを実行できない
ため，〲つの異なるスレッドから同時にきぐぉ呼び出しを行うことはない（きぐぉ呼び出
しはすべて「逐次化される」）
．

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

MPIたTHREADたMULTIPLE 複数のスレッドで制限なくきぐぉを呼び出すことができる．

これらの値は単調増加，つまりきぐぉたごえげぅぁいたこぉぎぇがぅ < きぐぉたごえげぅぁいたうさぎぎぅがぅい <きぐぉたごえげぅぁいたこぅげぉぁがぉずぅい < きぐぉたごえげぅぁいたきさがごぉぐがぅである．
きぐぉたぃくききたしくげがい内のプロセスによっては，必要となるスレッドサポートのレベルが異なることがある．
この呼び出しは，きぐぉによって提供される実際のスレッドサポートのレベルに関する情報をばひはぶどつづつに返す． これは上記の〴つの値のいずれかとすることができる．
きぐぉたぉぎぉごたごえげぅぁいによって提供されうるスレッドサポートのレベルは実装で決まり，プログラムの実行の開始前にユーザが （ねばどづへづっの引数などで）指定した情報に基づいて決めることができる．可能であれば，この呼び出しはばひはぶどつづつ 〽 ひづぱふどひづつを返す．これに失敗した場合，この呼び出しはばひはぶどつづつ > ひづぱふどひづつとなるように（ユーザが必要とするよりも強いサポートレベルが得られるように）最低サポートレベルを返す．最後に，ユーザの要件を満たすことができない場合，この呼び出しはばひはぶどつづつに最高サポートレベルを返す．
スレッド対応のきぐぉ実装はばひはぶどつづつ 〽 きぐぉたごえげぅぁいたきさがごぉぐがぅを返すことができる．
このような実装は，ひづぱふどひづつの値に関係なく，常にばひはぶどつづつ 〽 きぐぉたごえげぅぁいたきさがごぉぐがぅを
返すことができる．それとは正反対に，スレッド対応でないきぐぉライブラリは，
ひづぱふどひづつの値に関係なく，常にばひはぶどつづつ 〽 きぐぉたごえげぅぁいたこぉぎぇがぅを返すことができる．
きぐぉたぉぎぉごの 呼 び 出 し はひづぱふどひづつ 〽 きぐぉたごえげぅぁいたこぉぎぇがぅを 使 用 し てきぐぉたぉぎぉごたごえげぅぁいを呼び出したのと同じ効果となる．
ベンダーは， ねばどづへづっの引数など，きぐぉプログラムの開始時に利用可能なスレッ
ド サ ポ ー ト の レ ベ ル を 指 定 す る た め の （実 装 依 存 の） 手 段 を 提 供 す る こ と が できる． これはきぐぉたぉぎぉご やきぐぉたぉぎぉごたごえげぅぁいの呼び出しの結果に影響する． 例えば，
きぐぉたごえげぅぁいたきさがごぉぐがぅのみ が利用で きるよ うにきぐぉプ ログラ ムが起動され てい ると す る． こ の 場 合， きぐぉたぉぎぉごたごえげぅぁい はひづぱふどひづつの 値 に 関 係 な く
ばひはぶどつづつ 〽 きぐぉたごえげぅぁいたきさがごぉぐがぅを返し，きぐぉたぉぎぉごの呼び出しはきぐぉのスレッドサ
ポートのレベルをきぐぉたごえげぅぁいたきさがごぉぐがぅに初期化する．逆に，〴つのすべてのスレッ
ドサポートのレベルが利用できるようにきぐぉプログラムが起動されているとする．この場合，きぐぉたぉぎぉごたごえげぅぁいの呼び出しはばひはぶどつづつ 〽 ひづぱふどひづつを返し，きぐぉたぉぎぉごの呼び出しはきぐぉのスレッドサポートのレベルをきぐぉたごえげぅぁいたこぉぎぇがぅに初期化する．

〴〶
〴〷
〴〸

根拠 きぐぉコードが単一スレッド環境で実行される場合，または複数のスレッドがあっても同時に実行されることがない場合は，さまざまな最適化が可能で，相互〱〲〮〴〮 乍乐义とスレッド〴〰〳

排他コードを省略することができる．また，〱つのスレッドだけを実行する場合，
きぐぉライブラリではユーザスレッドとの衝突を起こすことなく，スレッドセーフでないライブラリ関数を使用することができる．また，〱つの通信スレッド，複数の計算スレッドのモデルは多くのアプリケーションに適合する．例えばプロセスのコ
ードが こきぐのクラスタ内のこきぐノードで実行するためにコンパイラによって並列処理されているきぐぉ呼び出しを使用する逐次処理として書かれたうはひぴひちの言語〯ぃ言語〯ぃ〫〫言語のプログラムである場合，プロセスの計算はマルチスレッドになるが，きぐぉ呼び出しは単一のスレッドで実行されるだろう．
この設計では，ライブラリの静的な呼び出し形式を必要とする環境のため，また現在のマルチスレッドきぐぉコードの互換性のため，スレッドサポートのレベルの静的指定が可能となっている． （根拠の終わり）
実装者へのアドバイス ばひはぶどつづつがきぐぉたごえげぅぁいたこぉぎぇがぅでない場合，きぐぉライブラリ
ではスレッドセーフでないぃ言語〯ぃ〫〫言語〯うはひぴひちの言語のライブラリ呼び出しを行ってはならない．例えば，ねちぬぬはっがスレッドセーフでない環境では，きぐぉライブ
ラリでねちぬぬはっを使用しないようにする必要がある．
実装者によっては，スレッドサポートのレベルごとに異なるきぐぉライブラリを使用
したいという場合もある．この場合，動的リンクを使用し，きぐぉたぉぎぉごたごえげぅぁいの
呼び出し時にリンクされるライブラリを選択する．これが可能でないときは，必要なスレッドサポートのレベルがリンク時に指定される場合のみ，それより下のレベ
ルのスレッドサポートの最適化が行われる． （実装者へのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

現在のスレッドサポートのレベルの問い合わせには，以下の関数を使用することがで
きる．

〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉたけさぅげすたごえげぅぁい〨ばひはぶどつづつ〩
くさご

ばひはぶどつづつ提供されるスレッドサポートのレベル（整数型）〳〲〳〳

どのぴ きぐぉたけふづひべたぴとひづちつ〨どのぴ 〪ばひはぶどつづつ〩
きぐぉたけさぅげすたごえげぅぁい〨ぐげくざぉいぅい〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぐげくざぉいぅい〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺けふづひべたぴとひづちつ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〳〴

この呼び出しは現在のスレッドサポートのレベルをばひはぶどつづつに返す．これは，きぐぉが
きぐぉたぉぎぉごたごえげぅぁい〨〩の 呼 び 出 し に よ っ て 初 期 化 さ れ て い る 場 合 は，きぐぉたぉぎぉごたごえげぅぁいによってばひはぶどつづつに返される値である．

〳〸

〳〵
〳〶
〳〷

〳〹
〴〰
〴〱
〴〲
〴〳

きぐぉたぉこたごえげぅぁいたきぁぉぎ〨」ちで〩
くさご

」ちで

呼び出しスレッドがメインスレッドの場合はぴひふづ，
それ以外の場合はてちぬびづ（論理型）

〴〴
〴〵
〴〶

どのぴ きぐぉたぉびたぴとひづちつたねちどの〨どのぴ 〪てぬちで〩きぐぉたぉこたごえげぅぁいたきぁぉぎ〨うがぁぇ〬 ぉぅげげくげ〩

〴〷
〴〸

〴〰〴
〱
〲
〳
〴
〵
〶
〷
〸

第 〱〲〮 外部インターフェイス

がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげくげ
{ぢははぬ きぐぉ〺〺ぉびたぴとひづちつたねちどの〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
これがメインスレッド（きぐぉたぉぎぉごまたはきぐぉたぉぎぉごたごえげぅぁいを呼び出したスレッド）
であるかどうかを調べるため，スレッドでこの関数を呼び出すことができる．
この章で示したルーチンはすべて，すべてのきぐぉ実装でサポートされていなければな
らない．

〹
〱〰
〱〱
〱〲
〱〳
〱〴

根拠 きぐぉライブラリは，これらの関数の呼び出しが記述されたポータブルなコードが正しくリンクできるように，スレッドがサポートされていない場合でも，これらの呼び出しを備えていなければならない．きぐぉたぉぎぉごは，現在のきぐぉコードとの互換性を保証するため，引き続きサポートされている． （根拠の終わり）

〱〵
〱〶
〱〷
〱〸
〱〹

ユーザへのアドバイス スレッドの生成はきぐぉの初期化の前に行うことができるが，きぐぉたぉぎぉごぉぁがぉずぅい以外のきぐぉ呼び出しは，〱つのスレッド（結果として，メインス
レッドとなる）によってきぐぉたぉぎぉごたごえげぅぁいが呼び出されるまで実行してはならな
い．これによりマルチスレッドのプロセスからきぐぉ実行を開始することができる．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

提供されるスレッドサポートのレベルは，そのプロセスできぐぉが初期化されるとき（またはその前）に〱回だけ指定できるきぐぉプロセスのグローバルな属性である．
サードパーティの可搬なライブラリは，提供されるスレッドサポートのレベルに対応するように記述されていなければならない．対応していない場合，その使用が特定のスレッドサポートのレベルに制限される．このようなライブラリが特定のスレッドサポートのレベル，例えばきぐぉたごえげぅぁいたきさがごぉぐがぅでのみ実行可能な場
合，きぐぉたけさぅげすたごえげぅぁいを使用してユーザが正しいスレッドサポートのレベルにきぐぉを初期化しているかどうかを確認し，正しく初期化されていない場合は例外を発生させることができる． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵

第13章

〶
〷
〸
〹

入出力

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

13.1 はじめに〱〶〱〷ぐくこぉじは広い範囲で可搬なファイルシステムのモデルを備えているが，ぐくこぉじインターフェイスでは並列入出力で求められる可搬性と最適化が得られない．
効率化のための重要な最適化（グルーピングせ〳〵そ，集団バッファリングせ〶〬 〱〳〬 〳〶〬 〳〹〬〴〶そ，ディスク指向入出力せ〳〱そなど）のためには並列入出力システムが〲種類のどのぴづひてちっづを持つ必要がある． 〱番目は，プロセス間でのファイルデータの分割をサポートする上位レベルのインターフェイスであり， 〲番目は，複数のプロセスメモリから複数のファイルへ，またはその逆へ，グローバルなデータ構造を完全に転送できる集団イン
ターフェイスである．また，さらなる効率向上は，非同期入出力，ストライドアクセス，
ストレージデバイス（ディスク）上での物理的ファイル配置の制御により得られる．この章で説明する入出力環境はこれらの機能を提供する．
共有ファイルへのアクセス用の共通パターン（ブロードキャスト，リデュース，スキャッタ，ギャザー）を表現する入出力アクセスモードを定義するのではなく，派生デー
タ型を使用してデータの分割を表現するというアプローチを取る． 定義済みの限られた
アクセスパターンの集合に比べて，このアプローチには自由度と表現力を増すという利
点がある．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

13.1.1 定義〳〷

ファイル きぐぉファイルは型付けされたデータ項目の順序集合である． きぐぉでは，これらの項目の必要な部分集合に対してランダムアクセスまたは逐次アクセスが行える．
ファイルはプロセスのグループによって集団的に開かれる．ファイルでのすべての集団入出力呼び出しは，このグループに対して集団的である．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

変位 ファイルの変位とは，ファイルの先頭に対する絶対バイト位置のことである．変位により，ビューの開始領域が定義される．「ファイル変位」と「ファイルの「型マップ変位」は異なるため，注意する必要がある．

〴〴
〴〵
〴〶
〴〷

etype づぴべばづ（要素データ型）はデータアクセスと位置付けの単位である．これはきぐぉの〴〰〵〴〸第 〱〳〮 入出力

〴〰〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

任意の定義済みまたは派生データ型とすることができる．生成されるすべての型マップ変位が非負で単調非減少である限り，任意のきぐぉデータ型コンストラクタルー
チンを使用して派生づぴべばづを構成することができる．データアクセスでは，づぴべばづ単
位でづぴべばづ型のデータ項目全体の読み取りまたは書き込みが行われる．オフセット
はづぴべばづのカウントとして表現され，ファイルポインタはづぴべばづの先頭を指す．コン
テクストによって，ぜづぴべばづ〢という用語は要素データ型の〳つの側面のいずれか，つまり特定のきぐぉの型，その型のデータ項目，またはその型の範囲を記述するのに使用される．
ファイル型 ファイル型はプロセス間でファイルを分割するための基本で，ファイル
へのアクセスのための雛型を定義する． ファイル型は，単一のづぴべばづ，または同
じづぴべばづの複数のインスタンスから構成される派生きぐぉデータ型である．また，ファイル型の穴の範囲はづぴべばづの範囲の倍数とする必要がある．ファイル型の型マップ
内の変位は個々に異なっている必要はないが，非負で単調非減少でなければならな
い．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

ビュー ビューは，順序が規定されたづぴべばづの集合として，開かれたファイルから検知可
能でまたアクセス可能な現在のデータの集合を定義する．各プロセスは，変位，づぴべばづ，ファイル型という〳つの量で定義されたファイルの独自のビューを備えている．ファイル型によって示されるパターンは，変位を先頭として，反復してビューを定義する．反復のパターンは， きぐぉたごすぐぅたぃくぎごぉぇさくさこにファイル型と任意の大きさのカウントを渡した場合に生成されるのと同じパターンとして定義される．
図〱〳〮〱に，敷き詰めの方法を示す．この例のファイル型は，最初の穴と最後の穴がビューで反復されるように，明示的に下限と上限を設定する必要があることに注意すること．ビューはプログラムの実行中にユーザが変更できる．デフォルトのビュ
ーは直線のバイトストリーム（変位は〰で，づぴべばづとファイル型はきぐぉたあすごぅ）であ
る．

〳〲
〳〳

etype

〳〴

filetype

〳〵

holes

〳〶
〳〷

tiling a file with the filetype:〳〸〳〹displacement...

accessible data〴〰
〴〱

図 〱〳〮〱〺 づぴべばづびとファイル型

〴〲
〴〳
〴〴

プロセスのグループは，互いに重ならないビューを使用することで，スキャッタ／
ギャザーパターンなどのグローバルデータ分配が行える（図〱〳〮〲を参照）
．

〴〵
〴〶
〴〷
〴〸

オフセット
オフセットとは，づぴべばづのカウントとして表現される，現在のビューに対するファイルの相対位置のことである． この位置の計算では，ビューのファ〱〳〮〱〮 はじめに

〴〰〷
etype

〱

111
000
process 0 filetype 111
000
000
111

〲
〳

process 1 filetype〴

process 2 filetype〵tiling a file with the filetypes:

111
000
000
111

111
000
000
111

〶

111
000
000
111

111
000
000
111

111
000
000
111

...

displacement

図 〱〳〮〲〺 並列プロセス間のファイルの分割

〷
〸
〹
〱〰
〱〱
〱〲

イル型の穴はスキップされる．オフセット〰はビュー内で（ビュー内の変位と最初の穴をスキップした後で）最初に検知可能であるづぴべばづの位置である．例えば，
図〱〳〮〲のプロセス〱のオフセット〲は，ファイル内で変位の後の〸番目のづぴべばづの位置である．「明示的なオフセット」とは，明示的なデータアクセスルーチンで仮引数として使用されるオフセットである．
ファイルサイズとファイル終端 きぐぉファイルのサイズはファイルの先頭からバイト単位で測定される．新しく生成されたファイルのサイズは〰バイトとなる．サイズを絶対変位として使用することにより，ファイル内の最後のバイトの直後のバイトの位置が求められる．指定のビューに対するファイル終端は，ファイル内の最終バイトの後に始まる現在のビューでアクセス可能な最初のづぴべばづのオフセットである．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ファイルポインタ ファイルポインタとは，きぐぉによって暗黙に管理されるオフセットである．「個別ファイルポインタ」とは，そのファイルを開いたプロセスごとのロー
カルなファイルポインタである．「共有ファイルポインタ」とは，そのファイルを開いたプロセスのグループによって共有されるファイルポインタである．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

ファイルハンドル ファイルハンドルとは，きぐぉたうぉがぅたくぐぅぎによって生成され，きぐぉたうぉがぅたぃがくこぅによって解放される不可視オブジェクトである．開かれたファイルに対するすべての操作は，ファイルハンドルを通してそのファイルを参照する．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力〴〰〸〱

13.2 ファイル操作〲〳

13.2.1 ファイルを開く〴〵〶

きぐぉたうぉがぅたくぐぅぎ〨っはねね〬 「ぬづのちねづ〬 ちねはつづ〬 どのては〬 てと〩

〷
〸

ぉぎ

〹

ぉぎ

〱〰

ぉぎ

〱〱

ぉぎ

〱〲

くさご

っはねね
「ぬづのちねづ
ちねはつづ
どのては
てと

コミュニケータ（ハンドル）
開くファイルの名前（文字列）
ファイルのアクセスモード（整数型）
どのてはオブジェクト（ハンドル）
新しいファイルハンドル（ハンドル）

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

どのぴ きぐぉたうどぬづたはばづの〨きぐぉたぃはねね っはねね〬 っとちひ 〪てどぬづのちねづ〬 どのぴ ちねはつづ〬 きぐぉたぉのては どのては〬きぐぉたうどぬづ 〪てと〩きぐぉたうぉがぅたくぐぅぎ〨ぃくきき〬 うぉがぅぎぁきぅ〬 ぁきくいぅ〬 ぉぎうく〬 うえ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 うぉがぅぎぁきぅ
ぉぎごぅぇぅげ ぃくきき〬 ぁきくいぅ〬 ぉぎうく〬 うえ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺うどぬづ きぐぉ〺〺うどぬづ〺〺くばづの〨っはのびぴ きぐぉ〺〺ぉのぴひちっはねね〦 っはねね〬
っはのびぴ っとちひ〪 てどぬづのちねづ〬 どのぴ ちねはつづ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたくぐぅぎは，っはねねコ ミ ュ ニ ケ ー タ グ ル ー プ 内 の す べ て の プ ロ セ ス で フ ァ
イル名「ぬづのちねづによって識別されるファイルを開く． きぐぉたうぉがぅたくぐぅぎは集団的ルーチ
ンで，すべてのプロセスはちねはつづに対して同じ値を渡す必要があり，すべてのプロセスは同じファイルを参照する「ぬづのちねづを渡す必要がある．（どのてはの値は違っても構わない．）っはねねはグループ内コミュニケータでなければならず，きぐぉたうぉがぅたくぐぅぎにグ
ループ間コミュニケータを渡すのは誤りである． きぐぉたうぉがぅたくぐぅぎのエラーはデフォ
ル ト の フ ァ イ ル エ ラ ー ハ ン ド ラ を 使 用 し て 処 理 さ れ る（〴〶〵ペ ー ジ の 第〱〳〮〷節 を 参照）． プ ロ セ ス は，他 の プ ロ セ ス と は 独 立 し て， きぐぉたぃくききたこぅがうコ ミ ュ ニ ケ ー タ を使 用 し て フ ァ イ ル を 開 く こ と が で き る． 返 さ れ る フ ァ イ ル ハ ン ド ルてとは， そ の 後，
きぐぉたうぉがぅたぃがくこぅを使用してファイルが閉じられるまでファイルにアクセスするために使用できる．きぐぉたうぉぎぁがぉずぅを呼び出す前に，ユーザはきぐぉたうぉがぅたくぐぅぎを使用して開いたすべてのファイルを（きぐぉたうぉがぅたぃがくこぅにより）閉じる必要がある．コミュニケー
タっはねねはきぐぉたうぉがぅたくぐぅぎの影響を受けず，すべてのきぐぉルーチン（きぐぉたこぅぎいなど）で引き続き使用できる．また，っはねねの使用により入出力の動作が妨げられることはない．
「ぬづのちねづ引数でファイル名を指定するための形式は実装依存であり，文書化する必要が
ある．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス 実装では，「ぬづのちねづにファイルに関する追加情報を指定す
る〱つ以上の文字列を格納する必要がある場合がある．例えば，ファイルシステムのタイプ（ふてび〺などのプリフィックス），リモートホスト名（ねちっとどのづ〮ふのどぶ〮づつふ〺などのプリフィックス），ファイルのパスワード（〯ぐぁここしくげい〽こぅぃげぅごのサフィッ
クスなど）などを格納する． （実装者へのアドバイス終わり）〱〳〮〲〮 ファイル操作〴〰〹

ユーザへのアドバイス きぐぉの実装で，ファイルの名前空間はすべてのアプリケーションのすべてのプロセスで同じでない可能性がある．例えば，ぜ〯ぴねば〯てはは〢がプロセスごとに異なるファイルを指していたり，〱つのファイルがプロセスの場
所によって，異なる名前を持っていたりすることがある．実装ではこのような名
前空間のエラーを検出することができない場合があるため，ユーザの責任において，「ぬづのちねづ引数によって〱つのファイルが参照されるようにしなければならない．
（ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹

最初，すべてのプロセスはファイルを線形のバイトストリームとして参照し，各プロ
セスはデータをそれ自体のネイティブな表現で（データ表現の変換は行われない）参照
する．（ぐくこぉじファイルはネイティブな表現の線形のバイトストリーム．）ファイルのビューはきぐぉたうぉがぅたこぅごたざぉぅしルーチンによって変更することができる．
以下のアクセスモードがサポートされている（ちねはつづに以下の整数定数のビットベク
トルのくげを設定することで指定される）
．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

• きぐぉたきくいぅたげいくぎがす ぼ 読み取り専用，〱〸〱〹• きぐぉたきくいぅたげいしげ ぼ 読み取りおよび書き込み，〲〰
〲〱• きぐぉたきくいぅたしげくぎがす ぼ 書き込み専用，〲〲〲〳• きぐぉたきくいぅたぃげぅぁごぅ ぼ ファイルが存在しない場合は生成する，〲〴〲〵• きぐぉたきくいぅたぅじぃが ぼ すでに存在するファイルを生成しようとした場合にエラー，• きぐぉたきくいぅたいぅがぅごぅたくぎたぃがくこぅ ぼ 閉じるときにファイルを削除，

〲〶
〲〷
〲〸

• きぐぉたきくいぅたさぎぉけさぅたくぐぅぎ ぼ ファイルは別の場所で同時に開けない，〲〹• きぐぉたきくいぅたこぅけさぅぎごぉぁが ぼ ファイルは逐次にのみアクセス可能，

〳〱

〳〰

〳〲

• きぐぉたきくいぅたぁぐぐぅぎい ぼ すべてのファイルポインタの初期位置をファイル終端に設
定．

〳〳

ユーザへのアドバイス ぃ言語〯ぃ〫〫言語のユーザはビットベクトルくげ〨|〩を使用してこれらの定数を組み合わせることができる． うはひぴひちの 〹〰言語のユーザはビットベ
クトルのぉくげイントリンシックを使用することができる． うはひぴひちの 〷〷言語のユーザ
は，システムでサポートされていればビットベクトルぉくげを（可搬ではないが）使用することができる．または，うはひぴひちの言語のユーザは定数のくげ演算のために整数加算を使用でき，これは可搬である． （それぞれの定数はたかだか〱回しか加算に現れてはならない）． （ユーザへのアドバイス終わり）

〳〶

〳〴
〳〵

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

実装者へのアドバイス これらの定数の値は，ビット単位のくげと ，これらの定数を要素とする重複要素を持たない集合の要素の合計値が等しくなるように定義する必要がある． （実装者へのアドバイス終わり）

〴〶
〴〷
〴〸

〴〱〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

第 〱〳〮 入出力

モードきぐぉたきくいぅたげいくぎがす， きぐぉたきくいぅたげいしげ， きぐぉたきくいぅたしげくぎがす，
きぐぉたきくいぅたぃげぅぁごぅ，およびきぐぉたきくいぅたぅじぃがの意味はぐくこぉじの対応するモードと同じである せ〲〹そ． きぐぉたきくいぅたげいくぎがす， きぐぉたきくいぅたげいしげ，またはきぐぉたきくいぅたしげくぎがすのいず
れか〱つを指定する必要がある． きぐぉたきくいぅたぃげぅぁごぅまたはきぐぉたきくいぅたぅじぃがをきぐぉたきくいぅたげいくぎがすと一緒に指定するのは誤りである． きぐぉたきくいぅたこぅけさぅぎごぉぁがをきぐぉたきくいぅたげいしげと一緒に指定するのは誤りである．
きぐぉたきくいぅたいぅがぅごぅたくぎたぃがくこぅモードを使用すると，ファイルを閉じたときにファイルが削除される（きぐぉたうぉがぅたいぅがぅごぅを実行するのと同じ）．
きぐぉたきくいぅたさぎぉけさぅたくぐぅぎモードを使用すると，ファイルのロックのオーバーヘッドが除去され，実装でのアクセスを最適化できる．ファイルが別の場所で同時に開かれている場合，このモードでファイルを開くのは誤りである．

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

ユーザへのアドバイス きぐぉたきくいぅたさぎぉけさぅたくぐぅぎの場合，別の場所で開かれていな
いという表現にはきぐぉ環境の内部と外部の両方が含まれる．特に，外部のイベント（自動バックアップ機能など）によりファイルが開かれる可能性があることを意識する必要がある． きぐぉたきくいぅたさぎぉけさぅたくぐぅぎを指定する場合，ユーザの責任により，
このような外部のイベントが発生しないようにする必要がある． （ユーザへのア
ドバイス終わり）〲〲〲〳

きぐぉたきくいぅたこぅけさぅぎごぉぁがモードを使用すると，実装での一部の逐次デバイス（テープ〲〴およびネットワークストリーム）へのアクセスを最適化することができる．このモードで開かれているファイルに対して，逐次でないアクセスを試みるのは誤りである．
きぐぉたきくいぅたぁぐぐぅぎいを指定した場合，保証されるのは，すべての共有および個々のファイルポインタがきぐぉたうぉがぅたくぐぅぎが戻るときに最初のファイル終端に位置づけられることだけである．それ以降のファイルポインタの位置付けはアプリケーションによって決まる．特に，すべての書き込みが追記されることを実装が保証するわけではない．
アクセスモードに関連するエラーはクラスきぐぉたぅげげたぁきくいぅで報告される．
どのては引数を使用して，ファイルのアクセスパターンとファイルシステムに特有の情報を渡すことができる（〴〱〵ページの第〱〳〮〲〮〸節を参照）．定数きぐぉたぉぎうくたぎさががはどのてはを指定する必要がない場合に使用できる．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス 一部のファイル属性は本質的に実装内容によって決まる（ファイルのパーミッションなど）．これらの属性を設定するには，どのては引数，またはきぐぉの有効範囲外の機能を使用する必要がある． （ユーザへのアドバイス終わり）
ファイルはデフォルトではノンアトミックモードのファイル一貫性の意味論に基づいて開かれる（〴〵〵ページの第〱〳〮〶〮〱節を参照）．より厳格なアトミックモードの整合性の意
味論は，コンフリクトのあるアクセスのアトミック性の保証のために必要となるが，これを設定するにはきぐぉたうぉがぅたこぅごたぁごくきぉぃぉごすを使用する必要がある．

〱〳〮〲〮 ファイル操作〴〱〱

13.2.2 ファイルを閉じる

〱
〲
〳
〴

きぐぉたうぉがぅたぃがくこぅ〨てと〩
ぉぎくさご

てと

ファイルハンドル 〨ハンドル〩〵〶

どのぴ きぐぉたうどぬづたっぬはびづ〨きぐぉたうどぬづ 〪てと〩きぐぉたうぉがぅたぃがくこぅ〨うえ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺ぃぬはびづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたぃがくこぅは最初にファイル状態の同期を取り（きぐぉたうぉがぅたこすぎぃを実行するのと同じ），次にてとのファイルを閉じる．アクセスモードきぐぉたきくいぅたいぅがぅごぅたくぎたぃがくこぅを使用してファイルが開かれていた場合，ファイルが削除される（きぐぉたうぉがぅたいぅがぅごぅを実
行するのと同じ〩．きぐぉたうぉがぅたぃがくこぅは集団的ルーチンである．
ユーザへのアドバイス ファイルを閉じるときに削除する場合で，そのファイルに現在アクセスしている他のプロセスがある場合，ファイルのステータスとこれらのプロセスによるその後のアクセスの動作は，実装依存である． （ユーザへのアドバイス終わり）

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

ユ ー ザ の 責 任 に お い て， す べ て の 未 完 了 の ノ ン ブ ロ ッ キ ン グ 要 求 と， プ ロ セ ス
によって実行されたてとに関連付けれらた分割された集団操作が，そのプロセスによるきぐぉたうぉがぅたぃがくこぅの呼び出しの前に完了していることを保証する必要がある．
きぐぉたうぉがぅたぃがくこぅひはふぴどのづはファイルハンドルオブジェクトを解放し，てとにきぐぉたうぉがぅたぎさががを設定する．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

13.2.3 ファイルの削除

〲〹
〳〰
〳〱

きぐぉたうぉがぅたいぅがぅごぅ〨「ぬづのちねづ〬 どのては〩ぉぎぉぎ「ぬづのちねづ
どのては〳〲削除するファイルの名前（文字列）
どのてはオブジェクト（ハンドル）

〳〳
〳〴
〳〵

どのぴ きぐぉたうどぬづたつづぬづぴづ〨っとちひ 〪てどぬづのちねづ〬 きぐぉたぉのては どのては〩きぐぉたうぉがぅたいぅがぅごぅ〨うぉがぅぎぁきぅ〬 ぉぎうく〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 うぉがぅぎぁきぅ
ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
{びぴちぴどっ ぶはどつ きぐぉ〺〺うどぬづ〺〺いづぬづぴづ〨っはのびぴ っとちひ〪 てどぬづのちねづ〬 っはのびぴ きぐぉ〺〺ぉのては〦 どのては〩（廃止された呼び出し形式, 第15.2節を参照）}〳〶

きぐぉたうぉがぅたいぅがぅごぅはファイル名「ぬづのちねづによって識別されるファイルを削除する．ファイルが存在しない場合，きぐぉたうぉがぅたいぅがぅごぅはクラスきぐぉたぅげげたぎくたこさぃえたうぉがぅでエラーを報告する．
どのては引数を使用して，ファイルシステムに特有の情報を渡すことができる（〴〱〵ページの第〱〳〮〲〮〸節〱〳〮〲〮〸節を参照）．定数きぐぉたぉぎうくたぎさががはのふぬぬのどのてはを指し，どのてはを指定する必要がない場合に使用できる．

〴〲

〳〷
〳〸
〳〹
〴〰
〴〱

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〱〲
〱
〲
〳
〴
〵
〶

プ ロ セ ス で 現 在 フ ァ イ ル が 開 か れ て い る 場 合，そ の フ ァ イ ル へ の ア ク セ ス の 動
作（および未完了のアクセスの動作）は実装依存である． また，開かれているファイ ル を 削 除 す る か ど う か も 実 装 依 存 で あ る． フ ァ イ ル が 削 除 さ れ な い 場 合， ク ラ
スきぐぉたぅげげたうぉがぅたぉぎたさこぅまたはきぐぉたぅげげたぁぃぃぅここでエラーが報告される． エラーの処理
は，デフォルトのエラーハンドラを使用して行われる（〴〶〵ページの第〱〳〮〷節を参照）．

〷〸

13.2.4 ファイルのサイズ変更

〹
〱〰
〱〱

きぐぉたうぉがぅたこぅごたこぉずぅ〨てと〬 びどぺづ〩

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

ぉぎくさご
ぉぎ

てと
びどぺづ

ファイルハンドル（ハンドル）
ファイルの切り詰めまたは拡張サイズ（整数型）

どのぴ きぐぉたうどぬづたびづぴたびどぺづ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ びどぺづ〩
きぐぉたうぉがぅたこぅごたこぉずぅ〨うえ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 こぉずぅ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺こづぴたびどぺづ〨きぐぉ〺〺くててびづぴ びどぺづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたこぅごたこぉずぅはファイルハンドルてとのファイルのサイズを変更する．びどぺづはファイルの先頭からバイト単位で測定される．きぐぉたうぉがぅたこぅごたこぉずぅは集団的で，グループ
内のすべてのプロセスはびどぺづに同じ値を渡す必要がある．
びどぺづが現在のファイルのサイズより小さい場合，びどぺづによって定義された位置でファイルが切り詰められる．実装では，この位置を超えた場所にあるファイルブロックを自由に開放することができる．
びどぺづが現在のファイルのサイズより大きい場合，ファイルのサイズはびどぺづとなる．前に書き込まれたファイルの領域は影響を受けない．ファイルの新しい領域（古いファイル
サイズとびどぺづの間の変位の領域）内のデータの値は未定義となる．きぐぉたうぉがぅたこぅごたこぉずぅルーチンでファイル領域を割り当てるかどうかは実装依存である．ファイル領域を強制的に確保するには，きぐぉたうぉがぅたぐげぅぁががくぃぁごぅを使用する．
きぐぉたうぉがぅたこぅごたこぉずぅは個々のファイルポインタまたは共有ファイルポインタに影響を及ぼさない．ファイルを開いたときにきぐぉたきくいぅたこぅけさぅぎごぉぁがモードが指定されている
場合，このルーチンを呼び出すのは誤りである．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

ユーザへのアドバイス きぐぉたうぉがぅたこぅごたこぉずぅ操作によってファイルの切り詰めが行われた後で，ファイルポインタがファイル終端を超えた先を指すことができる．これは正しい動作で，現在のファイル終端を超えた先をシークするのと同じである．
（ユーザへのアドバイス終わり）

〴〴
〴〵
〴〶
〴〷
〴〸

てとに対するノンブロッキング要求とスプリット集団操作はすべて，
きぐぉたうぉがぅたこぅごたこぉずぅを呼び出す前に完了していなければならない． そうでない場合，
きぐぉたうぉがぅたこぅごたこぉずぅの呼び出しは誤りである． 一貫性の意味論の視点で見ると，
きぐぉたうぉがぅたこぅごたこぉずぅは書込み操作であり，古いファイルサイズと新しいファイルサ〱〳〮〲〮 ファイル操作〴〱〳

イズの中間の変位にアクセスする操作との間でコンフリクトが生じる（〴〵〵ページの第〱〳〮〶〮〱節を参照）
．

〱
〲
〳

13.2.5 ファイルの領域の事前アロケート

〴
〵
〶
〷

きぐぉたうぉがぅたぐげぅぁががくぃぁごぅ〨てと〬 びどぺづ〩
ぉぎくさご
ぉぎ

てと
びどぺづ

〸

ファイルハンドル（ハンドル）〹

ファイルの事前アロケートサイズ（整数型）〱〰
〱〱

どのぴ きぐぉたうどぬづたばひづちぬぬはっちぴづ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ びどぺづ〩
きぐぉたうぉがぅたぐげぅぁががくぃぁごぅ〨うえ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 こぉずぅ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺ぐひづちぬぬはっちぴづ〨きぐぉ〺〺くててびづぴ びどぺづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたぐげぅぁががくぃぁごぅは，てとのファイルの最初のびどぺづバイトについてストレージス
ペースの割り当てを保証する．きぐぉたうぉがぅたぐげぅぁががくぃぁごぅは集団的で，グループ内のすべてのプロセスはびどぺづに同じ値を渡す必要がある． 前に書き込まれたファイルの領域
は影響を受けない． 新しく割り当てられたファイルの領域については，
きぐぉたうぉがぅたぐげぅぁががくぃぁごぅの結果は未定義のデータを書き込むのと同じになる．びどぺづが現在のファイルのサイズより大きい場合，ファイルのサイズはびどぺづに増える．びどぺづが現在のファイルのサイズ以下の場合，ファイルのサイズは変更されない．
フ ァ イ ル ポ イ ン タ， 保 留 中 の ノ ン ブ ロ ッ キ ン グ ア ク セ ス， フ ァ イ ル の 一 貫 性 の扱いについては，きぐぉたうぉがぅたこぅごたこぉずぅの場合と同様である． ファイルを開いたときにきぐぉたきくいぅたこぅけさぅぎごぉぁがモードが指定されている場合，このルーチンを呼び出すのは誤りである．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

ユーザへのアドバイス 実装によっては，ファイルの事前割当はコストが大きいことがある． （ユーザへのアドバイス終わり）

〳〲
〳〳
〳〴

13.2.6 ファイルのサイズの問い合わせ

〳〵
〳〶
〳〷
〳〸

きぐぉたうぉがぅたぇぅごたこぉずぅ〨てと〬 びどぺづ〩
ぉぎ
くさご

てと
びどぺづ

〳〹

ファイルハンドル（ハンドル）〴〰

ファイルのサイズ（バイト単位）（整数型）〴〱〴〲

どのぴ きぐぉたうどぬづたでづぴたびどぺづ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ 〪びどぺづ〩
きぐぉたうぉがぅたぇぅごたこぉずぅ〨うえ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 こぉずぅ{きぐぉ〺〺くててびづぴ きぐぉ〺〺うどぬづ〺〺ぇづぴたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〱〴
〱
〲
〳
〴

きぐぉたうぉがぅたぇぅごたこぉずぅはファイルハンドルてとのファイルの現在のバイト単位のサイズをびどぺづに返す．一貫性の意味論に関する限り，きぐぉたうぉがぅたぇぅごたこぉずぅはデータアクセス操作である（〴〳〷ページの〱〳〮〶〮〱節を参照）．

〵〶

13.2.7 ファイルパラメータの問い合わせ〷〸〹きぐぉたうぉがぅたぇぅごたぇげくさぐ〨てと〬 でひはふば〩

〱〰

ぉぎ

〱〱

くさご

てと
でひはふば

ファイルハンドル（ハンドル）
ファイルを開いたグループ（ハンドル）

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

どのぴ きぐぉたうどぬづたでづぴたでひはふば〨きぐぉたうどぬづ てと〬 きぐぉたぇひはふば 〪でひはふば〩
きぐぉたうぉがぅたぇぅごたぇげくさぐ〨うえ〬 ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぇげくさぐ〬 ぉぅげげくげ
{きぐぉ〺〺ぇひはふば きぐぉ〺〺うどぬづ〺〺ぇづぴたでひはふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたぇぅごたぇげくさぐはてとのファイルを開くのに使用したコミュニケータのグルー
プの複製を返す．グループはでひはふばに返される．でひはふばを解放するのはユーザの責任であ
る．

〲〱
〲〲

きぐぉたうぉがぅたぇぅごたぁきくいぅ〨てと〬 ちねはつづ〩

〲〳

ぉぎ

〲〴

くさご

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

〳〵

ファイルを開くのに使用したファイルアクセスモー
ド（整数型）

きぐぉたうぉがぅたぇぅごたぁきくいぅはてとのファイルのアクセスモードをちねはつづに返す．

〳〲〳〴

ファイルハンドル（ハンドル）

どのぴ きぐぉたうどぬづたでづぴたちねはつづ〨きぐぉたうどぬづ てと〬 どのぴ 〪ちねはつづ〩きぐぉたうぉがぅたぇぅごたぁきくいぅ〨うえ〬 ぁきくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぁきくいぅ〬 ぉぅげげくげ
{どのぴ きぐぉ〺〺うどぬづ〺〺ぇづぴたちねはつづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〱

〳〳

てと
ちねはつづ

例 13.1 うはひぴひちの 〷〷言語では，ちねはつづビットベクトルをデコードするには以下のようなルーチンが必要となる．

〳〶
〳〷
〳〸
〳〹
〴〰

こさあげくさごぉぎぅ あぉごたけさぅげす〨ごぅこごたあぉご〬 きぁじたあぉご〬 ぁきくいぅ〬 あぉごたうくさぎい〩
〡
〡
〡
〡

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〰〰

ごぅこご ぉう ごえぅ ぉぎぐさご ごぅこごたあぉご ぉこ こぅご ぉぎ ごえぅ ぉぎぐさご ぁきくいぅ
ぉう こぅご〬 げぅごさげぎ 〱 ぉぎ あぉごたうくさぎい〬 〰 くごえぅげしぉこぅぉぎごぅぇぅげ ごぅこごたあぉご〬 ぁきくいぅ〬 あぉごたうくさぎい〬 ぃぐたぁきくいぅ〬 えぉうくさぎいあぉごたうくさぎい 〽 〰
ぃぐたぁきくいぅ 〽 ぁきくいぅ
ぃくぎごぉぎさぅがあぉご 〽 〰
えぉうくさぎい 〽 〰
いく 〲〰 が 〽 きぁじたあぉご〬 〰〬 〭〱きぁごぃえぅげ 〽 〲〪〪がぉう 〨ぃぐたぁきくいぅ 〮ぇぅ〮 きぁごぃえぅげ 〮ぁぎい〮 えぉうくさぎい 〮ぅけ〮 〰〩 ごえぅぎえぉうくさぎい 〽 〱〱〳〮〲〮 ファイル操作

〲〰

〴〱〵

があぉご 〽 きぁごぃえぅげ
ぃぐたぁきくいぅ 〽 ぃぐたぁきくいぅ 〭 きぁごぃえぅげぅぎい ぉうぃくぎごぉぎさぅぉう 〨えぉうくさぎい 〮ぅけ〮 〱 〮ぁぎい〮 があぉご 〮ぅけ〮 ごぅこごたあぉご〩 あぉごたうくさぎい 〽 〱ぉう 〨あぉごたうくさぎい 〮ぅけ〮 〰 〮ぁぎい〮 えぉうくさぎい 〮ぅけ〮 〱 〮ぁぎい〮 〦ぃぐたぁきくいぅ 〮ぇご〮 〰〩 ぇく ごく 〱〰〰
ぅぎい

ちねはつづを〱ビットずつデコードするため，このルーチンを連続して呼び出すことができる．例えば，以下の部分コードではきぐぉたきくいぅたげいくぎがすのチェックが行われる．
ぃぁがが あぉごたけさぅげす〨きぐぉたきくいぅたげいくぎがす〬 〳〰〬 ぁきくいぅ〬 あぉごたうくさぎい〩ぉう 〨あぉごたうくさぎい 〮ぅけ〮 〱〩 ごえぅぎぐげぉぎご 〪〬 〧 うくさぎい げぅぁい〭くぎがす あぉご ぉぎ ぁきくいぅ〽〧〬 ぁきくいぅ
ぅがこぅぐげぉぎご 〪〬 〧 げぅぁい〭くぎがす あぉご ぎくご うくさぎい ぉぎ ぁきくいぅ〽〧〬 ぁきくいぅ
ぅぎい ぉう

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

13.2.8 ファイルのinfo〱〹〲〰

どのてはを通して指定されるヒント（〳〱〱ページの第〹節を参照）を使用して，ユーザはファイルのアクセスパターンの情報やファイルシステムに特有の情報などを与えて最適化を指示することができる． ヒントを提示することで，実装で入出力の性能を向上させたり，システムリソースの使用を最小限に抑えたりすることができる． しかし，ヒントが入出力インターフェースの意味論を変えることはない． つまり，実装ではすべてのヒントを無視することも自由である． ヒントは不可視のどのてはオブジ
ェクトを通して，きぐぉたうぉがぅたくぐぅぎ，きぐぉたうぉがぅたいぅがぅごぅ，きぐぉたうぉがぅたこぅごたざぉぅし，およびきぐぉたうぉがぅたこぅごたぉぎうくでファイルごとに指定される．有効なヒントのサブセットを指定したどのてはオブジェクトをきぐぉたうぉがぅたこぅごたざぉぅしまたはきぐぉたうぉがぅたこぅごたぉぎうくに渡す場合，
このどのてはで指定しない設定済みのヒントやデフォルトのヒントには影響しない．
実装者へのアドバイス あるシステム用にヒントをつけてプログラムを作成し，これらのヒントをサポートしていない別のシステムで後から実行する場合もある．一般的に，サポートされていないヒントは単に無視されなければならない．言うまでもなく，ヒントは必須ではありえない．しかし，特定の実装で使用されるヒントについては，ユーザがこのヒントの値を指定しない場合にデフォルト値を渡す必要がある． （実装者へのアドバイス終わり）

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

きぐぉたうぉがぅたこぅごたぉぎうく〨てと〬 どのては〩
ぉぎくさご
ぉぎ

てと
どのては

〴〳

ファイルハンドル（ハンドル）
どのてはオブジェクト（ハンドル）

〴〴
〴〵
〴〶

どのぴ きぐぉたうどぬづたびづぴたどのては〨きぐぉたうどぬづ てと〬 きぐぉたぉのては どのては〩きぐぉたうぉがぅたこぅごたぉぎうく〨うえ〬 ぉぎうく〬 ぉぅげげくげ〩〴〷〴〸第 〱〳〮 入出力

〴〱〶
〱
〲
〳
〴
〵
〶
〷
〸

ぉぎごぅぇぅげ うえ〬 ぉぎうく〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺こづぴたどのては〨っはのびぴ きぐぉ〺〺ぉのては〦 どのては〩 （廃止された呼び出し形式, 第15.2節
を参照）}
きぐぉたうぉがぅたこぅごたぉぎうくはてとのファイルのヒントのための新しい値を設定する．
きぐぉたうぉがぅたこぅごたぉぎうくは集団的ルーチンである．どのてはオブジェクトはプロセスごとに違っていても構わないが，実装によりすべてのプロセスで同じであることが求められるどのてはエントリは各プロセスのどのてはオブジェクトで同じ値にならなければならない．

〹

ユーザへのアドバイス ファイルを生成するとき，または開くときに実装で使用できる多数のどのては項目は，ファイルが生成されたり，開かれたりした後では容易に変更できない．そのため，実装は，オープン呼び出しであれば受け付けたであろう
ヒントをこの呼び出しでは無視することができる． （ユーザへのアドバイス終わ
り）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

きぐぉたうぉがぅたぇぅごたぉぎうく〨てと〬 どのてはたふびづつ〩

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ぉぎ
くさご

てと
どのてはたふびづつ

ファイルハンドル（ハンドル）
新しいどのてはオブジェクト（ハンドル）

どのぴ きぐぉたうどぬづたでづぴたどのては〨きぐぉたうどぬづ てと〬 きぐぉたぉのては 〪どのてはたふびづつ〩
きぐぉたうぉがぅたぇぅごたぉぎうく〨うえ〬 ぉぎうくたさこぅい〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぎうくたさこぅい〬 ぉぅげげくげ
{きぐぉ〺〺ぉのては きぐぉ〺〺うどぬづ〺〺ぇづぴたどのては〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

きぐぉたうぉがぅたぇぅごたぉぎうくはてとのファイルのヒントが格納された新しいどのてはオブジェクトを返す．この開かれたファイルに関連する，システムによって実際に使用されるすべてのヒントの現在の設定は，どのてはたふびづつに返される．このようなヒントがない場合，新しく生成され，キー値のペアが格納されていないどのてはオブジェクトへのハンドルが返される．
きぐぉたぉぎうくたうげぅぅによりどのてはたふびづつを解放するのはユーザの責任である．
ユーザへのアドバイス どのてはたふびづつに値が返されるどのてはオブジェクトには，このファイルのための現在アクティブなすべてのヒントが格納される．システムではユーザによって設定されたヒントが識別できず，ユーザが設定した以外のヒントを識別する可能性があるため，このヒントの集合はきぐぉたうぉがぅたくぐぅぎ，きぐぉたうぉがぅたこぅごたざぉぅし，きぐぉたうぉがぅたこぅごたぉぎうくに渡されたヒントの集合よりも大きくなったり小さくなった
りする場合がある． （ユーザへのアドバイス終わり）

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

予約されたファイルのヒント
有益と思われるいくつかのヒント（どのてはキー値）を以下に紹介する．以下に示すキー
値が予約されている．実装ではこれらのキー値を解釈する必要はないが，キー値を解釈する場合，記述された機能を提供する必要がある（「どのては」の詳細は，〳〱〱ページの第〹節を参照）．

〱〳〮〲〮 ファイル操作〴〱〷

これらのヒントは主に並列入出力デバイスでのアクセスパターンとデータの配置に影響する．紹介する各ヒントの名前について，そのヒントの目的とヒント値の型を説明す
る．ぜ[SAME]〢の注釈には参加するすべてのプロセスによって渡されるヒント値が同一でなければならないことを指定する．そうしない場合プログラムは誤りである．また，一部のヒントは実行のコンテクストに応じて決まり，特定のタイミングでのみ実装によって使用される（例えば，「ぬづたばづひねはファイルの生成中のみ有効）
．

〱
〲
〳
〴
〵
〶
〷
〸

ちっっづびびたびぴべぬづ (カンマ区切りの文字列のリスト)： このヒントは，ファイルが閉じられるま〹で，またはちっっづびびたびぴべぬづキー値が変更されるまでのファイルへのアクセス方法を指定する．ヒント値はカンマ区切りのリストで，以下である． ひづちつたはのっづ〬 ぷひどぴづたはのっづ〬
ひづちつたねはびぴぬべ〬 ぷひどぴづたねはびぴぬべ〬 びづぱふづのぴどちぬ〬 ひづぶづひびづたびづぱふづのぴどちぬ〬 ちのつ ひちのつはね．

〱〰

っはぬぬづっぴどぶづたぢふ》づひどので (論理型) [SAME]： このヒントはアプリケーションが集団バッファリングを利用するかどうかを指定する．集団バッファリングとは集団的アクセスで行われる最適化のことである．グループ内のすべてのプロセスがファイルへアクセスする代わりに一定数のターゲットノードによって行われる．これらのターゲットノードにより複数の小さな要求が大きなディスクアクセスに統合される．このキーの値としてはぴひふづとてちぬびづが使用できる．追加のヒントにより，集団バッファリングパ
ラメータっぢたぢぬはっにたびどぺづ，っぢたぢふ》づひたびどぺづ，っぢたのはつづびがさらに指示される．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

っぢたぢぬはっにたびどぺづ (整数型) [SAME]： このヒントは，集団バッファリングのファイルアクセ

スに使用するブロックサイズを指定する．ターゲットノードはこのサイズのチャンクでデータにアクセスする．チャンクはラウンドロビン（ぃすぃがぉぃ）パターンでターゲットノード間で分配される．

〲〴
〲〵
〲〶
〲〷
〲〸

っぢたぢふ》づひたびどぺづ (整数型) [SAME]： このヒントは各ターゲットノードで集団バッファリン

グのために使用できる総バッファ領域で，通常はっぢたぢぬはっにたびどぺづの倍数で指定する．

〲〹
〳〰
〳〱

っぢたのはつづび (整数型) [SAME]： このヒントは集団バッファリングに使用されるターゲッ

トノードの数を指定する．

〳〲
〳〳
〳〴

っとふのにづつ (カンマ区切りの整数のリスト) [SAME]： このヒントは，多次元配列としてファイルが構成されることを指定する．この配列は部分配列単位でアクセスされることが多い．このヒントの値はカンマ区切りの配列の次元のリストで，最も重要なものが最初に指定される（ぃ言語の場合のように行優先の順序で格納された配列の場
合，最も重要な次元が最初の次元のであり，うはひぴひちの言語の場合のように列優先の順序で格納された配列の場合は，最も重要な次元が最後の次元であり，配列の次元を逆にする必要がある）．
っとふのにづつたどぴづね (カンマ区切りの整数のリスト) [SAME]： このヒントは配列のエントリのサイズをバイト単位で指定する．

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力〴〱〸〱

っとふのにづつたびどぺづ (カンマ区切りの整数のリスト) [SAME]： このヒントは部分配列の次元を〲指定する．これはカンマ区切りの配列の次元のリストで，最も重要なものが最初に指定される．

〳
〴
〵
〶
〷
〸
〹
〱〰

「ぬづのちねづ (文字列)： このヒントは，ファイルが開かれた時に使用されたファイル名を指定する．開かれたファイルのファイル名を実装で返すことができる場合，このキーを使用してきぐぉたうぉがぅたぇぅごたぉぎうくにより返される．このキーは，きぐぉたうぉがぅたくぐぅぎ，
きぐぉたうぉがぅたこぅごたざぉぅし，きぐぉたうぉがぅたこぅごたぉぎうく，きぐぉたうぉがぅたいぅがぅごぅに渡された場合は無視される．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

「ぬづたばづひね (文字列) [SAME]： このヒントはファイルの生成用に使用するファイルのパーミッションを指定する．このヒントの設定は， きぐぉたきくいぅたぃげぅぁごぅが格納されたちねはつづをきぐぉたうぉがぅたくぐぅぎに渡した場合のみ有用である．このキーに対する正しい値の集合は実装依存である．
どはたのはつづたぬどびぴ (カンマ区切りの文字列のリスト) [SAME]： このヒントは，ファイルを格納するために使用する必要のある入出力デバイスのリストを指定する．このヒントに最も関連するのはファイルの生成時である．

〲〱
〲〲
〲〳
〲〴

のぢたばひはっ (整数型) [SAME]： このヒントは，このファイルにアクセスするプログラムを実行するために通常割り当てられる並列プロセスの数を指定する．このヒントに最も関連するのはファイルの生成時である．

〲〵
〲〶
〲〷

のふねたどはたのはつづび (整数型) [SAME]： このヒントはシステム内の入出力デバイスの数を指定する．このヒントに最も関連するのはファイルの生成時である．

〲〸〲〹

びぴひどばどのでたてちっぴはひ (整数型) [SAME]： このヒントはファイルをストライピングすべき入出〳〰

力デバイス数を指定する．このヒントが有効なのはファイルの生成時である．

〳〱〳〲

びぴひどばどのでたふのどぴ (整数型) [SAME]： このヒントはこのファイル用に使用される，提案のス〳〳

トライピング単位を指定する．ストライピング単位とは，多数のデバイスでのスト
ライピングを行う場合に，次のデバイスに進む前に〱台の入出力デバイスに割り当
てる連続データの量である．これはバイト単位で表現される．このヒントに関連するのはファイルの生成時のみである．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〳〮〳〮 ファイルのビュー〴〱〹

13.3 ファイルのビュー

〱
〲
〳
〴

きぐぉたうぉがぅたこぅごたざぉぅし〨てと〬 つどびば〬 づぴべばづ〬 「ぬづぴべばづ〬 つちぴちひづば〬 どのては〩
ぉぎくさご
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ

てと
つどびば
づぴべばづ
「ぬづぴべばづ
つちぴちひづば
どのてはファイルハンドル（ハンドル）〵〶

変位（整数型）〷

要素データ型（ハンドル）〸ファイル型（ハンドル）〹

データ表現（文字列）
どのてはオブジェクト（ハンドル）

どのぴ きぐぉたうどぬづたびづぴたぶどづぷ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ つどびば〬 きぐぉたいちぴちぴべばづ づぴべばづ〬
きぐぉたいちぴちぴべばづ てどぬづぴべばづ〬 っとちひ 〪つちぴちひづば〬 きぐぉたぉのては どのては〩きぐぉたうぉがぅたこぅごたざぉぅし〨うえ〬 いぉこぐ〬 ぅごすぐぅ〬 うぉがぅごすぐぅ〬 いぁごぁげぅぐ〬 ぉぎうく〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぅごすぐぅ〬 うぉがぅごすぐぅ〬 ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 いぉこぐ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺こづぴたぶどづぷ〨きぐぉ〺〺くててびづぴ つどびば〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 づぴべばづ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 てどぬづぴべばづ〬 っはのびぴ っとちひ〪 つちぴちひづば〬っはのびぴ きぐぉ〺〺ぉのては〦 どのては〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたこぅごたざぉぅしルーチンはファイル内のデータのプロセスビューを変更する．
ビューの起点はつどびばに設定され，データの型はづぴべばづに設定され，プロセスへのデータの分配は「ぬづぴべばづに設定され，ファイル内でのデータの表現はつちぴちひづばに設定される．また，きぐぉたうぉがぅたこぅごたざぉぅしは個々のファイルポインタと共有ファイルポインタを〰にリセットする．きぐぉたうぉがぅたこぅごたざぉぅしは集団的で，ファイルデータ表現内でのつちぴちひづばの値とづぴべばづの範囲はグループ内のすべてのプロセスで同じでなければならず，つどびば，「ぬづぴべばづ，
どのてはの値は異なっていてもよい．づぴべばづと「ぬづぴべばづに渡すデータ型はコミットされている必
要がある．
づぴべばづは常にファイル内のデータ配置を指定する．づぴべばづが可搬なデータ型である場合（〱〳ページの第〲〮〴節を参照），づぴべばづの範囲はファイルのデータ表現に合わせてデータ型の変位をスケールさせることにより計算される．づぴべばづが可搬なデータ型でない場合，
づぴべばづの範囲の計算時にスケーリングは行われない．異機種環境で可搬でないづぴべばづを使用
する場合は，注意が必要である．詳細は〴〴〷ページの第〱〳〮〵〮〱節を参照すること．
ファイルが開かれたときにきぐぉたきくいぅたこぅけさぅぎごぉぁがモードが指定されている場合，
つどびばに特別な変位きぐぉたいぉこぐがぁぃぅきぅぎごたぃさげげぅぎごを渡す必要がある． これにより変位が共 有 フ ァ イ ル ポ イ ン タ の 現 在 の 位 置 に 設 定 さ れ る． フ ァ イ ル のちねはつづがきぐぉたきくいぅたこぅけさぅぎごぉぁがに 設 定 さ れ て い る 場 合 を 除 い て，きぐぉたいぉこぐがぁぃぅきぅぎごたぃさげげぅぎごは無効である．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

根拠 磁気テープやストリーミングネットワーク接続に対応するものなどの
逐 次 フ ァ イ ル の 場 合， 変 位 が 意 味 を 持 た な い こ と も あ る．
きぐぉたいぉこぐがぁぃぅきぅぎごたぃさげげぅぎごを使用すると，そのようなタイプのファイルに対してビューを変更することができる． （根拠の終わり）

〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〲〰
〱
〲
〳
〴

実装者へのアドバイス 多くの場合に，きぐぉたうぉがぅたくぐぅぎの直後にきぐぉたうぉがぅたこぅごたざぉぅしの呼び出しが行われると考えられる．高品質な実装はこのよ
うな動作の効率をよくするであろう． （実装者へのアドバイス終わり）〵〶〷

つどびば変位引数は，ビューが開始される位置（ファイルの先頭からのバイト単位の絶対
オフセット）を指定する．

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

ユーザへのアドバイス つどびばは，ヘッダをスキップするために，または異なるパターンでアクセスされるデータセグメントのシーケンスがファイルに含まれる場合に使用される（図〱〳〮〳を参照）．それぞれ異なる変位とファイル型を使用する個々のビューを，各セグメントにアクセスするのに使用できる．
first view 1111
0000 1111
0000 1111
0000 1111
0000 1111
0000 1111
0000 1111
0000 1111
0000
second view0000 1111
1111
0000 1111
0000 1111
0000 1111
0000 1111
0000 1111
0000 1111
0000

〱〶

111
000
000
111
0000
1111
0000
1111
0000
1111
0000
1111
0000
1111
0000
1111
000
111
000
111
0000
1111
0000
1111
0000
1111
0000
1111
0000
1111
0000
000 111111
000 1111
0000 1111
0000 1111
0000 1111
0000 1111
0000 1111
0000
1111

〱〷

file structure:〱〸

header〱〹

first displacement...

second displacement〲〰
〲〱

図 〱〳〮〳〺 変位〲〲〲〳（ユーザへのアドバイス終わり）

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

etype（要素（づぬづねづのぴちひべ）データ型）はデータアクセスと位置付けの単位である．これはきぐぉの任意の定義済みまたは派生データ型とすることができる．生成されるすべての型マップ変位が非負で単調非減少である限り，任意のきぐぉデータ型コンストラクタル
ーチンを使用して派生づぴべばづを構成することができる．データアクセスはづぴべばづ単位で行
われ，づぴべばづ型のデータ要素の全てが読み書きされる．オフセットはづぴべばづのカウントとして表現され，ファイルポインタはづぴべばづの先頭を指す．

〳〲
〳〳
〳〴
〳〵
〳〶

ユーザへのアドバイス 異機種環境での相互運用性を保証するため，づぴべばづの作成時には追加の制限に従わなければならない（〴〴〴ページの第〱〳〮〵節を参照）． （ユーザへのアドバイス終わり）

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ファイル型は〱つのづぴべばづ，または同じづぴべばづの複数のインスタンスから構成される派
生きぐぉデータ型となる．また，ファイル型内の穴の範囲はづぴべばづの範囲の倍数でなければならない．これらの変位は個々に異なっている必要はないが，非負でかつ，単調非減少
でなければならない．
このファイルが書込み用に開かれている場合，づぴべばづにも「ぬづぴべばづにも重複する領域を格納することはできない．この制限は通信での「受信で使用するデータ型には重複する領域を指定できない」という制限と同等である．しかし，異なるプロセスの「ぬづぴべばづは相互に重複することがある．
「ぬづぴべばづに穴がある場合，穴の中のデータには呼び出しプロセスからアクセスできない．

〱〳〮〳〮 ファイルのビュー〴〲〱

しかし，その後，つどびば，づぴべばづ，「ぬづぴべばづ引数を変更し，きぐぉたうぉがぅたこぅごたざぉぅしを呼び出すことにより，ファイルの別の部分にアクセスすることができる．
づぴべばづおよび「ぬづぴべばづの作成時に絶対アドレスを使用するのは誤りである．
ファイルのアクセスパターンの情報やファイルシステム特有の情報を与えて最適化を指示するためにどのては引数を使用することができる（〴〱〵ページの第〱〳〮〲〮〸節を参照）．定
数きぐぉたぉぎうくたぎさががはのどのてはを指し，どのてはを指定する必要がない場合に使用できる．
つちぴちひづば引数はファイル内のデータ表現を指定する文字列である．詳しい説明と有効な値の論考については，ファイルの相互運用性の節（〴〴〴ページの第〱〳〮〵節）を参照すること．
ユーザは責任を持って，てとに対するすべてのノンブロッキング要求とスプリット集
団操作をきぐぉたうぉがぅたこぅごたざぉぅしの呼び出しの前に完了させる必要がある．そうしないと，
きぐぉたうぉがぅたこぅごたざぉぅしの呼び出しは誤りとなる．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

きぐぉたうぉがぅたぇぅごたざぉぅし〨てと〬 つどびば〬 づぴべばづ〬 「ぬづぴべばづ〬 つちぴちひづば〩
ぉぎ
くさご
くさご
くさご
くさご

てと
つどびば
づぴべばづ
「ぬづぴべばづ
つちぴちひづば〱〷

ファイルハンドル（ハンドル）〱〸

変位（整数型）〱〹

要素データ型（ハンドル）〲〰

ファイル型（ハンドル）
データ表現（文字列）

〲〱
〲〲
〲〳
〲〴

どのぴ きぐぉたうどぬづたでづぴたぶどづぷ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ 〪つどびば〬 きぐぉたいちぴちぴべばづ 〪づぴべばづ〬
きぐぉたいちぴちぴべばづ 〪てどぬづぴべばづ〬 っとちひ 〪つちぴちひづば〩
きぐぉたうぉがぅたぇぅごたざぉぅし〨うえ〬 いぉこぐ〬 ぅごすぐぅ〬 うぉがぅごすぐぅ〬 いぁごぁげぅぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぅごすぐぅ〬 うぉがぅごすぐぅ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 いぉこぐ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺ぇづぴたぶどづぷ〨きぐぉ〺〺くててびづぴ〦 つどびば〬 きぐぉ〺〺いちぴちぴべばづ〦 づぴべばづ〬
きぐぉ〺〺いちぴちぴべばづ〦 てどぬづぴべばづ〬 っとちひ〪 つちぴちひづば〩 っはのびぴ （廃止された呼び出し
形式, 第15.2節を参照）}
きぐぉたうぉがぅたぇぅごたざぉぅしはファイル内のデータのプロセスビューを返す．変位の現在の値はつどびばに返される．づぴべばづおよび「ぬづぴべばづは，それぞれ現在のづぴべばづおよびファイル型の型
マップに等しい型マップを持つ新しいデータ型である．
データ表現はつちぴちひづばに返される．つちぴちひづばが，返されるデータ表現文字列を格納するのに十分な大きさを持つようにするのはユーザの責任である．データ表現文字列の長さ
はきぐぉたきぁじたいぁごぁげぅぐたこごげぉぎぇの値に制限される．
また，現在のビューを設定するために可搬なデータ型が使用された場合，きぐぉたうぉがぅたぇぅごたざぉぅしによって返されるこれに対応するデータ型も可搬なデータ型とな
る．づぴべばづまたは「ぬづぴべばづが派生データ型である場合，これらを解放するのはユーザの責任である．返されるづぴべばづと「ぬづぴべばづは，両方ともコミットされた状態である．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力〴〲〲〱

13.4 データアクセス〲〳

13.4.1 データアクセスルーチン

〴
〵
〶
〷
〸
〹
〱〰
〱〱

データは，読み込みおよび書き込み呼び出しを発行することにより，ファイルとプロセスの間で移動される．データアクセスには，位置付け（明示的なオフセットと暗黙的なファイルポインタ），同期（ブロッキングとノンブロッキングおよびスプリット集団操作），連携（非集団操作と集団操作）という〳つの直交する側面がある．〲種類のファイルポインタ（個別と共有）を含むこれらのデータアクセスルーチンの以下の組み合わせを表〱〳〮〱に示す．

〱〲
〱〳

位置付け

同期

明示的
オフセット

ブロッキング〱〴〱〵〱〶ノンブロッキング 〦スプリット集団操作

〱〷
〱〸

非集団操作
きぐぉたうぉがぅたげぅぁいたぁご
きぐぉたうぉがぅたしげぉごぅたぁごきぐぉたうぉがぅたぉげぅぁいたぁご
きぐぉたうぉがぅたぉしげぉごぅたぁご

〱〹
〲〰
〲〱
〲〲

個別
ファイル
ポインタ

〲〳

ブロッキングノンブロッキング 〦スプリット集団操作

きぐぉたうぉがぅたぉしげぉごぅ

〲〴
〲〵
〲〶
〲〷

きぐぉたうぉがぅたげぅぁい
きぐぉたうぉがぅたしげぉごぅ
きぐぉたうぉがぅたぉげぅぁい

共有
ファイル
ポインタ

〲〸
〲〹

ブロッキングノンブロッキング 〦スプリット集団操作

きぐぉたうぉがぅたげぅぁいたこえぁげぅい
きぐぉたうぉがぅたしげぉごぅたこえぁげぅい
きぐぉたうぉがぅたぉげぅぁいたこえぁげぅい
きぐぉたうぉがぅたぉしげぉごぅたこえぁげぅい

〳〰

連携
集団操作
きぐぉたうぉがぅたげぅぁいたぁごたぁががきぐぉたうぉがぅたしげぉごぅたぁごたぁががきぐぉたうぉがぅたげぅぁいたぁごたぁががたあぅぇぉぎきぐぉたうぉがぅたげぅぁいたぁごたぁががたぅぎい
きぐぉたうぉがぅたしげぉごぅたぁごたぁががたあぅぇぉぎきぐぉたうぉがぅたしげぉごぅたぁごたぁががたぅぎい
きぐぉたうぉがぅたげぅぁいたぁががきぐぉたうぉがぅたしげぉごぅたぁががきぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎきぐぉたうぉがぅたげぅぁいたぁががたぅぎい
きぐぉたうぉがぅたしげぉごぅたぁががたあぅぇぉぎきぐぉたうぉがぅたしげぉごぅたぁががたぅぎい
きぐぉたうぉがぅたげぅぁいたくげいぅげぅいきぐぉたうぉがぅたしげぉごぅたくげいぅげぅいきぐぉたうぉがぅたげぅぁいたくげいぅげぅいたあぅぇぉぎきぐぉたうぉがぅたげぅぁいたくげいぅげぅいたぅぎい
きぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたあぅぇぉぎきぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたぅぎい〳〱〳〲

表 〱〳〮〱〺 データアクセスルーチン

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

ぐくこぉじ ひづちつ〨〩〯てひづちつ〨〩およびぷひどぴづ〨〩〯てぷひどぴづ〨〩はブロッキングの非集団操作で，個別ファ
イルポインタを使用する．これに相当するきぐぉはきぐぉたうぉがぅたげぅぁいときぐぉたうぉがぅたしげぉごぅである．
データアクセスルーチンの実装は，性能向上のため，データをバッファリングすることがある．読み込み操作の完了後はデータは常にユーザのバッファ内で利用できるため，
これは読み込みに影響しない．しかし，書き込みについては，きぐぉたうぉがぅたこすぎぃルーチン
のみがデータがストレージデバイスに転送されていることを保証する．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

位置付け
きぐぉでは，データアクセスルーチンのための位置付けの方法として，明示的なオフセ
ット，個別ファイルポインタ，共有ファイルポインタの〳種類が用意されている．異なる〱〳〮〴〮 データアクセス〴〲〳

位置付け方法を，相互に影響を及ぼさないように同じプログラム内で組み合わせることができる．
明示的なオフセットを受け付けるデータアクセスルーチンはその名前にたぁごを含む（きぐぉたうぉがぅたしげぉごぅたぁごなど）．明示的なオフセットを使用した操作は引数として直接渡されたファイル位置でデータアクセスを実行する． ファイルポインタは使用されず，更新もされない．これは，ぜびづづに〢が発行されないため，アトミックなびづづに〭ちのつ〭ひづちつまた
はびづづに〭ちのつ〭ぷひどぴづ操作とは異なることに注意すること．明示的なオフセットを使用した操作については，〴〲〵ページの第〱〳〮〴〮〲節で説明する．
個別ファイルポインタルーチンの名前は位置の修飾子を含まない（
きぐぉたうぉがぅたしげぉごぅなど）．個別ファイルポインタを使用した操作については，〴〲〸ページの第〱〳〮〴〮〳節で説明する．共有ファイルポインタを使用するデータアクセスルーチンはその名前にたこえぁげぅいまたはたくげいぅげぅいを含む（きぐぉたうぉがぅたしげぉごぅたこえぁげぅいなど）．共有ファイルポインタを使用した操作については，〴〳〳ページの第〱〳〮〴〮〴節で説明する．
きぐぉで管理されるファイルポインタに関する主な意味論的な問題は，これらが入出力操作によって更新される方法とタイミングである．一般的に，各入出力操作では， ファ
イル操作によってアクセスされた最後のデータ項目の次のデータ項目にファイルポイン
タが置かれる． ノンブロッキングまたはスプリット集団操作では，入出力を開始した呼び出しによって，アクセスが完了する前にポインタが更新される可能性がある．
より正式には，
new_file_offset 〽 old_file_offset 〫elements〨datatype〩× count
elements〨etype〩

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

ここで，countはアクセスされるdatatypeの項目数，elements〨X〩はXの型マップ内の定義済みデータ型の数，old たfileたoffsetは呼び出し前の暗黙的なオフセット値である．ファイルの位置new たfileたoffsetは，現在のビューでの相対位置としての，づぴべばづの個数として
測られる．

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

同期

〳〳
〳〴

きぐぉはブロッキングおよびノンブロッキング入出力ルーチンをサポートしている．
ブロッキング入出力呼び出しは，入出力要求が完了するまで戻らない．
ノンブロッキング入出力呼び出しは，入出力操作を開始するが，完了の待ち合わせを行わない． 適切なハードウェアがあれば，ユーザのバッファを用いたデータの入出力
を，計算の処理を同時に進めることができる． ノンブロッキング入出力呼び出しの 要
求完了呼び出し（きぐぉたしぁぉご，きぐぉたごぅこご，またはその変型） は入出力要求を完了させるために必要になる．これにより，データの読み取りまたは書き込みが完了し，ユーザがバッファを安全に再使用できるようになったことを確認できる． ノンブロッキング型のルーチンはきぐぉたうぉがぅたぉじじじという名前で，ぉは「即時（どねねづつどちぴづ）」の意味である．
操作の開始と完了の間に，ノンブロッキングデータアクセス操作のローカルバッファにアクセスしたり，そのバッファを他の通信の送信元または送信先として使用したりするのは誤りである．

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〴〲〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

第 〱〳〮 入出力

スプリット集団ルーチンは，集団データアクセスの「ノンブロッキング」操作を制限付きでサポートしている（〴〳〹ページの第〱〳〮〴〮〵節を参照）．
協調
非集団的データアクセスルーチンきぐぉたうぉがぅたじじじには，それぞれと対になる集団的ルーチンがある．大部分のルーチンで，対になるルーチンはきぐぉたうぉがぅたじじじたぁがが，またはきぐぉたうぉがぅたじじじたあぅぇぉぎときぐぉたうぉがぅたじじじたぅぎいのペアとなる．きぐぉたうぉがぅたじじじたこえぁげぅいルーチンと対になるルーチンはきぐぉたうぉがぅたじじじたくげいぅげぅいである．
非集団呼び出しの完了は，呼び出しプロセスの動作のみに依存する．しかし，集団呼び出し（プロセスグループのすべてのメンバによって呼び出されなければならない）の完了は集団呼び出しに参加する他のプロセスの動作に依存することがある．集団呼び出しの意味論に関する規則は，〴〵〹ページの第〱〳〮〶〮〴節を参照すること．
グローバルデータアクセスは自動最適化の大きな可能性を秘めているため，集団操作
では非集団操作よりもはるかに高い性能が見込めるはずである．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

データアクセスのルール
データは，読み込みおよび書き込みルーチンを呼び出すことにより，ファイルとプロセスの間で移動される．読み込みルーチンはデータをファイルからメモリに移動する．
書き込みルーチンはデータをメモリからファイルに移動する．ファイルはファイルハン
ドルてとにより指定される．ファイルデータの領域は現在のビューへのオフセットによって指定される．メモリ内のデータはぢふて，っはふのぴ，つちぴちぴべばづの〳つによって指定される．完了時，呼び出しプロセスによってアクセスされたデータの量がびぴちぴふびに返される．
オフセットはアクセスのためのファイル内の開始位置を指定する．オフセットは常に，現在のビューでの相対位置として，づぴべばづを単位として測られる．明示的なオフセットを使用したルーチンは引数としては》びづぴを渡す（負の値は誤りである）．ファイルポインタ
ルーチンはきぐぉによって管理される暗黙的なオフセットを使用する．
データアクセスルーチンはユーザのバッファぢふて とファイルの間でつちぴちぴべばづ型のっはふのぴ個のデータ項目の転送（読み込みまたは書き込み）を試みる．ルーチンに渡されるつちぴちぴべばづはコミットされたデータ型でなければならない．ぢふて，っはふのぴ，つちぴちぴべばづに対応するメモリ内のデータの配置はきぐぉ通信関数と同様に解釈される．〳〲ページの第〳〮〲〮〲節と〱〱〲ページの第〴〮〱〮〱〱節を参照すること．データはファイルの，現在のビューによって指定された部分からアクセスされる．（〴〱〹ページの第〱〳〮〳節）．つちぴちぴべばづの型シグネチャ
は現在のビューのづぴべばづのいくつかの連続するコピーの型シグネチャと一致していなければならない．受信の場合と同様，重複する領域（複数回格納されるメモリの領域）を含
むつちぴちぴべばづを読み取り用に指定するのは誤りである．
ノンブロッキングなデータアクセスルーチンはきぐぉがデータアクセスを開始できること，また要求ハンドルひづぱふづびぴを入出力操作に関連付けられることを示している．ノンブ
ロッキング操作は，きぐぉたごぅこご，きぐぉたしぁぉご，またはその変型によって完了する．
データアクセス操作は，完了時に，アクセスしたデータの量をびぴちぴふびに返す．

〱〳〮〴〮 データアクセス〴〲〵

ユーザへのアドバイス うはひぴひちの言語のコンパイラによって実行される引数のコピーとレジスタ最適化に関する問題を回避するため，第〱〶〮〲〮〲節の「データのコピーおよび連続領域配置による問題」（〵〰〴ページ）と「レジスタ最適化での問題」（〵〰〷ページ）のヒントに注意すること． （ユーザへのアドバイス終わり）〱

ブロッキングルーチンの場合，びぴちぴふびは直接返される． ノンブロッキングルーチン
およびスプリット集団ルーチンの場合，びぴちぴふびは操作の完了時に返される． 呼び出しプロセスによってアクセスされる定義済みの要素とつちぴちぴべばづエントリの数は，それぞれきぐぉたぇぅごたぃくさぎごときぐぉたぇぅごたぅがぅきぅぎごこを使用してびぴちぴふびから抽出することができる．きぐぉたぅげげくげフィールドの解釈は他の操作の場合と同様で，通常は未定義だが，きぐぉル
ーチンがきぐぉたぅげげたぉぎたこごぁごさこを返す場合は意味がある． この引数の戻り値が不要な場
合，（ぃ言語およびうはひぴひちの言語では）ユーザはびぴちぴふび引数にきぐぉたこごぁごさこたぉぇぎくげぅを渡すことができる．ぃ〫〫言語では，びぴちぴふび引数はオプションである．操作が取り消されたかどうかを調べるために，びぴちぴふびをきぐぉたごぅこごたぃぁぎぃぅががぅいに渡すことができる．びぴちぴふびのその他のすべてのフィールドは未定義である．
読み取り時に，プログラムは読み取ったデータの量が要求された量より少ないことに注意することにより，ファイル終端を検知することができる．ファイル終端を越えて書き込むとファイルのサイズが増大する．エラーが発生した（あるいは読み取りがファイ
ル終端に達した）場合を除いて，アクセスしたデータの量は要求された量となる．

〶

〲
〳
〴
〵

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

13.4.2 明示的なオフセットを使用したデータアクセス
ファイルを開いたときにきぐぉたきくいぅたこぅけさぅぎごぉぁがモードが指定されている場合に，この節でで示すルーチンを呼び出すのは誤りである．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

きぐぉたうぉがぅたげぅぁいたぁご〨てと〬 は》びづぴ〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩
ぉぎ
ぉぎ
くさご
ぉぎ
ぉぎ
くさご

てと
は》びづぴ
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふび〳〰

ファイルハンドル（ハンドル）〳〱

ファイルのオフセット（整数型）〳〲

バッファの先頭アドレス（選択型）〳〳

バッファ内の要素の数（整数型）〳〴

各バッファ要素のデータ型（ハンドル）〳〵ステータスオブジェクト（ステータス型）

どのぴ きぐぉたうどぬづたひづちつたちぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたげぅぁいたぁご〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぴ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぴ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力〴〲〶〱

きぐぉたうぉがぅたげぅぁいたぁごはは》びづぴによって指定された位置からファイルを読み取る．

〲〳〴

きぐぉたうぉがぅたげぅぁいたぁごたぁがが〨てと〬 は》びづぴ〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩

〵

ぉぎ

〶

ぉぎ

〷

くさご

〸

ぉぎ

〹
〱〰
〱〱

ぉぎ
くさご

てと
は》びづぴ
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふびファイルハンドル（ハンドル）
ファイルのオフセット（整数型）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファ要素のデータ型（ハンドル）ステータスオブジェクト（ステータス型）

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

どのぴ きぐぉたうどぬづたひづちつたちぴたちぬぬ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたげぅぁいたぁごたぁがが〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぴたちぬぬ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぴたちぬぬ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたげぅぁいたぁごたぁががはブロッキングきぐぉたうぉがぅたげぅぁいたぁごインターフェイスの集団操作バージョンである．

〲〶
〲〷
〲〸

きぐぉたうぉがぅたしげぉごぅたぁご〨てと〬 は》びづぴ〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩

〲〹

ぉぎくさご

〳〰

ぉぎ

〳〱

ぉぎ

〳〲

ぉぎ

〳〳

ぉぎ

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

くさご

てと
は》びづぴ
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふびファイルハンドル（ハンドル）
ファイルのオフセット（整数型）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）ステータスオブジェクト（ステータス型）

どのぴ きぐぉたうどぬづたぷひどぴづたちぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたしげぉごぅたぁご〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぴ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぴ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〴〷
〴〸

きぐぉたうぉがぅたしげぉごぅたぁごはは》びづぴによって指定された位置からファイルに書き込む．

〱〳〮〴〮 データアクセス〴〲〷

きぐぉたうぉがぅたしげぉごぅたぁごたぁがが〨てと〬 は》びづぴ〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩
ぉぎくさご
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

てと
は》びづぴ
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふびファイルハンドル（ハンドル）
ファイルのオフセット（整数型）

〱
〲
〳
〴

バッファの先頭アドレス（選択型）〵

バッファ内の要素の数（整数型）〶

各バッファの要素のデータ型（ハンドル）〷ステータスオブジェクト（ステータス型）〸〹

どのぴ きぐぉたうどぬづたぷひどぴづたちぴたちぬぬ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたしげぉごぅたぁごたぁがが〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぴたちぬぬ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬
どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩（廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぴたちぬぬ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬
どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式,
第15.2節を参照）}〱〰

きぐぉたうぉがぅたしげぉごぅたぁごたぁががはブロッキングきぐぉたうぉがぅたしげぉごぅたぁごインターフェイスの集団操作バージョンである．

〲〱

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

〲〲
〲〳
〲〴

きぐぉたうぉがぅたぉげぅぁいたぁご〨てと〬 は》びづぴ〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 ひづぱふづびぴ〩
ぉぎ
ぉぎ
くさご
ぉぎ
ぉぎ
くさご

てと
は》びづぴ
ぢふて
っはふのぴ
つちぴちぴべばづ
ひづぱふづびぴ〲〵ファイルハンドル（ハンドル）〲〶

ファイルのオフセット（整数型）〲〷

バッファの先頭アドレス（選択型）〲〸〲〹

バッファ内の要素の数（整数型）〳〰

各バッファの要素のデータ型（ハンドル）〳〱

リクエストオブジェクト（ハンドル）〳〲〳〳

どのぴ きぐぉたうどぬづたどひづちつたちぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたうぉがぅたぉげぅぁいたぁご〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺うどぬづ〺〺ぉひづちつたちぴ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたぉげぅぁいたぁごはきぐぉたうぉがぅたげぅぁいたぁごインターフェイスのノンブロッキングバ
ージョンである．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〲〸
〱
〲

きぐぉたうぉがぅたぉしげぉごぅたぁご〨てと〬 は》びづぴ〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 ひづぱふづびぴ〩
ぉぎくさご

〳
〴

ぉぎ

〵

ぉぎ

〶

ぉぎ

〷

ぉぎ

〸

くさご

てと
は》びづぴ
ぢふて
っはふのぴ
つちぴちぴべばづ
ひづぱふづびぴファイルハンドル（ハンドル）
ファイルのオフセット（整数型）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）
リクエストオブジェクト（ハンドル）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

どのぴ きぐぉたうどぬづたどぷひどぴづたちぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたうぉがぅたぉしげぉごぅたぁご〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺うどぬづ〺〺ぉぷひどぴづたちぴ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬
どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたうぉがぅたぉしげぉごぅたぁごはきぐぉたうぉがぅたしげぉごぅたぁごインターフェイスのノンブロッキングバージョンである．

〲〱〲〲

13.4.3 個別ファイルポインタを使用したデータアクセス

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉは各ファイルハンドルに対してプロセスごとに個別のファイルポインタを管理している．このポインタの現在の値は，この節で説明するデータアクセスルーチンのオフ
セットを暗黙的に指定する．これらのルーチンは，きぐぉによって管理される個別ファイ
ルポインタのみを使用，更新する．共有ファイルポインタは使用，更新しない．
個別ファイルポインタルーチンは，〴〲〵ページの第〱〳〮〴〮〲節で説明した明示的なオフセットルーチンを使用したデータアクセスと同じ意味論を持つが，以下の点が異なる．
• は》びづぴはきぐぉで管理される個別ファイルポインタの現在の値として定義される．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

個別ファイルポインタ操作の開始後，個別ファイルポインタは，アクセスされる最後のづぴべばづの後の次のづぴべばづを指すよう更新される．ファイルポインタはファイルの現在のビューでの相対位置として更新される．
ファイルが開かれたときにきぐぉたきくいぅたこぅけさぅぎごぉぁがモードが指定されている場合，この節のルーチンを呼び出すのは誤りであるが，きぐぉたうぉがぅたぇぅごたあすごぅたくううこぅごは例外で
ある．

〴〰
〴〱

きぐぉたうぉがぅたげぅぁい〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩

〴〲
〴〳

ぉぎくさご

〴〴

くさご

〴〵

ぉぎ

〴〶

ぉぎ

〴〷

くさご

〴〸

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）ステータスオブジェクト（ステータス型）

〱〳〮〴〮 データアクセス〴〲〹

どのぴ きぐぉたうどぬづたひづちつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたげぅぁい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬
きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩（廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたげぅぁいは個別ファイルポインタを使用してファイルを読み取る．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

例 13.2 以下のうはひぴひちの言語の部分コードはファイル終端に達するまでファイルを読み取る例である．

〱〲
〱〳
〱〴

〡
〡
〡

げづちつ ち ばひづづへどびぴどので どのばふぴ てどぬづ ふのぴどぬ ちぬぬ つちぴち とちび ぢづづの ひづちつ〮
ぃちぬぬ ひはふぴどのづ 〢ばひはっづびびたどのばふぴ〢 どて ちぬぬ ひづぱふづびぴづつ つちぴち どび ひづちつ〮
ごとづ うはひぴひちの 〹〰 〢づへどぴ〢 びぴちぴづねづのぴ づへどぴび ぴとづ ぬははば〮

〱〰〰〱

〱〵
〱〶
〱〷

どのぴづでづひ
ぢふてびどぺづ〬 のふねひづちつ〬 ぴはぴばひはっづびびづつ〬 びぴちぴふび〨きぐぉたこごぁごさこたこぉずぅ〩
ばちひちねづぴづひ 〨ぢふてびどぺづ〽〱〰〰〩
ひづちぬ
ぬはっちぬぢふててづひ〨ぢふてびどぺづ〩〱〸

っちぬぬ きぐぉたうぉがぅたくぐぅぎ〨 きぐぉたぃくききたしくげがい〬 〧ねべはぬつてどぬづ〧〬 〦きぐぉたきくいぅたげいくぎがす〬 きぐぉたぉぎうくたぎさがが〬 ねべてと〬 どづひひ 〩っちぬぬ きぐぉたうぉがぅたこぅごたざぉぅし〨 ねべてと〬 〰〬 きぐぉたげぅぁが〬 きぐぉたげぅぁが〬 〧のちぴどぶづ〧〬 〦きぐぉたぉぎうくたぎさがが〬 どづひひ 〩ぴはぴばひはっづびびづつ 〽 〰
つはっちぬぬ きぐぉたうぉがぅたげぅぁい〨 ねべてと〬 ぬはっちぬぢふててづひ〬 ぢふてびどぺづ〬 きぐぉたげぅぁが〬 〦びぴちぴふび〬 どづひひ 〩っちぬぬ きぐぉたぇぅごたぃくさぎご〨 びぴちぴふび〬 きぐぉたげぅぁが〬 のふねひづちつ〬 どづひひ 〩っちぬぬ ばひはっづびびたどのばふぴ〨 ぬはっちぬぢふててづひ〬 のふねひづちつ 〩ぴはぴばひはっづびびづつ 〽 ぴはぴばひはっづびびづつ 〫 のふねひづちつ
どて 〨 のふねひづちつ 〼 ぢふてびどぺづ 〩 づへどぴ
づのつつは

〲〱

ぷひどぴづ〨〶〬〱〰〰〱〩 のふねひづちつ〬 ぢふてびどぺづ〬 ぴはぴばひはっづびびづつてはひねちぴ〨 〢ぎは ねはひづ つちぴち〺 ひづちつ〢〬 ぉ〳〬 〢ちのつ づへばづっぴづつ〢〬 ぉ〳〬 〦〢ぐひはっづびびづつ ぴはぴちぬ はて〢〬 ぉ〶〬 〢ぢづてはひづ ぴづひねどのちぴどので なはぢ〮〢 〩

〱〹
〲〰

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

っちぬぬ きぐぉたうぉがぅたぃがくこぅ〨 ねべてと〬 どづひひ 〩

〳〶
〳〷
〳〸
〳〹
〴〰

きぐぉたうぉがぅたげぅぁいたぁがが〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩
ぉぎくさご
くさご
ぉぎ
ぉぎ
くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふび〴〱ファイルハンドル（ハンドル）〴〲

バッファの先頭アドレス（選択型）〴〳

バッファ内の要素の数（整数型）〴〴

各バッファの要素のデータ型（ハンドル）ステータスオブジェクト（ステータス型）

〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〳〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

どのぴ きぐぉたうどぬづたひづちつたちぬぬ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたげぅぁいたぁがが〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぬぬ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぬぬ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〱〱
〱〲
〱〳

きぐぉたうぉがぅたげぅぁいたぁががはブロッキングきぐぉたうぉがぅたげぅぁいインターフェイスの集団操作バージョンである．

〱〴〱〵

きぐぉたうぉがぅたしげぉごぅ〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩

〱〶
〱〷

ぉぎくさご

〱〸

ぉぎ

〱〹

ぉぎ

〲〰

ぉぎ

〲〱

くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）ステータスオブジェクト（ステータス型）

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

どのぴ きぐぉたうどぬづたぷひどぴづ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたしげぉごぅ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたしげぉごぅは個別ファイルポインタを使用してファイルを書き込む．

〳〴
〳〵
〳〶

きぐぉたうぉがぅたしげぉごぅたぁがが〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩

〳〷

ぉぎくさご

〳〸

ぉぎ

〳〹
〴〰

ぉぎ

〴〱

ぉぎ

〴〲

くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）ステータスオブジェクト（ステータス型）

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたうどぬづたぷひどぴづたちぬぬ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたしげぉごぅたぁがが〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ

〱〳〮〴〮 データアクセス〴〳〱{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぬぬ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぬぬ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〱

きぐぉたうぉがぅたしげぉごぅたぁががはブロッキングきぐぉたうぉがぅたしげぉごぅインターフェイスの集団操作バージョンである．

〷

〲
〳
〴
〵
〶

〸
〹
〱〰

きぐぉたうぉがぅたぉげぅぁい〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 ひづぱふづびぴ〩
ぉぎくさご
くさご
ぉぎ
ぉぎ
くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
ひづぱふづびぴ〱〱ファイルハンドル（ハンドル）〱〲

バッファの先頭アドレス（選択型）〱〳

バッファ内の要素の数（整数型）〱〴

各バッファの要素のデータ型（ハンドル）〱〵

リクエストオブジェクト（ハンドル）

どのぴ きぐぉたうどぬづたどひづちつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたうぉがぅたぉげぅぁい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺うどぬづ〺〺ぉひづちつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたぉげぅぁいはきぐぉたうぉがぅたげぅぁいインターフェイスのノンブロッキングバージョン
である．

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

例 13.3 以下のうはひぴひちの言語の部分コードを用いてファイルポインタの更新の意味論を説
明する．

〲〹

〡
〡
〡
〡

げづちつ ぴとづ てどひびぴ ぴぷづのぴべ ひづちぬ ぷはひつび どの ち てどぬづ どのぴは ぴぷは ぬはっちぬ
ぢふててづひび〮 ぎはぴづ ぴとちぴ ぷとづの ぴとづ てどひびぴ きぐぉたうぉがぅたぉげぅぁい ひづぴふひのび〬
ぴとづ てどぬづ ばはどのぴづひ とちび ぢづづの ふばつちぴづつ ぴは ばはどのぴ ぴは ぴとづ
づぬづぶづのぴと ひづちぬ ぷはひつ どの ぴとづ てどぬづ〮〳〲

どのぴづでづひ
ぢふてびどぺづ〬 ひづぱ〱〬 ひづぱ〲
どのぴづでづひ〬 つどねづのびどはの〨きぐぉたこごぁごさこたこぉずぅ〩 〺〺 びぴちぴふび〱〬 びぴちぴふび〲
ばちひちねづぴづひ 〨ぢふてびどぺづ〽〱〰〩
ひづちぬ
ぢふて〱〨ぢふてびどぺづ〩〬 ぢふて〲〨ぢふてびどぺづ〩〳〶

っちぬぬ きぐぉたうぉがぅたくぐぅぎ〨 きぐぉたぃくききたしくげがい〬 〧ねべはぬつてどぬづ〧〬 〦きぐぉたきくいぅたげいくぎがす〬 きぐぉたぉぎうくたぎさがが〬 ねべてと〬 どづひひ 〩っちぬぬ きぐぉたうぉがぅたこぅごたざぉぅし〨 ねべてと〬 〰〬 きぐぉたげぅぁが〬 きぐぉたげぅぁが〬 〧のちぴどぶづ〧〬 〦きぐぉたぉぎうくたぎさがが〬 どづひひ 〩っちぬぬ きぐぉたうぉがぅたぉげぅぁい〨 ねべてと〬 ぢふて〱〬 ぢふてびどぺづ〬 きぐぉたげぅぁが〬 〦ひづぱ〱〬 どづひひ 〩っちぬぬ きぐぉたうぉがぅたぉげぅぁい〨 ねべてと〬 ぢふて〲〬 ぢふてびどぺづ〬 きぐぉたげぅぁが〬 〦ひづぱ〲〬 どづひひ 〩〴〰

っちぬぬ きぐぉたしぁぉご〨 ひづぱ〱〬 びぴちぴふび〱〬 どづひひ 〩っちぬぬ きぐぉたしぁぉご〨 ひづぱ〲〬 びぴちぴふび〲〬 どづひひ 〩

〳〰
〳〱

〳〳
〳〴
〳〵

〳〷
〳〸
〳〹

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力〴〳〲〱

っちぬぬ きぐぉたうぉがぅたぃがくこぅ〨 ねべてと〬 どづひひ 〩

〲
〳
〴
〵
〶
〷
〸
〹

きぐぉたうぉがぅたぉしげぉごぅ〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 ひづぱふづびぴ〩
ぉぎくさご
ぉぎ

〱〰
〱〱

ぉぎ

〱〲

ぉぎ

〱〳

くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
ひづぱふづびぴファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）
リクエストオブジェクト（ハンドル）

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

どのぴ きぐぉたうどぬづたどぷひどぴづ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたうぉがぅたぉしげぉごぅ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺うどぬづ〺〺ぉぷひどぴづ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたぉしげぉごぅはきぐぉたうぉがぅたしげぉごぅインターフェイスのノンブロッキングバージョ
ンである．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

きぐぉたうぉがぅたこぅぅか〨てと〬 は》びづぴ〬 ぷとづのっづ〩
ぉぎくさご
ぉぎ
ぉぎ

てと
は》びづぴ
ぷとづのっづ

ファイルハンドル（ハンドル）
ファイルのオフセット（整数型）
更新モード（ステート型）

どのぴ きぐぉたうどぬづたびづづに〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 どのぴ ぷとづのっづ〩
きぐぉたうぉがぅたこぅぅか〨うえ〬 くううこぅご〬 しえぅぎぃぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 しえぅぎぃぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{ぶはどつ きぐぉ〺〺うどぬづ〺〺こづづに〨きぐぉ〺〺くててびづぴ はててびづぴ〬 どのぴ ぷとづのっづ〩 （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたうぉがぅたこぅぅかはぷとづのっづに従って個別ファイルポインタを更新する．ぷとづのっづで使用できる値は以下のとおりである．
• きぐぉたこぅぅかたこぅご：ポインタがは》びづぴに設定される〴〱〴〲• きぐぉたこぅぅかたぃさげ：ポインタが現在のポインタ位置〫は》びづぴに設定される〴〳〴〴• きぐぉたこぅぅかたぅぎい：ポインタがファイル終端〫は》びづぴに設定される

〴〵
〴〶
〴〷
〴〸

は》びづぴには負の値も設定でき，この場合は後方へのシークが行われる．ビューにおける負の位置にシークするのは誤りである．

〱〳〮〴〮 データアクセス〴〳〳

きぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎ〨てと〬 は》びづぴ〩
ぉぎ
くさご

てと
は》びづぴ

〱

ファイルハンドル（ハンドル）
個別ポインタのオフセット（整数型）

どのぴ きぐぉたうどぬづたでづぴたばはびどぴどはの〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ 〪はててびづぴ〩
きぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎ〨うえ〬 くううこぅご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{きぐぉ〺〺くててびづぴ きぐぉ〺〺うどぬづ〺〺ぇづぴたばはびどぴどはの〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎは，現在のビューに対する個別ファイルポインタの現在の位置をづぴべばづ単位では》びづぴに返す．
ユーザへのアドバイス 返されたは》びづぴは，後に現在の位置に戻るために，ぷとづのっづ〽 きぐぉたこぅぅかたこぅごとしてきぐぉたうぉがぅたこぅぅかを呼び出す際に使用することができる．
現 在 の フ ァ イ ル ポ イ ン タ の 位 置 に 変 位 を 設 定 す る に は， ま ず
きぐぉたうぉがぅたぇぅごたあすごぅたくううこぅごを使用しては》びづぴを絶対バイト位置に変換してから，得られた変位を使用してきぐぉたうぉがぅたこぅごたざぉぅしを呼び出す． （ユーザへのアドバイ
ス終わり）

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

きぐぉたうぉがぅたぇぅごたあすごぅたくううこぅご〨てと〬 は》びづぴ〬 つどびば〩
ぉぎ
ぉぎ
くさご

てと
は》びづぴ
つどびば

〲〴

ファイルハンドル（ハンドル）〲〵

オフセット（整数型）〲〶

オフセットの絶対バイト位置（整数型）〲〷〲〸

どのぴ きぐぉたうどぬづたでづぴたぢべぴづたはててびづぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬
きぐぉたくててびづぴ 〪つどびば〩
きぐぉたうぉがぅたぇぅごたあすごぅたくううこぅご〨うえ〬 くううこぅご〬 いぉこぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご〬 いぉこぐ{きぐぉ〺〺くててびづぴ きぐぉ〺〺うどぬづ〺〺ぇづぴたぢべぴづたはててびづぴ〨っはのびぴ きぐぉ〺〺くててびづぴ つどびば〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〲〹

きぐぉたうぉがぅたぇぅごたあすごぅたくううこぅごはビューの相対オフセットを絶対バイト位置に変換す
る．てとの現在のビューに対するは》びづぴの（ファイル先頭からの）絶対バイト位置がつどびばに
返される．

〳〶

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

〳〷
〳〸
〳〹
〴〰

13.4.4 共有ファイルポインタを使用したデータアクセス
きぐぉは集団きぐぉたうぉがぅたくぐぅぎごとに正確に〱つの共有ファイルポインタを管理する（コミュニケータグループ内のプロセス間で共有される）．このポインタの現在の値は，この節で説明するデータアクセスルーチン内のオフセットを暗黙的に指定する．これらのルーチンはきぐぉによって管理される共有ファイルポインタのみを使用，更新する．個別ファイルポインタは使用，更新しない．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〳〴
〱
〲

共有ファイルポインタルーチンは，〴〲〵ページの第〱〳〮〴〮〲節で説明した明示的なオフセットルーチンを使用したデータアクセスと同じ意味論を持つが，以下の点が異なる．

〳〴• は》びづぴはきぐぉで管理される共有ファイルポインタの現在の値として定義される．

〵〶〷• 共有ファイルポインタルーチンを複数回呼び出した場合の結果は，呼び出しがシリ
アライズされたとした場合の結果と定義される．

〸〹〱〰

• すべてのプロセスで同じファイルビューが使用されていない場合，共有ファイルポ
インタルーチンを使用するのは誤りである．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

非集団共有ファイルポインタルーチンの場合，処理の順序は一意に定まらない．そのため，ユーザが，別の同期方法を用いて処理が特定の順序になるよう強制する必要がある．
共有ファイルポインタ操作の開始後，共有ファイルポインタは，アクセスされる最後のづぴべばづの後の次のづぴべばづを指すよう更新される．ファイルポインタはファイルの現在のビューに対する相対位置として更新される．

〱〹
〲〰
〲〱

非集団操作

〲〲
〲〳
〲〴

きぐぉたうぉがぅたげぅぁいたこえぁげぅい〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩

〲〵

ぉぎくさご

〲〶

くさご

〲〷

ぉぎ

〲〸

ぉぎ

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）ステータスオブジェクト（ステータス型）

どのぴ きぐぉたうどぬづたひづちつたびとちひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたげぅぁいたこえぁげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたびとちひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたびとちひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたうぉがぅたげぅぁいたこえぁげぅいは共有ファイルポインタを使用してファイルを読み取る．

〱〳〮〴〮 データアクセス〴〳〵

きぐぉたうぉがぅたしげぉごぅたこえぁげぅい〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩
ぉぎくさご
ぉぎ
ぉぎ
ぉぎ
くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）

〱
〲
〳
〴

バッファ内の要素の数（整数型）〵

各バッファの要素のデータ型（ハンドル）〶ステータスオブジェクト（ステータス型）〷〸

どのぴ きぐぉたうどぬづたぷひどぴづたびとちひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたしげぉごぅたこえぁげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたびとちひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたびとちひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたしげぉごぅたこえぁげぅいは共有ファイルポインタを使用してファイルを書き込む．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

きぐぉたうぉがぅたぉげぅぁいたこえぁげぅい〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 ひづぱふづびぴ〩
ぉぎくさご
くさご
ぉぎ
ぉぎ
くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
ひづぱふづびぴ〲〲ファイルハンドル（ハンドル）〲〳

バッファの先頭アドレス（選択型）〲〴

バッファ内の要素の数（整数型）〲〵

各バッファの要素のデータ型（ハンドル）
リクエストオブジェクト（ハンドル）

どのぴ きぐぉたうどぬづたどひづちつたびとちひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたうぉがぅたぉげぅぁいたこえぁげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺うどぬづ〺〺ぉひづちつたびとちひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたぉげぅぁいたこえぁげぅいはきぐぉたうぉがぅたげぅぁいたこえぁげぅいインターフェイスのノンブロ
ッキングバージョンである．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

きぐぉたうぉがぅたぉしげぉごぅたこえぁげぅい〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 ひづぱふづびぴ〩
ぉぎくさご
ぉぎ
ぉぎ
ぉぎ
くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
ひづぱふづびぴ〴〱ファイルハンドル（ハンドル）〴〲

バッファの先頭アドレス（選択型）〴〳

バッファ内の要素の数（整数型）〴〴

各バッファの要素のデータ型（ハンドル）
リクエストオブジェクト（ハンドル）

〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〳〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

どのぴ きぐぉたうどぬづたどぷひどぴづたびとちひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
きぐぉたうぉがぅたぉしげぉごぅたこえぁげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ
{きぐぉ〺〺げづぱふづびぴ きぐぉ〺〺うどぬづ〺〺ぉぷひどぴづたびとちひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたぉしげぉごぅたこえぁげぅいはきぐぉたうぉがぅたしげぉごぅたこえぁげぅいインターフェイスのノンブ
ロッキングバージョンである．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

集団操作
共有ファイルポインタを使用した集団アクセスの意味論は，ファイルへのアクセスがグループ内のプロセスのランクで決定された順序で行われるということである．各プロ
セスについて，データのアクセスを行うファイルの領域は，グループ内のランクがこのプロセスのものより小さいすべてのプロセスがそれぞれのデータにアクセスした後に共有ファイルポインタが配置される位置となる．また，同じプロセスによるその後の共有
オフセットアクセス1 とこの集団アクセスが干渉しないようにするため，グループ内のすべてのプロセスがそれぞれのアクセスを開始した後でないと呼び出しが戻らないようになっている．呼び出しが戻ると，共有ファイルポインタはすべてのプロセスによって使用されたファイルビューに従って，最後に要求されたづぴべばづの後の，アクセス可能な次のづぴべばづを指す．

〲〶

ユーザへのアドバイス グループ内のすべてのプロセスが共有ファイルポイン
タを使用してファイルにアクセスする必要があるプログラムがあっても，そのプログラムへのデータアクセスはプロセスのランクの順で行う必要がない場
合もある． このようなプログラムでは，実装が，共有順序付けルーチン（例えばきぐぉたうぉがぅたしげぉごぅたこえぁげぅいではなく，きぐぉたうぉがぅたしげぉごぅたくげいぅげぅい）に性能を向上するアクセスの最適化を施すことができる． （ユーザへのアドバイス終わ
り）

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

実装者へのアドバイス すべてのプロセスで要求されるデータへのアクセスをシリ
アライズする必要はない．すべてのプロセスで要求が発行されると，すべてのアクセスの対象となるファイル内の領域が計算可能になり，相互に独立して，可能であ
れば並行してアクセスができるようになる． （実装者へのアドバイス終わり）

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱

訳註：原文には“shared offset accesses”とあるが，共有ファイルポインタによるアクセスの誤りである．

〱〳〮〴〮 データアクセス〴〳〷

きぐぉたうぉがぅたげぅぁいたくげいぅげぅい〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩
ぉぎくさご
くさご
ぉぎ
ぉぎ
くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）

〱
〲
〳
〴
〵

各バッファの要素のデータ型（ハンドル）〶ステータスオブジェクト（ステータス型）〷〸

どのぴ きぐぉたうどぬづたひづちつたはひつづひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたげぅぁいたくげいぅげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたはひつづひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたはひつづひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
きぐぉたうぉがぅたげぅぁいたくげいぅげぅいはきぐぉたうぉがぅたげぅぁいたこえぁげぅいインターフェイスの集団操作バージョンである．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたうぉがぅたしげぉごぅたくげいぅげぅい〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〬 びぴちぴふび〩
ぉぎくさご
ぉぎ
ぉぎ
ぉぎ
くさご

てと
ぢふて
っはふのぴ
つちぴちぴべばづ
びぴちぴふび〲〳ファイルハンドル（ハンドル）〲〴

バッファの先頭アドレス（選択型）〲〵

バッファ内の要素の数（整数型）〲〶

各バッファの要素のデータ型（ハンドル）〲〷ステータスオブジェクト（ステータス型）〲〸〲〹

どのぴ きぐぉたうどぬづたぷひどぴづたはひつづひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたしげぉごぅたくげいぅげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたはひつづひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたはひつづひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

きぐぉたうぉがぅたしげぉごぅたくげいぅげぅいはきぐぉたうぉがぅたしげぉごぅたこえぁげぅいインターフェイスの集団
操作バージョンである．

〴〱
〴〲
〴〳

シーク

〴〴
〴〵

ファイルを開いたときにきぐぉたきくいぅたこぅけさぅぎごぉぁがモードが指定されている場合，以下の〲つのルーチン（きぐぉたうぉがぅたこぅぅかたこえぁげぅいおよびきぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎたこえぁげぅい）を呼び出すのは誤りである．

〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〳〸
〱
〲

きぐぉたうぉがぅたこぅぅかたこえぁげぅい〨てと〬 は》びづぴ〬 ぷとづのっづ〩
ぉぎくさご

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

ぉぎ
ぉぎ

てと
は》びづぴ
ぷとづのっづ

ファイルハンドル（ハンドル）
ファイルのオフセット（整数型）
更新モード（ステート型）

どのぴ きぐぉたうどぬづたびづづにたびとちひづつ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 どのぴ ぷとづのっづ〩
きぐぉたうぉがぅたこぅぅかたこえぁげぅい〨うえ〬 くううこぅご〬 しえぅぎぃぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 しえぅぎぃぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{ぶはどつ きぐぉ〺〺うどぬづ〺〺こづづにたびとちひづつ〨きぐぉ〺〺くててびづぴ はててびづぴ〬 どのぴ ぷとづのっづ〩 （廃止された呼び出
し形式, 第15.2節を参照）}
きぐぉたうぉがぅたこぅぅかたこえぁげぅいはぷとづのっづに従って共有ファイルポインタを更新する．
ぷとづのっづで使用できる値は以下のとおりである．
• きぐぉたこぅぅかたこぅご：ポインタがは》びづぴに設定される• きぐぉたこぅぅかたぃさげ：ポインタが現在のポインタ位置〫は》びづぴに設定される〱〸〱〹• きぐぉたこぅぅかたぅぎい：ポインタがファイル終端〫は》びづぴに設定される

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

きぐぉたうぉがぅたこぅぅかたこえぁげぅいは集団的であり，ファイルハンドルてとに関連付けれらた
コ ミ ュ ニ ケ ー タ グ ル ー プ 内 の す べ て の プ ロ セ ス はは》びづぴとぷとづのっづに 同 じ 値 を 使 用 してきぐぉたうぉがぅたこぅぅかたこえぁげぅいを呼び出す必要がある．
は》びづぴには負の値も設定でき，この場合は後方へのシークが行われる．ビューにおける負の位置にシークするのは誤りである．

〲〷〲〸

きぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎたこえぁげぅい〨てと〬 は》びづぴ〩

〲〹
〳〰
〳〱

ぉぎ
くさご

てと
は》びづぴ

ファイルハンドル（ハンドル）
共有ポインタのオフセット（整数型）

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

どのぴ きぐぉたうどぬづたでづぴたばはびどぴどはのたびとちひづつ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ 〪はててびづぴ〩
きぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎたこえぁげぅい〨うえ〬 くううこぅご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{きぐぉ〺〺くててびづぴ きぐぉ〺〺うどぬづ〺〺ぇづぴたばはびどぴどはのたびとちひづつ〨〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}
きぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎたこえぁげぅいは，現在のビューに対する共有ファイルポインタの現在の位置をづぴべばづ単位では》びづぴに返す．

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス 返されたは》びづぴは，後に現在の位置に戻るために， ぷとづのっづ〽 きぐぉたこぅぅかたこぅごとしてきぐぉたうぉがぅたこぅぅかたこえぁげぅいを呼び出す際に使用することができる． 現在のファイルポインタの位置に変位を設定するには，まずきぐぉたうぉがぅたぇぅごたあすごぅたくううこぅごを使用しては》びづぴを絶対バイト位置に変換してから，得られた変位を使用してきぐぉたうぉがぅたこぅごたざぉぅしを呼び出す． （ユーザへのアドバイ
ス終わり）〱〳〮〴〮 データアクセス〴〳〹

13.4.5 スプリット集団データアクセスルーチン〱〲

きぐぉはスプリット集団データアクセスルーチンを使用した，すべてのデータアクセ
ス用の「ノンブロッキング集団」入出力操作を制限付きで提供している．これらのルーチンは，〱つの集団操作が開始ルーチンと終了ルーチンの〲つに分割されているため，「分割」集団ルーチンと呼ばれる． 開始ルーチンは，ノンブロッキングデータア
クセス（きぐぉたうぉがぅたぉげぅぁいなど）と同様に操作を開始させる．終了ルーチンは，対応するぴづびぴやぷちどぴ（きぐぉたしぁぉごなど）と同様に操作を完了させる．ノンブロッキングデータア
クセス操作と同様，ユーザはルーチンが未完了の状態では開始ルーチンに渡されたバッ
ファを使用してはならず，バッファを安全に開放するには終了ルーチンによって操作を完了させておく必要がある．
ファイルハンドルてとでのスプリット集団データアクセス操作には，以下の意味論に関する規則が適用される．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

• どのきぐぉプロセスにおいても，かつどの時点においても，１つのファイルハンドルに対応するアクティブなスプリット集団操作はたかだか１つでなければならない．

〱〷
〱〸
〱〹

• 開始呼び出しは集団的オープンに参加したプロセスのグループに対して集団的であり，集団呼び出しの順序付け規則に従う．

〲〰
〲〱
〲〲

• 終了呼び出しは集団的オープンに参加したプロセスのグループに対して集団的であり，集団呼び出しの順序付け規則に従う．各終了呼び出しは，同じ集団操作でのその前の開始呼び出しと対応している．「終了」呼び出しを行う場合，同じ操作のための，また対応付けが起きていない「開始」呼び出しが，ただ１個だけ前になければならない．
• 開始呼び出し（きぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎなど）または終了呼び出し（
きぐぉたうぉがぅたげぅぁいたぁががたぅぎいなど）のいずれかを発行する場合，対応するブロッキ
ング集団的ルーチンを使用して，スプリット集団データアクセスルーチンを実装しても良い．開始呼び出しと終了呼び出しは，ユーザときぐぉ実装で集団操作の最適化を可能にするために用意されている．

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

• スプリット集団操作は，該当する通常の集団操作とは対応しない．例えば，〱つの集団的読み込み操作において，あるプロセスのきぐぉたうぉがぅたげぅぁいたぁががは別のプロセ
スのきぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎ／きぐぉたうぉがぅたげぅぁいたぁががたぅぎいのペアには対応しない．
• スプリット集団ルーチンでは，開始ルーチンと終了ルーチンの両方でバッファを指定する必要がある．終了ルーチンでのデータ受信用のバッファを指定することにより，〵〰〷ページの第〱〶〮〲〮〲節「レジスタの最適化での問題」に記載された問題の（すべてではないが）多くを回避することができる．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

• ファイルハンドルでの集団入出力操作は，そのファイルハンドルでのスプリット集
団アクセスと同時（つまり，アクセスの開始と終了の間）に行うことはできない．

〴〷〴〸

第 〱〳〮 入出力〴〴〰
つまり，以下のコードは〱〲〳きぐぉたうどぬづたひづちつたちぬぬたぢづでどの〨てと〬 〮〮〮〩〻〮〮〮
きぐぉたうどぬづたひづちつたちぬぬ〨てと〬 〮〮〮〩〻〮〮〮
きぐぉたうどぬづたひづちつたちぬぬたづのつ〨てと〬 〮〮〮〩〻

〴
〵
〶
〷
〸

誤りである．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

• マルチスレッド実装では，あるプロセスによって呼び出されたスプリット集団開始／終了操作は，同じスレッドから呼び出されなければならない．この制限により，マルチスレッドの場合の実装を簡素化できる．（〲つのスレッドが同じファイルハン
ドルに対しスプリット集団操作を開始することは許されていないため，ファイルハ
ンドルに対して〱つのスプリット集団操作しかアクティブにできないことに注意す
ること．）

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

これらのルーチンの引数の意味は，これと同等の集団操作の呼び出しの場合と同じである（例えば，きぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎおよびきぐぉたうぉがぅたげぅぁいたぁががたぅぎいの引数の定義はきぐぉたうぉがぅたげぅぁいたぁががの引数の定義と同等である）． 開始ルーチン（
きぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎなど）はスプリット集団操作を開始し，対応する終了ルーチン（きぐぉたうぉがぅたげぅぁいたぁががたぅぎい）により完了するときに，同等の集団的ルーチン（きぐぉたうぉがぅたげぅぁいたぁがが）用に定義されたのと同じ結果が得られる．
一貫性の意味論のため（〴〵〵ページの第〱〳〮〶〮〱節），スプリット集団データアクセス操作の対応するペア（きぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎ，きぐぉたうぉがぅたげぅぁいたぁががたぅぎいなど）で１つのデータアクセスを構成するものする．

〲〹〳〰

きぐぉたうぉがぅたげぅぁいたぁごたぁががたあぅぇぉぎ〨てと〬 は》びづぴ〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〩

〳〱
〳〲

ぉぎ

〳〳

ぉぎ

〳〴

くさご

〳〵

ぉぎ

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぉぎ

てと
は》びづぴ
ぢふて
っはふのぴ
つちぴちぴべばづ

ファイルハンドル（ハンドル）
ファイルのオフセット（整数型）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）

どのぴ きぐぉたうどぬづたひづちつたちぴたちぬぬたぢづでどの〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
きぐぉたうぉがぅたげぅぁいたぁごたぁががたあぅぇぉぎ〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぴたちぬぬたぢづでどの〨きぐぉ〺〺くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬
どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〱〳〮〴〮 データアクセス〴〴〱

きぐぉたうぉがぅたげぅぁいたぁごたぁががたぅぎい〨てと〬 ぢふて〬 びぴちぴふび〩
ぉぎ
くさご
くさご

てと
ぢふて
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
ステータスオブジェクト（ステータス型）

どのぴ きぐぉたうどぬづたひづちつたちぴたちぬぬたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたげぅぁいたぁごたぁががたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぴたちぬぬたづのつ〨ぶはどつ〪 ぢふて〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぴたちぬぬたづのつ〨ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を参照）
}

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

きぐぉたうぉがぅたしげぉごぅたぁごたぁががたあぅぇぉぎ〨てと〬 は》びづぴ〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〩
ぉぎくさご
ぉぎ
ぉぎ
ぉぎ
ぉぎ

てと
は》びづぴ
ぢふて
っはふのぴ
つちぴちぴべばづ〱〶

ファイルハンドル（ハンドル）〱〷

ファイルのオフセット（整数型）〱〸

バッファの先頭アドレス（選択型）〱〹

バッファ内の要素の数（整数型）〲〰

各バッファの要素のデータ型（ハンドル）

どのぴ きぐぉたうどぬづたぷひどぴづたちぴたちぬぬたぢづでどの〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
きぐぉたうぉがぅたしげぉごぅたぁごたぁががたあぅぇぉぎ〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぴたちぬぬたぢづでどの〨きぐぉ〺〺くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬
どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

きぐぉたうぉがぅたしげぉごぅたぁごたぁががたぅぎい〨てと〬 ぢふて〬 びぴちぴふび〩
ぉぎくさご
ぉぎ
くさご

てと
ぢふて
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
ステータスオブジェクト（ステータス型）

どのぴ きぐぉたうどぬづたぷひどぴづたちぴたちぬぬたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたしげぉごぅたぁごたぁががたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぴたちぬぬたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぴたちぬぬたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式,
第15.2節を参照）}

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〴〲
〱
〲

きぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎ〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〩
ぉぎくさご

〳
〴

くさご

〵

ぉぎ

〶

ぉぎ

てと
ぢふて
っはふのぴ
つちぴちぴべばづ

ファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

どのぴ きぐぉたうどぬづたひづちつたちぬぬたぢづでどの〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
きぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぬぬたぢづでどの〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〱〵
〱〶
〱〷

きぐぉたうぉがぅたげぅぁいたぁががたぅぎい〨てと〬 ぢふて〬 びぴちぴふび〩

〱〸

ぉぎくさご

〱〹

くさご

〲〰

くさご

てと
ぢふて
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
ステータスオブジェクト（ステータス型）

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

どのぴ きぐぉたうどぬづたひづちつたちぬぬたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたげぅぁいたぁががたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぬぬたづのつ〨ぶはどつ〪 ぢふて〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたちぬぬたづのつ〨ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〹
〳〰
〳〱
〳〲

きぐぉたうぉがぅたしげぉごぅたぁががたあぅぇぉぎ〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〩
ぉぎくさご

〳〳

ぉぎ

〳〴

ぉぎ

〳〵

ぉぎ

てと
ぢふて
っはふのぴ
つちぴちぴべばづ

ファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたうどぬづたぷひどぴづたちぬぬたぢづでどの〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
きぐぉたうぉがぅたしげぉごぅたぁががたあぅぇぉぎ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぬぬたぢづでどの〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〳〮〴〮 データアクセス〴〴〳

きぐぉたうぉがぅたしげぉごぅたぁががたぅぎい〨てと〬 ぢふて〬 びぴちぴふび〩
ぉぎくさご
ぉぎ
くさご

てと
ぢふて
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
ステータスオブジェクト（ステータス型）

どのぴ きぐぉたうどぬづたぷひどぴづたちぬぬたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたしげぉごぅたぁががたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぬぬたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたちぬぬたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を
参照）}

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

きぐぉたうぉがぅたげぅぁいたくげいぅげぅいたあぅぇぉぎ〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〩
ぉぎくさご
くさご
ぉぎ
ぉぎ

てと
ぢふて
っはふのぴ
つちぴちぴべばづ〱〶

ファイルハンドル（ハンドル）〱〷

バッファの先頭アドレス（選択型）〱〸

バッファ内の要素の数（整数型）〱〹

各バッファの要素のデータ型（ハンドル）〲〰

どのぴ きぐぉたうどぬづたひづちつたはひつづひづつたぢづでどの〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
きぐぉたうぉがぅたげぅぁいたくげいぅげぅいたあぅぇぉぎ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたはひつづひづつたぢづでどの〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

きぐぉたうぉがぅたげぅぁいたくげいぅげぅいたぅぎい〨てと〬 ぢふて〬 びぴちぴふび〩
ぉぎくさご
くさご
くさご

てと
ぢふて
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
ステータスオブジェクト（ステータス型）

どのぴ きぐぉたうどぬづたひづちつたはひつづひづつたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたげぅぁいたくげいぅげぅいたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたはひつづひづつたづのつ〨ぶはどつ〪 ぢふて〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩 （廃止された
呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺げづちつたはひつづひづつたづのつ〨ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〴〴
〱
〲

きぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたあぅぇぉぎ〨てと〬 ぢふて〬 っはふのぴ〬 つちぴちぴべばづ〩
ぉぎくさご

〳
〴

ぉぎ

〵

ぉぎ

〶

ぉぎ

てと
ぢふて
っはふのぴ
つちぴちぴべばづ

ファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
バッファ内の要素の数（整数型）
各バッファの要素のデータ型（ハンドル）

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

どのぴ きぐぉたうどぬづたぷひどぴづたはひつづひづつたぢづでどの〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
きぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたあぅぇぉぎ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたはひつづひづつたぢづでどの〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〱〵
〱〶
〱〷

きぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたぅぎい〨てと〬 ぢふて〬 びぴちぴふび〩

〱〸

ぉぎくさご

〱〹

ぉぎ

〲〰

くさご

てと
ぢふて
びぴちぴふびファイルハンドル（ハンドル）
バッファの先頭アドレス（選択型）
ステータスオブジェクト（ステータス型）

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

どのぴ きぐぉたうどぬづたぷひどぴづたはひつづひづつたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
きぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたはひつづひづつたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 きぐぉ〺〺こぴちぴふび〦 びぴちぴふび〩（廃止された呼び出し形式, 第15.2節を参照）}{ぶはどつ きぐぉ〺〺うどぬづ〺〺しひどぴづたはひつづひづつたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式,
第15.2節を参照）}

〲〹
〳〰
〳〱

13.5 ファイルの相互運用性

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

最も基本的なレベルで，ファイルの相互運用性とは，データのビット列だけでなく，ビット列が表現する実際の情報として，ファイルにすでに書き込まれている情報を読み取る能力を指す．きぐぉでは〱つのきぐぉ環境内での完全な相互運用性を保証しており，外部のデータ表現（〴〴〸ページの第〱〳〮〵〮〲節）およびデータ変換関数（〴〴〹ページの第〱〳〮〵〮〳節）
を通して，その環境の外側での相互運用性サポートを強化している．
〲つのプロセスを同時に起動し，〱つのきぐぉたぃくききたしくげがいに常駐させることが可能であれば，〱つのきぐぉ環境内の相互運用性（「運用性」と考えることができる）により，一貫性の制限の対象として（〴〵〵ページの第〱〳〮〶〮〱節を参照），〱つのきぐぉプロセスによって書き込まれたファイルデータを他の任意のきぐぉプロセスによって読み取れることが保証される．また，両方のプロセスはデータが書き込まれたファイル内ですべての絶対バイ
トオフセットで同じデータ値が見えなければならない．
この単一環境ファイル相互運用性は，プロセスの数に関係なくファイルのデータにアクセスできることを示している．

〱〳〮〵〮 ファイルの相互運用性〴〴〵

ファイルの相互運用性には以下の〳つの側面がある．

〱〲• ビットの転送〳〴• 異なるファイル構造間での変換• 異なるマシンの表現間での変換
ファイルの相互運用性の最初の〲つの側面は，マシンに依存する部分が大きいため，この標準のスコープを超えている．しかし，きぐぉ環境との間でのファイルのビットの転送（ファイルをテープに書き込むなどの方法による）は，すべてのきぐぉ実装によってサポートされていなければならない．特に，実装では，ぐくこぉじ っば，ひね，ねぶのような一般的な操作がファイルに対して行われうる方法を指定する必要がある．また，提供される機能に
より絶対バイトオフセット間の対応が維持されると考えられる（例えば，考えられるファイル構造の変換後に，きぐぉ環境のバイトオフセット〱〰〲のデータビットはきぐぉ環境外のバイトオフセット〱〰〲となる）．例えば，上記のオフセットの一貫性が維持できるのであれば，ネイティブファイルシステムときぐぉ環境の間でファイルの転送と変換を行うシン
プルなオフライン変換機能で十分である．きぐぉの高品質な実装では，ネイティブファイ
ルシステムでファイルの操作用に用意されているのと同じまたは類似のツールを使用して，ユーザがきぐぉファイルを操作することができる．
ファイルの相互運用性の残りの側面である異なるマシンの表現間での変換は，づぴべばづと
ファイル型で指定された型情報によりサポートされる．この機能を利用すると，きぐぉを
使用するかどうかに関係なく，また動作するマシンのアーキテクチャに関係なく，ファイルの情報を〲つのアプリケーションの間で共有することができる．
きぐぉはぜのちぴどぶづ〢，ぜどのぴづひのちぬ〢，ぜづへぴづひのちぬ〳〲〢という複数のデータ表現をサポートしている．これ以外のデータ表現がサポートされている場合もある．きぐぉではユーザ定義のデー
タ表現もサポートしている（〴〴〹ページの第〱〳〮〵〮〳節を参照）．ぜのちぴどぶづ〢およびぜどのぴづひのちぬ〢データ表現は実装依存であり，ぜづへぴづひのちぬ〳〲〢表現はすべてのきぐぉ実装に共通で，ファイルの相互運用性を容易にする．データ表現はきぐぉたうぉがぅたこぅごたざぉぅしのdatarep引数で指定され
る．

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

ユーザへのアドバイス きぐぉでは，ファイルの書き込み時に使用されたデータ表現に関する情報を保持することが保証されていない．そのため，ファイルデータを正しく取得するには，きぐぉアプリケーションで責任を持って，ファイルの生成時に使用されたのと同じデータ表現を指定する必要がある． （ユーザへのアドバイス終わ
り）

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

“native” この表現のデータは，メモリ内とまったく同じようにファイルに格納される．
このデータ表現の利点は，純粋な同一機種環境において，型変換の際にデータの精度と入出力の性能が失われないことである．欠点は，異機種きぐぉ環境内でトランス
ペアレントな相互運用性が失われることである．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〴〴〶
〱
〲
〳
〴
〵
〶
〷
〸
〹

第 〱〳〮 入出力
ユーザへのアドバイス このデータ表現を使用するのは，同一機種きぐぉ環境でのみ，またはきぐぉアプリケーションがそれ自体でデータの型変換を実行できる
場合のみに限定する必要がある． （ユーザへのアドバイス終わり）
実装者へのアドバイス きぐぉメッセージ通信の上位に読み込みおよび書き込み操作を実装する場合，メッセージルーチンがデータの型変換を実行しないよ
うにメッセージデータの型をきぐぉたあすごぅにする必要がある． （実装者へのア
ドバイス終わり）

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

“internal” このデータ表現は同一機種環境または異機種環境での入出力操作に使用することができ，実装では必要に応じて型変換を実行する．実装は選択した任意の形式
でデータを格納できるが，任意の〱つのファイル内のすべての定義済みのデータ型に対して定数の範囲が維持されるという制限がある．生成されるファイルが再使用できる環境は実装時に定義され，実装により文書化する必要がある．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

根拠 このデータ表現を使用すると，ファイルの再使用の方法に関して実装で定義される制限はあるものの，異機種環境で入出力を効率的に実行することができる． （根拠の終わり）
実装者へのアドバイス ぜづへぴづひのちぬ〳〲〢はぜどのぴづひのちぬ〢で提供される機能の上位集合であるため，実装の選択によりぜどのぴづひのちぬ〢をぜづへぴづひのちぬ〳〲〢として実装することもできる． （実装者へのアドバイス終わり）

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

“external32” こ の デ ー タ 表 現 で は， 読 み 込 み〯書 き 込 み 操 作 に よ り， 〴〴〸ペ ー ジ の第〱〳〮〵〮〲節で定義されたぜづへぴづひのちぬ〳〲〢表現との間ですべてのデータが変換されることが規定されている．通信のためのデータ変換規則はこれらの変換にも適用される（きぐぉ〭〱文書の〲〵～〲〷ページの〳〮〳〮〲節を参照）．ストレージ媒体のデータは常にこの標準の表現となり，メモリ内のデータは常にローカルプロセスのネイティブ表現となる．
このデータ表現にはいくつかの利点がある．第〱に，異機種きぐぉ環境でファイルを読み込むすべてのプロセスは自動的にデータをそれぞれのネイティブ表現に変換する．第〲に，ファイルをあるきぐぉ環境からエクスポートし，別のきぐぉ環境にインポー
トして，インポート先の環境でファイル内のすべてのデータを読み込めることを保
証できる．

〴〰
〴〱
〴〲

このデータ表現の欠点は，データの型変換の際にデータの精度と入出力の性能が失われる可能性があることである．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス きぐぉメッセージ通信の上位に読み込みおよび書き込
み操作を実装する場合，クライアントがデータをきぐぉたあすごぅとして受信し，ぜづへぴづひのちぬ〳〲〢表現へ変換したり，ぜづへぴづひのちぬ〳〲〢表現へ変換してきぐぉたあすごぅとしてデータを送信すべきである，これにより，データの二重の型変換やこれに〱〳〮〵〮 ファイルの相互運用性〴〴〷

伴う精度や性能のさらなる喪失が回避できる． （実装者へのアドバイス終わ
り）

〱
〲
〳

13.5.1 ファイルの相互運用性のためのデータ型
ファイルのデータ表現がぜのちぴどぶづ〢以外である場合，づぴべばづとファイル型の構成に注意する必要がある．任意のデータ型コンストラクタ関数を使用することができるが，変位をバイト単位で適用できる関数の場合，使用するファイルのデータ表現に対して，ファイル内の値で変位を指定する必要がある．きぐぉはこれらのバイト変位をそのまま解釈し，スケールは行わない．関数きぐぉたうぉがぅたぇぅごたごすぐぅたぅじごぅぎごはファイル内でのデータ型の範囲を計算するのに使用できる．可搬なデータ型であるづぴべばづとファイル型については（〱〳ページの第〲〮〴節を参照），きぐぉはファイルのデータ表現に合わせてデータ型の変位のスケールを行う．読み込み〯書き込みルーチンに引数として渡されるデータ型はメモリ内のデータ配置を指定するため，これらは常にメモリ内の変位に対応する変位を使用して構成する必要がある．

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

ユーザへのアドバイス ファイルは，論理的には，ファイルサーバーのメモリに格納されているものと考えることができる． づぴべばづと「ぬづぴべばづは，呼び出しプロセスでの定義に使用されるのと同じ呼び出しのシーケンスにより，このファイルサー
バーで定義されているものとして解釈される．データ表現がぜのちぴどぶづ〢である場合，
この論理ファイルサーバーは呼び出しプロセスと同じアーキテクチャ上で動作するため，これらの型により，呼び出しプロセスのメモリ内で定義されるのと同じ
データ配置がファイル上で定義される． づぴべばづと「ぬづぴべばづが可搬なデータ型である
場合，ファイル内で定義されるデータ配置は，呼び出しプロセスのメモリ内でスケーリングファクターに従って定義されるものと同じになる．このスケーリング
ファクターを計算するためにルーチンきぐぉたうぉがぅたぇぅごたうぉがぅたぅじごぅぎごを使用することができる． そのため，ぜどのぴづひのちぬ〢，ぜづへぴづひのちぬ〳〲〢，またはユーザ定義データ表現を持つ異機種環境においても，〲つの等価で可搬なデータ型を使えばファイル内
で同じデータ配置を定義することができる．あるいは，任意のアーキテクチャで型マップと範囲が同じになるようにづぴべばづと「ぬづぴべばづを構成する必要がある． このた
めには，これらが明示的な上限と下限（きぐぉたがあおよびきぐぉたさあマーカを使用して，またはきぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅいを使用して定義）を持つようにすればよい．
づぴべばづおよび「ぬづぴべばづを構成するデータ型にも，以下の場合にはこの条件が適用される．このデータ型がきぐぉたごすぐぅたぃくぎごぉぇさくさこの呼び出しによって明示的に，あるいは〱より大きいぢぬはっにぬづのでぴと引数により暗黙的に，連続的に複製される場合である．
づぴべばづあるいは「ぬづぴべばづが可搬でなく，アーキテクチャに依存する型マップあるいは範囲を持っている場合，ファイル上でこれによって指定されるデータ配置は実装依
存である．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

ぜのちぴどぶづ〢以外のファイルのデータ表現は，対応するメモリ内のデータ表現とは異なる場合がある．そのため，これらのファイルのデータ表現では，ビューを指定する
初期変位を含め，ファイルの位置付けのために，ハードコーディングされたバイト

〴〶
〴〷
〴〸

第 〱〳〮 入出力〴〴〸

オフセットを使用しないことが重要である．データアクセス操作で可搬なデータ型を使用する場合（〱〳ページの第〲〮〴節を参照），データ表現に合わせてデータ型の穴がスケールされる．しかし，この技法が有効なのは，ファイルビューを生成したすべてのプロセスが同じ定義済みのデータ型からづぴべばづを作成した場合のみである．例えば，あるプロセスがきぐぉたぉぎごから作成されたづぴべばづを使用し，別のプロセスがきぐぉたうがくぁごから作成されたづぴべばづを使用する場合，これらの型の相対サイズがデータ表現ごとに異なる可能性があるため，生成されるビューは可搬でないことがある． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

きぐぉたうぉがぅたぇぅごたごすぐぅたぅじごぅぎご〨てと〬 つちぴちぴべばづ〬 づへぴづのぴ〩
ぉぎ
ぉぎ

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

くさご

てと
つちぴちぴべばづ
づへぴづのぴファイルハンドル（ハンドル）
データ型（ハンドル）
データ型の範囲（整数型）

どのぴ きぐぉたうどぬづたでづぴたぴべばづたづへぴづのぴ〨きぐぉたうどぬづ てと〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
きぐぉたぁどのぴ 〪づへぴづのぴ〩
きぐぉたうぉがぅたぇぅごたごすぐぅたぅじごぅぎご〨うえ〬 いぁごぁごすぐぅ〬 ぅじごぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごぅぎご{きぐぉ〺〺ぁどのぴ きぐぉ〺〺うどぬづ〺〺ぇづぴたぴべばづたづへぴづのぴ〨っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}
ファイルてとのつちぴちぴべばづの範囲を返す．この範囲は，ファイルてとにアクセスするすべてのプロセスで同じとなる．現在のビューでユーザ定義のデータ表現を使用する場合（〴〴〹ページの第〱〳〮〵〮〳節を参照），きぐぉはつぴべばづた「ぬづたづへぴづのぴたてのコールバックを使用して範囲を計算
する．

〳〰
〳〱
〳〲
〳〳
〳〴

実装者へのアドバイス ユーザ定義のデータ表現の場合，派生データ型の範囲は，
つぴべばづた「ぬづたづへぴづのぴたてのを使用してまずこの派生データ型での定義済みのデータ型の範囲を調べることにより，計算することができる（〴〴〹ページの第〱〳〮〵〮〳節を参照）．
（実装者へのアドバイス終わり）

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

13.5.2 外部のデータ表現：“external32”
すべてのきぐぉ実装で，この節で定義するデータ表現をサポートする必要がある．オプションのデータ型（きぐぉたぉぎごぅぇぅげ〲など）のサポートは必要ない．
浮動小数点数の値はすべて適切なサイズのビッグエンディアンぉぅぅぅ形式せ〲〷そである．
浮動小数点数の値は〳つのうちのいずれかの ぉぅぅぅ形式で表現される．これらはそれぞれ，〴，〸，〱〶バイトのストレージを必要とするぉぅぅぅ ぜこどのでぬづ〢（単精度），ぜいはふぢぬづ〢（倍精度），ぜいはふぢぬづ ぅへぴづのつづつ〢（四倍精度）形式である．ぉぅぅぅ ぜいはふぢぬづ ぅへぴづのつづつ〢形式の場合，
きぐぉは，フォーマット幅〱〶バイト，指数部〱〵 ビット，ぢどちび 〽 〫〱〶〳〸〳，仮数部〱〱〲ビットを指定する．エンコードは ぜいはふぢぬづ〢形式と同様である．整数値はすべて〲の補数のビッ
グエンディアン形式となる．ビッグエンディアンでは，最上位バイトが最もアドレス〱〳〮〵〮 ファイルの相互運用性〴〴〹の小さいバイトに入る．ぃ言語のたあははぬ， うはひぴひちの言語のがくぇぉぃぁが，ぃ〫〫言語のぢははぬの場
合， 〰はてちぬびづ，〰以外はぴひふづを示す．ぃ言語 のてぬはちぴ たぃはねばぬづへ，つはふぢぬづ たぃはねばぬづへ，ぬはので
つはふぢぬづ たぃはねばぬづへと，うはひぴひちの言語のぃくきぐがぅじおよびいくさあがぅ ぃくきぐがぅじは，実数部と虚数部の浮動小数点数形式の値のペアで表現される．文字はぉこく 〸〸〵〹〭〱形式であるせ〲〸そ．（
きぐぉたしぃえぁげの）ワイド文字はさのどっはつづ形式であるせ〴〷そ．
符号付き数値（きぐぉたぉぎご， きぐぉたげぅぁが）は最上位ビットが符号ビットとなる．
きぐぉたぃくきぐがぅじおよびきぐぉたいくさあがぅたぃくきぐがぅじは実数部および虚数部の最上位ビットが各部の符号ビットとなる．
ぉぅぅぅの仕様に従いせ〲〷そ，ぜぎちぎ〢（非数）はシステムごとに異なる． きぐぉ内でぜぎちぎ〢以外のものとして解釈されないようにする必要がある．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

実装者へのアドバイス きぐぉでのぜぎちぎ〢の扱いは，じいげで使用されるアプローチと同様である（てぴば〺〯〯つび〮どのぴづひのどっ〮のづぴ〯ひてっ〯ひてっ〱〸〳〲〮ぴへぴを参照）． （実装者へのアドバイス終わり）

〱〴
〱〵
〱〶
〱〷

データはすべて，型に関係なく，バイト単位にアラインされる．データ項目はすべて，連続してファイルに格納される（ファイルビューが連続の場合）．
実装者へのアドバイス がくぇぉぃぁがとぢははぬについては，その値を特定するにはすべてのバイトをチェックせねばならない． （実装者へのアドバイス終わり）

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

ユ ー ザ へ の ア ド バ イ ス きぐぉたぐぁぃかぅい型 は バ イ ト と し て 扱 わ れ，変 換 さ れ な い．
きぐぉたぐぁぃかぅいはパックバッファの先頭にヘッダを配置するオプションを備えていることを知っておく必要がある． （ユーザへのアドバイス終わり）

〲〵
〲〶
〲〷
〲〸

きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが，きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじ，
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげから返される定義済みのデータ型のサイズは，〵〱〵ページの第〱〶〮〲〮〵節で定義されている．
実装者へのアドバイス サイズの大きな整数をサイズの小さな整数に変換する場合，
下位のバイトのみが移動される．符号ビットの値が欠落しないよう注意する必要がある．これにより，データの範囲がサイズの小さな整数の範囲内にある場合，変換エラーを起こさずに済む． （実装者へのアドバイス終わり）

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

表〱〳〮〲に，ぜづへぴづひのちぬ〳〲〢形式の定義済みのデータ型のサイズを示す．

〳〹〴〰

13.5.3 ユーザ定義のデータ表現〴〱〴〲

以下の〲つの状況には，表現を指定することでは対処できない．

〴〳〱〮 ユーザが，実装で識別できない表現によりファイルに書き込もうとしている場合．

〴〵

〴〴

〴〶

〲〮 ユーザが，実装で識別できない表現で記述されたファイルを読み取ろうとしている
場合．

〴〷
〴〸

第 〱〳〮 入出力

〴〵〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

ごべばづ
〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭
きぐぉたぐぁぃかぅい
きぐぉたあすごぅ
きぐぉたぃえぁげ
きぐぉたさぎこぉぇぎぅいたぃえぁげ
きぐぉたこぉぇぎぅいたぃえぁげ
きぐぉたしぃえぁげ
きぐぉたこえくげご
きぐぉたさぎこぉぇぎぅいたこえくげご
きぐぉたぉぎご
きぐぉたさぎこぉぇぎぅいきぐぉたがくぎぇきぐぉたさぎこぉぇぎぅいたがくぎぇきぐぉたがくぎぇたがくぎぇたぉぎごきぐぉたさぎこぉぇぎぅいたがくぎぇたがくぎぇきぐぉたうがくぁご
きぐぉたいくさあがぅ
きぐぉたがくぎぇたいくさあがぅがづのでぴと〭〭〭〭〭〭
〱
〱
〱
〱
〱
〲
〲
〲
〴
〴
〴
〴
〸
〸
〴
〸
〱〶

きぐぉたぃたあくくがきぐぉたぉぎご〸たご
きぐぉたぉぎご〱〶たごきぐぉたぉぎご〳〲たごきぐぉたぉぎご〶〴たごきぐぉたさぉぎご〸たご
きぐぉたさぉぎご〱〶たごきぐぉたさぉぎご〳〲たごきぐぉたさぉぎご〶〴たごきぐぉたぁぉぎごきぐぉたくううこぅご
きぐぉたぃたぃくきぐがぅじ
きぐぉたぃたうがくぁごたぃくきぐがぅじ
きぐぉたぃたいくさあがぅたぃくきぐがぅじ
きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじ

〱
〱
〲
〴
〸
〱
〲
〴
〸
〸
〸
〲〪〴
〲〪〴
〲〪〸
〲〪〱〶

きぐぉたぃえぁげぁぃごぅげ
きぐぉたがくぇぉぃぁがきぐぉたぉぎごぅぇぅげきぐぉたげぅぁがきぐぉたいくさあがぅたぐげぅぃぉこぉくぎきぐぉたぃくきぐがぅじ
きぐぉたいくさあがぅたぃくきぐがぅじ

〱
〴
〴
〴
〸
〲〪〴
〲〪〸

くばぴどはのちぬ ごべばづ〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭
きぐぉたぉぎごぅぇぅげ〱きぐぉたぉぎごぅぇぅげ〲きぐぉたぉぎごぅぇぅげ〴きぐぉたぉぎごぅぇぅげ〸きぐぉたぉぎごぅぇぅげ〱〶
きぐぉたげぅぁが〲きぐぉたげぅぁが〴きぐぉたげぅぁが〸きぐぉたげぅぁが〱〶きぐぉたぃくきぐがぅじ〴
きぐぉたぃくきぐがぅじ〸
きぐぉたぃくきぐがぅじ〱〶きぐぉたぃくきぐがぅじ〳〲がづのでぴと〭〭〭〭〭〭
〱
〲
〴
〸
〱〶
〲
〴
〸
〱〶
〲〪〲
〲〪〴
〲〪〸
〲〪〱〶

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

ぃ〫〫 ごべばづび
がづのでぴと〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭
きぐぉたぃじじたあくくが〱きぐぉたぃじじたうがくぁごたぃくきぐがぅじ〲〪〴
きぐぉたぃじじたいくさあがぅたぃくきぐがぅじ〲〪〸
きぐぉたぃじじたがくぎぇたいくさあがぅたぃくきぐがぅじ 〲〪〱〶

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

表 〱〳〮〲〺 ぜづへぴづひのちぬ〳〲〢の定義済みのデータ型のサイズ

〱〳〮〵〮 ファイルの相互運用性〴〵〱

ユーザ定義のデータ表現を使用する場合，ユーザは入出力ストリームにサードパーテ
ィのコンバータを組み込んで，データ表現の変換を行うことができる．

〱
〲
〳
〴

きぐぉたげぅぇぉこごぅげたいぁごぁげぅぐ〨つちぴちひづば〬 ひづちつたっはのぶづひびどはのたての〬 ぷひどぴづたっはのぶづひびどはのたての〬つぴべばづた「ぬづたづへぴづのぴたての〬 づへぴひちたびぴちぴづ〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
ぉぎ

つちぴちひづば
ひづちつたっはのぶづひびどはのたてのぷひどぴづたっはのぶづひびどはのたてのつぴべばづた「ぬづたづへぴづのぴたてのづへぴひちたびぴちぴづ

データ表現識別子（文字列）〵〶〷

ファイル表現からネイティブ表現に変換するために呼び出される関数（関数）〸ネイティブ表現からファイル表現に変換するために呼び出される関数（関数）〱〰

ファイル内で表現されたデータ型の範囲を取得するために呼び出される関数（関数）〱〲追加ステート

〱〴

〹

〱〱

〱〳

〱〵

どのぴ きぐぉたげづでどびぴづひたつちぴちひづば〨っとちひ 〪つちぴちひづば〬
きぐぉたいちぴちひづばたっはのぶづひびどはのたてふのっぴどはの 〪ひづちつたっはのぶづひびどはのたての〬きぐぉたいちぴちひづばたっはのぶづひびどはのたてふのっぴどはの 〪ぷひどぴづたっはのぶづひびどはのたての〬きぐぉたいちぴちひづばたづへぴづのぴたてふのっぴどはの 〪つぴべばづたてどぬづたづへぴづのぴたての〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩
きぐぉたげぅぇぉこごぅげたいぁごぁげぅぐ〨いぁごぁげぅぐ〬 げぅぁいたぃくぎざぅげこぉくぎたうぎ〬 しげぉごぅたぃくぎざぅげこぉくぎたうぎ〬
いごすぐぅたうぉがぅたぅじごぅぎごたうぎ〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐぅじごぅげぎぁが げぅぁいたぃくぎざぅげこぉくぎたうぎ〬 しげぉごぅたぃくぎざぅげこぉくぎたうぎ〬 いごすぐぅたうぉがぅたぅじごぅぎごたうぎぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
ぉぎごぅぇぅげ ぉぅげげくげ
{ぶはどつ きぐぉ〺〺げづでどびぴづひたつちぴちひづば〨っはのびぴ っとちひ〪 つちぴちひづば〬
きぐぉ〺〺いちぴちひづばたっはのぶづひびどはのたてふのっぴどはの〪 ひづちつたっはのぶづひびどはのたての〬きぐぉ〺〺いちぴちひづばたっはのぶづひびどはのたてふのっぴどはの〪 ぷひどぴづたっはのぶづひびどはのたての〬きぐぉ〺〺いちぴちひづばたづへぴづのぴたてふのっぴどはの〪 つぴべばづたてどぬづたづへぴづのぴたての〬
ぶはどつ〪 づへぴひちたびぴちぴづ〩 （廃止された呼び出し形式, 第15.2節を参照）}
この呼び出しはひづちつたっはのぶづひびどはのたての，ぷひどぴづたっはのぶづひびどはのたての，つぴべばづた「ぬづたづへぴづのぴたてのとデータ表現識別子つちぴちひづばを関連付ける． つちぴちひづばはきぐぉたうぉがぅたこぅごたざぉぅしの引数として使用し，
その後のデータアクセス操作により，ファイルのデータ表現とネイティブ表現の間でアクセスされるすべてのデータ項目を変換するための変換関数を呼び出すことができる．
きぐぉたげぅぇぉこごぅげたいぁごぁげぅぐはローカル操作で，きぐぉプロセスを呼び出すためのデータ表
現の登録のみを行う．つちぴちひづばがすでに定義されている場合，デフォルトのファイルエラ
ーハンドラによりエラークラスきぐぉたぅげげたいさぐたいぁごぁげぅぐのエラーが報告される（〴〶〵ページの第〱〳〮〷節を参照）．データ表現文字列の長さはきぐぉたきぁじたいぁごぁげぅぐたこごげぉぎぇの値に制限されている． きぐぉたきぁじたいぁごぁげぅぐたこごげぉぎぇの値は〶〴以上でなければならない．データ表現を削除し，関連するリソースを解放するためのルーチンは用意されていない．アプリケーションにより多数生成されることはないと考えられる．

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

範囲のコールバック
ぴべばづつづて どのぴ きぐぉたいちぴちひづばたづへぴづのぴたてふのっぴどはの〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
きぐぉたぁどのぴ 〪てどぬづたづへぴづのぴ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻
こさあげくさごぉぎぅ いぁごぁげぅぐたぅじごぅぎごたうさぎぃごぉくぎ〨いぁごぁごすぐぅ〬 ぅじごぅぎご〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげ

〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〵〲
〱
〲
〳
〴
〵
〶
〷
〸
〹

ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごぅぎご〬 ぅじごげぁたこごぁごぅ{ぴべばづつづて ぶはどつ きぐぉ〺〺いちぴちひづばたづへぴづのぴたてふのっぴどはの〨っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬
きぐぉ〺〺ぁどのぴ〦 てどぬづたづへぴづのぴ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻 （廃止された呼び出し形
式．第15.2節を参照）}
関数つぴべばづた「ぬづたづへぴづのぴたてのは，ファイル表現のつちぴちぴべばづを格納するのに必要なバイト数
を「ぬづたづへぴづのぴに返す必要がある．この関数には，きぐぉたげぅぇぉこごぅげたいぁごぁげぅぐ呼び出しに渡された引数がづへぴひちたびぴちぴづに渡される．きぐぉはこのルーチンを呼び出すのは，ユーザが使用した定義済みのデータ型の場合のみである．

〱〰
〱〱

いちぴちひづば変換関数

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぴべばづつづて どのぴ きぐぉたいちぴちひづばたっはのぶづひびどはのたてふのっぴどはの〨ぶはどつ 〪ふびづひぢふて〬きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ っはふのぴ〬 ぶはどつ 〪てどぬづぢふて〬 きぐぉたくててびづぴ ばはびどぴどはの〬
ぶはどつ 〪づへぴひちたびぴちぴづ〩〻
こさあげくさごぉぎぅ いぁごぁげぅぐたぃくぎざぅげこぉくぎたうさぎぃごぉくぎ〨さこぅげあさう〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 うぉがぅあさう〬ぐくこぉごぉくぎ〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩〼ごすぐぅ〾 さこぅげあさう〨〪〩〬 うぉがぅあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 ぐくこぉごぉくぎ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ{ぴべばづつづて ぶはどつ きぐぉ〺〺いちぴちひづばたっはのぶづひびどはのたてふのっぴどはの〨ぶはどつ〪 ふびづひぢふて〬きぐぉ〺〺いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ っはふのぴ〬 ぶはどつ〪 てどぬづぢふて〬きぐぉ〺〺くててびづぴ ばはびどぴどはの〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻 （廃止された呼び出し形式．
第15.2節を参照）}
関数ひづちつたっはのぶづひびどはのたてのはファイルのデータ表現からネイティブ表現への変換を行わなければならない．このルーチンを呼び出す前に，きぐぉは「ぬづぢふて を割り当て，っはふのぴ個の連続するデータ項目を「ぬづぢふて に格納する． 各データ項目の型は，つちぴちぴべばづの型シグネチ
ャ内の，定義済みデータ型の対応するエントリと一致する． この関数にはきぐぉたげぅぇぉこごぅげたいぁごぁげぅぐの呼び出しに渡された引数がづへぴひちたびぴちぴづに渡される． この関
数はっはふのぴ個のすべてのデータ項目を「ぬづぢふて からふびづひぢふて に，つちぴちぴべばづによって規定された配置でコピーする必要がある．また，この際に各データ項目をファイル表現からネイ
ティブ表現に変換する必要がある．つちぴちぴべばづはユーザが読み込み関数に渡したデータ型と同じになる．つちぴちぴべばづのサイズがっはふのぴ個のデータ項目のサイズよりも小さい場合，変換関数はつちぴちぴべばづをふびづひぢふて上に連続して敷き詰められたものとして扱う必要がある．変
換関数は，変換されたデータをふびづひぢふて に格納する．その開始位置は（敷き詰められた）
つちぴちぴべばづの中を指すばはびどぴどはのによって決まる．
ユーザへのアドバイス 変換関数ときぐぉたぐぁぃかおよびきぐぉたさぎぐぁぃかには類似点があるが，引数っはふのぴおよびばはびどぴどはのの使用法の違いに注意する必要がある．変換関数では，っはふのぴはデータ項目の数（つちぴちぴべばづの型マップのエントリ数）で，ばはびどぴどはのはこの型マップの中を指すインデックスである．きぐぉたぐぁぃかでは，どのっはふのぴはつちぴちぴべばづ全体の数で，ばはびどぴどはのはバイト数である． （ユーザへのアドバイス終わり）
実装者へのアドバイス 変換されたひづちつ操作は以下のように実装できる．
〱〮 すべてのデータ項目のファイルの範囲を取得する

〱〳〮〵〮 ファイルの相互運用性〴〵〳〲〮 っはふのぴ個のすべてのデータ項目を格納できる大きさの「ぬづぢふてを割り当てる〳〮 ファイルから「ぬづぢふてにデータを読み込む〴〮 ひづちつたっはのぶづひびどはのたてのを呼び出し，データを変換してふびづひぢふてに格納する

〱
〲
〳
〴
〵

〵〮 「ぬづぢふてを解放する（実装者へのアドバイス終わり）〶〷〸

読み込み操作から変換するすべてのデータを格納できるだけの大きさのバッファをきぐぉで割り当てられない場合，同じつちぴちぴべばづとふびづひぢふてを使用して変換関数を繰り返し呼び出し，データチャンクを「ぬづぢふて に読み込んで変換し，次のデータチャンクに進む，ということを繰り返すことができる．最初の呼び出しでは（またすべての変換対象のデータが「ぬづぢふて に格納された場合），きぐぉはばはびどぴどはのに〰を設定してこの関数を呼び出す．この呼び出し中に変換されたデータは，つちぴちぴべばづ内の最初のっはふのぴ個のデータ項目に従ってふびづひぢふて に格納される．そして，その後の変換関数の呼び出しで，前の呼び出しで変換されたっはふのぴ個の項目の分だけばはびどぴどはのの値を加算する．ふびづひぢふてポインタは変更されな
い．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

根拠 変換関数に位置と転送のための〱つのデータ型を渡すことにより，変換関数はデータ型をデコードし，内部表現に変換し，それをキャッシュすることができる．
そして，その後の呼び出しで，変換関数でばはびどぴどはのを使用してデータ型内でのその場所をすばやく見つけ出し，前の呼び出しの終了時に中断された変換データの格納を継続することができる． （根拠の終わり）

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

ユーザへのアドバイス 通常，変換関数はデータ型に内部表現をキャッシュすることができるが，複数の変換操作で同じデータ型が同時に使用されている可能性があるため，処理中の変換操作に固有の状態情報はキャッシュしてはならない． （ユーザへのアドバイス終わり）

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

関数ぷひどぴづたっはのぶづひびどはのたてのはネイティブ表現からファイルのデータ表現への変換を行わなければならない．このルーチンを呼び出す前に，きぐぉはっはふのぴ個の連続するデータ項目を格納できるだけの大きさの「ぬづぢふてを割り当てる． 各データ項目の型は，つちぴちぴべばづの型シグ
ネチャ内の，定義済みデータ型の対応するエントリと一致する． この関数はっはふのぴ個のデータ項目をふびづひぢふて からつちぴちぴべばづによって規定された配置で取り出し， 「ぬづぢふてに連続した配置でコピーする必要がある．また，この際に各データ項目をネイティブ表現からファイル表現に変換する必要がある． つちぴちぴべばづのサイズがっはふのぴ個のデータ項目のサイズよりも小さい場合，変換関数はつちぴちぴべばづをふびづひぢふて上に連続して敷き詰められたものとして扱う必要がある．
この関数は，データをふびづひぢふて にコピーするが，その開始位置は（敷き詰められた）
つちぴちぴべばづの中を指すばはびどぴどはのによって決まる． つちぴちぴべばづはユーザが書き込み関数に渡したデータ型と同じになる． この関数にはきぐぉたげぅぇぉこごぅげたいぁごぁげぅぐの呼び出しに渡された引数がづへぴひちたびぴちぴづに渡される．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〴〵〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

第 〱〳〮 入出力

定義済みの定数きぐぉたぃくぎざぅげこぉくぎたうぎたぎさががはぷひどぴづたっはのぶづひびどはのたてのまたは
ひづちつたっはのぶづひびどはのたてのとして使用することができる． その場合，きぐぉはそれぞれ
ぷひどぴづたっはのぶづひびどはのたてのまたはひづちつたっはのぶづひびどはのたてのの呼び出しを行わないが，ネイティブデータ
表現を使用して，要求されたデータアクセスを行う．
きぐぉ実装では，アクセスされるすべてのデータが変換されていることを保証するため，要求されたすべてのデータ項目を格納できるだけの大きさの「ぬづぢふてを使用するか，または同じつちぴちぴべばづ引数と適切なばはびどぴどはのの値を使用して繰り返し変換関数を呼び出す必要がある．
この節のコールバックルーチン（ひづちつたっはのぶづひびどはのたての，ぷひどぴづたっはのぶづひびどはのたての，つぴべばづた「ぬづたづへぴづのぴたての）が実装により呼び出されるのは，〴〲〲ページの第〱〳〮〴節で説明したいずれかの読み込みまたは書き込みルーチン，またはきぐぉたうぉがぅたぇぅごたごすぐぅたぅじごぅぎごが
ユーザによって呼び出されたときのみである．つぴべばづた「ぬづたづへぴづのぴたてのにはユーザが使用した
定義済みのデータ型のみが渡される．変換関数には，ユーザが上記のいずれかのルーチンに渡したものと同等のデータ型のみが渡される．
変換関数は再入可能でなければならない． ユーザ定義のデータ表現ではどの型についてもバイトのアライメントしか使用できない．また，変換関数で集団的ルーチンを呼び出したりつちぴちぴべばづを解放したりするのは誤りである．
変換関数はエラーコードを返す必要がある．返されたエラーコードの値がきぐぉたこさぃぃぅここ以外の場合，実装ではエラークラスきぐぉたぅげげたぃくぎざぅげこぉくぎのエラーを報告
する．

〲〵
〲〶

13.5.4 データ表現の対応付け

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

ユーザは責任を持って，ファイルからのデータの読み取りに使用するデータ表現と，そのデータをファイルに書き込むのに使用したデータ表現が互換性があることを保証する必要がある．
一般的に，ファイルの書き込み時と読み取り時に同じデータ表現の名前を使用していても，それだけで表現に互換性があるとは言えない．同様に，〲つの異なる実装で異なる表現の名前を使用していても，表現の互換性がある場合もある．
ぜづへぴづひのちぬ〳〲〢表現を使用すると，ぜのちぴどぶづ〢表現を使用した場合と比べて精度が失われ，性能が低下することがあるが，互換性は得られる．以下の少なくとも〱つのの条件が満たされている場合，ぜづへぴづひのちぬ〳〲〢を使用すると互換性が保証される．

〳〹
〴〰
〴〱
〴〲

• データアクセスルーチンが〴〴〸ページの第〱〳〮〵〮〲節に示した，入出力に参加している
すべての実装によってサポートされる型を直接使用する．データ項目を書き込むのに使用した定義済みの型を，データ項目の読み取りにも使用する必要がある．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

• うはひぴひちの 〹〰言語のプログラムの場合，データアクセスに参加するプログラムが，精度や範囲を指定するきぐぉルーチンを使用して互換性のあるデータ型を取得する（〵〱〱ページの第〱〶〮〲〮〵節を参照）．

〱〳〮〶〮 一貫性と意味論〴〵〵• 指定のデータ項目について，データアクセスに参加するプログラムが，データ項目の書き込み〯読み取りのために互換性のある定義済みの型を使用する．

〱〲〳

ユーザ定義のデータ表現は，別の実装のぜのちぴどぶづ〢またはぜどのぴづひのちぬ〢表現との実装の互換性を提供するために使用することもできる．

〴
〵
〶
〷

ユーザへのアドバイス 〵〱〱ページの第〱〶〮〲〮〵節では，対応するデータ型の使用が異機種環境でサポートされているルーチンが定義され，その使用法の例が示されている． （ユーザへのアドバイス終わり）

〸
〹
〱〰
〱〱

13.6 一貫性と意味論

〱〲
〱〳
〱〴

13.6.1 ファイルの一貫性〱〵〱〶

一貫性の意味論は，〱つのファイルに対して複数のアクセスを行った結果を定義する． 〱〷きぐぉでのすべてのファイルアクセスは，集団的オープンで生成された特定のファイルハ〱〸〱〹
ンドルに関係する．きぐぉは〳つのレベルの一貫性を備えている．つまり，〱つのファイル〲〰
ハンドルを使用したすべてのアクセス間での逐次一貫性と，アトミックモードを有効に〲〱して〱つの集団的オープンにより生成されたファイルハンドルを使用したすべてのアクセ〲〲ス間での逐次一貫性と，上記以外の，ユーザによって課されたアクセス間の一貫性であ〲〳る． 逐次一貫性とは，操作がプログラムの順序と整合したある逐次の順番で行われたか〲〴〲〵のように一連の操作が振る舞う．また，正確なアクセスの順序が指定されていなくても〲〶各アクセスがアトミックに行われることを意味する． ユーザは，プログラム中の操作の〲〷順序と複数のきぐぉたうぉがぅたこすぎぃの呼び出しを使用して一貫性を強制することができる．
〲〸
F H1 をファイルF OOの特定の〱回の集団的オープンから生成されたファイルハンドル〲〹の集合とし，F H2 をF OOの別の集団的オープンから生成されたファイルハンドルの集合〳〰
〳〱とする． F H1 とF H2 には何も制限はないことに注意すること． F H1 とF H2 のサイズは〳〲違っていてもよく，それぞれのオープンに使用されたプロセスのグループは共通部分を〳〳持っていてもよい．また，F H1 のファイルハンドルはF H2 のファイルハンドルの生成前〳〴に破壊されていてもよい．次の〳つのケースについて考えてみる．つまり，ファイルハン
〳〵ドルが〱つの場合（f h1 ∈ F H1 など）と，〱回の集団的オープンで〲つのファイルハンドラ〳〶〳〷が生成された場合（f h1a ∈ F H1 ，F H1b ∈ F H1 など）と，異なる集団的オープンで〲つの〳〸ファイルハンドルが生成された場合（f h1 ∈ F H1 ，f h2 ∈ F H2 など）である．
〳〹
一貫性の意味論のため，スプリット集団データアクセス操作の対応するペア（〴〰
きぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎ，きぐぉたうぉがぅたげぅぁいたぁががたぅぎいなど）（〴〳〹ページの第〱〳〮〴〮〵節） 〴〱は〱つのデータアクセス操作を構成するものとする．同様に，ノンブロッキングデータア〴〲
クセスルーチン（きぐぉたうぉがぅたぉげぅぁいなど）と要求を完了するルーチン（きぐぉたしぁぉごなど） 〴〳〴〴も，〱つのデータアクセス操作を構成するものとする．以下のすべての場合に，これらの〴〵データアクセス操作にはブロッキングデータアクセス操作と同じ制限が適用される．
〴〶

ユーザへのアドバイス きぐぉたうぉがぅたぉげぅぁいときぐぉたしぁぉごのペアの場合，操作は

〴〷
〴〸

〴〵〶
〱
〲

第 〱〳〮 入出力
きぐぉたうぉがぅたぉげぅぁいが呼び出された時点で開始され，きぐぉたしぁぉごが戻った時点で終了
する． （ユーザへのアドバイス終わり）

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

A1 とA2 が〲つのデータアクセス操作であるとする．D1 〨D2 〩をA1 〨A2 〩でアクセスされるすべてのバイトの絶対バイト変位の集合とする．D1 ∩ D2 6〽 ∅である場合に，〲つのデータアクセスはオーバーラップする．これらがオーバーラップし，少なくとも〱つが書き込みアクセスである場合，〲つのデータアクセスはコンフリクトする．
SEQf h を〱つのファイルハンドル上のファイル操作のシーケンスとし，そのファイルハンドルへのきぐぉたうぉがぅたこすぎぃによって区切られているとする．（ファイルを開くときも閉じるときも，暗黙的にきぐぉたうぉがぅたこすぎぃが実行される．） シーケンス内に書き込みのデータアクセス操作があるか，またはシーケンス内にファイルの状態を変更する（きぐぉたうぉがぅたこぅごたこぉずぅ，きぐぉたうぉがぅたぐげぅぁががくぃぁごぅなど）ファイル操作がある場合，SEQf h は「書き込みシーケンス」とする． SEQ1 とSEQ2 の〲つのシーケンスについて，一方のシーケンスが（時間的に）他方のシーケンスの完全に前に来る場合，これらは同時並行ではないとする．
特定のファイルに対するすべてのアクセスの間で逐次一貫性を保証するための要件は，
以下の〳つのケースに分けられる．これらの要件のうち〱つでも満たされていない場合，そのファイル内のすべてのデータの値は実装依存となる．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

ケース〱〺 f h1 ∈ F H1 アトミックモードが設定されている場合，f h1 に対するすべての操作は逐次に整合が取られる．ノンアトミックモードが設定されている場合，f h1 に対するすべての操作は，同時でないかコンフリクトしないとき，またはその両方のときに逐次に整合が取られる．

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

ケース〲〺 f h1a ∈ F H1 ちのつ f h1b ∈ F H1 A1 がf h1a を使用したデータアクセス操作で，A2 がf h1b を使用したデータアクセス操作であるとする．アクセスA1 については，A1 とコンフリクトするアクセスA2 がない場合，きぐぉは逐次一貫性を保証する．
しかし，ぐくこぉじの意味論と違って，コンフリクトするアクセスに対するデフォルトのきぐぉの意味論では逐次一貫性が保証されない．A1 とA2 がコンフリクトする場合，逐次一貫性を保証するには，きぐぉたうぉがぅたこぅごたぁごくきぉぃぉごすルーチンを使用してアトミックモー
ドを有効にするか，以下のケース〳に示す条件を満たす必要がある．

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ケース〳〺 f h1 ∈ F H1 ちのつ f h2 ∈ F H2 別の集団的オープンで生成されたファイルハン
ドルを使用して〱つのファイルにアクセスする場合を考える．逐次一貫性を保証するには，きぐぉたうぉがぅたこすぎぃを使用する必要がある（ファイルを開くときも閉じるときも，暗黙的にきぐぉたうぉがぅたこすぎぃが実行される）．
〱つのファイルへの複数のアクセスの間で逐次一貫性が保証されるのは，ファイルへの書き込みシーケンスSEQ1 について，ファイルに対してSEQ1 と同時並行であるシーケン
スSEQ2 がない場合である． 書き込みシーケンスがある状態で逐次一貫性を保証するには，シーケンスの非同時性を保証するメカニズムと一緒にきぐぉたうぉがぅたこすぎぃを使用する必要がある．

〱〳〮〶〮 一貫性と意味論〴〵〷

これらの一貫性の意味論のうちいくつかについてのより詳しい説明は，〴〶〱ページの第〱〳〮〶〮〱〰節の例を参照すること．

〱
〲
〳
〴

きぐぉたうぉがぅたこぅごたぁごくきぉぃぉごす〨てと〬 」ちで〩
ぉぎくさご
ぉぎ

てと
」ちで

〵

ファイルハンドル（ハンドル）〶

アトミックモードを設定するにはぴひふづ，非アトミッ
クモードを設定するにはてちぬびづ（論理型）〷〸〹

どのぴ きぐぉたうどぬづたびづぴたちぴはねどっどぴべ〨きぐぉたうどぬづ てと〬 どのぴ てぬちで〩きぐぉたうぉがぅたこぅごたぁごくきぉぃぉごす〨うえ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺こづぴたちぴはねどっどぴべ〨ぢははぬ てぬちで〩 （廃止された呼び出し形式, 第15.2節を参照）}
F Hを〱つの集団的オープンによって生成されたファイルハンドルの集合とする．
F Hを使用し た デ ー タ ア ク セ ス 操作の 一貫性の意 味論はF Hに対し て
きぐぉたうぉがぅたこぅごたぁごくきぉぃぉごすを集団的に呼び出すことにより設定される．
きぐぉたうぉがぅたこぅごたぁごくきぉぃぉごすは集団的で，グループ内のすべてのプロセスがてとと」ちでに同じ値を渡す必要がある．」ちでがぴひふづの場合はアトミックモードが設定され，」ちでがてちぬびづの場
合は非アトミックモードが設定される．
開かれているファイルに対して一貫性の意味論を変更した場合，影響を受けるのは新
しいデータアクセスのみである．完了したデータアクセスについては，その実行中に有効であった一貫性の意味論に従うよう保証される．（きぐぉたしぁぉごなどにより）完了していないノンブロッキングデータアクセスおよびスプリット集団操作は，非アトミックモー
ドの一貫性の意味論に従うことだけが保証される．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

実装者へのアドバイス アトミックモードにより保証される意味論は非アトミック
モードにより保証される意味論よりも強いため，実装は未完了の要求について，より厳格なアトミックモードの意味論に従っても良い． （実装者へのアドバイス終
わり）

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

きぐぉたうぉがぅたぇぅごたぁごくきぉぃぉごす〨てと〬 」ちで〩
ぉぎ
くさご

てと
」ちで

〳〶

ファイルハンドル（ハンドル）〳〷

アトミックモードの場合はぴひふづ，非アトミックモー
ドの場合は てちぬびづ （論理型）

〳〸
〳〹
〴〰

どのぴ きぐぉたうどぬづたでづぴたちぴはねどっどぴべ〨きぐぉたうどぬづ てと〬 どのぴ 〪てぬちで〩きぐぉたうぉがぅたぇぅごたぁごくきぉぃぉごす〨うえ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
{ぢははぬ きぐぉ〺〺うどぬづ〺〺ぇづぴたちぴはねどっどぴべ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〴〱

きぐぉたうぉがぅたぇぅごたぁごくきぉぃぉごすは，〱つの集団的オープンによって生成されたファイルハ
ンドルの集合に対するデータアクセス操作の現在の一貫性の意味論を返す． 」ちでがぴひふづの

〴〶

〴〲
〴〳
〴〴
〴〵

〴〷
〴〸

第 〱〳〮 入出力

〴〵〸
〱
〲

場合はアトミックモードが有効であり，」ちでがてちぬびづの場合は非アトミックモードが有効で
ある．

〳
〴
〵
〶

きぐぉたうぉがぅたこすぎぃ〨てと〩
ぉぎくさご

てと

ファイルハンドル（ハンドル）

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

どのぴ きぐぉたうどぬづたびべのっ〨きぐぉたうどぬづ てと〩きぐぉたうぉがぅたこすぎぃ〨うえ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
{ぶはどつ きぐぉ〺〺うどぬづ〺〺こべのっ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}てとを使用してきぐぉたうぉがぅたこすぎぃを呼び出すと，呼び出し側プロセスによるてとへのそれまでのすべての書き込みがストレージデバイスに転送される．別のプロセスによりストレージデバイスが更新されている場合，その後の呼び出し側プロセスによるてとの読み込み
ではこのようなすべての更新が検知可能になる．場合によっては，逐次一貫性を保証するために，きぐぉたうぉがぅたこすぎぃが必要になる場合もある（上記を参照）．
きぐぉたうぉがぅたこすぎぃは集団操作である．
ユーザは責任を持って，てとに対するすべてのノンブロッキング要求とスプリット集団
操作を完了しているのを確認してきぐぉたうぉがぅたこすぎぃを呼び出す必要がある． そうでない場合，きぐぉたうぉがぅたこすぎぃの呼び出しは誤りである．

〲〳〲〴

13.6.2 ランダムアクセスと逐次ファイル

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

きぐぉは普通のランダムアクセスファイルと，パイプやテープファイルなどの逐次ス
トリームファイルを区別する．逐次ストリームファイルはきぐぉたきくいぅたこぅけさぅぎごぉぁがフラ
グをちねはつづに設定して開く必要がある．これらのファイルでは，実行できるデータアクセス操作は共有ファイルポインタの読み込みと書き込みのみである． 穴のあるファイ
ル型とづぴべばづを用いるのは誤りである．また，ポインタの概念は意味を持たないため，
きぐぉたうぉがぅたこぅぅかたこえぁげぅいおよびきぐぉたうぉがぅたこぅぅかたこえぁげぅいの呼び出しは誤りであり，データアクセスルーチンのために規定されたポインタ更新規則は適用されない．データア
クセス操作によってアクセスされるデータの量は，ファイル終端に達した場合やエラーが発生した場合を除いて，要求された量となる．

〳〶
〳〷
〳〸
〳〹
〴〰

根拠 このことからわかるように，パイプでの読み取りは，要求されたデータの量が利用可能になるまで，またはパイプへのプロセスによる書き込みがファイル終端を発行するまで，常に待ち合わせる． （根拠の終わり）

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

最後に，磁気テープやストリーミングネットワーク接続に対応するものなど，一部の逐次ファイルでは，ファイルへの書き込みが問題となることがある．つまり， 書き込みを行った後に，切り詰め（きぐぉたうぉがぅたこぅごたこぉずぅでびどぺづを現在の位置に設定したのと同じ動作）として動作することがある．

〱〳〮〶〮 一貫性と意味論〴〵〹

13.6.3 プログレス〱〲

きぐぉのプログレスルールは，ユーザに対する約束でもあり，同時に実装者に課される制約の集合でもある．プログレスルールにより，インターフェイスの仕様のみよりも厳しく実装の選択肢が制限されうる場合，プログレスルールのほうが優先される．
例外的な条件（リソースの不足など）によりエラーが発生する場合を除いて，ブロッ
キングルーチンはすべて有限の時間内に完了しなければならない．
ノンブロッキングデータアクセスルーチンはノンブロッキング〱対〱通信から以下のプ
ログレスルールを継承する．つまり，ノンブロッキング書き込みは最終的にマッチする
受信が発行されるノンブロッキング送信と同等であり，ノンブロッキング読み込みは最終的にマッチする送信が発行されるノンブロッキング受信と同等である．
最後に，実装では，集団呼び出しに関連するグループ内のすべてのプロセスでルーチンの呼び出しが完了するまで，自由に集団的ルーチンのプログレスを遅延させることができる．グループ内のすべてのプロセスでルーチンの呼び出しが完了したら，同等の非集団的ルーチンのプログレスルールに従う必要がある．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

13.6.4 集団的ファイル操作〱〹

集団的ファイル操作には，集団通信操作と同じ制限が適用される．詳細は，〱〹〳ページの第〵〮〱〲節で規定した意味論を参照すること．
集団的ファイル操作はファイルを開くために使用されたコミュニケータの複製に対して集団的であり，この複製のコミュニケータはファイルハンドラ引数によって暗黙的に指定される．特に規定がない限り，集団的ルーチンの他の引数にプロセスごとに異なる値を渡すことができる．

〲〱

13.6.5 型の一致
入出力のための型の一致規則は通信のための型の一致規則に倣っている．ただし，例
外が〱つあり，づぴべばづがきぐぉたあすごぅの場合，これはデータアクセス操作の任意のつちぴちぴべばづに
一 致 す る． 一 般 的 に， 書 き 込 ま れ た デ ー タ 項 目 のづぴべばづは そ の 項 目 を 読 み 込 む た めのづぴべばづと一致する必要があり，各データアクセス操作では現在のづぴべばづがデータアクセ
スバッファの型宣言にも一致していなければならない．

〲〰

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

ユーザへのアドバイス ほとんどの場合，きぐぉたあすごぅをワイルドカードとして使用すると，きぐぉのファイルの相互運用性が低下する．ファイルの相互運用性は，アクセスするデータ型が正しく明示的に指定されている場合のみ，異機種のデータ表現間で自動変換を行える． （ユーザへのアドバイス終わり）

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

13.6.6 その他の明確化〴〴〴〵

入出力ルーチンが完了すれば，そのルーチンに引数として渡された不可視オブジェク
トを安全に開放することができる．例えば，きぐぉたうぉがぅたくぐぅぎで使用されるっはねねとどのては，
またはきぐぉたうぉがぅたこぅごたざぉぅしで使用されるづぴべばづと「ぬづぴべばづは，ファイルへのアクセスに影

〴〶
〴〷
〴〸

〴〶〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

第 〱〳〮 入出力

響を及ぼすことなく解放することができる．ノンブロッキングルーチンおよびスプリッ
ト集団操作の場合，引数として渡されたデータバッファを安全に再使用するには，その前に操作が完了していなければならない．
通信の場合と同様，データ型をファイル操作やデータアクセス操作で使用できるようにするためには，事前にコミットしておく必要がある． 例えば，
づぴべばづと「ぬづぴべばづはきぐぉたうぉがぅたこぅごたざぉぅしを 呼 び 出 す 前 に コ ミ ッ ト し て お く 必 要 が あ り，
つちぴちぴべばづはきぐぉたうぉがぅたげぅぁいまたはきぐぉたうぉがぅたしげぉごぅを呼び出す前にコミットしておく必
要がある．

〱〱
〱〲

13.6.7 MPI_Offset型

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたく》びづぴは，きぐぉでサポートされる最大のファイルのサイズ（バイト単位）を表現できる大きさを備えた整数型である．変位とオフセットも，常にきぐぉたく》びづぴ型の値として指定される．
うはひぴひちの言語では，対応する整数はねばどて〮とおよびねばどモジュールで定義された，
きぐぉたくううこぅごたかぉぎいかぉぎいの整数型である．
かぉぎいパラメータをサポートしていないうはひぴひちの 〷〷言語環境では，きぐぉたく》びづぴ引数を適切なサイズの整数型として宣言する必要がある．きぐぉたく》びづぴにおける言語間の相互運用性は，アドレスの場合と同様である（〵〱〹ページの第〱〶〮〳節を参照）
．

〲〳
〲〴

13.6.8 論理的なファイル配置と物理的なファイル配置

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

きぐぉは，仮想ファイル構造（ビュー）内でデータがどのように配置されるかを指定す
るが，そのファイル構造が〱つ以上のディスクにどのように格納されるかを指定するわけではない．物理的なファイル構造の指定が避けられているのは，ディスクへのファイルのマッピングはシステム固有のもので，ファイルの配置に対する特定の制御はプログラ
ムの可搬性を制限するためである．しかし，ファイルの配置を最適化するのにある情報が必要になりうる場合がある．この情報は，ファイルの生成時にinfoを使用してヒントとして渡すことができる（〴〱〵ページの第〱〳〮〲〮〸節を参照）
．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

13.6.9 ファイルのサイズ
ファイルのサイズは，現在のファイル終端の後に書き込むことにより，増加することがある．サイズは，きぐぉたうぉがぅたこぅごたこぉずぅなどのきぐぉサイズを変更するルーチンを呼び出すことによっても変更される．サイズを変更するルーチンを呼び出しても，必ずしもファイルのサイズが変更されるとは限らない．例えば，現在のサイズより小さいサイズを指定してきぐぉたうぉがぅたぐげぅぁががくぃぁごぅを呼び出した場合，サイズは変更されない．
最近のサイズを変更するルーチンの呼び出しの後，またはこのようなルーチンが呼び出されていない場合はきぐぉたうぉがぅたくぐぅぎの後にファイルに書き込まれたバイトの集合を考えてみる．最後位バイトを，その集合内の最大の変位を持つバイトとする．ファイルのサイズは，以下のうちの大きい方となる．

〱〳〮〶〮 一貫性と意味論〴〶〱• 最後位バイトの変位〫〱〱〲• サイズを変更するルーチンまたはきぐぉたうぉがぅたくぐぅぎが戻った直後のサイズ〳〴

一 貫 性 の 意 味 論 を 適 用 す る と， きぐぉたうぉがぅたこぅごたこぉずぅお よ びきぐぉたうぉがぅたぐげぅぁががくぃぁごぅの呼び出しはファイルへの書き込み（古いファイルサイズと新しいファイルサイズの間にある変位のバイトにアクセスする操作とコンフリクトする）と考えられ，きぐぉたうぉがぅたぇぅごたこぉずぅはファイルの読み取り（ファイルへのすべてのア
クセスと重複する）と考えられる．
ユーザへのアドバイス 集団的ルーチンきぐぉたうぉがぅたこぅごたこぉずぅおよび
きぐぉたうぉがぅたぐげぅぁががくぃぁごぅを含む操作のシーケンスは書き込みシーケンスである．
そのため，〴〵〵ページの第〱〳〮〶〮〱節に規定された条件が満たされていない場合，非アトミックモードでの逐次一貫性は保証されない． （ユーザへのアドバイス終わ
り）

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

ファイルポインタ更新の意味論（ファイルポインタは，アクセスされた量だけ更新される）は，ファイルのサイズの変更が逐次に一貫性がある場合にのみ保証される．
ユーザへのアドバイス 以下の例を考えてみる．〱〰〰バイトのファイルに対して，別々のプロセスから〲つの操作を行う．〱つはきぐぉたうぉがぅたげぅぁいによる〱〰バイトの読み取りで，もう〱つはきぐぉたうぉがぅたこぅごたこぉずぅによる〰バイトの設定である．ユーザがこ
れらの〲つの操作に対して逐次一貫性を適用しない場合，アクセスされる量が〰バイ
トであっても，要求された量（〱〰バイト）だけファイルポインタが更新されることがある． （ユーザへのアドバイス終わり）

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

13.6.10 例〳〰
〳〱

この節の例は，きぐぉの一貫性と意味論の保証の，実際の使われ方を説明する． これらの例は以下のアクセスを説明する．

〳〲
〳〳
〳〴

• 〱つの集団的オープンで取得された複数のファイルハンドルでのコンフリクトする
アクセス

〳〵
〳〶
〳〷

• 〲つの別の集団的オープンで取得されたファイルハンドルでのすべてのアクセス〳〸〳〹

コンフリクトするアクセスに対して一貫性を得るための最も簡単な方法は，アトミッ
クモードを設定することにより，逐次一貫性を得ることである．以下のコードで，プロセス〱は〰個または〱〰個の整数を読み取る．後者の場合，ぢのすべての要素は〵となる．非アトミックモードが設定されている場合，読み込みの結果は未定義となる．

〴〰
〴〱
〴〲
〴〳
〴〴

〪〯 ぐひはっづびび 〰 〪〯どのぴ ど〬 ちせ〱〰そ 〻どのぴ ごげさぅ 〽 〱〻〴〵てはひ 〨 ど〽〰〻ど〼〱〰〻ど〫〫〩

〴〸

〴〶
〴〷

第 〱〳〮 入出力〴〶〲〱

ちせどそ 〽 〵 〻

〲
〳
〴
〵
〶
〷

きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ぷはひにてどぬづ〢〬
きぐぉたきくいぅたげいしげ ぼ きぐぉたきくいぅたぃげぅぁごぅ〬 きぐぉたぉぎうくたぎさがが〬 〦てと〰 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〰〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻きぐぉたうどぬづたびづぴたちぴはねどっどぴべ〨 てと〰〬 ごげさぅ 〩 〻きぐぉたうどぬづたぷひどぴづたちぴ〨てと〰〬 〰〬 ち〬 〱〰〬 きぐぉたぉぎご〬 〦びぴちぴふび〩 〻〪〯 きぐぉたあちひひどづひ〨 きぐぉたぃくききたしくげがい 〩 〻 〪〯

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

〪〯 ぐひはっづびび 〱 〪〯どのぴ ぢせ〱〰そ 〻どのぴ ごげさぅ 〽 〱〻きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ぷはひにてどぬづ〢〬
きぐぉたきくいぅたげいしげ ぼ きぐぉたきくいぅたぃげぅぁごぅ〬 きぐぉたぉぎうくたぎさがが〬 〦てと〱 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〱〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻きぐぉたうどぬづたびづぴたちぴはねどっどぴべ〨 てと〱〬 ごげさぅ 〩 〻〪〯 きぐぉたあちひひどづひ〨 きぐぉたぃくききたしくげがい 〩 〻 〪〯きぐぉたうどぬづたひづちつたちぴ〨てと〱〬 〰〬 ぢ〬 〱〰〬 きぐぉたぉぎご〬 〦びぴちぴふび〩 〻

〱〷
〱〸
〱〹
〲〰

ユーザは，例えばきぐぉたあぁげげぉぅげの呼び出しなどで時間的順序を設定することにより，プロセス〰の書き込みがプロセス〱の読み込みより前に行われることを保証することがで
きる．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

ユーザへのアドバイス 時間的順序を設定するために，きぐぉたあぁげげぉぅげ以外のルーチンを使用することができる．上記の例では，プロセス〰できぐぉたこぅぎいを使用して〰バ
イトのメッセージを送信し，プロセス〱できぐぉたげぅぃざを使用して受信することができる． （ユーザへのアドバイス終わり）〲〷〲〸

または，非アトミックモードを設定して一貫性を与えることもできる．

〲〹
〳〰
〳〱
〳〲

〪〯 ぐひはっづびび 〰 〪〯どのぴ ど〬 ちせ〱〰そ 〻てはひ 〨 ど〽〰〻ど〼〱〰〻ど〫〫〩
ちせどそ 〽 〵 〻

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ぷはひにてどぬづ〢〬
きぐぉたきくいぅたげいしげ ぼ きぐぉたきくいぅたぃげぅぁごぅ〬 きぐぉたぉぎうくたぎさがが〬 〦てと〰 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〰〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻きぐぉたうどぬづたぷひどぴづたちぴ〨てと〰〬 〰〬 ち〬 〱〰〬 きぐぉたぉぎご〬 〦びぴちぴふび 〩 〻きぐぉたうどぬづたびべのっ〨 てと〰 〩 〻きぐぉたあちひひどづひ〨 きぐぉたぃくききたしくげがい 〩 〻きぐぉたうどぬづたびべのっ〨 てと〰 〩 〻

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〪〯 ぐひはっづびび 〱 〪〯どのぴ ぢせ〱〰そ 〻きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ぷはひにてどぬづ〢〬
きぐぉたきくいぅたげいしげ ぼ きぐぉたきくいぅたぃげぅぁごぅ〬 きぐぉたぉぎうくたぎさがが〬 〦てと〱 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〱〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻きぐぉたうどぬづたびべのっ〨 てと〱 〩 〻きぐぉたあちひひどづひ〨 きぐぉたぃくききたしくげがい 〩 〻きぐぉたうどぬづたびべのっ〨 てと〱 〩 〻きぐぉたうどぬづたひづちつたちぴ〨てと〱〬 〰〬 ぢ〬 〱〰〬 きぐぉたぉぎご〬 〦びぴちぴふび 〩 〻〱〳〮〶〮 一貫性と意味論〴〶〳

以下の理由により，“びべのっ〭ぢちひひどづひ〭びべのっ”の構成物が必要となる．

〱〲• ぢちひひどづひにより，プロセス〰の書き込みがプロセス〱の読み込みより前に行われることを保証する．

〳〴〵• 最初のびべのっにより，すべてのプロセスによって書き込まれたデータがストレージデ
バイスに転送されるよう保証する．

〶〷〸• 〲番目のびべのっにより，ストレージデバイスに転送されたすべてのデータがすべてのプロセスで検知可能になることを保証する（これは，この例のプロセス〰には影響
しない）

〹
〱〰
〱〱
〱〲

以下のプログラムでは，各プロセスに対して一見不必要と思われる〲つめの“びべのっ”を削除し，一貫性を得るための誤った試みを示している．

〱〳〪〯 〪〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〯 ぐひはっづびび 〰 〪〯どのぴ ど〬 ちせ〱〰そ 〻てはひ 〨 ど〽〰〻ど〼〱〰〻ど〫〫〩
ちせどそ 〽 〵 〻〱〶ごえぉこ ぅじぁきぐがぅ ぉこ ぅげげくぎぅくさこ 〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭 〪〯

〱〴
〱〵

〱〷
〱〸
〱〹
〲〰

きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ぷはひにてどぬづ〢〬
きぐぉたきくいぅたげいしげ ぼ きぐぉたきくいぅたぃげぅぁごぅ〬 きぐぉたぉぎうくたぎさがが〬 〦てと〰 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〰〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻きぐぉたうどぬづたぷひどぴづたちぴ〨てと〰〬 〰〬 ち〬 〱〰〬 きぐぉたぉぎご〬 〦びぴちぴふび 〩 〻きぐぉたうどぬづたびべのっ〨 てと〰 〩 〻きぐぉたあちひひどづひ〨 きぐぉたぃくききたしくげがい 〩 〻

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

〪〯 ぐひはっづびび 〱 〪〯どのぴ ぢせ〱〰そ 〻きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ぷはひにてどぬづ〢〬
きぐぉたきくいぅたげいしげ ぼ きぐぉたきくいぅたぃげぅぁごぅ〬 きぐぉたぉぎうくたぎさがが〬 〦てと〱 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〱〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻きぐぉたあちひひどづひ〨 きぐぉたぃくききたしくげがい 〩 〻きぐぉたうどぬづたびべのっ〨 てと〱 〩 〻きぐぉたうどぬづたひづちつたちぴ〨てと〱〬 〰〬 ぢ〬 〱〰〬 きぐぉたぉぎご〬 〦びぴちぴふび 〩 〻

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

〪〯 〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭

ごえぉこ ぅじぁきぐがぅ ぉこ ぅげげくぎぅくさこ 〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭 〪〯上 記 の プ ロ グ ラ ム は 集 団 操 作 の 順 序 入 れ 替 え を 禁 止 す る きぐぉ規 則 に も 違 反 し，きぐぉたうぉがぅたこすぎぃがブロッキングされる実装でデッドロックが発生する．
ユーザへのアドバイス きぐぉたうぉがぅたこすぎぃは一部の実装では時間軸で同期する関数として実装されることがある． このような実装を使用する場合，上記の“びべのっ〭
ぢちひひどづひ〭びべのっ”を〱つの“びべのっ”に置き換えることができる． きぐぉたうぉがぅたこすぎぃで時間軸での同期が行われない実装でこのようなコードを使用した結果は未定義となる． （ユーザへのアドバイス終わり）

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〴〶〴
〱

第 〱〳〮 入出力

非同期入出力

〲
〳
〴
〵
〶
〷
〸
〹

非同期入出力操作の動作は，同期入出力操作のための上記の規則を適用することで決まる．
以下の例はすべて既存のファイルぜねべ「ぬづ〢にアクセスする．ねべ「ぬづの〱〰番目のワードにはもともとは整数の〲が入っている．それぞれの例では〱〰番目のワードが書き込まれ，読み取られる．
最初に，以下の部分コードを考えてみる．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

どのぴ ち 〽 〴〬 ぢ〬 ごげさぅ〽〱〻
きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ねべてどぬづ〢〬
きぐぉたきくいぅたげいしげ〬 きぐぉたぉぎうくたぎさがが〬 〦てと 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻〪〯 きぐぉたうどぬづたびづぴたちぴはねどっどぴべ〨 てと〬 ごげさぅ 〩 〻さびづ ぴとどび ぴは びづぴ ちぴはねどっ ねはつづ〮 〪〯きぐぉたうどぬづたどぷひどぴづたちぴ〨てと〬 〱〰〬 〦ち〬 〱〬 きぐぉたぉぎご〬 〦ひづぱびせ〰そ〩 〻きぐぉたうどぬづたどひづちつたちぴ〨てと〬 〱〰〬 〦ぢ〬 〱〬 きぐぉたぉぎご〬 〦ひづぱびせ〱そ〩 〻きぐぉたしちどぴちぬぬ〨〲〬 ひづぱび〬 びぴちぴふびづび〩 〻

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

非同期データアクセス操作の場合，きぐぉはアクセスが非同期データアクセスルーチンの呼び出しと対応する要求完了ルーチンからの戻りの間の任意の時点で行われることを規定している．そのため，書き込みの前の読み込みの実行，または読み込みの前の書き込みの実行はいずれもプログラムの順序と同じである．アトミックモードが設定されている場合，きぐぉにより逐次一貫性が保証され，プログラムは〲または〴をぢに読み込む．ア
トミックモードが設定されていない場合，逐次一貫性は保証されず，データアクセスのコンフリクトにより，プログラムで〲と〴以外の値が読み込まれることがある．
同様に，以下の部分コードではファイルアクセスの順序が規定されない．

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

どのぴ ち 〽 〴〬 ぢ〻
きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ねべてどぬづ〢〬
きぐぉたきくいぅたげいしげ〬 きぐぉたぉぎうくたぎさがが〬 〦てと 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻〪〯 きぐぉたうどぬづたびづぴたちぴはねどっどぴべ〨 てと〬 ごげさぅ 〩 〻さびづ ぴとどび ぴは びづぴ ちぴはねどっ ねはつづ〮 〪〯きぐぉたうどぬづたどぷひどぴづたちぴ〨てと〬 〱〰〬 〦ち〬 〱〬 きぐぉたぉぎご〬 〦ひづぱびせ〰そ〩 〻きぐぉたうどぬづたどひづちつたちぴ〨てと〬 〱〰〬 〦ぢ〬 〱〬 きぐぉたぉぎご〬 〦ひづぱびせ〱そ〩 〻きぐぉたしちどぴ〨〦ひづぱびせ〰そ〬 〦びぴちぴふび〩 〻きぐぉたしちどぴ〨〦ひづぱびせ〱そ〬 〦びぴちぴふび〩 〻

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

アトミックモードが設定されている場合， 〲または〴がぢに読み込まれる．ここでも，きぐぉは非アトミックモードでの逐次一貫性を保証しない．
逆に，以下の部分コードは
どのぴ ち 〽 〴〬 ぢ〻
きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ねべてどぬづ〢〬
きぐぉたきくいぅたげいしげ〬 きぐぉたぉぎうくたぎさがが〬 〦てと 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻きぐぉたうどぬづたどぷひどぴづたちぴ〨てと〬 〱〰〬 〦ち〬 〱〬 きぐぉたぉぎご〬 〦ひづぱびせ〰そ〩 〻きぐぉたしちどぴ〨〦ひづぱびせ〰そ〬 〦びぴちぴふび〩 〻きぐぉたうどぬづたどひづちつたちぴ〨てと〬 〱〰〬 〦ぢ〬 〱〬 きぐぉたぉぎご〬 〦ひづぱびせ〱そ〩 〻きぐぉたしちどぴ〨〦ひづぱびせ〱そ〬 〦びぴちぴふび〩 〻以下と同じ順序付けを行う．

〱〳〮〷〮 入出力エラー処理〴〶〵

どのぴ ち 〽 〴〬 ぢ〻
きぐぉたうどぬづたはばづの〨 きぐぉたぃくききたしくげがい〬 〢ねべてどぬづ〢〬
きぐぉたきくいぅたげいしげ〬 きぐぉたぉぎうくたぎさがが〬 〦てと 〩 〻きぐぉたうどぬづたびづぴたぶどづぷ〨 てと〬 〰〬 きぐぉたぉぎご〬 きぐぉたぉぎご〬 〢のちぴどぶづ〢〬 きぐぉたぉぎうくたぎさがが 〩 〻きぐぉたうどぬづたぷひどぴづたちぴ〨てと〬 〱〰〬 〦ち〬 〱〬 きぐぉたぉぎご〬 〦びぴちぴふび 〩 〻きぐぉたうどぬづたひづちつたちぴ〨てと〬 〱〰〬 〦ぢ〬 〱〬 きぐぉたぉぎご〬 〦びぴちぴふび 〩 〻

〱
〲
〳
〴
〵
〶
〷
〸

• 〱つのファイルハンドルでの非同時操作は逐次に一貫性が取られる．
• この部分プログラムは操作の順序を指定している．
という理由により，きぐぉは両方の部分プログラムで値〴がぢに読み込まれることを保証する．この例ではアトミックモードを設定する必要はない．
同様の考察は以下のような形のコンフリクトするアクセスにも当てはまる．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

きぐぉたうどぬづたぷひどぴづたちぬぬたぢづでどの〨てと〮〮〮〬〩 〻きぐぉたうどぬづたどひづちつ〨てと〮〮〮〬〩 〻きぐぉたしちどぴ〨てと〮〮〮〬〩 〻きぐぉたうどぬづたぷひどぴづたちぬぬたづのつ〨てと〮〮〮〬〩 〻一貫性と意味論に対する制限は以下に関連しないことを想起されたい．
きぐぉたうどぬづたぷひどぴづたちぬぬたぢづでどの〨てと〮〮〮〬〩 〻きぐぉたうどぬづたひづちつたちぬぬたぢづでどの〨てと〮〮〮〬〩 〻きぐぉたうどぬづたひづちつたちぬぬたづのつ〨てと〮〮〮〬〩 〻きぐぉたうどぬづたぷひどぴづたちぬぬたづのつ〨てと〮〮〮〬〩 〻同じファイルハンドルでのスプリット集団操作は重複させてはいけないからである（〴〳〹ページの第〱〳〮〴〮〵節を参照）
．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

13.7 入出力エラー処理〳〰
〳〱

デフォルトでは通信エラーは致命的なもので， きぐぉたぅげげくげこたぁげぅたうぁごぁがはきぐぉたぃくききたしくげがいに関連付けれらたデフォルトのエラーハンドラである．通常，入出力エラーは通信エラーと比べると破滅的ではなく（「ファイルが見つからない」など），
一般的にはこれらのエラーを捕捉し，処理を続行する．このため，きぐぉでは入出力のための追加のエラー機能を用意している．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

ユーザへのアドバイス きぐぉでは，誤ったきぐぉ呼び出しが起こった後の計算の状態については規定していない．高品質な実装では入出力エラー処理機能をサポートしているため，入出力のための共通の手法を利用してプログラムを記述することができる． （ユーザへのアドバイス終わり）
通信と同様，各ファイルハンドルはそれに関連付けれらたエラーハンドラを備えている．きぐぉの入出力エラー処理ルーチンについては〲〸〶ページの第〸〮〳節で定義されている．
きぐぉが特定のファイルハンドルでのエラーの結果としてユーザ定義のエラーハンドラを呼び出す場合，ファイルエラーハンドラに渡される最初の〲つの引数はファイルハンド

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〶〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

ルとエラーコードである．（きぐぉたうぉがぅたくぐぅぎ，きぐぉたうぉがぅたいぅがぅごぅなどの）有効なファイ
ルハンドラと関連していない入出力エラーの場合，エラーハンドラに渡される最初の引数はきぐぉたうぉがぅたぎさががである．
入出力エラー処理と通信エラー処理の違いには，もう〱つ重要な点がある．デフォルト
では，ファイルハンドル用の定義済みのエラーハンドラはきぐぉたぅげげくげこたげぅごさげぎである．
デフォルトのファイルエラーハンドラには〲つの目的がある．〱つめとして，新しいファ
イルハンドルが（きぐぉたうぉがぅたくぐぅぎにより）生成されるとき，新しいファイルハンドル用のエラーハンドラには最初にデフォルトのエラーハンドラが設定される．〲つめとして，エラーを処理する有効なファイルハンドルのない入出力ルーチン（きぐぉたうぉがぅたくぐぅぎ，
きぐぉたうぉがぅたいぅがぅごぅなど）はデフォルトのファイルエラーハンドラを使用する．デフォル
トのファイルエラーハンドラを変更するには，きぐぉたうぉがぅたこぅごたぅげげえぁぎいがぅげのてと引数としてきぐぉたうぉがぅたぎさががを指定する．デフォルトのエラーハンドラの現在の値を確認するには，きぐぉたうぉがぅたぇぅごたぅげげえぁぎいがぅげのてと引数としてきぐぉたうぉがぅたぎさががを渡す．
根拠 通信の場合，デフォルトのエラーハンドラはきぐぉたぃくききたしくげがいから継承する．入出力では，デフォルトの特性を継承できるこのような「ルート」のファイルハンドルはない．新しいグローバルなファイルハンドルを作成するのではなく，
デフォルトのエラーハンドラを加工し，きぐぉたうぉがぅたぎさががに付加されたようにする．
（根拠の終わり）〲〳〲〴〲〵13.8 入出力エラークラス

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

入出力ルーチンによって返される，実装依存のエラーコードを，表〱〳〮〳に定義するようなエラークラスに変換することができる．
また，この章のルーチンの呼び出しは，きぐぉたぅげげたごすぐぅなど他のきぐぉクラスでエラーを報告することがある．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

13.9 例
13.9.1 スプリット集団入出力を使用したダブルバッファリング
この例では，計算と出力をオーバーラップさせる方法を示す．計算は関数っはねばふぴづたぢふててづひ〨〩によって実行される．
〪〯〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽〽
〪〪 うふのっぴどはの〺
つはふぢぬづたぢふててづひ〪〪 こべのはばびどび〺〪
ぶはどつ つはふぢぬづたぢふててづひ〨〪
きぐぉたうどぬづ てと〪〪〬 ぉぎ〪
きぐぉたいちぴちぴべばづ ぢふてぴべばづ〪〪〬 ぉぎ〪
どのぴ ぢふてっはふのぴ
〪〪 ぉぎ
〪
〩
〪

〱〳〮〹〮 例

〴〶〷
〱
〲
〳
〴
〵
〶
〷
〸

無効なファイルハンドル
全プロセスで同一でない集団引数，またはプロセスごとに違った順序で呼び出された集団的ルーチン

きぐぉたぅげげたうぉがぅ
きぐぉたぅげげたぎくごたこぁきぅ

きぐぉたぅげげたぁきくいぅ

きぐぉたぅげげたさぎこさぐぐくげごぅいたいぁごぁげぅぐ

きぐぉたぅげげたさぎこさぐぐくげごぅいたくぐぅげぁごぉくぎきぐぉたぅげげたぁぃぃぅここ
きぐぉたぅげげたぎくたこぐぁぃぅ
きぐぉたぅげげたけさくごぁ
きぐぉたぅげげたげぅぁいたくぎがす
きぐぉたぅげげたうぉがぅたぉぎたさこぅ

きぐぉたぅげげたいさぐたいぁごぁげぅぐ

きぐぉたぅげげたぃくぎざぅげこぉくぎ
きぐぉたぅげげたぉく

〱〰
〱〱
〱〲
〱〳

きぐぉたうぉがぅたくぐぅぎに渡されたちねはつづに関するエラー

きぐぉたぅげげたぎくたこさぃえたうぉがぅ
きぐぉたぅげげたうぉがぅたぅじぉこごこ
きぐぉたぅげげたあぁいたうぉがぅ〹きぐぉたうぉがぅたこぅごたざぉぅしに 渡 さ れ た サ ポ ー
トされていないつちぴちひづば
逐次アクセスのみをサポートするファイ
ルでのシークなど，サポートされていな
い操作
ファイルが存在しない
ファイルが存在する
無効なファイル名（パス名が長すぎるな
ど）
権限なし
領域の不足
クオータの超過
読み取り専用のファイルまたはファイルシステム
ファイルがあるプロセスによって開かれているため，ファイル操作が完了できな
かった
すでに定義されているデータ表現識別
子 がきぐぉたげぅぇぉこごぅげたいぁごぁげぅぐに 渡 さ れたため，変換関数が登録できなかった
ユーザ提供のデータ変換関数でエラーが発生した
その他の入出力エラー

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

表 〱〳〮〳〺 入出力エラークラス

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〶〸
〱
〲
〳
〴
〵
〶
〷
〸

〪 いづびっひどばぴどはの〺〪
ぐづひてはひねび ぴとづ びぴづばび ぴは はぶづひぬちば っはねばふぴちぴどはの ぷどぴと ち っはぬぬづっぴどぶづ ぷひどぴづ〪
ぢべ ふびどので ち つはふぢぬづ〭ぢふててづひどので ぴづっとのどぱふづ〪〪〮 ぐちひちねづぴづひび〺〪てと
ばひづぶどはふびぬべ はばづのづつ きぐぉ てどぬづ とちのつぬづ〪
ぢふてぴべばづきぐぉ つちぴちぴべばづ てはひ ねづねはひべ ぬちべはふぴ〪〨ぁびびふねづび ち っはねばちぴどぢぬづ ぶどづぷ とちび ぢづづの びづぴ はの てと〩〪ぢふてっはふのぴ〣 ぢふてぴべばづ づぬづねづのぴび ぴは ぴひちのびてづひ〪〪〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〭〯

〹
〱〰
〱〱
〱〲
〱〳

〪〯 ぴとどび ねちっひは びぷどぴっとづび ぷとどっと ぢふててづひ 〢へ〢 どび ばはどのぴどので ぴは 〪〯〣つづてどのづ ごくぇぇがぅたぐごげ〨へ〩 〨〨〨へ〩〽〽〨ぢふててづひ〱〩〩 〿 〨へ〽ぢふててづひ〲〩 〺 〨へ〽ぢふててづひ〱〩〩
ぶはどつ つはふぢぬづたぢふててづひ〨
ほきぐぉたうどぬづ てと〬 きぐぉたいちぴちぴべばづ ぢふてぴべばづ〬 どのぴ ぢふてっはふのぴ〩

〱〴
〱〵
〱〶

きぐぉたこぴちぴふび びぴちぴふび〻てぬはちぴ 〪ぢふててづひ〱〬 〪ぢふててづひ〲〻てぬはちぴ 〪っはねばふぴづたぢふてたばぴひ〻

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

てぬはちぴ 〪ぷひどぴづたぢふてたばぴひ〻
どのぴ つはのづ〻〪〯 びぴちぴふび てはひ きぐぉ っちぬぬび 〪〪〯〯 ぢふててづひび ぴは とはぬつ ひづびふぬぴび 〪〪〯〯 つづびぴどのちぴどはの ぢふててづひ 〪〪〯〯てはひ っはねばふぴどので 〪〪〯〯 びはふひっづ てはひ ぷひどぴどので 〪〪〯〯 つづぴづひねどのづび ぷとづの ぴは ぱふどぴ 〪〪〯〯 ぢふててづひ どのどぴどちぬどぺちぴどはの 〪〯
ぢふててづひ〱 〽 〨てぬはちぴ 〪〩
ねちぬぬはっ〨ぢふてっはふのぴ〪びどぺづはて〨てぬはちぴ〩〩 〻ぢふててづひ〲 〽 〨てぬはちぴ 〪〩
ねちぬぬはっ〨ぢふてっはふのぴ〪びどぺづはて〨てぬはちぴ〩〩 〻っはねばふぴづたぢふてたばぴひ 〽 ぢふててづひ〱 〻〪〯 どのどぴどちぬぬべ ばはどのぴ ぴは ぢふててづひ〱 〪〯ぷひどぴづたぢふてたばぴひ〽 ぢふててづひ〱 〻〪〯 どのどぴどちぬぬべ ばはどのぴ ぴは ぢふててづひ〱 〪〯

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〪〯 いくさあがぅ〭あさううぅげ ばひはぬはで〺〪
っはねばふぴづ ぢふててづひ〱〻 ぴとづの どのどぴどちぴづ ぷひどぴどので ぢふててづひ〱 ぴは つどびに〪〯っはねばふぴづたぢふててづひ〨っはねばふぴづたぢふてたばぴひ〬 ぢふてっはふのぴ〬 〦つはのづ〩〻
きぐぉたうどぬづたぷひどぴづたちぬぬたぢづでどの〨てと〬 ぷひどぴづたぢふてたばぴひ〬 ぢふてっはふのぴ〬 ぢふてぴべばづ〩〻〪〯 いくさあがぅ〭あさううぅげ びぴづちつべ びぴちぴづ〺〪 くぶづひぬちば ぷひどぴどので はぬつ ひづびふぬぴび てひはね ぢふててづひ ばはどのぴづつ ぴは ぢべ ぷひどぴづたぢふてたばぴひ〪 ぷどぴと っはねばふぴどので のづぷ ひづびふぬぴび どのぴは ぢふててづひ ばはどのぴづつ ぴは ぢべ っはねばふぴづたぢふてたばぴひ〪〪〮 ごとづひづ どび ちぬぷちべび はのづ ぷひどぴづ〭ぢふててづひ ちのつ はのづ っはねばふぴづ〭ぢふててづひ どの ふびづ〪 つふひどので びぴづちつべ びぴちぴづ〪〮〯
ぷとどぬづ 〨〡つはのづ〩 ほ
ごくぇぇがぅたぐごげ〨っはねばふぴづたぢふてたばぴひ〩〻
っはねばふぴづたぢふててづひ〨っはねばふぴづたぢふてたばぴひ〬 ぢふてっはふのぴ〬 〦つはのづ〩〻
きぐぉたうどぬづたぷひどぴづたちぬぬたづのつ〨てと〬 ぷひどぴづたぢふてたばぴひ〬 〦びぴちぴふび〩〻
ごくぇぇがぅたぐごげ〨ぷひどぴづたぢふてたばぴひ〩〻
きぐぉたうどぬづたぷひどぴづたちぬぬたぢづでどの〨てと〬 ぷひどぴづたぢふてたばぴひ〬 ぢふてっはふのぴ〬 ぢふてぴべばづ〩〻ぽ〪〯 いくさあがぅ〭あさううぅげ づばどぬはで〺〪
ぷちどぴ てはひ てどのちぬ ぷひどぴづ ぴは っはねばぬづぴづ〪〮〯
きぐぉたうどぬづたぷひどぴづたちぬぬたづのつ〨てと〬 ぷひどぴづたぢふてたばぴひ〬 〦びぴちぴふび〩〻〱〳〮〹〮 例〴〶〹〱〪〯 ぢふててづひ っぬづちのふば 〪〯てひづづ〨ぢふててづひ〱〩〻てひづづ〨ぢふててづひ〲〩〻

〲
〳
〴

ぽ

〵
〶
〷
〸

13.9.2 部分配列ファイル型コンストラクタ

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

Process 0

Process 2

Process 1

Process 3

〲〰
〲〱
〲〲
〲〳

図 〱〳〮〴〺 配列のファイルの配置例

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

MPI_DOUBLE

Holes
〳〵

図 〱〳〮〵〺 プロセス〱のローカル配列のファイル型の例〴プロセスに分散された倍精度浮動小数点数の〱〰〰×〱〰〰の〲次元配列を書き込むとする．
ここで，各プロセスが〲〵列のブロックを持つように分散する（プロセス〰が列〰～〲〴を持ち，プロセス〱が列〲〵～〴〹を持つなど．図〱〳〮〴を参照）とする． 以下のぃ言語のプログラ
ムを使用することで各プロセス用のファイル型を生成できる（〹〸ページの第〴〮〱〮〳節を参
照）
．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

つはふぢぬづ びふぢちひひちべせ〱〰〰そせ〲〵そ〻きぐぉたいちぴちぴべばづ てどぬづぴべばづ〻
どのぴ びどぺづびせ〲そ〬 びふぢびどぺづびせ〲そ〬 びぴちひぴびせ〲そ〻
どのぴ ひちのに〻

〴〵
〴〶
〴〷
〴〸

第 〱〳〮 入出力

〴〷〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

きぐぉたぃはねねたひちのに〨きぐぉたぃくききたしくげがい〬 〦ひちのに〩〻
びどぺづびせ〰そ〽〱〰〰〻 びどぺづびせ〱そ〽〱〰〰〻
びふぢびどぺづびせ〰そ〽〱〰〰〻 びふぢびどぺづびせ〱そ〽〲〵〻びぴちひぴびせ〰そ〽〰〻 びぴちひぴびせ〱そ〽ひちのに〪びふぢびどぺづびせ〱そ〻きぐぉたごべばづたっひづちぴづたびふぢちひひちべ〨〲〬 びどぺづび〬 びふぢびどぺづび〬 びぴちひぴび〬 きぐぉたくげいぅげたぃ〬きぐぉたいくさあがぅ〬 〦てどぬづぴべばづ〩〻
または，うはひぴひちの言語の同等のコードは以下のようになる．
つはふぢぬづ ばひづっどびどはの びふぢちひひちべ〨〱〰〰〬〲〵〩
どのぴづでづひ てどぬづぴべばづ〬 ひちのに〬 どづひひはひ
どのぴづでづひ びどぺづび〨〲〩〬 びふぢびどぺづび〨〲〩〬 びぴちひぴび〨〲〩

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

っちぬぬ きぐぉたぃくききたげぁぎか〨きぐぉたぃくききたしくげがい〬 ひちのに〬 どづひひはひ〩
びどぺづび〨〱〩〽〱〰〰
びどぺづび〨〲〩〽〱〰〰
びふぢびどぺづび〨〱〩〽〱〰〰
びふぢびどぺづび〨〲〩〽〲〵
びぴちひぴび〨〱〩〽〰
びぴちひぴび〨〲〩〽ひちのに〪びふぢびどぺづび〨〲〩

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

っちぬぬ きぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁす〨〲〬 びどぺづび〬 びふぢびどぺづび〬 びぴちひぴび〬 〦きぐぉたくげいぅげたうくげごげぁぎ〬 きぐぉたいくさあがぅたぐげぅぃぉこぉくぎ〬〦てどぬづぴべばづ〬 どづひひはひ〩生成されるファイル型は，ファイルのうちプロセスの部分配列に収まる部分を表現する．また他プロセスが担当する領域を穴として表現する． 図〱〳〮〵に，プロセス〱用に生成されたファイル型を示す．

〱
〲
〳
〴
〵

第14章

〶
〷
〸
〹

プロファイリングインターフェイス

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

14.1 要求仕様〱〶〱〷

きぐぉプロファイリングインターフェイス仕様を満たすために，きぐぉ関数の実装は次のとおりでなければならない．

〱〸
〱〹
〲〰

〱〮 マクロ定義が許可されている関数（第〲〮〶〮〵節を参照）を除くきぐぉで定義されている全ての関数に対するメカニズムを用意すること． このために，ぃ言語およびうはひぴひちの言語では，各きぐぉ関数用のプリフィックスぐきぐぉたを持つ代替のエントリポ
イント名が必要となる．ぃ〫〫言語のプロファイリングインターフェイスについては第〱〶〮〱〮〱〰節で説明する．マクロとして実装されたルーチンの場合，ぐきぐぉたバージョンを用意して想定通りに機能することが求められるが，リンク時にきぐぉたバージ
ョンをユーザ定義のバージョンに置き換えることはできない．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

〲〮 置き換えないきぐぉ関数があっても，名前衝突を引き起こさずに実行形式のイメージにリンクできることを保証すること．

〳〰
〳〱
〳〲

〳〮 異なる言語呼び出し形式間で互いに階層関係がある場合には，きぐぉインターフェイ
スに対する異なる言語呼び出し形式間の実装を明文化すること．すなわち，それぞれの呼び出し形式に対しプロファイリングインターフェイスを実装しなければいけないのか，または最下層のルーチンに対してのみプロファイリングインターフェイスを実装することで簡略化できるのかを，プロファイラ開発者が分かるようにしなければならない．
〴〮 階 層 化 ア プ ロ ー チ で， 異 な る 言 語 の 呼 び 出 し 形 式 を 実 装 す る 場 合 （例 え ば，
うはひぴひちの言語の呼び出し形式がぃ言語の実装を呼び出す「ラッパー」関数の集合である場合），これらのラッパー関数をライブラリの他の部分から分離可能なようにすること．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

これは，分離したプロファイリングライブラリを正しく実装するために必要である．なぜなら（少なくともさのどへのリンカにおいては）プロファイリングライブラリが期待通りに動作するためにはラッパー関数を含んでいなければならないからであ
〴〷〱

〴〶
〴〷
〴〸

第 〱〴〮 プロファイリングインターフェイス

〴〷〲
〱
〲
〳
〴
〵

る．この要求仕様により，プロファイリングライブラリを構築する人は，オリジナ
ルのきぐぉライブラリからこれらの関数を抽出したり，他の不要なコードを記述する
ことなくそれらをプロファイリングライブラリに追加することができる．
〵〮 きぐぉライブラリに無操作ルーチンきぐぉたぐぃくぎごげくがを用意すること．

〶〷〸

14.2 考察

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

きぐぉプロファイリングインターフェイスの目的は，プロファイリング（および他の類似の）ツールの作成者が，異なるマシン上で各自のコードときぐぉ実装とのインターフェ
イスを比較的容易に作成できるようにすることである．
きぐぉには多くの異なる実装があるがマシンに依存しない標準であるので，きぐぉ用プロ
ファイリングツールの作成者が，ある特定のマシンに実装されたきぐぉのソースコードを参照すると考えるのは合理的ではない．したがって，そのようなツールの実装者が実装の下層部分を参照することなく，期待される性能情報を集められるようにするメカニズ
ムを用意する必要がある．
このようなインターフェイスは，エンドユーザがきぐぉに魅力を感じるためには重要であると思われる．さまざまなツールが利用できることは，ユーザがきぐぉ標準に魅力を感じるようになるための大きな要素だからである．
プロファイリングインターフェイスは，インターフェイスにすぎない．使用法については何も示していない．したがって，インターフェイスを通じてどのような情報を集めるのか，また集められた情報をどのように保存するのか，フィルタをかけるのか，表示するのかについては規定していない．
このインターフェイスを開発することになった最初の動機はプロファイリングツールの実装を可能にしたいということであったが，上で規定したようなインターフェイスが他の目的，例えば複数のきぐぉ実装間を「インターネットワーキング」で接続することが有用であると証明される可能性があることは明らかである．定義したものは全てインターフェイスなので，有用であるならばどこに使われても異論はない．
ここで取り扱っている問題は実行形式のイメージを構築する方法と密接に関わっており，それはマシンが異なれば大きく異なる可能性がある．そのため，以下に挙げる例は，
全てきぐぉプロファイリングインターフェイスの目的を実装する手段の〱つとして取り扱うべきである．実装に対する実際の要求については，上の「要求仕様」の節で詳述しており，本章の残りの部分ではこれらの要求仕様の正当性と考察について記述する．
以下の例では，さのどへシステム上で要求を満たす実装を構築する〱つの方法を紹介する（同じように有効なものは他にもあると考えられる）
．

〴〲
〴〳
〴〴

14.3 設計の論理

〴〵
〴〶
〴〷
〴〸

きぐぉ実装が上記の要求仕様を満たしている場合，プロファイリングシステムの実装者
はユーザプログラムからのきぐぉ関数呼び出しを全て捕捉することができる．そこで，下〱〴〮〳〮 設計の論理〴〷〳

層のきぐぉ実装（名前シフトエントリポイントを通じて）を呼び出す前に必要な情報を集めて，望む結果を得ることができる．

〱
〲
〳
〴

14.3.1 プロファイリングの各種制御〵

ユーザコードからプロファイラを実行時に動的に制御できるようにする明示的な要求仕様である．これは通常，（少なくとも）次の目的のためである．
• 計算の状態に応じてプロファイリングを許可，禁止する• 計算処理中の非クリティカルな時点でトレースバッファをフラッシュする

〶
〷
〸
〹
〱〰
〱〱
〱〲

• ユーザイベントをトレースファイルに追加する〱〳〱〴

これらの要求はきぐぉたぐぃくぎごげくがを使用することで満たされる．

〱〵
〱〶
〱〷

きぐぉたぐぃくぎごげくが〨ぬづぶづぬ〬 〮 〮 〮 〩
ぉぎ

ぬづぶづぬ

〱〸

プロファイリングのレベル〱〹〲〰

どのぴ きぐぉたぐっはのぴひはぬ〨っはのびぴ どのぴ ぬづぶづぬ〬 〮〮〮〩
きぐぉたぐぃくぎごげくが〨がぅざぅが〩ぉぎごぅぇぅげ がぅざぅが{ぶはどつ きぐぉ〺〺ぐっはのぴひはぬ〨っはのびぴ どのぴ ぬづぶづぬ〬 〮〮〮〩
}

〲〱
〲〲

（廃止された呼び出し形式, 第15.2節を参照）

〲〳
〲〴
〲〵

きぐぉライブラリ自体はこのルーチンを使用せず，ユーザコードへ即座に戻るだけである．しかし，このルーチンの呼び出しが存在していれば，ユーザ側でプロファイリング
パッケージを明示的に呼び出すことができる．
きぐぉはプロファイリングコードの実装についてはなにも規定しないので，きぐぉたぐぃくぎごげくが呼び出しの意味を正確に仕様書に明記することはできない．この曖昧さは関数に渡す引数の個数やそのデータ型にも及んでいる．
しかし，異なるプロファイリングライブラリ間でユーザコードの移植性にいくつかのレベルを持たせるために，特定のぬづぶづぬ値に以下の意味を持たせる．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

• ぬづぶづぬ〽〽〰 プロファイリングが利用不可〳〶〳〷• ぬづぶづぬ〽〽〱 通常デフォルトの詳細なレベルでプロファイリングが利用可能である• ぬづぶづぬ〽〽〲 プロファイルバッファをフラッシュする（これはいくつかのプロファイ
ラでは無操作の場合がある）• 上記以外のぬづぶづぬの値は， プロファイルライブラリで定義された処理と追加の引数
を持つ．

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

さらに，きぐぉたぉぎぉごを呼び出した後のデフォルトの状態が，通常のデフォルトレベルでプロファイリングを利用できるということも必要となる（つまり，きぐぉたぐぃくぎごげくがが引数〱で呼び出されたのと同様である）．これにより，ユーザはソースコードをまったく修

〴〶
〴〷
〴〸

第 〱〴〮 プロファイリングインターフェイス

〴〷〴
〱
〲
〳
〴
〵
〶

正する必要なしにプロファイリングライブラリとリンクし，プロファイル出力を得ることができる．
標準きぐぉライブラリでは無操作のきぐぉたぐぃくぎごげくがを規定しているため，そのソースコードを修正してより詳細なプロファイリング情報を取得するようにできるが，それでも全く同じコードを標準きぐぉライブラリに対してリンクすることができる．

〷〸〹

14.4 例

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

14.4.1 プロファイラの実装
プロファイラを使ってきぐぉたこぅぎい関数が送信したデータの総量と，この関数が処理に要した総時間を計測するとする．これは次のようにして得られることは明らかである．
びぴちぴどっ どのぴ ぴはぴちぬあべぴづび 〽 〰〻びぴちぴどっ つはふぢぬづ ぴはぴちぬごどねづ 〽 〰〮〰〻

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

どのぴ きぐぉたこづのつ〨ぶはどつ〪 ぢふててづひ〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〬 きぐぉたぃはねね っはねね〩
ほつはふぢぬづ ぴびぴちひぴ 〽 きぐぉたしぴどねづ〨〩〻〪〯 ぐちびび はの ちぬぬ ぴとづ ちひでふねづのぴび 〪〯どのぴ づへぴづのぴ〻
どのぴ ひづびふぬぴ〽 ぐきぐぉたこづのつ〨ぢふててづひ〬っはふのぴ〬つちぴちぴべばづ〬つづびぴ〬ぴちで〬っはねね〩〻〲〳

きぐぉたごべばづたびどぺづ〨つちぴちぴべばづ〬 〦づへぴづのぴ〩〻
ぴはぴちぬあべぴづび 〫〽 っはふのぴ〪づへぴづのぴ〻〲〴〪〯 ぃはねばふぴづ びどぺづ 〪〯〲〵

ぴはぴちぬごどねづ

〲〶
〲〷
〲〸

〫〽 きぐぉたしぴどねづ〨〩 〭 ぴびぴちひぴ〻〪〯 ちのつ ぴどねづ〪〯

ひづぴふひの ひづびふぬぴ〻
ぽ

〲〹
〳〰
〳〱

14.4.2 MPIライブラリの実装

〳〲
〳〳
〳〴
〳〵

さのどへシステムできぐぉライブラリがぃ言語で実装されているものはいろいろなオプションがあり，そこでもっとも明白なもののうち〲つをここに紹介する．どちらがよいかはリンカとコンパイラがぷづちにシンボルをサポートしているかどうかによる．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

ぷづちにシンボルのあるシステム
コンパイラとリンカがぷづちに外部シンボルをサポートしている場合（例えば，こはぬちひどび〲〮へ，その他のびべびぴづね ざ〮〴マシン），次のように〣ばひちでねち ぷづちにを使用することで，必要なライブラリが〱つのみとなる．
〣ばひちでねち ぷづちに きぐぉたぅへちねばぬづ 〽 ぐきぐぉたぅへちねばぬづ

〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ ぐきぐぉたぅへちねばぬづ〨〪〯 ちばばひはばひどちぴづ ちひでび 〪〯〩ほ〪〯 さびづてふぬ っはのぴづのぴ 〪〯ぽ〱〴〮〴〮 例〴〷〵

この〣ばひちでねちの効果として，外部シンボルきぐぉたぅへちねばぬづがぷづちに定義として定義される．
このことは，リンカでは（例えば，プロファイリングライブラリで）シンボルの定義が他にあってもエラーにならず，他の定義が存在しない場合には，リンカはぷづちに定義を使用するということを意味する．

〱
〲
〳
〴
〵
〶

ぷづちにシンボルのないシステム〷〸

ぷづちにシンボルが存在しない場合には，解決策の〱つとして，次のようにぃ言語のマクロプリプロセッサを使用するという方法が考えられる．

〹
〱〰
〱〱

〣どてつづて ぐげくうぉがぅがぉあ
〣どてつづて たたこごいぃたた〣
つづてどのづ うさぎぃごぉくぎ〨のちねづ〩 ぐ〣〣のちねづ〣
づぬびづ〣
つづてどのづ うさぎぃごぉくぎ〨のちねづ〩 ぐ〪〪〯〯のちねづ
〣
づのつどて
〣づぬびづ
〣
つづてどのづ うさぎぃごぉくぎ〨のちねづ〩 のちねづ
〣づのつどて

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

この時，ライブラリ内のユーザに見える関数はそれぞれ，次のように宣言できる．
どのぴ うさぎぃごぉくぎ〨きぐぉたぅへちねばぬづ〩〨〪〯 ちばばひはばひどちぴづ ちひでび 〪〯〩ほ〪〯 さびづてふぬ っはのぴづのぴ 〪〯
ぽ

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

ぐげくうぉがぅがぉあマクロシンボルの状態に従って，同じソースファイルをコンパイルして両方のバージョンのライブラリを作成することができる．
きぐぉ関数の組み込みが一度に１つ行われるように標準きぐぉライブラリを構築する必要がある．これは，それぞれの外部関数を別々のファイルからコンパイルしなければならないことを意味しうるため，面倒な要求である．しかし，プロファイリングライブラリの作成者が，捕捉したいきぐぉ関数とそれ以外の標準きぐぉライブラリを使用する関数への参照のみを定義する必要があるようにするために必要である．そのため，リンク段階ではこのようになる．

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

〥 っっ 〮〮〮 〭ぬねべばひはて 〭ぬばねばど 〭ぬねばど
ここで，ぬどぢねべばひはて〮ちにはいくつかのきぐぉ関数を捕捉するプロファイラ関数が含まれている． ぬどぢばねばど〮ちには，「名前シフト」したきぐぉ関数が含まれており，ぬどぢねばど〮ちにはきぐぉ関数の標準の定義が含まれている．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

14.4.3 厄介な問題〴〲〴〳

多重カウントきぐぉライブラリの一部は，それ自体より基本的なきぐぉ関数を使用して実装できるので（例えば，〱対〱通信を使用して実装された集団通信のポータブルな実装），プロファイリング関数から呼ばれたきぐぉ関数の中からプロファイリング関数を呼び出す可能性がある．

〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〴〮 プロファイリングインターフェイス

〴〷〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

このようなことがあると，内側のルーチンで費やされる時間を「二重カウント」することになる可能性もある．この効果は状況によっては実際に有用な場合もあるので（例えば，「集団関数から呼び出されたときに〱対〱ルーチンでどれだけの時間が費やされるか」という疑問に答えることもできる）きぐぉライブラリの作成者がこれを解決することを妨げるような制約を強制しないようにした．したがって，プロファイリングライブラリの作成者はこの問題に注意し，作成者自身がこの問題を防ぐようにしなければならない．
単一スレッドの世界では，すでにプロファイリングルーチンに入っているかどうかを示
す静的変数をプロファイリングコード内で使用して簡単に実現できる．マルチスレッド
環境では，これはより複雑なものになる（記録された回数の意味を考えるとよい）
．

〱〲
〱〳

リンカの奇妙なところ

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

さのどへのリンカは伝統的に〱パスで実行する．この結果，関数が必要な場合にライブラ
リを走査して，ライブラリの関数がイメージに取り込まれるだけである．ぷづちにシンボルや同じ関数の複数の定義があった場合，これは奇妙な（そして予期しない）結果を生じる場合がある．
例えば，ぃ言語用の実装の上にラッパー関数をかぶせてうはひぴひちの言語の呼び出し形式を実現したきぐぉ実装を考えてみる．プロファイルライブラリの作成者はぃ言語の呼び出し形
式のプロファイル関数を用意するだけで十分と考えている．うはひぴひちの言語で最終的にこれ
らの関数が呼び出され，またラッパー関数のコストは大したものでないと考えているためである．しかし，ラッパー関数がプロファイリングライブラリの中にない場合でも，
プロファイリングライブラリを呼び出したときにプロファイル用のエントリポイントはどれも未定義にはならない．したがって，プロファイリングコードはどれもイメージの中には取り込まれない．標準きぐぉライブラリを走査するときに，うはひぴひちの言語のラッパー関数は解決され，きぐぉ関数の基本バージョン利用される．全体として，コードは正常にリンクされるが，プロファイルされないという結果になる．
この問題を解決するために，うはひぴひちの言語用ラッパー関数をプロファイル用ライブラリの中に取り込むようにしなければならない．これは，ラッパー関数を基本きぐぉライブラ
リの残り部分から分離できるように要求することで実現できる．こうすることで，ちひを使用して基本ライブラリから抽出し，プロファイリングライブラリの中に取り込むこと
ができる．

〳〷
〳〸
〳〹

14.5 複数レベルの捕捉

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

ここで述べた方法は，各きぐぉ関数について単一の代替名しか用意していないため，プ
ロファイリング関数の入れ子を直接にはサポートしていない．複数レベルの呼び出し捕捉を可能にする実装が検討されたが，以下の欠点を持たない実装を構築することはできなかった．
• 特定の実装言語を仮定する〴〷〴〸• プロファイリングを行わないときでもランタイムコストがかかる〱〴〮〵〮 複数レベルの捕捉〴〷〷

きぐぉの目的の〱つは効率がよく低レイテンシの実装を可能にすることであり，特定の実装言語を要求することは標準の役目でないことから，上述の方式を受け入れることに決定した．
しかし，ユーザが呼び出す関数は下層のきぐぉ 関数を呼び出す前に様々な異なったプロ
ファイリング用関数を呼び出すかもしれないので，上記の方式を使用して複数レベルに対応するシステムを実装することは可能である．
残念なことにこのような実装では，上述の単一レベル実装で必要とされる以上に，異なるプロファイリングライブラリ同士で密接に協調することが求められうる．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〴〷〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〴〮 プロファイリングインターフェイス

〱
〲
〳
〴
〵

第15章

〶
〷
〸
〹

廃止された関数

〱〰
〱〱
〱〲
〱〳
〱〴

15.1 MPI-2.0から廃止された関数
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげに置き換わっている．廃止された関数の言語非依存の定義とぃ言語呼び出し形式は，関数名以外は新しい関数のものと同じである．うはひぴひちの言語の呼び出し形式のみが異なる．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたごすぐぅたえざぅぃごくげ〨 っはふのぴ〬 ぢぬはっにぬづのでぴと〬 びぴひどつづ〬 はぬつぴべばづ〬 のづぷぴべばづ〩
ぉぎ
ぉぎ
ぉぎ
ぉぎ
くさご

っはふのぴ
ぢぬはっにぬづのでぴとびぴひどつづはぬつぴべばづのづぷぴべばづ

ブロック数（非負の整数型）〲〳〲〴

各ブロック内の要素の数（非負の整数型）〲〵

各ブロックの開始点の間のバイト数（整数型）〲〶

古いデータ型（ハンドル）〲〷

新しいデータ型（ハンドル）〲〸〲〹

どのぴ きぐぉたごべばづたとぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬 きぐぉたぁどのぴ びぴひどつづ〬きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたえざぅぃごくげ〨ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ

〳〰

以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅいに置き換わっている．廃止された関数の言語非依存の定義とぃ言語呼び出し形式は，関数名以外は新しい関数のものと同じである．うはひぴひちの言語の呼び出し形式のみが異なる．

〳〴

〳〱
〳〲
〳〳

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〴〷〹

第 〱〵〮 廃止された関数

〴〸〰
〱
〲
〳

きぐぉたごすぐぅたえぉぎいぅじぅい〨 っはふのぴ〬 ちひひちべたはてたぢぬはっにぬづのでぴとび〬 ちひひちべたはてたつどびばぬちっづねづのぴび〬 はぬつぴべばづ〬 のづぷ〭
ぴべばづ〩
ぉぎ

っはふのぴ

ブロック数 ほ また，配列〴

ちひひちべたはてたつどびばぬちっづねづのぴび およびちひひちべたはてたぢぬはっにぬづのでぴとび のエントリの数（非負の整数
型）

〵
〶
〷
〸

ぉぎ

〹

ぉぎ

〱〰

ぉぎ

〱〱

くさご

ちひひちべたはてたぢぬはっにぬづのでぴとび
ちひひちべたはてたつどびばぬちっづねづのぴび
はぬつぴべばづのづぷぴべばづ

各ブロックの要素の数（非負の整数型の配列）
各ブロックのバイト変位（整数型の配列）
古いデータ型（ハンドル）
新しいデータ型（ハンドル）

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

どのぴ きぐぉたごべばづたとどのつづへづつ〨どのぴ っはふのぴ〬 どのぴ 〪ちひひちべたはてたぢぬはっにぬづのでぴとび〬
きぐぉたぁどのぴ 〪ちひひちべたはてたつどびばぬちっづねづのぴび〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたえぉぎいぅじぅい〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃごに置き換わっている．
廃止された関数の言語非依存の定義とぃ言語呼び出し形式は，関数名以外は新しい関数のものと同じである．うはひぴひちの言語の呼び出し形式のみが異なる．

〲〳
〲〴
〲〵
〲〶
〲〷

きぐぉたごすぐぅたこごげさぃご〨っはふのぴ〬 ちひひちべたはてたぢぬはっにぬづのでぴとび〬 ちひひちべたはてたつどびばぬちっづねづのぴび〬 ちひひちべたはてたぴべばづび〬のづぷぴべばづ〩ぉぎ

っはふのぴ

ブロック数（整数型）（非負の整数型）ほ また，配列
ちひひちべたはてたぴべばづび，ちひひちべたはてたつどびばぬちっづねづのぴび，
ちひひちべたはてたぢぬはっにぬづのでぴとびのエントリの数ぉぎ

各ブロックの要素の数（非負の整数型の配列）

新しいデータ型（ハンドル）

〲〸
〲〹

〳〱

ぉぎ

〳〲

ぉぎ

ちひひちべたはてたぢぬはっにぬづのでぴと
ちひひちべたはてたつどびばぬちっづねづのぴび
ちひひちべたはてたぴべばづび

くさごのづぷぴべばづ〳〰

〳〳〳〴

各ブロックのバイト変位（整数型の配列）
各ブロックの要素の型（データ型オブジェクトのハ
ンドルの配列）

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたごべばづたびぴひふっぴ〨どのぴ っはふのぴ〬 どのぴ 〪ちひひちべたはてたぢぬはっにぬづのでぴとび〬
きぐぉたぁどのぴ 〪ちひひちべたはてたつどびばぬちっづねづのぴび〬 きぐぉたいちぴちぴべばづ 〪ちひひちべたはてたぴべばづび〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたこごげさぃご〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬ぁげげぁすたくうたごすぐぅこ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩〬ぁげげぁすたくうたごすぐぅこ〨〪〩〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたぇぅごたぁいいげぅここに置き換わっている．廃止された関数の言語非依存の定義とぃ言語呼び出し形式は，関数名以外は新しい関数のものと同じである．うはひぴひちの言語の呼び出し形式のみが異なる．

〱〵〮〱〮 乍乐义中串丮丰から廃止された関数〴〸〱

きぐぉたぁいいげぅここ〨ぬはっちぴどはの〬 ちつつひづびび〩ぉぎ
くさご

ぬはっちぴどはの
ちつつひづびび〱呼び出し元のメモリ内の領域（選択型）
領域のアドレス（整数型）

どのぴ きぐぉたぁつつひづびび〨ぶはどつ〪 ぬはっちぴどはの〬 きぐぉたぁどのぴ 〪ちつつひづびび〩
きぐぉたぁいいげぅここ〨がくぃぁごぉくぎ〬 ぁいいげぅここ〬 ぉぅげげくげ〩〼ぴべばづ〾 がくぃぁごぉくぎ〨〪〩ぉぎごぅぇぅげ ぁいいげぅここ〬 ぉぅげげくげ
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたごすぐぅたぇぅごたぅじごぅぎごに置き換わっている．

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

きぐぉたごすぐぅたぅじごぅぎご〨つちぴちぴべばづ〬 づへぴづのぴ〩
ぉぎ
くさご

つちぴちぴべばづ
づへぴづのぴ〱〲

データ型（ハンドル）〱〳

データ型の範囲（整数型）〱〴〱〵

どのぴ きぐぉたごべばづたづへぴづのぴ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ 〪づへぴづのぴ〩
きぐぉたごすぐぅたぅじごぅぎご〨いぁごぁごすぐぅ〬 ぅじごぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぅじごぅぎご〬 ぉぅげげくげ
データ型の範囲を返す．データ型の定義については，〱〰〷ページを参照すること．
以下の〲つの関数は，データ型の下限と上限を検出するのに使用できる．

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉたごすぐぅたがあ〨 つちぴちぴべばづ〬 つどびばぬちっづねづのぴ〩
ぉぎ
くさご

つちぴちぴべばづ
つどびばぬちっづねづのぴ〲〳

データ型（ハンドル）〲〴

オリジンからのバイト単位での下限の変位（整数
型）

〲〵
〲〶
〲〷

どのぴ きぐぉたごべばづたぬぢ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ〪 つどびばぬちっづねづのぴ〩
きぐぉたごすぐぅたがあ〨 いぁごぁごすぐぅ〬 いぉこぐがぁぃぅきぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 いぉこぐがぁぃぅきぅぎご〬 ぉぅげげくげ

〲〸
〲〹
〳〰
〳〱
〳〲

きぐぉたごすぐぅたさあ〨 つちぴちぴべばづ〬 つどびばぬちっづねづのぴ〩
ぉぎ
くさご

つちぴちぴべばづ
つどびばぬちっづねづのぴ〳〳

データ型（ハンドル）
オリジンからのバイト単位での上限の変位（整数型）

どのぴ きぐぉたごべばづたふぢ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ〪 つどびばぬちっづねづのぴ〩
きぐぉたごすぐぅたさあ〨 いぁごぁごすぐぅ〬 いぉこぐがぁぃぅきぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 いぉこぐがぁぃぅきぅぎご〬 ぉぅげげくげ
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたぃくききたぃげぅぁごぅたかぅすざぁがに置き換わっている． 廃止された関数の言語非依存の定義は新しい関数のものと同じであるが，関数名と， ぃ言語〯うはひぴひちの言語の相互運用時の動作は異なる．〵〲〹ページの 第〱〶〮〳〮〷節を参照すること．この言語の呼び出し形式は変更されている．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〵〮 廃止された関数

〴〸〲
〱
〲

きぐぉたかぅすざぁがたぃげぅぁごぅ〨っはばべたての〬 つづぬづぴづたての〬 にづべぶちぬ〬 づへぴひちたびぴちぴづ〩
ぉぎ

〳
〴

ぉぎ

〵

くさご

〶

ぉぎ

っはばべたてのつづぬづぴづたてのにづべぶちぬづへぴひちたびぴちぴづにづべぶちぬのコピーコールバック関数にづべぶちぬの削除コールバック関数
将来のアクセス用のキー値（整数型）
コールバック関数用の特別な状態

〷
〸
〹
〱〰
〱〱

どのぴ きぐぉたかづべぶちぬたっひづちぴづ〨きぐぉたぃはばべたてふのっぴどはの 〪っはばべたての〬 きぐぉたいづぬづぴづたてふのっぴどはの〪つづぬづぴづたての〬 どのぴ 〪にづべぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩
きぐぉたかぅすざぁがたぃげぅぁごぅ〨ぃくぐすたうぎ〬 いぅがぅごぅたうぎ〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぅじごぅげぎぁが ぃくぐすたうぎ〬 いぅがぅごぅたうぎぉぎごぅぇぅげ かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

っはばべたての関数はきぐぉたぃくききたいさぐによってコミュニケータが複製されるときに呼び出される．っはばべたてのはきぐぉたぃはばべたてふのっぴどはの型とする必要があり，以下のように定義される．
ぴべばづつづて どのぴ きぐぉたぃはばべたてふのっぴどはの〨きぐぉたぃはねね はぬつっはねね〬 どのぴ にづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

この関数のうはひぴひちの言語での宣言は以下のようになる．
こさあげくさごぉぎぅ ぃくぐすたうさぎぃごぉくぎ〨くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげ〩ぉぎごぅぇぅげ くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 ぉぅげげがくぇぉぃぁが うがぁぇ
っはばべたてのはぃ言語またはうはひぴひちの言語できぐぉたぎさががたぃくぐすたうぎ またはきぐぉたいさぐたうぎとして指定することができ，きぐぉたぎさががたぃくぐすたうぎは」ちで 〽 〰ときぐぉたこさぃぃぅここ を返すだけの関数である．きぐぉたいさぐたうぎは」ちで 〽 〱を設定し，ちぴぴひどぢふぴづたぶちぬたはふぴに値ちぴぴひどぢふぴづたぶちぬたどのを返し，
きぐぉたこさぃぃぅここを返す単純なコピー関数である． きぐぉたぎさががたぃくぐすたうぎときぐぉたいさぐたうぎも廃止されたため，注意すること．
っはばべたてのと類似したコールバック削除関数は，以下のように定義される． つづぬづぴづたての関
数の呼び出しは，きぐぉたぃくききたうげぅぅによって コミュニケータが削除される場合，またはきぐぉたぁごごげたいぅがぅごぅを明示的に呼び出す場合に行われる． つづぬづぴづたてのは
きぐぉたいづぬづぴづたてふのっぴどはの型とする必要があり，以下のように定義される．

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぴべばづつづて どのぴ きぐぉたいづぬづぴづたてふのっぴどはの〨きぐぉたぃはねね っはねね〬 どのぴ にづべぶちぬ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻
この関数のうはひぴひちの言語での宣言は以下のようになる．
こさあげくさごぉぎぅ いぅがぅごぅたうさぎぃごぉくぎ〨ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげ
つづぬづぴづたてのはぃ言語またはうはひぴひちの言語できぐぉたぎさががたいぅがぅごぅたうぎとして指定することができ，きぐぉたぎさががたいぅがぅごぅたうぎはきぐぉたこさぃぃぅここを返すだけの関数である．
きぐぉたぎさががたいぅがぅごぅたうぎも廃止されたため，注意すること．
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたぃくききたうげぅぅたかぅすざぁがに置き換わっている．
廃止された関数の言語非依存の定義は，関数名以外は新しい関数のものと同じである．
この言語の呼び出し形式は変更されている．

〱〵〮〱〮 乍乐义中串丮丰から廃止された関数〴〸〳

きぐぉたかぅすざぁがたうげぅぅ〨にづべぶちぬ〩ぉぎくさご

にづべぶちぬ〱整数のキー値を解放する（整数型）〲〳

どのぴ きぐぉたかづべぶちぬたてひづづ〨どのぴ 〪にづべぶちぬ〩きぐぉたかぅすざぁがたうげぅぅ〨かぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ かぅすざぁが〬 ぉぅげげくげ

〴以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたぃくききたこぅごたぁごごげに置き換わっている．廃止
された関数の言語非依存の定義は，関数名以外は新しい関数のものと同じである．この言語の呼び出し形式は変更されている．

〷

〵
〶

〸
〹
〱〰
〱〱

きぐぉたぁごごげたぐさご〨っはねね〬 にづべぶちぬ〬 ちぴぴひどぢふぴづたぶちぬ〩
ぉぎくさご

っはねね

属性を結びつける先となるコミュニケータ（ハンドル）ぉぎにづべぶちぬきぐぉたかぅすざぁがたぃげぅぁごぅによって返されるキー値（整数型）

ぉぎ

ちぴぴひどぢふぴづたぶちぬ

属性値

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

どのぴ きぐぉたぁぴぴひたばふぴ〨きぐぉたぃはねね っはねね〬 どのぴ にづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩
きぐぉたぁごごげたぐさご〨ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ

〱〹

以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたぃくききたぇぅごたぁごごげに置き換わっている．廃止
された関数の言語非依存の定義は，関数名以外は新しい関数のものと同じである．この言語の呼び出し形式は変更されている．

〲〲

〲〰
〲〱

〲〳
〲〴
〲〵
〲〶

きぐぉたぁごごげたぇぅご〨っはねね〬 にづべぶちぬ〬 ちぴぴひどぢふぴづたぶちぬ〬 」ちで〩

〲〷
〲〸

ぉぎ

っはねね

属性を結びつける先となるコミュニケータ（ハンドル）ぉぎにづべぶちぬちぴぴひどぢふぴづたぶちぬ」ちで

キー値（整数型）

〲〹
〳〰

くさご
くさご

属性値（」ちで 〽 てちぬびづでない場合）
属性値が抽出された場合はぴひふづ，キーに属性が関連付けられていない場合はてちぬびづ

〳〱
〳〲
〳〳
〳〴
〳〵

どのぴ きぐぉたぁぴぴひたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ にづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 どのぴ 〪てぬちで〩きぐぉたぁごごげたぇぅご〨ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたぃくききたいぅがぅごぅたぁごごげに置き換わっている．
廃止された関数の言語非依存の定義は，関数名以外は新しい関数のものと同じである．
この言語の呼び出し形式は変更されている．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〵〮 廃止された関数

〴〸〴
〱
〲

きぐぉたぁごごげたいぅがぅごぅ〨っはねね〬 にづべぶちぬ〩
ぉぎくさご

っはねね

属性を結びつける先となるコミュニケータ（ハンドル）ぉぎにづべぶちぬ削除される属性のキー値（整数型）

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

どのぴ きぐぉたぁぴぴひたつづぬづぴづ〨きぐぉたぃはねね っはねね〬 どのぴ にづべぶちぬ〩きぐぉたぁごごげたいぅがぅごぅ〨ぃくきき〬 かぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぉぅげげくげ
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたぃくききたぃげぅぁごぅたぅげげえぁぎいがぅげに置き換わっている．廃止された関数の言語非依存の定義は，関数名以外は新しい関数のものと同じである．この言語の呼び出し形式は変更されている．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

きぐぉたぅげげえぁぎいがぅげたぃげぅぁごぅ〨 てふのっぴどはの〬 づひひとちのつぬづひ 〩ぉぎ
くさごてふのっぴどはのづひひとちのつぬづひ

ユーザ定義のエラー処理手順
きぐぉエラーハンドラ（ハンドル）

どのぴ きぐぉたぅひひとちのつぬづひたっひづちぴづ〨きぐぉたえちのつぬづひたてふのっぴどはの 〪てふのっぴどはの〬
きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
きぐぉたぅげげえぁぎいがぅげたぃげぅぁごぅ〨うさぎぃごぉくぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげ
きぐぉ例外ハンドラとして使用するユーザルーチンてふのっぴどはのを登録する．登録された例外
ハンドラのハンドルをづひひとちのつぬづひに返す．
ぃ言語では，このユーザルーチンはきぐぉたえちのつぬづひたてふのっぴどはの型とする必要があり，以下のよ
うに定義される．

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

ぴべばづつづて ぶはどつ 〨きぐぉたえちのつぬづひたてふのっぴどはの〩〨きぐぉたぃはねね 〪〬 どのぴ 〪〬 〮〮〮〩〻
第〱引数は使用するコミュニケータであり，第〲引数は返すべきエラーコードである．
うはひぴひちの言語では，このユーザルーチンは以下の形式とする必要がある．
こさあげくさごぉぎぅ えぁぎいがぅげたうさぎぃごぉくぎ〨ぃくきき〬 ぅげげくげたぃくいぅ〩
ぉぎごぅぇぅげ ぃくきき〬 ぅげげくげたぃくいぅ
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたぃくききたこぅごたぅげげえぁぎいがぅげに置き換わっている．廃止された関数の言語非依存の定義は，関数名以外は新しい関数のものと同じである．この言語の呼び出し形式は変更されている．

〳〹
〴〰
〴〱
〴〲

きぐぉたぅげげえぁぎいがぅげたこぅご〨 っはねね〬 づひひとちのつぬづひ 〩
ぉぎくさご

っはねね

エラーハンドラを設定する対象となるコミュニケー
タ（ハンドル）ぉぎ

づひひとちのつぬづひ

コミュニケータ用の新しいきぐぉエラーハンドラ（ハ
ンドル）

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぅひひとちのつぬづひたびづぴ〨きぐぉたぃはねね っはねね〬 きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩
きぐぉたぅげげえぁぎいがぅげたこぅご〨ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ

〱〵〮〲〮 乍乐义中串丮串から廃止された関数〴〸〵

呼び出しプロセスで，コミュニケータっはねねに新しいエラーハンドラづひひはひとちのつぬづひを関連付ける．エラーハンドラは必ずコミュニケータに関連付けられることに注意すること．
以下の関数はきぐぉ〭〲〮〰で廃止され，きぐぉたぃくききたぇぅごたぅげげえぁぎいがぅげに置き換わっている．廃止された関数の言語非依存の定義は，関数名以外は新しい関数のものと同じである．この言語の呼び出し形式は変更されている．

〱
〲
〳
〴
〵
〶
〷
〸

きぐぉたぅげげえぁぎいがぅげたぇぅご〨 っはねね〬 づひひとちのつぬづひ 〩

〹

ぉぎ

っはねね

エラーハンドラの取得元となるコミュニケータ（ハ
ンドル）

〱〰

くさご

づひひとちのつぬづひ

現在，コミュニケータに関連付けられているきぐぉエラーハンドラ（ハンドル）

〱〲

〱〱

〱〳

どのぴ きぐぉたぅひひとちのつぬづひたでづぴ〨きぐぉたぃはねね っはねね〬 きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
きぐぉたぅげげえぁぎいがぅげたぇぅご〨ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ

〱〴現在，コミュニケータっはねねに関連付けられているエラーハンドラ（のハンドル）
づひひとちのつぬづひを返す．

〱〷

〱〵
〱〶

〱〸
〱〹
〲〰
〲〱

15.2 MPI-2.2から廃止された関数〲〲〲〳

ぃ〫〫言語の呼び出し形式は全体的に廃止された．

〲〴

根拠 ぃ〫〫言語の呼び出し形式はぃ言語の呼び出し形式に最小限の機能を付加したものであるが， きぐぉの仕様に合わせるためのメンテナンスに大きな労力を要する．
事実上，ぃ〫〫言語の 呼び出し形式はぃ言語の呼び出し形式と〱対〱対応であるため，既存のぃ〫〫言語のきぐぉアプリケーションを きぐぉのぃ言語の呼び出し形式に変更する
ことは比較的容易である．加えて， ぃ〫〫言語のクラスライブラリの機能を提供する，サードパーティのパッケージも利用可能である（ここでのクラスライブラリの機能とは，きぐぉのぃ言語の呼び出し形式の直上に階層化されたぃ〫〫言語固有の機能を指す）．このような機能は，ぃ〫〫言語のプログラマにとってより表現力が高く，かつ自然であるが，きぐぉ仕様での標準化には適していない．（根拠の終わり）
以下の関数のぴべばづつづては廃止されており，新しい名前に置き換わっている．ぴべばづつづての名
前を除き，関数のシグネチャはまったく同じである．名前だけが，他の関数のぴべばづつづての
名前のルールに揃えるために更新された．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

廃止された名前

新しい名前

きぐぉたぃはねねたづひひとちのつぬづひたてのきぐぉ〺〺ぃはねね〺〺ぅひひとちのつぬづひたてのきぐぉたうどぬづたづひひとちのつぬづひたてのきぐぉ〺〺うどぬづ〺〺ぅひひとちのつぬづひたてのきぐぉたしどのたづひひとちのつぬづひたてのきぐぉ〺〺しどの〺〺ぅひひとちのつぬづひたてのきぐぉたぃはねねたづひひとちのつぬづひたてふのっぴどはの
きぐぉ〺〺ぃはねね〺〺ぅひひとちのつぬづひたてふのっぴどはの
きぐぉたうどぬづたづひひとちのつぬづひたてふのっぴどはの
きぐぉ〺〺うどぬづ〺〺ぅひひとちのつぬづひたてふのっぴどはの
きぐぉたしどのたづひひとちのつぬづひたてふのっぴどはの
きぐぉ〺〺しどの〺〺〺ぅひひとちのつぬづひたてふのっぴどはの

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〴〸〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〵〮 廃止された関数

〱
〲
〳
〴
〵

第16章

〶
〷
〸
〹

言語別の呼び出し形式

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

16.1 C++言語〱〶〱〷

16.1.1 概要〱〸

ぃ〫〫言語の呼び出し形式は廃止された 1．
単なる言語の呼び出し形式の記述だけでなく，インターフェイスの設計で考慮すべきぃ〫〫言語固有の問題がいくつかある．特に，ぃ〫〫言語では，言語固有の きぐぉの関数インターフェイスの設計だけでなく，オブジェクトとそのインターフェイスの設計にも関心を払う必要がある．幸運にも，きぐぉの設計はオブジェクトの概念に基づいて行われた
ため，自然なクラスの集合はすでにきぐぉの一部となっている．
きぐぉ〭〲には関数の仕様の一部としてぃ〫〫言語の呼び出し形式が含まれている． きぐぉ〭
〲ではきぐぉ〭〱関数のぃ言語の呼び出し形式用に新しい名前が用意されている場合もある．
この場合，ぃ〫〫言語の呼び出し形式は新しいぃ言語の名前と一致し， 廃止された名前のための呼び出し形式はない．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

16.1.2 設計〳〳

きぐぉ用のぃ〫〫言語のインターフェイスは以下の基準に従って設計されている．

〳〴〳〵〱〮 ぃ〫〫言語のインターフェイスは，きぐぉへの軽量の関数インターフェイスを備えたクラスの小さな集合で構成される．クラスは基本的なきぐぉオブジェクト型に基づいている（コミュニケータ，グループなど）
．

〳〶
〳〷
〳〸
〳〹
〴〰

〲〮 きぐぉのぃ〫〫言語の呼び出し形式はきぐぉに対する意味的に正しいインターフェイスを備えている．
〳〮 最大限の規模で， きぐぉ関数用のぃ〫〫言語の呼び出し形式はきぐぉクラスのメンバー関数とする．
〱

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

訳者注: MPI-3 で削除された．

〴〷
〴〸

〴〸〷

第 〱〶〮 言語別の呼び出し形式〴〸〸

根拠 基本きぐぉ型に対応する軽量のきぐぉオブジェクトの集合を用意することは，
きぐぉの暗黙的なオブジェクトベースの設計に最も適していて，これらのオブジェク
トのメソッドによりきぐぉ機能を実現することができる．既存のぃ言語の呼び出し形
式をぃ〫〫言語のプログラムで使用することができるが，ぃ〫〫言語の表現力の多くは失われる．それに対して，包括的なクラスライブラリを使用するとより的確なプ
ログラミングが行えるが，呼び出し形式は指定のきぐぉ機能に対する直接的で明確なマッピングを提供する必要があるため，このようなライブラリはきぐぉ用の言語の呼び出し形式としてはふさわしくない． （根拠の終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

〮

〱〳
〱〴

16.1.3 MPI用のC++言語のクラス

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

きぐぉのクラス，定数，関数は全てきぐぉ名前空間の有効範囲内で宣言される．そのため，
ぃ言語およびうはひぴひちの言語で使用される ぜきぐぉた〢プリフィックスの代わりに，きぐぉ 関数では基本的にぜきぐぉ〺〺〢プリフィックスを使用する．
きぐぉ名前空間のメンバーは，きぐぉによって暗黙的に使用されるオブジェクトに対応するクラスである．きぐぉ名前空間の簡潔な定義とそのメンバクラスは以下のとおりである．
のちねづびばちっづ きぐぉ ほ
っぬちびび ぃはねね
ほ〮〮〮ぽ〻
っぬちびび ぉのぴひちっはねね 〺 ばふぢぬどっ ぃはねね
ほ〮〮〮ぽ〻
っぬちびび ぇひちばとっはねね 〺 ばふぢぬどっ ぉのぴひちっはねね
ほ〮〮〮ぽ〻
っぬちびび いどびぴでひちばとっはねね 〺 ばふぢぬどっ ぉのぴひちっはねね ほ〮〮〮ぽ〻っぬちびび ぃちひぴっはねね 〺 ばふぢぬどっ ぉのぴひちっはねね
ほ〮〮〮ぽ〻
っぬちびび ぉのぴづひっはねね 〺 ばふぢぬどっ ぃはねね
ほ〮〮〮ぽ〻
っぬちびび いちぴちぴべばづ
ほ〮〮〮ぽ〻
っぬちびび ぅひひとちのつぬづひ
ほ〮〮〮ぽ〻
っぬちびび ぅへっづばぴどはの
ほ〮〮〮ぽ〻
っぬちびび うどぬづ
ほ〮〮〮ぽ〻
っぬちびび ぇひはふば
ほ〮〮〮ぽ〻
っぬちびび ぉのてはほ〮〮〮ぽ〻
っぬちびび くば
ほ〮〮〮ぽ〻
っぬちびび げづぱふづびぴ
ほ〮〮〮ぽ〻
っぬちびび ぐひづぱふづびぴ 〺 ばふぢぬどっ げづぱふづびぴ
ほ〮〮〮ぽ〻
っぬちびび ぇひづぱふづびぴ 〺 ばふぢぬどっ げづぱふづびぴ
ほ〮〮〮ぽ〻
っぬちびび こぴちぴふび
ほ〮〮〮ぽ〻
っぬちびび しどのほ〮〮〮ぽ〻ぽ〻〳〸〳〹

少数の派生クラスがあり，仮想継承は使用されないこのに注意を要する．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

16.1.4 MPIのクラスメンバー関数
きぐぉ用のぃ〫〫言語の呼び出し形式を構成するメンバー関数のほか，ぃ〫〫言語のインタ
ーフェイスには（ぃ〫〫言語で必要となる）追加の関数がある．特に， ぃ〫〫言語のイン
ターフェイスはコンストラクタとデストラクタ，代入演算子，比較演算子を備えていな
ければならなない．

〱〶〮〱〮 ぃ〫〫言語〴〸〹

きぐぉ用のぃ〫〫言語の全ての呼び出し形式を付録ぁ〮〴に示す．この呼び出し形式では，参照や っはのびぴなど，ぃ〫〫言語の重要な機能を利用する．コンストラクション，デストラク
ション，コピー，代入，比較，言語間の運用性のための（全てのきぐぉメンバークラスに適用される）宣言も示す．
明記された場合を除いて，きぐぉメンバクラスのびぴちぴどっでないメンバ関数（コンストラク
タと代入演算子用のものを除く）は全て仮想関数である．

〱
〲
〳
〴
〵
〶
〷
〸

根拠 仮想メンバー関数を用意することは，継承のための設計の重要な部分である．
仮想関数は実行時にバインディングでき，これによりライブラリのユーザはすでにライブラリに組み込まれているオブジェクトの動作を再定義することができる．これは性能を低下させる要因となるが，必要な処理である（仮想関数は呼び出しの前に見つける必要がある）．ただし，この性能低下が心配な場合は，コンパイル時に関数のバインディングを行うことができる． （根拠の終わり）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

例 16.1 派生きぐぉクラスの例を示す．

〱〸〱〹

っぬちびび てははたっはねね 〺 ばふぢぬどっ きぐぉ〺〺ぉのぴひちっはねね ほ
ばふぢぬどっ〺
ぶはどつ こづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ きぐぉ〺〺いちぴちぴべばづ〦 ぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ
ほ〯〯 ぃぬちびび ぬどぢひちひべ てふのっぴどはのちぬどぴべ
きぐぉ〺〺ぉのぴひちっはねね〺〺こづのつ〨ぢふて〬 っはふのぴ〬 ぴべばづ〬 つづびぴ〬 ぴちで〩〻〯〯 きはひづ っぬちびび ぬどぢひちひべ てふのっぴどはのちぬどぴべ
ぽ
ぽ〻

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

実装者へのアドバイス 実装者は，特に階層的な実装の場合に．継承を使用するクラスライブラリで意図しない副作用が発生しないよう注意する必要がある．例えば，
きぐぉたこぅぎいまたはきぐぉたげぅぃざを繰り返し呼び出すことによりきぐぉたあぃぁこごを実装する場合， きぐぉたこぅぎいまたはきぐぉたげぅぃざを再定義する可能性のある派生コミュニケー
タクラスによってきぐぉたあぃぁこごの動作を変更することはできない．きぐぉたあぃぁこごの実
装では基本のきぐぉ〺〺ぃはねねクラスのきぐぉたこぅぎい（またはきぐぉたげぅぃざ）を明示的に使用する必要がある． （実装者へのアドバイス終わり）

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

16.1.5 意味〴〰

きぐぉ用のぃ〫〫言語の呼び出し形式を構成するメンバー関数の意味は，きぐぉ関数の記述自体により規定される．ここでは，ぃ〫〫言語の呼び出し形式の一部でないぃ〫〫言語のイ
ンターフェイスの部分の意味を規定する，本節では関数は各きぐぉクラスの各関数を列記
する代わりに，きぐぉ〺〺hぃがぁここi という型を使用してプロトタイプが規定され，hぃがぁここi という用語は，明記した場合を除いて，有効なきぐぉクラス名（ぇひはふばなど）に置き換えることができる．

〴〲

〴〱

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〴〹〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

コンストラクション／デストラクション デフォルトのコンストラクタ／デストラクタのプロトタイプは以下のように規定される．
{ きぐぉ〺〺〼ぃがぁここ〾〨〩 （廃止された呼び出し形式, 第15.2節を参照）}{ ∼ きぐぉ〺〺〼ぃがぁここ〾〨〩 （廃止された呼び出し形式, 第15.2節を参照）}
コンストラクションとデストラクションについて，不可視きぐぉユーザレベルオブジェ
クトはハンドルと同様に振舞う．きぐぉ〺〺こぴちぴふび以外の全てのきぐぉオブジェクト用デフォル
トコンストラクタは対応するきぐぉ〺〺〪たぎさががハンドルを生成する．つまり，きぐぉオブジェク
トのインスタンスの作成時，対応するきぐぉ〺〺〪たぎさががオブジェクトとの比較を行うとぴひふづが返される．デフォルトのコンストラクタは新しいきぐぉ不可視オブジェクトを生成しない．
一部のクラスでは，このためのメンバー関数ぃひづちぴづ〨〩が利用できる．

〱〳
〱〴
〱〵

例 16.2れる．

以下の部分コード例では，テストはぴひふづを返し，メッセージがっはふぴに送信さ

〱〶
〱〷
〱〸

ぶはどつ てはは〨〩ほきぐぉ〺〺ぉのぴひちっはねね ぢちひ〻〱〹

どて 〨ぢちひ 〽〽 きぐぉ〺〺ぃくききたぎさがが〩っはふぴ 〼〼 〢ぢちひ どび きぐぉ〺〺ぃくききたぎさがが〢 〼〼 づのつぬ〻

〲〰
〲〱
〲〲

ぽ

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

各きぐぉユーザレベルオブジェクトのデストラクタは対応するきぐぉた〪たうげぅぅ関数を（存在するとしても） 呼び出さない．
根拠 以下の理由により，きぐぉた〪たうげぅぅ関数は自動的に呼び出されない．
〱〮 自動的デストラクションときぐぉクラスの浅いコピーの意味が相反する〲〮 きぐぉのモデルでは，メモリの割当と解放が実装ではなく，ユーザの責任となっている．
〳〮 破壊時にきぐぉた〪たうげぅぅを呼び出すと， 集団操作を引き起こすなどの意図しない副作用が発生する可能性がある（これはコピー，代入，コンストラクションの意味にも影響する）．以下の例では， てははたっはねねでもぢちひたっはねねでも関数の終了時に自動的に きぐぉた〪たうげぅぅが呼び出されることは望ましくない．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

ぶはどつ づへちねばぬづたてふのっぴどはの〨〩ほきぐぉ〺〺ぉのぴひちっはねね てははたっはねね〨きぐぉ〺〺ぃくききたしくげがい〩〬 ぢちひたっはねね〻
ぢちひたっはねね 〽 きぐぉ〺〺ぃくききたしくげがい〮いふば〨〩〻〯〯 ひづびぴ はて てふのっぴどはの
ぽ

〴〵
〴〶
〴〷
〴〸

（根拠の終わり）〱〶〮〱〮 ぃ〫〫言語〴〹〱

コピー／代入 コピーコンストラクタと代入演算子のプロトタイプは以下のように規定される．
{ きぐぉ〺〺〼ぃがぁここ〾〨っはのびぴ きぐぉ〺〺〼ぃがぁここ〾〦 つちぴち〩 （廃止された呼び出し形式, 第15.2節を参照）}{ きぐぉ〺〺〼ぃがぁここ〾〦 きぐぉ〺〺〼ぃがぁここ〾〺〺はばづひちぴはひ〽〨っはのびぴ きぐぉ〺〺〼ぃがぁここ〾〦 つちぴち〩 （廃止された
呼び出し形式, 第15.2節を参照）}
コピーと代入について，不可視きぐぉユーザレベルオブジェクトはハンドルと同様に振舞う．コピーコンストラクタはハンドルベースの（狭い）コピーを行う．きぐぉ〺〺こぴちぴふびオ
ブジェクトはこの規則の例外となる．これらのオブジェクトは代入とコピー構成のための深いコピーを行う．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

実装者へのアドバイス 各きぐぉユーザレベルオブジェクトは，値または参照により，実装固有の状態情報を格納する．きぐぉオブジェクトハンドルの代入とコピーでは，
この値（または参照）を単にコピーするだけの場合がある． （実装者へのアドバ
イス終わり）

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

例 16.3 この例では，てははたっはねね用にきぐぉ〺〺ぉのぴひちっはねね〺〺いふば〨〩は呼び出されない． オブジ ェ ク トてははたっはねね は 単 にきぐぉ〺〺ぃくききたしくげがいの エ イ リ ア ス で あ る． し か し， ぢちひたっはねねはきぐぉ〺〺ぉのぴひちっはねね〺〺いふば〨〩の呼び出しにより生成されるため， てははたっはねねとは別のコミュニケータである（そのため，きぐぉ〺〺ぃくききたしくげがいとも異なる）．ぢちぺたっはねねはぢちひたっはねねの
エイリアスとなる．ぢちひたっはねねまたはぢちぺたっはねねのいずれかがきぐぉたぃくききたうげぅぅにより解
放される場合，きぐぉ〺〺ぃくききたぎさががに設定される．その他のハンドルの状態は不定であり，無効であり，必ずしもきぐぉ〺〺ぃくききたぎさががが設定されるとは限らない．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

きぐぉ〺〺ぉのぴひちっはねね てははたっはねね〬 ぢちひたっはねね〬 ぢちぺたっはねね〻てははたっはねね 〽 きぐぉ〺〺ぃくききたしくげがい〻
ぢちひたっはねね 〽 きぐぉ〺〺ぃくききたしくげがい〮いふば〨〩〻
ぢちぺたっはねね 〽 ぢちひたっはねね〻

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

比較 比較演算子のプロトタイプは以下のように規定される．
{ぢははぬ きぐぉ〺〺〼ぃがぁここ〾〺〺はばづひちぴはひ〽〽〨っはのびぴ きぐぉ〺〺〼ぃがぁここ〾〦 つちぴち〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}{ぢははぬ きぐぉ〺〺〼ぃがぁここ〾〺〺はばづひちぴはひ〡〽〨っはのびぴ きぐぉ〺〺〼ぃがぁここ〾〦 つちぴち〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}
メンバー関数はばづひちぴはひ〽〽〨〩はハンドルが同じ内部きぐぉオブジェクトを参照する場
合のみぴひふづを返し，それ以外の場合はてちぬびづ を返す．はばづひちぴはひ〡〽〨〩ははばづひちぴはひ〽〽〨〩 の論理補完を返す． しかし，こぴちぴふびクラスは下層のきぐぉオブジェクトのハンドルではないため， こぴちぴふびインスタンスの比較は意味がない． そのため，はばづひちぴはひ〽〽〨〩およびはばづひちぴはひ〡〽〨〩関数はこぴちぴふびクラスでは定義されない．

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

定数 定数はシングルトンオブジェクトで，っはのびぴとして宣言される．グローバルに定義されたきぐぉオブジェクトが必ずしも定数とは限らない．例えば， きぐぉ〺〺ぃくききたしくげがいときぐぉ〺〺ぃくききたこぅがうはっはのびぴではない．

〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式〴〹〲〱

16.1.6 C++言語のデータ型

〲
〳
〴
〵
〶
〷
〸
〹

表〱〶〮〱にぃ〫〫言語の定義済みのきぐぉデータ型とその対応するぃ言語およびぃ〫〫言語のデータ型の一覧を示し，表〱〶〮〲にうはひぴひちの言語の定義済みのきぐぉデータ型とその対応す
るうはひぴひちの 〷〷言語のデータ型の一覧を示す．表〱〶〮〱〮〶にはその他の全てのきぐぉデータ型のためのぃ〫〫言語の名前の一覧を示す．
きぐぉ〺〺あすごぅおよびきぐぉ〺〺ぐぁぃかぅいは，それぞれ〳〲ページの第〳〮〲〮〲節と〱〳〱ページの第〴〮〲節に示されたきぐぉたあすごぅおよびきぐぉたぐぁぃかぅいと同じ制限に従う．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

きぐぉのデータ型
きぐぉ〺〺ぃえぁげ
きぐぉ〺〺こえくげご
きぐぉ〺〺ぉぎご
きぐぉ〺〺がくぎぇ
きぐぉ〺〺がくぎぇたがくぎぇ
きぐぉ〺〺こぉぇぎぅいたぃえぁげ
きぐぉ〺〺さぎこぉぇぎぅいたぃえぁげ
きぐぉ〺〺さぎこぉぇぎぅいたこえくげご
きぐぉ〺〺さぎこぉぇぎぅい
きぐぉ〺〺さぎこぉぇぎぅいたがくぎぇ
きぐぉ〺〺さぎこぉぇぎぅいたがくぎぇたがくぎぇ
きぐぉ〺〺うがくぁご
きぐぉ〺〺いくさあがぅきぐぉ〺〺がくぎぇたいくさあがぅ

ぃ言語のデータ型
っとちひ
びどでのづつ びとはひぴ
びどでのづつ どのぴ
びどでのづつ ぬはのでびどでのづつ ぬはので ぬはのでびどでのづつ っとちひ
ふのびどでのづつ っとちひ
ふのびどでのづつ びとはひぴ
ふのびどでのづつ どのぴ
ふのびどでのづつ ぬはので
ふのびどでのづつ ぬはので ぬはのでてぬはちぴ
つはふぢぬづ
ぬはので つはふぢぬづぃ〫〫言語のデータ型
っとちひびどでのづつ びとはひぴ
びどでのづつ どのぴ
びどでのづつ ぬはのでびどでのづつ ぬはので ぬはのでびどでのづつ っとちひ
ふのびどでのづつ っとちひ
ふのびどでのづつ びとはひぴ
ふのびどでのづつ どのぴ
ふのびどでのづつ ぬはので どのぴ
ふのびどでのづつ ぬはので ぬはのでてぬはちぴ
つはふぢぬづ
ぬはので つはふぢぬづ

ぷっとちひたぴ

ぢははぬびぴつ〺〺っはねばぬづへ〼てぬはちぴ〾
びぴつ〺〺っはねばぬづへ〼つはふぢぬづ〾
びぴつ〺〺っはねばぬづへ〼ぬはので つはふぢぬづ〾
ぷっとちひたぴ

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

きぐぉたぃじじたあくくがきぐぉたぃじじたぃくきぐがぅじ
きぐぉたぃじじたいくさあがぅたぃくきぐがぅじ
きぐぉたぃじじたがくぎぇたいくさあがぅたぃくきぐがぅじ
きぐぉ〺〺しぃえぁげ
きぐぉ〺〺あすごぅ
きぐぉ〺〺ぐぁぃかぅい

〳〷
〳〸
〳〹

表 〱〶〮〱〺 きぐぉぃ言語およびぃ〫〫言語の定義済みのデータ型のためのぃ〫〫言語の名前と，それに対応するぃ言語とぃ〫〫言語のデータ型

〴〰
〴〱
〴〲

以下の表で，きぐぉの定義済みのデータ型のグループを定義する．

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぃ言語の整数型〺

きぐぉ〺〺ぉぎご〬 きぐぉ〺〺がくぎぇ〬 きぐぉ〺〺こえくげご〬
きぐぉ〺〺さぎこぉぇぎぅいたこえくげご〬 きぐぉ〺〺さぎこぉぇぎぅい〬
きぐぉ〺〺さぎこぉぇぎぅいたがくぎぇ〬
きぐぉ〺〺がくぎぇたがくぎぇ〬 きぐぉ〺〺さぎこぉぇぎぅいたがくぎぇたがくぎぇ〬
きぐぉ〺〺こぉぇぎぅいたぃえぁげ〬 きぐぉ〺〺さぎこぉぇぎぅいたぃえぁげ〱〶〮〱〮 ぃ〫〫言語

〴〹〳
〱
〲

きぐぉのデータ型
きぐぉ〺〺ぉぎごぅぇぅげきぐぉ〺〺げぅぁが
きぐぉ〺〺いくさあがぅたぐげぅぃぉこぉくぎ
きぐぉ〺〺うたぃくきぐがぅじ
きぐぉ〺〺がくぇぉぃぁが
きぐぉ〺〺ぃえぁげぁぃごぅげ
きぐぉ〺〺あすごぅ
きぐぉ〺〺ぐぁぃかぅい

うはひぴひちの言語のデータ型
ぉぎごぅぇぅげ
げぅぁが
いくさあがぅ ぐげぅぃぉこぉくぎ
ぃくきぐがぅじ
がくぇぉぃぁがぃえぁげぁぃごぅげ〨〱〩

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

表 〱〶〮〲〺 きぐぉ うはひぴひちの言語の定義済みのデータ型のためのぃ〫〫言語の名前と，それに対応
するうはひぴひちの 〷〷言語のデータ型

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

きぐぉのデータ型
きぐぉ〺〺うがくぁごたぉぎご
きぐぉ〺〺いくさあがぅたぉぎご
きぐぉ〺〺がくぎぇたぉぎご
きぐぉ〺〺ごしくぉぎご
きぐぉ〺〺こえくげごたぉぎご
きぐぉ〺〺がくぎぇたいくさあがぅたぉぎご
きぐぉ〺〺ごしくげぅぁが
きぐぉ〺〺ごしくいくさあがぅたぐげぅぃぉこぉくぎ
きぐぉ〺〺ごしくぉぎごぅぇぅげきぐぉ〺〺うたいくさあがぅたぃくきぐがぅじ
きぐぉ〺〺ぉぎごぅぇぅげ〱きぐぉ〺〺ぉぎごぅぇぅげ〲きぐぉ〺〺ぉぎごぅぇぅげ〴きぐぉ〺〺ぉぎごぅぇぅげ〸きぐぉ〺〺ぉぎごぅぇぅげ〱〶
きぐぉ〺〺げぅぁが〲
きぐぉ〺〺げぅぁが〴
きぐぉ〺〺げぅぁが〸
きぐぉ〺〺げぅぁが〱〶きぐぉ〺〺うたぃくきぐがぅじ〴
きぐぉ〺〺うたぃくきぐがぅじ〸
きぐぉ〺〺うたぃくきぐがぅじ〱〶きぐぉ〺〺うたぃくきぐがぅじ〳〲説明ぃ〯ぃ〫〫言語のリデュース型
ぃ〯ぃ〫〫言語のリデュース型
ぃ〯ぃ〫〫言語のリデュース型
ぃ〯ぃ〫〫言語のリデュース型
ぃ〯ぃ〫〫言語のリデュース型
ぃ〯ぃ〫〫言語のリデュース型
うはひぴひちの言語のリデュース型
うはひぴひちの言語のリデュース型
うはひぴひちの言語のリデュース型
オプションのうはひぴひちの言語の型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型
明示的なサイズ型

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

表 〱〶〮〳〺 その他のきぐぉのデータ型のためのぃ〫〫言語の名前．実装でそれ以外のオプションの型を定義することもできる（きぐぉ〺〺ぉぎごぅぇぅげ〸など）
．

〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式〴〹〴〱

うはひぴひちの言語の整数型〺

〲
〳
〴
〵
〶
〷
〸

浮動小数点数〺

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

論理型〺

〱〷

複素数型〺

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

バイト型〺

きぐぉ〺〺ぉぎごぅぇぅげおよび返されるハンドル
きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたて〹〰たどのぴづでづひ〬
および利用可能であれば〺 きぐぉ〺〺ぉぎごぅぇぅげ〱〬
きぐぉ〺〺ぉぎごぅぇぅげ〲〬 きぐぉ〺〺ぉぎごぅぇぅげ〴〬
きぐぉ〺〺ぉぎごぅぇぅげ〸〬 きぐぉ〺〺ぉぎごぅぇぅげ〱〶
きぐぉ〺〺うがくぁご〬 きぐぉ〺〺いくさあがぅ〬 きぐぉ〺〺げぅぁが〬
きぐぉ〺〺いくさあがぅたぐげぅぃぉこぉくぎ〬きぐぉ〺〺がくぎぇたいくさあがぅおよび以下より返されるハンドル
きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたて〹〰たひづちぬ〬
および利用可能であれば〺 きぐぉ〺〺げぅぁが〲〬きぐぉ〺〺げぅぁが〴〬 きぐぉ〺〺げぅぁが〸〬 きぐぉ〺〺げぅぁが〱〶きぐぉ〺〺がくぇぉぃぁが〬 きぐぉ〺〺あくくがきぐぉ〺〺うたぃくきぐがぅじ〬 きぐぉ〺〺ぃくきぐがぅじ〬
きぐぉ〺〺うたいくさあがぅたぃくきぐがぅじ〬
きぐぉ〺〺いくさあがぅたぃくきぐがぅじ〬
きぐぉ〺〺がくぎぇたいくさあがぅたぃくきぐがぅじおよび以下より返されるハンドル
きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたて〹〰たっはねばぬづへ〬
および利用可能であれば〺
きぐぉ〺〺うたいくさあがぅたぃくきぐがぅじ〬
きぐぉ〺〺うたぃくきぐがぅじ〴〬 きぐぉ〺〺うたぃくきぐがぅじ〸〬
きぐぉ〺〺うたぃくきぐがぅじ〱〶〬 きぐぉ〺〺うたぃくきぐがぅじ〳〲きぐぉ〺〺あすごぅ

上記で定義したグループについて，各リデュース操作のための有効なデータ型を以下
に示す．

〳〳
〳〴
〳〵

くば

使用可能な型

きぐぉ〺〺きぁじ〬 きぐぉ〺〺きぉぎ

ぃ言語の整数型，うはひぴひちの言語の整数型，浮動小数

〳〶
〳〷
〳〸

点数型

〳〹
〴〰

きぐぉ〺〺こさき〬 きぐぉ〺〺ぐげくい

点数型，複素数型〴〱〴〲〴〳

ぃ言語の整数型，うはひぴひちの言語の整数型，浮動小数

きぐぉ〺〺がぁぎい〬 きぐぉ〺〺がくげ〬 きぐぉ〺〺がじくげ

ぃ言語の整数型，論理型

きぐぉ〺〺あぁぎい〬 きぐぉ〺〺あくげ〬 きぐぉ〺〺あじくげ

ぃ言語の整数型，うはひぴひちの言語の整数型，バイト型

〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉ〺〺きぉぎがくぃときぐぉ〺〺きぁじがくぃはぃ言語とうはひぴひちの言語のそれに対応するものと同様の機能を持つ．〱〷〷ページの第〵〮〹〮〴節を参照すること．

〱〶〮〱〮 ぃ〫〫言語〴〹〵

16.1.7 コミュニケータ

〱〲きぐぉ〺〺ぃはねねクラス階層はきぐぉによって暗黙的に定義された別の種類のコミュニケータ
を明確化し，強力に型指定することができる．最初のきぐぉの設計では全ての型のコミュ
ニケータに対して〱つの型のハンドルしか定義していないため，ぃ〫〫言語の設計に対して以下の明確化が行われる．

〳
〴
〵
〶
〷
〸

コ ミ ュ ニ ケ ー タ の 型 コ ミ ュ ニ ケ ー タ に は〶種 類 の 型， つ ま り，きぐぉ〺〺ぃはねね， きぐぉ〺〺ぉのぴづひっはねね， きぐぉ〺〺ぉのぴひちっはねね， きぐぉ〺〺ぃちひぴっはねね， きぐぉ〺〺ぇひちばとっはねね，
きぐぉ〺〺いどびぴでひちばとっはねねがある． きぐぉ〺〺ぃはねねは抽象的な基本コミュニケータクラスで，全ての きぐぉ コミュニケータに共通する機能をカプセル化する．きぐぉ〺〺ぉのぴづひっはねねと
きぐぉ〺〺ぉのぴひちっはねねはきぐぉ〺〺ぃはねねから派生している． きぐぉ〺〺ぃちひぴっはねね，きぐぉ〺〺ぇひちばとっはねね，
きぐぉ〺〺いどびぴでひちばとっはねねはきぐぉ〺〺ぉのぴひちっはねねから派生している．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

ユーザへのアドバイス 基本クラスのインスタンスを使用して派生クラスを初期化することはぃ〫〫言語では認められていない．例えば，ぉのぴひちっはねねからぃちひぴっはねねを初期化することは認められていない．また，きぐぉ〺〺ぃはねねは抽象的な基本クラスであるため，インスタンスを作成することはできず，クラスきぐぉ〺〺ぃはねねのオブジェク
トを作成することはできない．ただし，きぐぉ〺〺ぃはねねへの参照またはポインタを作成することはできる．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

例 16.4 以下のコードは誤りである．

〲〵〲〶

ぉのぴひちっはねね どのぴひち 〽 きぐぉ〺〺ぃくききたしくげがい〮いふば〨〩〻ぃちひぴっはねね っちひぴ〨どのぴひち〩〻〯〯 ごとどび どび づひひはのづはふび

〲〷
〲〸
〲〹
〳〰
〳〱

（ユーザへのアドバイス終わり）〳〲〳〳

きぐぉ〺〺ぃくききたぎさががきぐぉ〺〺ぃくききたぎさががの特定の型は実装に応じて決まる．

きぐぉ〺〺ぃくききたぎさががは全ての型のコミュニケータを使用した比較と初期化で使用できなけ

ればならない． きぐぉ〺〺ぃくききたぎさががはまた，パラメータリスト内にコミュニケータ引数があることが想定される関数に渡すことができなければならない（コミュニケータ引数の値にきぐぉ〺〺ぃくききたぎさががが使用できる場合）．
根拠 きぐぉ〺〺ぃくききたぎさががにはいくつかの実装方法がありうる．実現方法ではなく，必要な動作を指定することにより，実装者の自由度を最大限にできる． （根拠の
終わり）

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

例 16.5 以下の例で，きぐぉ〺〺ぃくききたぎさががを使用した代入と比較の動作を示す．

〴〷〴〸

第 〱〶〮 言語別の呼び出し形式

〴〹〶
〱
〲
〳
〴
〵

きぐぉ〺〺ぉのぴづひっはねね っはねね〻
っはねね 〽 きぐぉ〺〺ぃくききたぎさがが〻〯〯 ちびびどでの ぷどぴと ぃくききたぎさががどて 〨っはねね 〽〽 きぐぉ〺〺ぃくききたぎさがが〩〯〯 ぴひふづっはふぴ 〼〼 〢っはねね どび ぎさがが〢 〼〼 づのつぬ〻
どて 〨きぐぉ〺〺ぃくききたぎさがが 〽〽 っはねね〩〯〯 のはぴづ 〭〭 ち つどててづひづのぴ てふのっぴどはの〡
っはふぴ 〼〼 〢っはねね どび びぴどぬぬ ぎさがが〢 〼〼 づのつぬ〻

〶
〷
〸
〹
〱〰

いふば〨〩はきぐぉ〺〺ぃはねねのメンバー関数として定義されず， きぐぉ〺〺ぃはねねの派生クラス用に定義される．いふば〨〩は仮想関数ではなく，出力パラメータに値を返す．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

きぐぉ〺〺ぃはねね〺〺ぃぬはのづ〨〩 きぐぉ用のぃ〫〫言語のインターフェイスには，新しい関数
ぃぬはのづ〨〩が含まれている．きぐぉ〺〺ぃはねね〺〺ぃぬはのづ〨〩は純粋仮想関数である．派生コミュニケ
ータクラスの場合，ぃぬはのづ〨〩の動作はいふば〨〩と同様だが，新しいオブジェクトを参照で返す．ぃぬはのづ〨〩関数のプロトタイプは以下のとおりである．
ぃはねね〦 ぃはねね〺〺ぃぬはのづ〨〩 っはのびぴ 〽 〰
ぉのぴひちっはねね〦 ぉのぴひちっはねね〺〺ぃぬはのづ〨〩 っはのびぴぉのぴづひっはねね〦 ぉのぴづひっはねね〺〺ぃぬはのづ〨〩 っはのびぴ
ぃちひぴっはねね〦 ぃちひぴっはねね〺〺ぃぬはのづ〨〩 っはのびぴ
ぇひちばとっはねね〦 ぇひちばとっはねね〺〺ぃぬはのづ〨〩 っはのびぴ
いどびぴでひちばとっはねね〦 いどびぴでひちばとっはねね〺〺ぃぬはのづ〨〩 っはのびぴ

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

根拠 ぃぬはのづ〨〩は，ぃ〫〫言語のプログラマとライブラリの作成者によって想定される「仮想複製」機能を備えている．ぃぬはのづ〨〩は新しいオブジェクトを参照で返すため，ユーザは責任を持って最後にオブジェクトを削除する必要がある．いふば〨〩の機能を変更するのではなく，新しい名前が付けられている． （根拠の終わり）

〲〹
〳〰
〳〱

実装者へのアドバイス ぃぬはのづ〨〩といふば〨〩のプロトタイプは以下のようなクラスの宣
言になる．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

のちねづびばちっづ きぐぉ ほ
っぬちびび ぃはねね ほ
ぶどひぴふちぬ ぃはねね〦 ぃぬはのづ〨〩 っはのびぴ 〽 〰〻ぽ〻っぬちびび ぉのぴひちっはねね 〺 ばふぢぬどっ ぃはねね ほぉのぴひちっはねね いふば〨〩 っはのびぴ ほ 〮〮〮 ぽ〻ぶどひぴふちぬ ぉのぴひちっはねね〦 ぃぬはのづ〨〩 っはのびぴ ほ 〮〮〮 ぽ〻ぽ〻っぬちびび ぉのぴづひっはねね 〺 ばふぢぬどっ ぃはねね ほぉのぴづひっはねね いふば〨〩 っはのびぴ ほ 〮〮〮 ぽ〻ぶどひぴふちぬ ぉのぴづひっはねね〦 ぃぬはのづ〨〩 っはのびぴ ほ 〮〮〮 ぽ〻ぽ〻〯〯 ぃちひぴっはねね〬 ぇひちばとっはねね〯〯〬 ちのつ いどびぴでひちばとっはねね ちひづ びどねどぬちひぬべ つづてどのづつ
ぽ〻

〴〵
〴〶
〴〷
〴〸

（実装者へのアドバイス終わり）〱〶〮〱〮 ぃ〫〫言語〴〹〷

16.1.8 例外〱〲

きぐぉ用のぃ〫〫言語インターフェイスには，こづぴたづひひとちのつぬづひ〨〩メンバー関数で使用
で き る 定 義 済 み の エ ラ ー ハ ン ド ラきぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこが 用 意 さ れ て いる． きぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこはぃ〫〫言語の関数でのみ設定または取得できる．
ぃ〫〫言語以外のプログラムでぃ〫〫言語きぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこエラー
ハンドラを呼び出すエラーが発生した場合，例外は呼び出しスタックをぃ〫〫言語のコードで捕捉されるまで遡る．捕捉するぃ〫〫言語のコードがない場合の動作は未定義である． マルチスレッド環境の場合，またはノンブロッキングきぐぉ呼び出し時のバックグラ
ウンド処理中に例外が発行された場合，その動作は実装次第である．
エラーハンドラきぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこにより， きぐぉ〺〺こさぃぃぅここ以外のきぐぉ結
果コードに対して， きぐぉ〺〺ぅへっづばぴどはのが発行される．きぐぉ〺〺ぅへっづばぴどはのクラスに対する公開インターフェイスは以下のように定義される．
のちねづびばちっづ きぐぉ ほ
っぬちびび ぅへっづばぴどはの ほ
ばふぢぬどっ〺

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

ぅへっづばぴどはの〨どのぴ づひひはひたっはつづ〩〻どのぴ ぇづぴたづひひはひたっはつづ〨〩 っはのびぴ〻
どのぴ ぇづぴたづひひはひたっぬちびび〨〩 っはのびぴ〻
っはのびぴ っとちひ 〪ぇづぴたづひひはひたびぴひどので〨〩 っはのびぴ〻
ぽ〻
ぽ〻

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

実装者へのアドバイス 例外はきぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこの内部で投げられる．例外が投げられた時点で制御がユーザに戻ることが期待される．エラーが発生し，かつ，きぐぉたぅげげくげこたげぅごさげぎが指定されている場合，一部のきぐぉ関数はパラメー
タにある種の情報が返される．同じ種類の情報が例外の発生時に提供される必要がある．
例 え ば，きぐぉたしぁぉごぁががは ス テ ー タ ス 配 列 内 に 該 当 す る エ ン ト リ の 要 求 に 対 して エ ラ ー コ ー ド を 設 定 し， きぐぉたぅげげたぉぎたこごぁごさこを 返 す．
きぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこを使用する場合，例外が投げられる前に適切にステータス配列内のエラーコードが設定される． （実装者へのアドバイス終わ
り）

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

16.1.9 言語間の運用性〴〱

ぃ〫〫言語インターフェイスでは，異なる言語が混在する環境での運用性のために下記の関数が用意されている．これらの関数では，ぃ言語とぃ〫〫言語の間のシームレスな移行が可能になっている，〼ぃがぁここ〾に対応するぃ〫〫言語のクラスに派生クラスがある場合，関数では派生クラスとぃ言語きぐぉた〼ぃがぁここ〾の間の変換も行われる．

〴〳

きぐぉ〺〺〼ぃがぁここ〾〦 きぐぉ〺〺〼ぃがぁここ〾〺〺はばづひちぴはひ〽〨っはのびぴ きぐぉた〼ぃがぁここ〾〦 つちぴち〩

〴〸

〴〲

〴〴
〴〵
〴〶
〴〷

第 〱〶〮 言語別の呼び出し形式

〴〹〸
〱
〲
〳
〴

きぐぉ〺〺〼ぃがぁここ〾〨っはのびぴ きぐぉた〼ぃがぁここ〾〦 つちぴち〩
きぐぉ〺〺〼ぃがぁここ〾〺〺はばづひちぴはひ きぐぉた〼ぃがぁここ〾〨〩 っはのびぴ
これらの関数については，第〱〶〮〳〮〴節で説明する．

〵
〶
〷
〸
〹

16.1.10 プロファイリング
ここでは，きぐぉに対するぃ〫〫言語プロファイリングインターフェイスの要件について
説明する．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

実装者へのアドバイス プロファイリングの主な目的はユーザコードから関数呼び出しを捕捉することであるため，関数呼び出しの捕捉とプロファイリングを可能にするために基礎となる実装を階層化する方法を決定するのは実装者である．
きぐぉのぃ〫〫言語の呼び出し形式の実装が別の言語（ぃ言語など）のきぐぉの呼び出し
形式の上に階層化される場合，またはぃ〫〫言語の呼び出し形式が別の言語のプロ
ファイリングインターフェイスの上に階層化される場合，下層のきぐぉ実装ですでにきぐぉプロファイリングインターフェイスの要件が満たされているため，それ以外のプロファイリングインターフェイスは必要ない．

〲〰
〲〱
〲〲
〲〳

他のプロファイリングインターフェイスにアクセスできないネイティブ なぃ〫〫言
語きぐぉ実装は，この節で説明する要件を満たしているインターフェイスを実装する必要がある．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

質の高い処理系では，この節で説明されるインターフェイスを実装することにより，可搬なぃ〫〫言語プロファイリングライブラリを促進することができる．実装
者は，ぃ〫〫言語プロファイリングインターフェイスを構築するかどうかのオプシ
ョンを用意したいと考えることがある．別の言語または別のプロファイリングイン
ターフェイスの呼び出し形式上に階層化されているぃ〫〫言語の実装は，第〳の階層を挿入してぃ〫〫言語プロファイリングインターフェイス（実装者へのアドバイス
終わり）

〳〳
〳〴
〳〵

ぃ〫〫言語のきぐぉプロファイリングインターフェイスの要件を満たすため， きぐぉ関数の実装では以下のことが必要となる．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〮 きぐぉ定義の全ての関数が名前シフトによりアクセスできるメカニズムを提供する．
そのため，全てのきぐぉ関数（通常はプリフィックススぜきぐぉ〺〺〢で始まる）へのアク
セスもプリフィックスぜぐきぐぉ〺〺〢を使用して行えなければならない．
〲〮 置き換えられていないきぐぉ関数が名前の衝突を起こすことなく実行イメージとリンクできるようにすること．
〳〮 別の言語の上に階層化されている場合，呼び出し形式毎にプロファイリングインターフェイスを実装する必要があるか，最下層のルーチンにのみ実装することで効率化できるか，をプロファイラの開発者が判断できるように，別の言語のきぐぉインターフェイスの呼び出し形式の実装について文書化すること．

〱〶〮〱〮 ぃ〫〫言語〴〹〹〴〮 別の言語の呼び出し形式の実装が階層化アプローチを通して実装されている場合（ぃ〫〫言語の呼び出し形式がぃ言語の実装を呼び出す「ラッパー」関数の集合である場合など），これらのラッパー関数を残りのライブラリから分離できるようにすること．
（少なくともさのどへリンカにより）プロファイリングライブラリを想定通りに実行する場合これらのラッパー関数を組み込む必要があるため，別のプロファイリングラ
イブラリを正しく実装するためにこのことが必要となる．この要件により，プロファイリングライブラリの作成者は元のきぐぉ ライブラリからこれらの関数を抽出し，他の不要なコードを記述することなくプロファイリングライブラリに追加すること
ができる．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

〵〮 無操作ルーチンきぐぉ〺〺ぐっはのぴひはぬをきぐぉライブラリに組み込む．

〱〴〱〵

実装者へのアドバイス ぃ〫〫言語のプロファイリングインターフェイスの実装方法には，（少なくとも）継承とキャッシングの〲つがある．継承ベースのアプローチ
は，コミュニケータクラスの仮想継承実装が必要となる可能性があるため，魅力的とは言えない．そのため，実装者が対応するきぐぉオブジェクトにぐきぐぉオブジェクト
をキャッシングする可能性が高い．キャッシング方式を以下に説明する．
各ルーチンへの「真の」エントリポイントはのちねづびばちっづ ぐきぐぉ内に用意することができる．そのため，非プロファイリングバージョンはのちねづびばちっづ きぐぉ内に用意することができる．

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

きぐぉハンドル内でのぐきぐぉオブジェクトのインスタンスのキャッシングは，プロファ
イリング方式を実装するのに必要な「所有」関係を提供する．

〲〷〲〸

きぐぉオブジェクトの各インスタンスは単にぐきぐぉオブジェクトのインスタンスを「包む」．きぐぉオブジェクトは，内部ぐきぐぉ オブジェクトで対応する関数を呼び出す前に
プロファイリング処理を実行することができる．

〲〹

プログラムを再リンクするだけでプロファイリングを有効にするための鍵は， 全てのきぐぉ関数を宣言するヘッダファイルを用意することである．関数は別の場所で定義し，ライブラリとしてコンパイルされている必要がある．きぐぉの定数はきぐぉ名
前空間内でづへぴづひのとして宣言する必要がある．例として， ねばど〮とのサンプルファイ
ルからの抜粋を以下に示す．

〳〳

〳〰
〳〱
〳〲

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

例 16.6 ねばど〮とのサンプルファイル
のちねづびばちっづ ぐきぐぉ ほ
っぬちびび ぃはねね ほ
ばふぢぬどっ〺
どのぴ ぇづぴたびどぺづ〨〩 っはのびぴ〻
ぽ〻〯〯 づぴっ〮
ぽ〻

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〵〰〰
〱
〲
〳
〴

のちねづびばちっづ きぐぉ ほ
ばふぢぬどっ〺
っぬちびび ぃはねね ほ
ばふぢぬどっ〺
どのぴ ぇづぴたびどぺづ〨〩 っはのびぴ〻

〵
〶
〷
〸

ばひどぶちぴづ〺ぐきぐぉ〺〺ぃはねね ばねばどたっはねね〻
ぽ〻
ぽ〻

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

きぐぉクラスの全てのコンストラクタ，代入演算子，デストラクタは，必要に応じて内部ぐきぐぉオブジェクトの初期化〯破壊を行う必要がある．
関数の定義は別々のオブジェクトファイルに格納する必要がある．
ぐきぐぉクラスメンバー関数と非プロファイリングバージョンのきぐぉクラスメンバ
ー関数はぬどぢねばど〮ちにコンパイルすることができ，プロファイリングバージョン
はぬどぢばねばど〮ちにコンパイルすることができる．ぬどぢねばど〮ちと ぬどぢばねばど〮ちの両方をリンクする場合きぐぉクラスメンバー関数の名前の定義が複数存在する状況を避けるた
め，ぐきぐぉクラスメンバー関数ときぐぉ定数をぬどぢねばど〮ちライブラリの非プロファイリン
グきぐぉクラスメンバー関数とは別のオブジェクトファイルに格納する必要があることに注意すること．例えば，次のようになる．

〲〵〲〶

例 16.7 ばねばど〮っっ：コンパイルしてぬどぢねばど〮ちに格納

〲〷
〲〸
〲〹
〳〰

どのぴ ぐきぐぉ〺〺ぃはねね〺〺ぇづぴたびどぺづ〨〩 っはのびぴ
ほ〯〯 ぉねばぬづねづのぴちぴどはの はて きぐぉたぃくききたこぉずぅ
ぽ

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

例 16.8 っはのびぴちのぴび〮っっ〬 ぴは ぢづ っはねばどぬづつ どのぴは ぬどぢねばど〮ち〮 っはのびぴちのぴび〮っっ：コンパイル
して ぬどぢねばど〮ちに格納〳〸〳〹

っはのびぴ きぐぉ〺〺ぉのぴひちっはねね きぐぉ〺〺ぃくききたしくげがい〻

〴〰
〴〱
〴〲
〴〳
〴〴

例 16.9 ねばどたのはたばひはてどぬづ〮っっ：コンパイルしてぬどぢねばど〮ちに格納

〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉ〺〺ぃはねね〺〺ぇづぴたびどぺづ〨〩 っはのびぴ
ほひづぴふひの ばねばどたっはねね〮ぇづぴたびどぺづ〨〩〻ぽ〱〶〮〲〮 うくげごげぁぎ言語のサポート〵〰〱

例 16.10 ねばどたばひはてどぬづ〮っっ〬 ぴは ぢづ っはねばどぬづつ どのぴは ぬどぢばねばど〮ち〮 ねばどたばひはてどぬづ〮っっ：コン
パイルしてぬどぢばねばど〮ちに格納〱〲〳

どのぴ きぐぉ〺〺ぃはねね〺〺ぇづぴたびどぺづ〨〩 っはのびぴ
ほ〯〯 いは ばひはてどぬどので びぴふててどのぴ ひづぴ 〽 ばねばどたっはねね〮ぇづぴたびどぺづ〨〩〻〯〯 きはひづ ばひはてどぬどので びぴふててひづぴふひの ひづぴ〻
ぽ

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

（実装者へのアドバイス終わり）

〱〳
〱〴
〱〵

16.2 Fortran言語のサポート〱〶〱〷

16.2.1 概要〱〸〱〹

うはひぴひちの言語のきぐぉ〭〲の呼び出し形式はうはひぴひちの 〹〰言語（以降）の標準との互換性が保証されるよう設計されている．これらの呼び出し形式はほとんどの場合，うはひぴひちの 〷〷言語と互換性がある暗黙的な形式のインターフェイスである．

〲〰
〲〱
〲〲
〲〳

根拠 うはひぴひちの 〹〰言語には，うはひぴひちの 〷〷言語よりも「現代的な」言語になるように設計された多数の機能がある．うはひぴひちの 〹〰言語用に調整された一連の呼び出し形式を使用してきぐぉ でこれらの新しい機能を利用できるのが当然と考えられる．きぐぉで
は，多くの技術的な問題のため，（まだ）これらの機能の多くを利用できない．
（根拠の終わり）

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

〳〱
きぐぉで は， 〲つ の レ ベ ル でうはひぴひちの言 語 の サ ポ ー ト を 定 義 し て い る． 第〱〶〮〲〮〳節 と〳〲第〱〶〮〲〮〴節を参照すること．この節の残りの部分では，特に明記していない限り，「うはひぴひちの言〳〳語」と「うはひぴひちの 〹〰言語」は「うはひぴひちの 〹〰言語」以降を指すものとする．
〳〴〱〮 Fortran言語の基本サポート このレベルのうはひぴひちの言語のサポートを実装した場合，
きぐぉ〭〱で規定された元々のうはひぴひちの言語の呼び出し形式と，第〱〶〮〲〮〳節で規定する一部の追加要件が提供される．

〳〵
〳〶
〳〷
〳〸
〳〹

〲〮 Fortran言語の拡張サポート このレベルのうはひぴひちの言語のサポートを実装した場合，
うはひぴひちの言語の基本サポートに，第〱〶〮〲〮〴節で説明するうはひぴひちの 〹〰言語を特別にサポートする追加機能が提供される．

〴〰
〴〱
〴〲
〴〳

うはひぴひちの言語インターフェイスを提供するきぐぉ〭〲準拠の実装では，対象となるコンパイ
ラがモジュールまたはかぉぎいパラメータ型をサポートしていない場合を除いて，うはひぴひちの言
語の拡張サポートを提供しなければならない．

〴〴
〴〵
〴〶
〴〷
〴〸

〵〰〲
〱

第 〱〶〮 言語別の呼び出し形式

16.2.2 MPIでのFortran言語の呼び出し形式の問題

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

こ こ で は， うはひぴひちの言 語 プ ロ グ ラ ム できぐぉを 使 用 す る 場 合 に 発 生 す る 可 能 性 の ある 多 数 の 問 題 に つ い て 説 明 す る．「ユ ー ザ へ の ア ド バ イ ス」 に 該 当 す る も の で，
きぐぉとうはひぴひちの言語との関連性を明確にする． 標準への追加ではなく，標準の明確化を目的としている．
元々のきぐぉ仕様に記載されているように，このインターフェイスはいくつかの点
でうはひぴひちの言語の標準に違反している．そのためにうはひぴひちの 〷〷言語のプログラムで問題が発生することはほとんどないが，うはひぴひちの 〹〰言語のプログラムでは問題が大きくなるた
め，新しいうはひぴひちの 〹〰言語の機能を使用する場合は注意が必要となる． 違反したインターフェイスが受け入れられ〬 維持されたのは，きぐぉの使いやすさにとって重要であるからである．この節の残りの部分では，考えられる問題について詳しく説明する．ここでの説明は，元々のきぐぉ仕様でのうはひぴひちの言語の呼び出し形式（うはひぴひちの 〷〷言語ではなく，
うはひぴひちの 〹〰言語）の説明に優先し，それに取って代わるものである．
以下のきぐぉ機能はうはひぴひちの 〹〰言語と整合していない．

〱〸
〱〹
〲〰

〱〮 選択型引数を持つきぐぉサブルーチンは別の引数型を使用して呼び出すことができ
る．

〲〱
〲〲
〲〳

〲〮 サイズが仮定された仮引数を持つきぐぉサブルーチンに スカラー型の実引数を渡すことができる．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸

〳〮 多くのきぐぉルーチンでは，実引数がアドレスによって渡され，引数がサブルーチンへの入り口またはサブルーチンからの出口でコピーされないことが前提となっている．
〴〮 ユーザプログラムが（ノンブロッキング通信で使用される通信バッファなど）のユーザデータの読み取りや変更を行うのと同時に， きぐぉ実装はそのデータの読み取りや変更を行うことがある．
〵〮 いくつかの名前付き「定数」，例えば， きぐぉたあくごごくき， きぐぉたぉぎたぐがぁぃぅ，
きぐぉたこごぁごさこたぉぇぎくげぅ， きぐぉたこごぁごさこぅこたぉぇぎくげぅ， きぐぉたぅげげぃくいぅこたぉぇぎくげぅ，
きぐぉたさぎしぅぉぇえごぅい， きぐぉたぁげぇざたぎさがが， きぐぉたぁげぇざこたぎさががは普通のうはひぴひちの言語定数
ではなく，特別な実装が必要となる． 詳細は〱〷ページの 第〲〮〵〮〴節を参照するこ
と．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

〶〮 ，メモリ割当ルーチンきぐぉたぁががくぃたきぅきは，割り当てされるメモリをうはひぴひちの言語の変数と関連付けることができる言語拡張がなければ，うはひぴひちの言語で有効に使用することができない．
また，きぐぉは以下のような多くの点でうはひぴひちの 〷〷言語と整合していない．
• きぐぉの識別子は〶文字を超える．

〴〷〴〸• きぐぉの識別子は最初の文字の後に下線を含むことができる．

〱〶〮〲〮 うくげごげぁぎ言語のサポート〵〰〳• きぐぉにはヘッダーねばどて〮とが必要である．ヘッダーに対応していないシステムでは，
名前付き定数の値を指定する必要がある．

〱• きぐぉの多くのルーチンには，アドレス情報が格納されるかぉぎい型パラメータの整数（きぐぉたぁいいげぅここたかぉぎい， きぐぉたくううこぅごたかぉぎいなど）が含まれる．うはひぴひちの 〹〰言語
形式のパラメータ型に対応していないシステムでは，代わりにぉぎごぅぇぅげ〪〸またはぉぎごぅぇぅげを使用する必要がある．

〴

〲
〳

〵
〶
〷
〸
〹

きぐぉ〭〱には，アドレスサイズ情報を入力として取り，アドレスサイズ情報を出力として返すいくつかのルーチンが含まれていた．ぃ言語ではこのような引数はきぐぉたぁどのぴ型．
うはひぴひちの言語ではぉぎごぅぇぅげ型となっていた． 整数型がアドレス型より小さいマシンでは，
これらのルーチンで情報が欠落する可能性がある．きぐぉ〭〲では，このような関数の使用は推奨されなくなっており，ぉぎごぅぇぅげ型引数かぉぎい〽きぐぉたぁいいげぅここたかぉぎいを取るルーチンに置き換わっている．多くの新しいきぐぉ〭〲関数でも非デフォルトのかぉぎいの ぉぎごぅぇぅげ型引数を取っている．詳細は， 〱〹ページの第〲〮〶節と〸〹ページの第〴〮〱〮〱節を参照すること．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

強い型指定による問題〱〹〲〰

選択型引数を持つ全てのきぐぉ関数は，異なるうはひぴひちの言語のデータ型の実引数を同じ仮引数と関連付ける．このことはうはひぴひちの 〷〷言語では許可されておらず，うはひぴひちの 〹〰言語ではそれぞれの型に対して関数が異なる関数によりオーバーロードされる場合のみ，技術的に可能となる．ぃ言語では，ぶはどつ〪の正式な引数を使用するとこのような問題が回避できる．
以下の部分コード例は技術的には不正で，コンパイル時エラーが発生する可能性があ
る．

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

どのぴづでづひ ど〨〵〩
ひづちぬ
へ〨〵〩
〮〮〮
っちぬぬ ねばどたびづのつ〨へ〬 〵〬 きぐぉたげぅぁが〬 〮〮〮〩
っちぬぬ ねばどたびづのつ〨ど〬 〵〬 きぐぉたぉぎごぅぇぅげ〬 〮〮〮〩
特に，うはひぴひちの 〹〰言語のコンパイラがエラーを返す心配があるが，コンパイラで警告の発行以上のことが行われるのはまれである．
うはひぴひちの言語では，スカラー型の実引数を配列の仮引数に渡すことも技術的に不正である．従って，以下の部分コード例はきぐぉたこぅぎいのぢふて 引数はサイズが仮定された配列〼ぴべばづ〾 ぢふて〨〪〩として宣言されているため，エラーとなる可能性がある．
どのぴづでづひ ち
っちぬぬ ねばどたびづのつ〨ち〬 〱〬 きぐぉたぉぎごぅぇぅげ〬 〮〮〮〩

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

ユーザへのアドバイス 型のチェックに関する何らかの問題が生じた場合，コンパイラのフラグを使用するか，個別にコンパイルするか，第〱〶〮〲〮〴節で説明す
るうはひぴひちの言語の拡張サポートを利用したきぐぉ実装を使用することにより，対処する

〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式〵〰〴

ことができる．関数またはサブルーチンの引数を使用せず，通常はルーチンにローカルな変数を使用する代替方法は，ぅけさぉざぁがぅぎぃぅ文を使用して，コンパイラで受け付けられる型を持つ別の変数を生成することである． （ユーザへのアドバイス終
わり）

〱
〲
〳
〴
〵
〶
〷

データのコピーおよび連続領域配置による問題

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

直線的なアドレス空間によりアクセス可能なメモリの連続チャンクというアイディア
は，きぐぉでは暗黙的である．きぐぉ はこのメモリとの間で相互にデータのコピーを行う．
きぐぉプログラムはメモリのアドレスとオフセットを渡すことにより，データの領域を指定する． ぃ言語では，連続領域配置規則とポインタにより必要な全ての下層構造が示される．
うはひぴひちの 〹〰言語では，ユーザデータは必ずしも連続領域に格納されない． 例えば部分
配列ぁ〨〱〺ぎ〺〲〩にはぁの要素のうち，添字が〱，〳， 〵，〮〮〮 のもののみが含まれる．対象がこのような部分配列であるポインタ配列の場合も同様である．大部分のコンパイラでは，仮引数である配列が明示的な形状（あ〨ぎ〩など）で宣言されている場合，またはサイズが仮定されている（あ〨〪〩 など）場合，メモリの連続領域に格納される．必要に応じて，配列をメモリの連続領域にコピーすることにより，これが行われる．うはひぴひちの 〷〷言
語とうはひぴひちの 〹〰言語規格にはこのようなコピーを許すように注意深くかかれているが，
うはひぴひちの 〷〷言語のほとんどのコンパイラではこれが行われない． 2
きぐぉバッファ仮引数はサイズが仮定された配列であるため，ノンブロッキング呼び出
しの場合は重大な問題が発生する可能性がある．コンパイラは戻り時に一時配列をコピーするが，きぐぉはデータが保持されているメモリに継続的にデータのコピーを行う．例
えば，以下のコード例を考えてみる．

〲〹

ひづちぬ ち〨〱〰〰〩
っちぬぬ きぐぉたぉげぅぃざ〨ち〨〱〺〱〰〰〺〲〩〬 きぐぉたげぅぁが〬 〵〰〬 〮〮〮〩

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

きぐぉたぉげぅぃざの最初の仮引数はサイズが仮定された配列（〼ぴべばづ〾 ぢふて〨〪〩）であるため，
部分配列ち〨〱〺〱〰〰〺〲〩はメモリ内の連続領域に格納されるように，きぐぉたぉげぅぃざに渡される前に一時配列にコピーされる．きぐぉたぉげぅぃざはすぐに戻り，一時配列から配列ちにデー
タがコピーされる．その後，きぐぉは解放された一時配列のアドレスに書き込みを行う
ことができる． 一時配列はデータの送出が完了する前に解放されることがあるため，きぐぉたぉこぅぎいでもコピーの問題が発生する．
大部分のうはひぴひちの 〹〰言語のコンパイラは，実引数が明確な形状を持っているかサイズの仮定された配列の全体である場合，またはこのような配列の ぁ〨〱〺ぎ〩のような「シンプル」な部分配列である場合，コピーを作成しない（「シンプル」の意味は，次の段落で詳しく定義する）．また，多くのコンパイラは，この点について，割当可能な配列を明確な形状を持つ配列と同様に扱う（ただし，一部はこれに該当しないものもある）．しかし，形状が仮定された配列とポインタ配列の場合はこれとは異なり，不連続であるためにコ

〴〶
〲
〴〷
〴〸

Fortran言語の標準は配列データが不連続で格納されることを許すように書かれている．

〱〶〮〲〮 うくげごげぁぎ言語のサポート〵〰〵

ピーが行われることもある．このようなコピーにおいて，前の段落で説明したきぐぉの問
題が生じる．
「シンプル」な配列断片の正式な定義は以下のとおりである．
のちねづ 〨 せ〺〬そ〮〮〮 せ〼びふぢびっひどばぴ〾そ〺せ〼びふぢびっひどばぴ〾そ せ〬〼びふぢびっひどばぴ〾そ〮〮〮 〩つまり，完全に選択される〰個以上の次元がある場合，〱つの次元はストライドなしで選択され，〰個以上の次元はシンプルな添字を使用して選択される．例えば，次のようになる．
ぁ〨〱〺ぎ〩〬 ぁ〨〺〬ぎ〩〬 ぁ〨〺〬〱〺ぎ〬〱〩〬 ぁ〨〱〺〶〬ぎ〩〬 ぁ〨〺〬〺〬〱〺ぎ〩

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

うはひぴひちの言語は列優先順で，最初の添字が最も速く変化するため，連続する配列のシン
プルな断片も連続となる． 3スカラー型の引数でも同様の問題が生じる可能性がある． 一部のコンパイラでは，
うはひぴひちの 〷〷言語の場合でも，呼び出されたプロシージャ内に一部のスカラー型仮引数を作成する．これが問題となることについて，以下の例で示す．
っちぬぬ ふびづひ〱〨ち〬ひぱ〩っちぬぬ きぐぉたしぁぉご〨ひぱ〬びぴちぴふび〬どづひひ〩
ぷひどぴづ 〨〪〪〬〩 ち
びふぢひはふぴどのづ ふびづひ〱〨ぢふて〬ひづぱふづびぴ〩
っちぬぬ きぐぉたぉげぅぃざ〨ぢふて〮〮〮〬〬ひづぱふづびぴ〮〮〮〬〩
づのつちをコピーする場合，きぐぉたぉげぅぃざは通信の完了時にコピーの方を変更し，ち自体は変更しない．
一般的にコピーが行われるのは，重要な式（少なくとも〱つの演算子または関数呼び出しを持つもの），親の連続部分（ぁ〨〱〺の〺〲〩など）を選択しない部分配列，ターゲットがこのような部分配列であるポインタ，またはこのような部分配列と（直接的または間接的に）関連付けられた形状の仮定された配列などの引数に対してであることに注意すること．
呼び出し元または呼び出し先のプロシージャで引数のコピーを抑制するコンパイラオ
プションがある場合，これを使用する必要がある．
明確な形状を持っているかサイズが仮定された配列，このような配列のシンプルな部分配列，またはスカラー型を引数とする呼び出し元プロシージャでコンパイラ
がコピーを行う場合，またこれを抑制するためのコンパイラオプションがない場合，
きぐぉたぇぅごたぁいいげぅここを使用するアプリケーションやノンブロッキングきぐぉルーチン用にコンパイラを使用することはできない．コンパイラが呼び出し先プロシージャでスカラ
ー型引数をコピーし，これを抑制するコンパイラオプションがない場合，このコンパイ
ラは上記の例のようにサブルーチン呼び出し間でメモリ参照を使用するアプリケーショ
ンには使用できない．
〳「シンプル」の定義をシンプルにするため，1つ以外の全ての部分添字を境界なしにするよう定めた．
境界なしのコロンを使用すると，コンパイラにとってもプログラムを読む人にとっても，次元の全体が選択されていることが明らかになる．次元全体が1つまたは2つの境界により選択される状態を許可することもできたが，これはプログラムを読む人にとっては配列の宣言や最近の割当を確認する必要があることを意味
し，コンパイラにとってはランタイムチェックが必要となることを意味する．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〵〰〶
〱

特別な定数

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

きぐぉでは，きぐぉたあくごごくきなど，正式なうはひぴひちの言語定数として実装できない多数の特別な「定数」が必要となる．詳細なリストは〱〷ページの第〲〮〵〮〴節を参照すること．ぃ言語
では，これらは定数ポインタ，通常はぎさががとして実装され，関数プロトタイプが変数自体ではなく，変数のポインタを呼び出す場合に使用される．
うはひぴひちの言語では，これらの特別な定数を実装するのに，うはひぴひちの言語の非標準の言語
構成物を使用する必要がある場合もある．実装では定数用の特別な値と正規のデータとを区別できないため，（ばちひちねづぴづひ 文を使用して定義するなどの方法で）定数用の特別な値を使用することはできない．通常，対象となるコンパイラはデータをアドレスによって渡すことに依拠するため，これらの定数は定義済みのびぴちぴどっ変数（きぐぉで宣言されたぃくききくぎブロック内の変数など）として実装される．サブルーチン内では，このアドレスはうはひぴひちの言語の非標準のメカニズム（うはひぴひちの言語拡張，またはぃ言語関数の実装など）によって抽出することができる．

〱〷〱〸

うはひぴひちの 〹〰言語の派生型

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉでは，うはひぴひちの 〹〰言語の派生型を選択型の仮引数に渡すことを明示的にサポートしていない．実際に，ねばどモジュールを通して明示的なインターフェイスを提供するきぐぉ実
装の場合，コンパイル時にコンパイラにより派生型の実引数が拒否される．明示的なイ
ンターフェイスが与えられていない場合でも，うはひぴひちの 〹〰言語では派生型または派生型の配列のためのシーケンスの関連付けが保証されないことを知っておく必要がある．例えば，〲つの要素で構成される派生型の配列を実装する場合，最初の要素を配列とし，続いて二番目の要素を配列とすることのよって実装できる．この場合，こぅけさぅぎぃぅ属性が役に立つ場合がある．
以下の部分コードに，うはひぴひちの言語で派生型を送信する１つの方法を示す．この例では，全てのデータがアドレスで渡されることを前提としている．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

ぴべばづ ねべぴべばづ
どのぴづでづひ ど
ひづちぬ へつはふぢぬづ ばひづっどびどはの つづのつ ぴべばづ ねべぴべばづ
ぴべばづ〨ねべぴべばづ〩 てはは
どのぴづでづひ ぢぬはっにぬづの〨〳〩〬 ぴべばづ〨〳〩
どのぴづでづひ〨きぐぉたぁいいげぅここたかぉぎい〩 つどびば〨〳〩〬 ぢちびづ

〴〰
〴〱
〴〲

っちぬぬ きぐぉたぇぅごたぁいいげぅここ〨てはは〥ど〬 つどびば〨〱〩〬 どづひひ〩
っちぬぬ きぐぉたぇぅごたぁいいげぅここ〨てはは〥へ〬 つどびば〨〲〩〬 どづひひ〩
っちぬぬ きぐぉたぇぅごたぁいいげぅここ〨てはは〥つ〬 つどびば〨〳〩〬 どづひひ〩

〴〳
〴〴
〴〵
〴〶

ぢちびづ 〽 つどびば〨〱〩
つどびば〨〱〩 〽 つどびば〨〱〩 〭 ぢちびづ
つどびば〨〲〩 〽 つどびば〨〲〩 〭 ぢちびづ
つどびば〨〳〩 〽 つどびば〨〳〩 〭 ぢちびづ〴〷〴〸

ぢぬはっにぬづの〨〱〩 〽 〱〱〶〮〲〮 うくげごげぁぎ言語のサポート〵〰〷

ぢぬはっにぬづの〨〲〩 〽 〱ぢぬはっにぬづの〨〳〩 〽 〱〱〲〳ぴべばづ〨〱〩 〽 きぐぉたぉぎごぅぇぅげ
ぴべばづ〨〲〩 〽 きぐぉたげぅぁが
ぴべばづ〨〳〩 〽 きぐぉたいくさあがぅたぐげぅぃぉこぉくぎ

〴〵〶っちぬぬ きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨〳〬 ぢぬはっにぬづの〬 つどびば〬 ぴべばづ〬 のづぷぴべばづ〬 どづひひ〩
っちぬぬ きぐぉたごすぐぅたぃくききぉご〨のづぷぴべばづ〬 どづひひ〩〡 ふのばぬづちびちのぴ ぴは びづのつ てはは〥ど どのびぴづちつ はて てはは〬 ぢふぴ どぴ ぷはひにび てはひ びっちぬちひ〡 づのぴどぴどづび はて ぴべばづ ねべぴべばづ
っちぬぬ きぐぉたこぅぎい〨てはは〥ど〬 〱〬 のづぷぴべばづ〬 〮〮〮〩

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

レジスタ最適化での問題〱〵〱〶

きぐぉには，ユーザコードから隠されていて，ユーザコードと同じメモリにアクセスしながら同時に実行される操作が用意されている．例えば，きぐぉたぉげぅぃざのデータ転送などがこの例である．コンパイラのオプティマイザは，メモリからのリロードやメモリへの格納なしで変数のコピーをレジスタ内に保存しておける期間を認識できることを前提としている．隠された操作がメモリコピーの読み取りや書き込みを実行している間にユー
ザコードが変数のレジスタコピーを使用すると，問題が生じる．この節ではレジスタ最適化の落とし穴について説明する．
変数がうはひぴひちの言語のサブルーチンのローカルである（つまり，モジュールまたはぃくききくぎブロック内にない）場合，コンパイラでは変数が呼び出しの実引数である場合以外は呼び出し先のサブルーチンによって変更できないことが前提とされる．最も一般的なリンクの変換では，サブルーチンでレジスタの保存とリストアが行われることになっている．そのため，オプティマイザでは，呼び出しの前にこのような有効な変数のコピーを保持していたレジスタが戻り時にも有効なコピーを保持していることが前提とされる．
通常，ユーザがこのことを意識する必要はない．しかし，プログラムできぐぉたこぅぎい，
きぐぉたげぅぃざなどのバッファ引数により，関係する実際の変数を隠す名前が使用される場
合は，この節に注意する必要がある．きぐぉたいちぴちぴべばづに絶対アドレスが含まれる
きぐぉたあくごごくきはその一例である．きぐぉたぇぅごたぁいいげぅここを使用することにより，〱つの変数をアンカーとして使用して他を取り込むデータ型を生成し，アンカーからのオフセットを取得することは，もう〱つの例である．アンカー変数は呼び出しで言及される唯一のものとなる．ユーザのアプリケーションと並行して実行されるきぐぉ操作を使用する場合も注意が必要である．
例〱〶〮〱〱に，うはひぴひちの言語のコンパイラで行う可能性のある処理の例を示す．
コンパイラは，きぐぉたげぅぃざによりぢふての値が変化することを確認できないため，レジス
タの無効になっていることがわからない．ぢふてのアクセスは，きぐぉたぇぅごたぁいいげぅここおよ
びきぐぉたあくごごくきを使用することにより隠される．
例〱〶〮〱〲には，極端ではあるが許容される例を示す．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〵〰〸
〱
〲

例 16.11 うはひぴひちの 〹〰言語のレジスタ最適化
ソースコード：コンパイル後のコード：

っちぬぬ きぐぉたぇぅごたぁいいげぅここ〨ぢふて〬ぢふてちつつひ〬
どづひひはひ〩っちぬぬ きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨〱〬〱〬
ぢふてちつつひ〬きぐぉたげぅぁが〬ぴべばづ〬どづひひはひ〩
っちぬぬ きぐぉたごすぐぅたぃくききぉご〨ぴべばづ〬どづひひはひ〩
ぶちぬたはぬつ 〽 ぢふてっちぬぬ きぐぉたぇぅごたぁいいげぅここ〨ぢふて〮〮〮〬〩

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

っちぬぬ きぐぉたげぅぃざ〨きぐぉたあくごごくき〬〱〬ぴべばづ〮〮〮〬〩
ぶちぬたのづぷ 〽 ぢふてっちぬぬ きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨〮〮〮〩
っちぬぬ きぐぉたごすぐぅたぃくききぉご〨〮〮〮〩
ひづでどびぴづひ 〽 ぢふて
ぶちぬたはぬつ 〽 ひづでどびぴづひ
っちぬぬ きぐぉたげぅぃざ〨きぐぉたあくごごくき〮〮〮〬〩
ぶちぬたのづぷ 〽 ひづでどびぴづひ

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

例 16.12 うはひぴひちの 〹〰言語のレジスタ最適化ほ極端な例
ソースコード：コンパイル後のコード：
コード：

別のコンパイル後のっちぬぬ きぐぉたぉげぅぃざ〨ぢふて〮〮〬ひづぱ〩

っちぬぬ きぐぉたぉげぅぃざ〨ぢふて〮〮〬ひづぱ〩
ひづでどびぴづひ 〽 ぢふてっちぬぬ きぐぉたしぁぉご〨ひづぱ〮〮〬〩ぢ〱 〽 ひづでどびぴづひ

っちぬぬ きぐぉたぉげぅぃざ〨ぢふて〮〮〬ひづぱ〩
ぢ〱 〽 ぢふてっちぬぬ きぐぉたしぁぉご〨ひづぱ〮〮〬〩

〱〹
〲〰
〲〱
〲〲

っちぬぬ きぐぉたしぁぉご〨ひづぱ〮〮〬〩ぢ〱 〽 ぢふて

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

平行スレッド上のきぐぉたしぁぉごは，ぢふてはきぐぉたぉげぅぃざの呼び出しときぐぉたしぁぉごの完了の間で変更される．しかし，コンパイラはきぐぉたぉげぅぃざが戻った後にぢふてが変更される可能性を知らないため，ソースに書かれているよりも早くぢふてのロードをスケジュールする可能性がある．きぐぉたしぁぉごの呼び出しの前後にまたがってぢふてを保持するためにレジスタの使用を避ける理由はない．右の場合と同様に命令の並び替えが行われることもある．
命令の並び替えやバッファのレジスタへの割当を避けるため，〲通りの可搬なうはひぴひちの言
語のコードが考えられる．
• コンパイラは，実引数としてバッファを使用した外部サブルーチンの呼び出しにより呼び出しを囲むことにより， きぐぉサブルーチンの呼び出しをまたいでバッファの参照が移動することを防止することができる．ぉぎごぅぎごが外部サブルーチンで宣言されている場合，くさごまたはぉぎくさごでなければならない．サブルーチン自体は空とすることができるが，コンパイラはこのことがわからず，バッファが変更されている可能性を仮定する必要がある．例えば，上記のきぐぉたげぅぃざの呼び出しは以下のように置き換え，〴〴〴〵〴〶っちぬぬ いい〨ぢふて〩っちぬぬ きぐぉたげぅぃざ〨きぐぉたあくごごくき〮〮〮〬〩
っちぬぬ いい〨ぢふて〩〴〷〴〸以下を別にコンパイルする．（ぢふては整数とする）

〱〶〮〲〮 うくげごげぁぎ言語のサポート〵〰〹

びふぢひはふぴどのづ いい〨ぢふて〩どのぴづでづひ ぢふて
づのつ

〱
〲
〳
〴

コンパイラはまた，きぐぉサブルーチンの呼び出しをまたいで変数の参照が移動することを防止することもできる．
上記のきぐぉたしぁぉごの呼び出しのようなノンブロッキング呼び出しの場合，転送の完了が確認できるまで，バッファの参照は許可されない．そのため，この場合は，きぐぉ呼び出しの前の特別な呼び出しは不要である．つまり，この例のきぐぉたしぁぉごの呼び出しは以下のように置き換えることができる．

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

っちぬぬ きぐぉたしぁぉご〨ひづぱ〮〮〬〩っちぬぬ いい〨ぢふて〩

〱〳
〱〴
〱〵
〱〶

• 代替方法は，バッファまたは変数をモジュールまたは共通ブロックに格納して，きぐぉルーチンの呼び出しで実引数として参照され，定義され，示される各有効範囲内で，さこぅまたはぃくききくぎ文によりアクセスすることである．コンパイラできぐぉプロ
シージャがモジュールまたは共通ブロックを参照しないことが解析できない場合，
コンパイラはきぐぉプロシージャ（上記の例ではきぐぉたげぅぃざ）がバッファまたは変数を変更する可能性があると仮定する必要がある．

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

うはひぴひちの言語の新しいバージョンで使用可能なざくがぁごぉがぅ属性はバッファまたは変数に必要な特性を与えるが，バッファまたは変数を含むコードの最適化を阻止する可能性もある．
ぃ言語では，引数リストにない変数を変更するサブルーチンはレジスタの最適化の問
題を起こさない．これは，〦演算子を使用してポインタによりオブジェクトを格納しておいて，後からポインタによってオブジェクトを参照するのがこの言語の重要な部分だからである．一般的に，ぃ言語のコンパイラは問題が発生しないように，暗黙の意味にも対応する．しかし，コンパイラの中には，安全でない可能性のある強力なオプションの最適化レベルを備えているものもある．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

16.2.3 Fortran言語の基本サポート
うはひぴひちの 〹〰言語は（事実上）うはひぴひちの 〷〷言語の上位集合であるため，うはひぴひちの 〹〰言語（およびそれ以降）のプログラムでは元々のうはひぴひちの言語のインターフェイスを使用することができる．以下の要件が追加されている．
〱〮 実装では，最初のきぐぉ〭〱の仕様に記載されたように，ファイルねばどて〮とを用意する必
要がある．

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

〲〮 ねばどて〮とは固定ソース形式と自由ソース形式の両方で有効で同等でなければならな
い．

〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〵〱〰
〱
〲
〳
〴
〵
〶
〷
〸

実装者へのアドバイス ねばどて〮とを固定ソース形式及び自由ソース形式で両立できるように，継続行なしで ねばどて〮と を構成し，プリプロセッサの自動インクルードを有効にし，固定形式の行の長さの拡張を有効にして作ることを推奨する．これが可能なのは，ねばどて〮とに記述されているのが宣言のみだからであり，共通ブロックの宣言
を複数の行に分割することができるからである．うはひぴひちの 〷〷言語とうはひぴひちの 〹〰言語をサポートするには，ねばどて〮とからコメントを全て除去する必要がある． （実装者へのアドバイス終わり）

〹
〱〰
〱〱
〱〲

16.2.4 Fortran言語の拡張サポート
うはひぴひちの言語の拡張サポートによる実装では，以下を用意する必要がある．

〱〳〱〴〱〮 ねばどモジュール

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

〲〮 うはひぴひちの言語の基本数値型を追加でサポートするための新しい関数の集合．ここに含まれるパラメータ型には，きぐぉたこぉずぅくう，きぐぉたごすぐぅたきぁごぃえたこぉずぅ，
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげ，きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが，
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじなどがある．パラメータ型はうはひぴひちの言語の基本型で，かぉぎい型のパラメータを使用して指定される．これらのルーチンについて
は，第〱〶〮〲〮〵節で詳しく説明する．

〲〳
〲〴
〲〵

また，質の高い処理系では，選択型の引数を持つきぐぉルーチンで致命的な型の不一致エ
ラーが発生しないようにするためのメカニズムを用意する必要がある．

〲〶
〲〷
〲〸
〲〹
〳〰

ねばどモジュール
きぐぉ実装では，うはひぴひちの 〹〰言語のプログラムでふびづできるねばどという名前のモジュールを用意する必要がある．このモジュールでは以下を行う必要がある．

〳〱
〳〲
〳〳
〳〴

• 全ての名前付ききぐぉ定数の定義• 値を返すきぐぉ関数の宣言

〳〵
〳〶
〳〷

きぐぉ実 装 で は，標 準 へ の 準 拠 を 維 持 し な が らきぐぉの 有 用 性 を 向 上 さ せ る 他 の 機 能をねばどモジュールに組み込むこともできる．例えば，以下のことができる．

〳〸〳〹• きぐぉルーチンの全てまたはサブセットのためのインターフェイスの提供〴〰
〴〱• これらのインターフェイスブロック内のぉぎごぅぎご情報の提供

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス 適切なぉぎごぅぎごはきぐぉ汎用インターフェイスで渡されるものとは異なることがある．実装では，関数がきぐぉ標準に準拠するようにぉぎごぅぎごを選択する必要がある． （実装者へのアドバイス終わり）〱〶〮〲〮 うくげごげぁぎ言語のサポート〵〱〱

根拠 きぐぉ汎用インターフェイスで渡されるぉぎごぅぎごは正確に定義されておらず，
うはひぴひちの言語の正しいぉぎごぅぎごには対応していない場合がある．例えば，絶対アドレスを使用してデータ型により指定されたバッファに受信するには，
きぐぉたあくごごくきのくさご仮引数への関連付けが必要となることがある．また，
きぐぉたあくごごくき やきぐぉたこごぁごさこたぉぇぎくげぅなどの「定数」はうはひぴひちの言語で定義された定数ではないが，標準ではない方法ではあるが「特別なアドレス」を使用する．
最後に，きぐぉ〭〱の汎用 ぉぎごぅぎごはいくつかの点がきぐぉ〭〲で変更されている．例えば，
きぐぉたぉぎたぐがぁぃぅではくさごをぉぎくさご に変更している． （根拠の終わり）
アプリケーションではねばどモジュールまたはヘッダーねばどて〮と を使用することができる．
実装では型不一致エラーを防止するためのモジュールを使用する必要のある場合がある（以下を参照）
．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

ユーザへのアドバイス 特定のシステムで型不一致エラーを避けるために必要でない場合でも，ねばどモジュールを使用することを推奨する．モジュールの使用は，いくつかの点でヘッダーの使用よりもメリットが大きい． （ユーザへのアドバイス
終わり）

〱〶
〱〷
〱〸
〱〹
〲〰

さこぅ ねばどを使ったあるルーチンとぉぎぃがさいぅ ねばどて〮とを使った他のルーチンを一緒にリンクできなければならない．

〲〱
〲〲
〲〳
〲〴

型一致の問題のない選択型引数を持つサブルーチン
質の高いきぐぉ実装では，きぐぉ選択型引数が型不一致によるコンパイル時またはランタ
イムの致命的エラーが発生しないことを保証するメカニズムを用意する必要がある．
きぐぉ実装では，型一致の問題を防止するため，アプリケーションでねばどモジュールを使用するか，特定のコンパイラフラグを使用してコンパイルすることが必要となる場合があ
る．

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

実装者へのアドバイス コンパイラでエラーが発生しない場合，既存のインターフ
ェイスに対して何もする必要はない．コンパイラでエラーが発生する可能性がある場合，一連のオーバーロード関数を使用することができる．き〮 えづののづっにづの論
文せ〲〶そを参照すること．コンパイルでエラーが発生しない場合でも，引数リストのエラーを検出するために，全てのルーチンのための明確なインターフェイスは有益である．また，ぉぎごぅぎご 情報を渡す明確なインターフェイスはあさう〨〪〩引数のコピーの量を削減することができる． （実装者へのアドバイス終わり）

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲

16.2.5 Fortran言語の基本数値型の追加サポート〴〳〴〴

この節のルーチンは第〱〶〮〲〮〴節で説明したうはひぴひちの言語の拡張サポートの一部である．
きぐぉでは，ぃ言語およびうはひぴひちの言語でサポートされている名前付きの基本型に対応する名前付きデータ型をいくつか用意している．ここには， きぐぉたぉぎごぅぇぅげ， きぐぉたげぅぁが，

〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式〵〱〲〱

きぐぉたぉぎご， きぐぉたいくさあがぅなどのほか， きぐぉたげぅぁが〴， きぐぉたげぅぁが〸などのオプションの型が含〲まれる．言語の宣言ときぐぉ の型の間には〱対〱の対応がある．
うはひぴひちの言語（うはひぴひちの 〹〰言語以降）では，いわゆるかぉぎいパラメータ型が用意されている．これらの型は，〱つ以上の変異形から選択できるオプションの整数型かぉぎいパラメータを持つ基本型（ぉぎごぅぇぅげ，げぅぁが，ぃくきぐがぅじ，がくぇぉぃぁが，ぃえぁげぁぃごぅげのいずれか）を使用して宣言される．異なるかぉぎい値自体のの特定の意味は実装内容によって決まり，言語によって指定されるものではない．うはひぴひちの言語ではげぅぁがおよびぃくきぐがぅじ型のためのかぉぎい選択
関数びづぬづっぴづつたひづちぬたにどのつとぉぎごぅぇぅげ 型のためのびづぬづっぴづつたどのぴたにどのつが用意されており，ユーザは最小限の精度または桁数により変数を宣言することができる．これらの関数
により，うはひぴひちの言語でのかぉぎいパラメータのげぅぁが，ぃくきぐがぅじ，およびぉぎごぅぇぅげ型変数の宣言の可搬性を与える．この方式にはうはひぴひちの 〷〷言語に対する下位互換がある．うはひぴひちの言
語のげぅぁがおよびぉぎごぅぇぅげ型変数には，何も指定されない場合のデフォルトかぉぎいがある．
うはひぴひちの言語のいくさあがぅぐげぅぃぉこぉくぎ型変数はデフォルトかぉぎいのない基本げぅぁが型である．
以下の〲つの宣言は同等である．

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

つはふぢぬづ ばひづっどびどはの へ
ひづちぬ〨かぉぎい〨〰〮〰つ〰〩〩 へ

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

きぐぉでは数値基本型を使用して通信するための〲つの直交する方法が用意されている．
最初の方法が利用できるのは変数が可搬に宣言されている場合で，デフォルトをかぉぎいを
使用するか，びづぬづっぴづつたどのぴたにどのつまたはびづぬづっぴづつたひづちぬたにどのつ関数で取得したかぉぎいパラメータを使用する．この方法では，きぐぉは自動的に正しいデータサイズ（〴または〸バイトなど）を選択し，異機種環境での表現の変換を行う．〲つ目の方法を使用すると，マシンの表現を公にすることにより，通信を完全に制御することができる．

〲〸
〲〹
〳〰
〳〱
〳〲

指定の精度と指数範囲を持つパラメータデータ型

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉでは，標準のうはひぴひちの 〷〷言語の数値型のきぐぉたぉぎごぅぇぅげ， きぐぉたぃくきぐがぅじ，きぐぉたげぅぁが，
きぐぉたいくさあがぅたぐげぅぃぉこぉくぎ，きぐぉたいくさあがぅたぃくきぐがぅじに対応する名前付きデータ型を用意している．きぐぉは正しいデータサイズを自動的に選択し，異機種環境での表現の変換を行う．この節で説明するメカニズムにより，可搬なパラメータ化数値型をサポートするよ
うこのモデルが拡張される．
可搬なパラメータ型をサポートするためのモデルは次のとおりである． 実数変数
はかぉぎいパラメータを規定するためにびづぬづっぴづつたひづちぬたにどのつ〨ば〬 ひ〩を使用して（おそらく間接的に）宣言される．ここで，ばは精度の〱〰進数で，ひは指数範囲である．きぐぉ は暗黙的に定義済みのきぐぉデータ型い〨ば〬 ひ〩の〲次元配列を管理する．い〨ば〬ひ〩はコンパイラによってサポートされる〨ば〬 ひ〩の各値に対して定義され，ここには〱つの値が指定されていないペアも含まれる．コンパイラによってサポートされていない添字〨ば〬 ひ〩を使用して配列の要素にアクセスしようとするのは誤りである．きぐぉは暗黙的にぃくきぐがぅじデータ型の同様の配列を管理する．整数型に関しては，びづぬづっぴづつたどのぴたにどのつに関連し，要求された

〱〶〮〲〮 うくげごげぁぎ言語のサポート〵〱〳

桁数ひによってインデックス指定された同様の暗黙的な配列がある．これらの暗黙的な配列に含まれる定義済みのデータ型は名前付きのきぐぉデータ型きぐぉたげぅぁがなどと同じではな
く，新しいセットであることに注意すること．

〱

実装者へのアドバイス 上記は単に説明上のものであり，このような内部配列の実装は期待されない． （実装者へのアドバイス終わり）〵

ユーザへのアドバイス びづぬづっぴづつたひづちぬたにどのつ〨〩は多数の〨ば〬ひ〩のペアを，コンパイ
ラによってサポートされる少数のかぉぎいパラメータにマッピングする．かぉぎいパラメ
ータは言語によって指定されず，可搬ではない．言語から見ると，同じ基本型の固有型とかぉぎいパラメータは同じ型である．異機種環境での相互運用性を保証する
ため，きぐぉはより厳格になっている．対応するきぐぉデータ型が一致するには，同じ〨ば〬ひ〩値（げぅぁがおよびぃくきぐがぅじ）またはひ値（ぉぎごぅぇぅげ）を持っていなければならない．そのため，きぐぉは基本的な言語の型よりも多くのデータ型を備えている．
（ユーザへのアドバイス終わり）

〲
〳
〴

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが〨ば〬 ひ〬 のづぷぴべばづ〩

〱〹
〲〰

ぉぎ
ぉぎ
くさご

ば
ひ
のづぷぴべばづ〱〰進数での精度（整数型）〲〱〱〰進数の指数範囲（整数型）〲〲

要求されるきぐぉデータ型（ハンドル）〲〳〲〴

どのぴ きぐぉたごべばづたっひづちぴづたて〹〰たひづちぬ〨どのぴ ば〬 どのぴ ひ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが〨ぐ〬 げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぐ〬 げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたて〹〰たひづちぬ〨どのぴ ば〬 どのぴ ひ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〵
〲〶
〲〷
〲〸
〲〹

この関数はかぉぎい びづぬづっぴづつたひづちぬたにどのつ〨ば〬 ひ〩のげぅぁが変数に一致する定義済みのきぐぉデ〳〰
ータ型を返す．上記のモデルでは，要素い〨ば〬 ひ〩のハンドルを返す．びづぬづっぴづつたひづちぬたにどのつ〨ば〬 〳〱〳〲ひ〩の 呼 び 出 し で はばま た はひを 省 略 す る こ と が で き る（両 方 を 省 略 す る こ と は で きな い）． 同 様 に， ばま た はひの 設 定 をきぐぉたさぎいぅうぉぎぅいに す る こ と が で き る． 通 信 で は， 〳〳〳〴きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁがによって返されたきぐぉデータ型ぁがデータ型あに一致する〳〵のは，ばおよびひに同じ値を使用して呼び出されたきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁがによっ〳〶てあが返された場合，またはあがこのようなデータ型の複製である場合のみである．返さ〳〷〳〸れたデータ型をぜづへぴづひのちぬ〳〲〢データ表現により使用する上での制限は〵〱〵ページに記載さ
〳〹
れている．
〴〰
コンパイラによってサポートされていないばおよびひの値を指定するのは誤りである．
〴〱〴〲

きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじ〨ば〬 ひ〬 のづぷぴべばづ〩
ぉぎ
ぉぎ
くさご

ば
ひ
のづぷぴべばづ〱〰進数での精度（整数型）〱〰進数の指数範囲（整数型）
要求されるきぐぉデータ型（ハンドル）

どのぴ きぐぉたごべばづたっひづちぴづたて〹〰たっはねばぬづへ〨どのぴ ば〬 どのぴ ひ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〵〱〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじ〨ぐ〬 げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぐ〬 げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたて〹〰たっはねばぬづへ〨どのぴ ば〬 どのぴ ひ〩 （廃止された呼び出し形式, 第15.2節を参照）}
こ の 関 数 はかぉぎい びづぬづっぴづつたひづちぬたにどのつ〨ば〬 ひ〩のぃくきぐがぅじ 変 数 に 一 致 す る 定 義 済 みのきぐぉデ ー タ 型 を 返 す． びづぬづっぴづつたひづちぬたにどのつ〨ば〬 ひ〩の 呼 び 出 し で はばま た はひを 省 略
す る こ と が で き る （両 方 を 省 略 す る こ と は で き な い）
． 同 様 に， ばま た は ひの 設 定をきぐぉたさぎいぅうぉぎぅいにすることができる． この関数によって生成されたデータ型の一致規則は，きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁがによって生成されたデータ型の一致規則と同様である． 返されたデータ型をぜづへぴづひのちぬ〳〲〢データ表現により使用する上での制限
は〵〱〵ページに記載されている．
コンパイラによってサポートされていないばおよびひの値を指定するのは誤りである．

〱〵
〱〶
〱〷

きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげ〨ひ〬 のづぷぴべばづ〩
ぉぎ

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

くさご

ひ
のづぷぴべばづ〱〰進数の指数範囲，つまり〱〰進数の値（整数型）
要求されるきぐぉデータ型（ハンドル）

どのぴ きぐぉたごべばづたっひづちぴづたて〹〰たどのぴづでづひ〨どのぴ ひ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげ〨げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺ぃひづちぴづたて〹〰たどのぴづでづひ〨どのぴ ひ〩 （廃止された呼び出し形式, 第15.2節を参照）}
この関数はかぉぎい びづぬづっぴづつたどのぴたにどのつ〨ひ〩のぉぎごぅぇぅげ変数に一致する定義済みのきぐぉデータ型を返す． この関数によって生成されたデータ型の一致規則は，きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁがによって生成されたデータ型の一致規則と同様である．
返されたデータ型をぜづへぴづひのちぬ〳〲〢データ表現により使用する上での制限は〵〱〵ページに記載されている．
コンパイラによってサポートされていないひの値を指定するのは誤りである．
以下に例を示す．
どのぴづでづひ
ぬはのでぴべばづ〬 ぱふちつぴべばづ
どのぴづでづひ〬 ばちひちねづぴづひ 〺〺 ぬはので 〽 びづぬづっぴづつたどのぴたにどのつ〨〱〵〩どのぴづでづひ〨ぬはので〩 どど〨〱〰〩ひづちぬ〨びづぬづっぴづつたひづちぬたにどのつ〨〳〰〩〩 へ〨〱〰〩っちぬぬ きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげ〨〱〵〬 ぬはのでぴべばづ〬 どづひひはひ〩
っちぬぬ きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが〨〳〰〬 きぐぉたさぎいぅうぉぎぅい〬 ぱふちつぴべばづ〬 どづひひはひ〩〮〮〮
っちぬぬ きぐぉたこぅぎい〨どど〬 〱〰〬 ぬはのでぴべばづ〬 〮〮〮〩
っちぬぬ きぐぉたこぅぎい〨へ〬 〱〰〬 ぱふちつぴべばづ〬 〮〮〮〩

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス 上記の関数で返されるデータ型は定義済みのデータ型である．これらは解放することができず，コミットする必要がなく，定義済みのリデュース操作で使用することができる，きぐぉの名前付きの定義済みデータ型と構文的には異なる動作をするが，意味的には同じである状況が〲つある．

〱〶〮〲〮 うくげごげぁぎ言語のサポート〵〱〵〱〮 きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅは，プログラムがばおよびひの値を取得することができる特別な結合子を返す．

〱〲〳〲〮 データ型は名前付きでないため，コンパイル時のイニシャライザとして使用できない．あるいはきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たルーチンのいずれかの呼び出しの前にアクセスできない．

〴
〵
〶
〷

びづぬづっぴづつたひづちぬたにどのつ〨〩またはびづぬづっぴづつたどのぴたにどのつ〨〩を使用して取得されていない
非デフォルトのかぉぎい値を指定する変数が宣言されている場合，一致するきぐぉデータ型を取得するには，次の節で説明するサイズベースのメカニズムを使用する必要がある． （ユーザへのアドバイス終わり）

〸
〹
〱〰
〱〱
〱〲
〱〳

実装者へのアドバイス アプリケーションは同じ 〨へへへへ〬ば〬ひ〩の組み合わせできぐぉたごすぐぅたぃげぅぁごぅたう〹〰たへへへへの呼び出しを繰り返すことがよくある．アプリケー
ションでは，返された定義済みの名前無しデータ型ハンドルを解放することはできない．非常に多数のハンドルが生成されるのを防止するため，質の高いきぐぉ実装
では同じ 〨げぅぁが〯ぃくきぐがぅじ〯ぉぎごぅぇぅげ〬ば〬ひ〩 の組み合わせに対して同じデータ型ハ
ンドルを返す必要がある．その前のきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たへへへへの呼び出しでの〨ば〬ひ〩の組み合わせをチェックし，ハッシュテーブルにより前に生成されたハンドルを検出すると， 〨へへへへ〬ば〬ひ〩の同じ組み合わせで以前に生成されたデータ型を検索する際のオーバーヘッドが制限される． （実装者へのアドバイス終わり）

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

根拠 きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが〯ぃくきぐがぅじ〯ぉぎごぅぇぅげインターフェイスでは，入力として，有益でコンパイラ非依存の外部（〴〴〸ページの第〱〳〮〵〮〲節）またはユーザ定義（〴〴〹ページの第〱〳〮〵〮〳節）データ表現を定義するための，また異機種環境で効率的な自動のデータ変換が行えるようにするためのオリジナルの範囲と精度値が必要となる． （根拠の終わり）

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

ここで，〴〴〸ページの第〱〳〮〵〮〲節で説明した ぜづへぴづひのちぬ〳〲〢外部データ表現と一緒に使用した場合の，この節で説明するデータ型の動作を規定する．
づへぴづひのちぬ〳〲表現は整数型および浮動小数点数の値のデータ形式を指定する．整数値はビッグエンディアンの〲の補数形式で表現される．浮動小数点数の値は〳つのうちのいず
れかのぉぅぅぅ形式で表現される．これらはそれぞれ，〴，〸，〱〶バイトのストレージを必要とするぉぅぅぅ ぜこどのでぬづ〢（単精度），ぜいはふぢぬづ〢（倍精度），ぜいはふぢぬづ ぅへぴづのつづつ〢（拡張倍精度）形式である．ぉぅぅぅ ぜいはふぢぬづぅへぴづのつづつ〢形式の場合，きぐぉは〱〶バイトのフォーマット幅を指定し，指数部は〱〵ビット，ぢどちび 〽 〫〱〰〳〸〳，仮数ビットは〱〱〲，ぜいはふぢぬづ〢形式と同様のエンコードとなる．
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが〯ぃくきぐがぅじ〯ぉぎごぅぇぅげによって返されるデータ型のづへぴづひのちぬ〳〲表現は以下の規則によって与えられる．
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁがの場合は以下のようになる．
どて〨ば 〾 〳〳〩 はひ 〨ひ 〾 〴〹〳〱〩 ぴとづのづへぴづひのちぬ〳〲 ひづばひづびづのぴちぴどはの
どび ふのつづてどのづつ

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〵〱〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

づぬびづ どて 〨ば 〾 〱〵〩 はひ 〨ひ 〾づぬびづ どて 〨ば 〾 〶〩 はひ 〨ひ 〾づぬびづ〳〰〷〩 ぴとづの〳〷〩 ぴとづのづへぴづひのちぬ〳〲たびどぺづ 〽 〱〶づへぴづひのちぬ〳〲たびどぺづ 〽 〸
づへぴづひのちぬ〳〲たびどぺづ 〽 〴きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじの場合， きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁがの〲倍のサイズとなる．
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげの場合は以下のようになる．
どて〨ひ 〾 〳〸〩 ぴとづの
づぬびづ どて 〨ひ 〾 〱〸〩 ぴとづの
づぬびづ どて 〨ひ 〾 〹〩 ぴとづの
づぬびづ どて 〨ひ 〾 〴〩 ぴとづの
づぬびづ どて 〨ひ 〾 〲〩 ぴとづのづぬびづ

づへぴづひのちぬ〳〲 ひづばひづびづのぴちぴどはの どび ふのつづてどのづつづへぴづひのちぬ〳〲たびどぺづ 〽 〱〶づへぴづひのちぬ〳〲たびどぺづ 〽 〸
づへぴづひのちぬ〳〲たびどぺづ 〽 〴づへぴづひのちぬ〳〲たびどぺづ 〽 〲づへぴづひのちぬ〳〲たびどぺづ 〽 〱

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

データ型のづへぴづひのちぬ〳〲表現が定義されていない場合，づへぴづひのちぬ〳〲表現が必要な操作で直接的または間接的に（つまり，別のデータ型の一部として，または複製されたデータ型を通して）データ型を使用した結果は未定義となる．ぜづへぴづひのちぬ〳〲〢データ表現を使用する場合，これらの操作にはきぐぉたぐぁぃかたぅじごぅげぎぁが，きぐぉたさぎぐぁぃかたぅじごぅげぎぁがと多くのきぐぉたうぉがぅ関数が含まれる．づへぴづひのちぬ〳〲表現が未定義となっている範囲は，将来の標準化のために予約されている．

〲〱〲〲

特定のサイズのきぐぉデータ型のサポート

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

きぐぉには，オプションのうはひぴひちの 〷〷言語の数値型に対応する，明確なバイト長（
きぐぉたげぅぁが〴，きぐぉたぉぎごぅぇぅげ〸など）の名前付きのデータ型が用意されている．この節では，このモデルを汎用化して全てのうはひぴひちの言語の数値基本型をサポートするためのメカニズ
ムについて説明する．
各typeclass（どのぴづでづひ〬 ひづちぬ〬 っはねばぬづへ）および各ワードサイズに対して，一意のマシン
表現があると仮定する．コンパイラでサポートされる全てのペア〨typeclass，n〩について， きぐぉは名前付きのサイズ指定データ型を用意する必要がある．このデータ型の
名前はぃ言語およびうはひぴひちの言語ではきぐぉた<ごすぐぅ>の，ぃ〫〫言語ではきぐぉ〺〺<ごすぐぅ>のとなり，<ごすぐぅ> はげぅぁが，ぉぎごぅぇぅげ，ぃくきぐがぅじのいずれか， nはマシン表現のバイト単位での長さとなる．このデータ型はローカルで全ての〨typeclass〬 n〩型の変数と一致する．このような型の名前には以下のようなものがある．
きぐぉたげぅぁが〴きぐぉたげぅぁが〸きぐぉたげぅぁが〱〶きぐぉたぃくきぐがぅじ〸
きぐぉたぃくきぐがぅじ〱〶きぐぉたぃくきぐがぅじ〳〲きぐぉたぉぎごぅぇぅげ〱きぐぉたぉぎごぅぇぅげ〲きぐぉたぉぎごぅぇぅげ〴きぐぉたぉぎごぅぇぅげ〸きぐぉたぉぎごぅぇぅげ〱〶

〴〶
〴〷
〴〸

コンパイラによってサポートされる各表現に対して〱つのデータ型が必要となる．
きぐぉ〭〱でのこれらの型の解釈との下位互換のため，非標準の宣言げぅぁが〪の，ぉぎごぅぇぅげ〪ので必〱〶〮〲〮 うくげごげぁぎ言語のサポート〵〱〷

ず表現がサイズnである変数が生成されると仮定する．これらのデータ型は全て定義済
みである．
以下の関数を使用すると，うはひぴひちの言語基本型のためのサイズを指定したきぐぉデータ型を取得することができる．

〱
〲
〳
〴
〵
〶
〷

きぐぉたこぉずぅくう〨へ〬 びどぺづ〩
ぉぎ
くさご

へ
びどぺづ

うはひぴひちの言語の整数基本型の変数（選択型）
その型のマシン表現のサイズ（整数型）

〸
〹
〱〰
〱〱

きぐぉたこぉずぅくう〨じ〬 こぉずぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 じぉぎごぅぇぅげ こぉずぅ〬 ぉぅげげくげ

〱〲〱〳こ の 関 数 は， 渡 さ れ た 変 数 の マ シ ン 表 現 の サ イ ズ を バ イ ト 単 位 で 返 す． こ れ は
うはひぴひちの言語の汎用ルーチンで，うはひぴひちの言語の呼び出し形式しかない．
ユーザへのアドバイス この関数はぃ言語およびぃ〫〫言語のsizeof演算子と類似しているが，動作は多少異なる．配列引数を渡された場合，配列全体のサイズではな
く，基本要素のサイズを返す． （ユーザへのアドバイス終わり）

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

根拠 この関数は他の言語では有益でないため，利用できない． （根拠の終わり）

〲〲
〲〳
〲〴

きぐぉたごすぐぅたきぁごぃえたこぉずぅ〨ぴべばづっぬちびび〬 びどぺづ〬 ぴべばづ〩
ぉぎ
ぉぎ
くさご

ぴべばづっぬちびび
びどぺづ
ぴべばづ

〲〵
〲〶

汎用型指定子（整数型）〲〷

表現のサイズ（バイト単位）（整数型）〲〸

正しい型とサイズを持つデータ型（ハンドル）〲〹〳〰

どのぴ きぐぉたごべばづたねちぴっとたびどぺづ〨どのぴ ぴべばづっぬちびび〬 どのぴ びどぺづ〬 きぐぉたいちぴちぴべばづ 〪ぴべばづ〩
きぐぉたごすぐぅたきぁごぃえたこぉずぅ〨ごすぐぅぃがぁここ〬 こぉずぅ〬 ごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅぃがぁここ〬 こぉずぅ〬 ごすぐぅ〬 ぉぅげげくげ
{びぴちぴどっ きぐぉ〺〺いちぴちぴべばづ きぐぉ〺〺いちぴちぴべばづ〺〺きちぴっとたびどぺづ〨どのぴ ぴべばづっぬちびび〬 どのぴ びどぺづ〩（廃止された呼び出し形式, 第15.2節を参照）}
ぴべばづっぬちびびは， きぐぉたごすぐぅぃがぁここたげぅぁが， きぐぉたごすぐぅぃがぁここたぉぎごぅぇぅげ，きぐぉたごすぐぅぃがぁここたぃくきぐがぅじのいずれかとなる． この関数は〨typeclass，size〩型のローカル変数に一致するきぐぉデータ型を返す．
この関数は，いずれかの定義済みの名前付きデータ型の，複製ではなく，参照（ハン ド ル）を 返 す． こ の 型 は 解 放 で き な い． きぐぉたごすぐぅたきぁごぃえたこぉずぅは，最 初 に 変 数の サ イ ズ の 計 算 の た め にきぐぉたこぉずぅくうを 呼 び 出 し，次 に 適 切 な デ ー タ 型 を 探 す た めにきぐぉたごすぐぅたきぁごぃえたこぉずぅを呼び出すことにより，うはひぴひちの言語の数値基本型に一致す
るサイズ指定型を取得するのに使用できる．ぃ言語およびぃ〫〫言語では，きぐぉたこぉずぅくうの
代わりにぃ言語の演算子4 びどぺづはて〨〩を使用することができる．また，デフォルトのかぉぎいの
変数の場合，変数のサイズはぴべばづっぬちびびが分かっていればきぐぉたごすぐぅたぇぅごたぅじごぅぎごを呼〴訳者註：MPI-2.2 の原文は“function”であるが，“operator”の誤り

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〵〱〸
〱
〲
〳
〴
〵
〶
〷

び出すことにより計算することができる．コンパイラでサポートされていないサイズを指定するのは誤りである．
根拠 利便性の高い関数である．この関数がなければ，正しい名前付きの型を探すのが煩雑な作業になる可能性がある．下記の実装者へのアドバイスを参照すること． （根拠の終わり）〸〹

実装者へのアドバイス この関数は一連のテストとして実装することができる．

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

どのぴ きぐぉたごべばづたねちぴっとたびどぺづ〨どのぴ ぴべばづっぬちびび〬 どのぴ びどぺづ〬 きぐぉたいちぴちぴべばづ 〪ひぴべばづ〩
ほびぷどぴっと〨ぴべばづっぬちびび〩 ほっちびづ きぐぉたごすぐぅぃがぁここたげぅぁが〺 びぷどぴっと〨びどぺづ〩 ほ
っちびづ 〴〺 〪ひぴべばづ 〽 きぐぉたげぅぁが〴〻 ひづぴふひの きぐぉたこさぃぃぅここ〻
っちびづ 〸〺 〪ひぴべばづ 〽 きぐぉたげぅぁが〸〻 ひづぴふひの きぐぉたこさぃぃぅここ〻
つづてちふぬぴ〺 づひひはひ〨〮〮〮〩〻
ぽっちびづ きぐぉたごすぐぅぃがぁここたぉぎごぅぇぅげ〺 びぷどぴっと〨びどぺづ〩 ほ
っちびづ 〴〺 〪ひぴべばづ 〽 きぐぉたぉぎごぅぇぅげ〴〻 ひづぴふひの きぐぉたこさぃぃぅここ〻
っちびづ 〸〺 〪ひぴべばづ 〽 きぐぉたぉぎごぅぇぅげ〸〻 ひづぴふひの きぐぉたこさぃぃぅここ〻
つづてちふぬぴ〺 づひひはひ〨〮〮〮〩〻ぽ〮〮〮 づぴっ〮 〮〮〮
ぽ
ぽ

〲〳
〲〴

（実装者へのアドバイス終わり）〲〵〲〶

サイズ指定型との通信

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

通常の型一致規則はサイズ指定データ型にも適用され，データ型きぐぉた<ごすぐぅ>のを使用
して送信された値は別のプロセスの同じデータ型を使用して受信できる．最新型のコンピュータでは，整数に〲の補数を使用し，浮動小数点数にぉぅぅぅ形式を使用している．そのため，これらのサイズ指定データ型を使用した通信では精度の損失や丸め誤差は発生
しない．

〳〴
〳〵
〳〶

ユーザへのアドバイス 異機種環境での通信には注意が必要である．以下のコードを検討してみる．

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ひづちぬ〨びづぬづっぴづつたひづちぬたにどのつ〨〵〩〩 へ〨〱〰〰〩
っちぬぬ きぐぉたこぉずぅくう〨へ〬 びどぺづ〬 どづひひはひ〩
っちぬぬ きぐぉたごすぐぅたきぁごぃえたこぉずぅ〨きぐぉたごすぐぅぃがぁここたげぅぁが〬 びどぺづ〬 へぴべばづ〬 どづひひはひ〩どて 〨ねべひちのに 〮づぱ〮 〰〩 ぴとづの〮〮〮 どのどぴどちぬどぺづ へ 〮〮〮っちぬぬ きぐぉたこぅぎい〨へ〬 へぴべばづ〬 〱〰〰〬 〱〬 〮〮〮〩
づぬびづ どて 〨ねべひちのに 〮づぱ〮 〱〩 ぴとづの
っちぬぬ きぐぉたげぅぃざ〨へ〬 へぴべばづ〬 〱〰〰〬 〰〬 〮〮〮〩
づのつどてプロセス〱とプロセス〰でびどぺづの値が異なる場合，これは異機種環境で正しく動作 し な い こ と が あ る． 同 一 機 種 環 境 で は 問 題 な い． 異 機 種 環 境 で の 通 信 に は〱〶〮〳〮 言語の相互運用性〵〱〹

少なくとも〴つのオプションがある． 最初の方法は，デフォルト型の変数を宣言し，これらの型のきぐぉデータ型を使用する方法である． 例えば，げぅぁが型の変
数 を 宣 言 し， きぐぉたげぅぁがを 使 用 す る． 〲番 目 の 方 法 は， びづぬづっぴづつたひづちぬたにどのつま た
はびづぬづっぴづつたどのぴたにどのつを前の節の関数と一緒に使用する方法である．〳番目の方法
は，全てのアーキテクチャで同じサイズであると分かっている変数を宣言する方法である（例えば，ほとんど全てのコンパイラでびづぬづっぴづつたひづちぬたにどのつ〨〱〲〩を使用す
ると〸バイトの表現となる）．〴番目の方法は，通信の前に表現のサイズを慎重にチェックする方法である．このために，通信が可能なサイズの変数への明示的な変換と送信側と受信側でサイズを合意するためのハンドシェイクが必要になる．
入出力のためにぜづへぴづひのちぬ〳〲〢表現を使用する場合，表現のサイズを明確に意識する必要があることに注意．以下のコードを検討してみる．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

ひづちぬ〨びづぬづっぴづつたひづちぬたにどのつ〨〵〩〩 へ〨〱〰〰〩
っちぬぬ きぐぉたこぉずぅくう〨へ〬 びどぺづ〬 どづひひはひ〩
っちぬぬ きぐぉたごすぐぅたきぁごぃえたこぉずぅ〨きぐぉたごすぐぅぃがぁここたげぅぁが〬 びどぺづ〬 へぴべばづ〬 どづひひはひ〩

〱〶
〱〷
〱〸

どて 〨ねべひちのに 〮づぱ〮 〰〩 ぴとづの
っちぬぬ きぐぉたうぉがぅたくぐぅぎ〨きぐぉたぃくききたこぅがう〬 〧てはは〧〬〦
きぐぉたきくいぅたぃげぅぁごぅ〫きぐぉたきくいぅたしげくぎがす〬〦
きぐぉたぉぎうくたぎさがが〬 てと〬 どづひひはひ〩
っちぬぬ きぐぉたうぉがぅたこぅごたざぉぅし〨てと〬 〰〬 へぴべばづ〬 へぴべばづ〬 〧づへぴづひのちぬ〳〲〧〬きぐぉたぉぎうくたぎさがが〬 どづひひはひ〩
っちぬぬ きぐぉたうぉがぅたしげぉごぅ〨てと〬 へ〬 〱〰〰〬 へぴべばづ〬 びぴちぴふび〬 どづひひはひ〩
っちぬぬ きぐぉたうぉがぅたぃがくこぅ〨てと〬 どづひひはひ〩
づのつどて

〱〹
〲〰
〲〱

〦

〲〲
〲〳
〲〴
〲〵
〲〶

っちぬぬ きぐぉたあぁげげぉぅげ〨きぐぉたぃくききたしくげがい〬 どづひひはひ〩どて 〨ねべひちのに 〮づぱ〮 〱〩 ぴとづの
っちぬぬ きぐぉたうぉがぅたくぐぅぎ〨きぐぉたぃくききたこぅがう〬 〧てはは〧〬 きぐぉたきくいぅたげいくぎがす〬
きぐぉたぉぎうくたぎさがが〬 てと〬 どづひひはひ〩
っちぬぬ きぐぉたうぉがぅたこぅごたざぉぅし〨てと〬 〰〬 へぴべばづ〬 へぴべばづ〬 〧づへぴづひのちぬ〳〲〧〬きぐぉたぉぎうくたぎさがが〬 どづひひはひ〩
っちぬぬ きぐぉたうぉがぅたしげぉごぅ〨てと〬 へ〬 〱〰〰〬 へぴべばづ〬 びぴちぴふび〬 どづひひはひ〩
っちぬぬ きぐぉたうぉがぅたぃがくこぅ〨てと〬 どづひひはひ〩
づのつどて

〲〷
〲〸

〦

〲〹
〳〰

〦

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

プロセス〰とプロセス〱が別のマシン上にあり，〲台のマシンでびどぺづが異なる場合，このコードは期待通りに動作しないことがある． （ユーザへのアドバイス終わり）

〳〷
〳〸
〳〹

16.3 言語の相互運用性
16.3.1 はじめにライブラリ開発者はある言語でアプリケーションライブラリを開発するが，そのライ
ブラリが別の言語で記述されたアプリケーションプログラムによって呼び出されることが少なくない．きぐぉでは現在，ぉこく（以前はぁぎこぉ）ぃ言語，ぃ〫〫言語，うはひぴひちの言語の呼び出し形式をサポートしている．きぐぉがサポートしている言語で書かれたアプリケーシ

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〲〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

第 〱〶〮 言語別の呼び出し形式

ョンが別の言語で書かれた きぐぉ に関連する関数を呼び出すことが可能でなければならな
い．
さらに，きぐぉを使用してクライアント／サーバコードを開発することができる．このとき，並列クライアントと並列サーバの間できぐぉ によって通信することができる．サー
バとクライアントをそれぞれ異なる言語でコーディングすることができなければならな
い．そのためには，異なる言語で記述されたアプリケーション間での通信が行えなければならない．
相互運用性を達成するには，いくつかの問題に対処する必要がある．
初期化 全ての言語に対してきぐぉ環境を初期化する方法を指定する必要がある．
言語間でのMPI不可視オブジェクトの受け渡し 言語間できぐぉオブジェクトハンドルを受け渡す方法を指定する必要がある．また，別の言語で設定された情報（属性など）を取得するために，ある言語できぐぉオブジェクトにアクセスした場合の動作を指定する必要がある．
言語間通信 ある言語で送信されたメッセージを別の言語で受信する方法を指定する必要
がある．

〲〱
〲〲
〲〳

きぐぉの呼び出し形式が新しい言語に対して定義される場合，言語間の相互運用性のソリューションがこれらの言語にも拡張されることが望ましい．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

16.3.2 前提
ある言語で記述されたプログラムが別の言語で記述されたルーチンを呼び出すための規則があることを前提とする． これらの規則では，異なる言語の複数のルー
チンを〱つのプログラムにリンクする方法，異なる言語で関数を呼び出す方法，言語間で引数を渡す方法，異なる言語の基本データ型の間での対応が規定される． 一
般的に，これらの規則は実装内容に応じて決まる． また，全ての基本データ型が別の言語で一致する型を持っているとは限らない． 例えば． ぃ言語／ぃ〫〫言語の文字
列はうはひぴひちの言語のぃえぁげぁぃごぅげの変数と互換性がない場合もある．しかし，うはひぴひちの言語のぉぎごぅぇぅげと（シーケンスが関連付けられた）うはひぴひちの言語のぉぎごぅぇぅげ配列はぃ言語またはぃ〫〫言語のプログラムに渡すことができる．また，うはひぴひちの言語，ぃ言語，ぃ〫〫言語
でアドレスサイズの整数があることを前提とする．このことは，デフォルトサイズの整数がデフォルトサイズのポインタと同じサイズであることを意味するのではなく，
ぃ言語のアドレスをうはひぴひちの言語の整数型に保持（して渡す）する方法がある． また，ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩をうはひぴひちの言語からぃ言語にきぐぉたく》びづぴとして渡せることも前提とする．

〴〴〴〵

16.3.3 初期化

〴〶
〴〷
〴〸

い ず れ か の 言 語 できぐぉたぉぎぉごま た はきぐぉたぉぎぉごたごえげぅぁいを 呼 び 出 す と， 全 て の 言 語できぐぉが実行できるよう初期化される．

〱〶〮〳〮 言語の相互運用性〵〲〱

ユ ー ザ へ の ア ド バ イ ス 実 装 で は きぐぉたぉぎぉごのぃ言 語 ／ぃ〫〫言 語 バ ー ジ ョ ン の（どのはふぴ） ちひでっ，ちひでぶ引数を使用してちひでっおよびちひでぶの値を全ての実行プロセスに伝播することがある．きぐぉたぉぎぉごのうはひぴひちの言語バージョンを使用してきぐぉを初期
化するとこの機能が失われることがある． （ユーザへのアドバイス終わり）

〱
〲
〳
〴
〵
〶

関数きぐぉたぉぎぉごぉぁがぉずぅいは全ての言語で同じ答えを返す．
関数きぐぉたうぉぎぁがぉずぅは全ての言語のきぐぉ環境を完了させる．
関数きぐぉたうぉぎぁがぉずぅいは全ての言語で同じ答えを返す．
関数きぐぉたぁあくげごは，呼び出し元によって，または終了させるプロセスによって使用されている言語に関係なく，プロセスを終了させる．
きぐぉ環境はきぐぉたぉぎぉごにより，全ての言語に対して同様に初期化される．例えば，
きぐぉたぃくききたしくげがいは言語に関係なく同じ情報，例えば同じプロセス，同じ環境属性，同じエラーハンドラを持つ．
ある言語でどのてはオブジェクトに追加した情報を，別の言語で取得することができる．

〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

ユーザへのアドバイス 〱つのきぐぉプログラムで複数の言語を使用するには，コンパ
イル時やリンク時に特別なオプションを使用することが必要になる場合がある．
（ユーザへのアドバイス終わり）

〱〸
〱〹
〲〰
〲〱
〲〲

実装者へのアドバイス 実装では，〱つの言語のみを使用するコードでバイナリのサイズが大きくならないように，言語固有のきぐぉライブラリを必要とするコードにのみこれを選択的にリンクすることができる．きぐぉ初期化コードは，ある言語のライ
ブラリがロードされる場合のみ，その言語の初期化を行う必要がある． （実装者へのアドバイス終わり）

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

16.3.4 ハンドルの転送〳〰
〳〱

ハンドルの受け渡しは，うはひぴひちの言語のハンドルからぃ言語のハンドルに変換するための明示的なぃ言語のラッパーを使用することにより，うはひぴひちの言語とぃ言語またはぃ〫〫言
語の間で行うできる．うはひぴひちの言語でぃ言語またはぃ〫〫言語のハンドルに直接アクセスすることはできない．ぃ言語とぃ〫〫言語の間のハンドルの受け渡しは，ぃ〫〫言語のコードから呼び出されるオーバーロードされたぃ〫〫言語の演算子を使用して行う．ぃ言語か
らぃ〫〫言語のオブジェクトに直接アクセスすることはできない．
うはひぴひちの言 語 のぉぎごぅぇぅげと 一 致 す る サ イ ズ の 整 数 用 に， ぃ言 語 ／ぃ〫〫言 語 で は 型 定
義きぐぉたうどのぴが用意されている．通常，きぐぉたうどのぴ はどのぴと同等である．
ぃ言語では，うはひぴひちの言語のコミュニケータハンドル（整数型）からぃ言語のコミュニ
ケータハンドルへの変換，また逆の変換のため，以下の関数が用意されている．〲〵ページの第〲〮〶〮〵節も参照すること．
きぐぉたぃはねね きぐぉたぃはねねたて〲っ〨きぐぉたうどのぴ っはねね〩

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

っはねねがコミュニケータへの有効なうはひぴひちの言語のハンドルの場合，きぐぉたぃはねねたて〲っは同じコミュニケータへの有効なぃ言語のハンドルを返す． っはねね〽 きぐぉたぃくききたぎさがが〴〷〴〸第 〱〶〮 言語別の呼び出し形式

〵〲〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

（うはひぴひちの言語の値）であれば，きぐぉたぃはねねたて〲っはのふぬぬのぃ言語ハンドルを返し，っはねねが無効なうはひぴひちの言語のハンドルであれば，きぐぉたぃはねねたて〲っは無効なぃ言語のハンドルを返す．
きぐぉたうどのぴ きぐぉたぃはねねたっ〲て〨きぐぉたぃはねね っはねね〩
関数きぐぉたぃはねねたっ〲て は，ぃ言語のコミュニケータハンドルを同じコミュニケータへ
のうはひぴひちの言語のハンドルに変換する．のふぬぬハンドルはのふぬぬハンドルにマッピングされ，無効なハンドルは無効なハンドルにマッピングされる．
他の型の不可視オブジェクト用にも同様の関数が用意されている．
きぐぉたいちぴちぴべばづ きぐぉたごべばづたて〲っ〨きぐぉたうどのぴ つちぴちぴべばづ〩
きぐぉたうどのぴ きぐぉたごべばづたっ〲て〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
きぐぉたぇひはふば きぐぉたぇひはふばたて〲っ〨きぐぉたうどのぴ でひはふば〩
きぐぉたうどのぴ きぐぉたぇひはふばたっ〲て〨きぐぉたぇひはふば でひはふば〩
きぐぉたげづぱふづびぴ きぐぉたげづぱふづびぴたて〲っ〨きぐぉたうどのぴ ひづぱふづびぴ〩
きぐぉたうどのぴ きぐぉたげづぱふづびぴたっ〲て〨きぐぉたげづぱふづびぴ ひづぱふづびぴ〩
きぐぉたうどぬづ きぐぉたうどぬづたて〲っ〨きぐぉたうどのぴ てどぬづ〩
きぐぉたうどのぴ きぐぉたうどぬづたっ〲て〨きぐぉたうどぬづ てどぬづ〩
きぐぉたしどの きぐぉたしどのたて〲っ〨きぐぉたうどのぴ ぷどの〩
きぐぉたうどのぴ きぐぉたしどのたっ〲て〨きぐぉたしどの ぷどの〩
きぐぉたくば きぐぉたくばたて〲っ〨きぐぉたうどのぴ はば〩
きぐぉたうどのぴ きぐぉたくばたっ〲て〨きぐぉたくば はば〩きぐぉたぉのては きぐぉたぉのてはたて〲っ〨きぐぉたうどのぴ どのては〩きぐぉたうどのぴ きぐぉたぉのてはたっ〲て〨きぐぉたぉのては どのては〩きぐぉたぅひひとちのつぬづひ きぐぉたぅひひとちのつぬづひたて〲っ〨きぐぉたうどのぴ づひひとちのつぬづひ〩
きぐぉたうどのぴ きぐぉたぅひひとちのつぬづひたっ〲て〨きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

例 16.13 下の例で，ハンドルの変換を行うぃ言語のラッパーを使用してぃ言語のきぐぉ関
数きぐぉたごべばづたっはねねどぴをラッピングすることにより，うはひぴひちの言語のきぐぉ関数
きぐぉたごすぐぅたぃくききぉごを実装できる方法を示す．この例では，うはひぴひちの言語とぃ言語のイン
ターフェイスにおいてぃ言語からの参照時にうはひぴひちの言語の関数が全て大文字で，引数がアドレスで渡されることが前提となる．
〡 うくげごげぁぎ ぐげくぃぅいさげぅ
こさあげくさごぉぎぅ きぐぉたごすぐぅたぃくききぉご〨 いぁごぁごすぐぅ〬 ぉぅげげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげぃぁがが きぐぉたじたごすぐぅたぃくききぉご〨いぁごぁごすぐぅ〬 ぉぅげげ〩げぅごさげぎ
ぅぎい

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〪〯 ぃ ぷひちばばづひ 〪〯ぶはどつ きぐぉたじたごすぐぅたぃくききぉご〨 きぐぉたうどのぴ 〪てたとちのつぬづ〬 きぐぉたうどのぴ 〪どづひひ〩
ほきぐぉたいちぴちぴべばづ つちぴちぴべばづ〻
つちぴちぴべばづ 〽 きぐぉたごべばづたて〲っ〨 〪てたとちのつぬづ〩〻〪どづひひ 〽 〨きぐぉたうどのぴ〩きぐぉたごべばづたっはねねどぴ〨 〦つちぴちぴべばづ〩〻〱〶〮〳〮 言語の相互運用性〵〲〳〪てたとちのつぬづ 〽 きぐぉたごべばづたっ〲て〨つちぴちぴべばづ〩〻
ひづぴふひの〻ぽ〱〲〳

その他の全てのきぐぉ関数でも同じアプローチをとることができる．ハンドルがぉぎくさごではなく， くさご（またはぉぎ）である場合，きぐぉたへへへたて〲っ（またはきぐぉたへへへたっ〲て）の呼び出しを省略することができる．

〴
〵
〶
〷
〸

根 拠 こ こ で 設 計 に は 一 般 的 な ケ ー ス 用， つ ま りぃ言 語 の ラ ッ パ ー を 使 用 してうはひぴひちの言語のコードでぃ言語のライブラリを呼び出す，またはぃ言語のコー
ドでうはひぴひちの言語のライブラリを呼び出すための便利なソリューションが用意されている．ぃ言語のラッパーが使用される可能性のほうがうはひぴひちの言語のラッパーが使用される可能性よりも高い．これは，整数型の変数がぃ言語に渡される可能性のほうがぃ言語のハンドルがうはひぴひちの言語に渡される可能性よりも高いためである．
変換された値を引数リストを通してでなく，関数の値として返すと，これらの関数が単純な（恒等関数などに）場合に効率的なインラインコードを生成することができる．ラッパーの変換関数は無効なハンドル引数を捕捉しない．その代わり，無効なハンドルは下位のライブラリ関数に渡され，おそらくそこで入力引数がチェックされる． （根拠の終わり）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

ぃ言語及びぃ〫〫言語 ぃ〫〫言語のインターフェイスでは，言語間の相互運用性のために以下の関数が用意されている．明記した場合を除いて，有効なきぐぉ不可視ハンドルの名前（ぇひはふばなど）を示すため，以下のトークン〼ぃがぁここ〾が使用される． 〼ぃがぁここ〾に対応するぃ〫〫言語のクラスに派生クラスがある場合のために，派生クラスとぃ言語のきぐぉた〼ぃがぁここ〾の間の変換を行うための関数も用意されている．
以下の関数ではぃ言語のきぐぉハンドルからぃ〫〫言語のきぐぉハンドルへの代入が行え
る．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

きぐぉ〺〺〼ぃがぁここ〾〦 きぐぉ〺〺〼ぃがぁここ〾〺〺はばづひちぴはひ〽〨っはのびぴ きぐぉた〼ぃがぁここ〾〦 つちぴち〩〳〲

以下のコンストラクタはぃ言語のきぐぉハンドルからぃ〫〫言語のきぐぉオブジェクトを生成する．これにより，ぃ言語のきぐぉハンドルからぃ〫〫言語のきぐぉハンドルへの変更が自動的に行われる．

〳〳きぐぉ〺〺〼ぃがぁここ〾〺〺〼ぃがぁここ〾〨っはのびぴ きぐぉた〼ぃがぁここ〾〦 つちぴち〩

〳〷

〳〴
〳〵
〳〶

〳〸

例 16.14 ぃ言語のプログラムでぃ〫〫言語のライブラリを使用するには，ぃ〫〫言語のラ
イブラリが，下層のぃ〫〫言語のライブラリを呼び出す前に適切な変換を行うためのぃ言
語のインターフェイスをエクスポートする必要がある．この例では，ぃ言語のコミュニ
ケータを使用してぃ〫〫言語のライブラリを呼び出すぃ言語のインターフェイス関数を示
す．下層のぃ〫〫言語関数が呼び出されると，自動的にコミュニケータがぃ〫〫言語のハンドルに変更される．

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶

〯〯 ぃ〫〫 ぬどぢひちひべ てふのっぴどはの ばひはぴはぴべばづ
ぶはどつ っばばたぬどぢたっちぬぬ〨きぐぉ〺〺ぃはねね っばばたっはねね〩〻〴〷〴〸第 〱〶〮 言語別の呼び出し形式

〵〲〴
〱
〲
〳
〴

〯〯 ぅへばはひぴづつ ぃ てふのっぴどはの ばひはぴはぴべばづ
づへぴづひの 〢ぃ〢 ほ
ぶはどつ ったどのぴづひてちっづ〨きぐぉたぃはねね ったっはねね〩〻
ぽ

〵
〶
〷
〸
〹

ぶはどつ ったどのぴづひてちっづ〨きぐぉたぃはねね ったっはねね〩ほ〯〯 ぴとづ きぐぉたぃはねね 〨ったっはねね〩 どび ちふぴはねちぴどっちぬぬべ ばひはねはぴづつ ぴは きぐぉ〺〺ぃはねね
っばばたぬどぢたっちぬぬ〨ったっはねね〩〻
ぽ

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

以下の関数ではぃ〫〫言語のオブジェクトからぃ言語のきぐぉハンドルへの変換が行える．
この場合，この機能を提供するためにキャスト演算子がオーバーロードされる．
きぐぉ〺〺〼ぃがぁここ〾〺〺はばづひちぴはひ きぐぉた〼ぃがぁここ〾〨〩 っはのびぴ

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

例 16.15 ぃ言語のライブラリルーチンがぃ〫〫言語のプログラムから呼び出される．ぃ言
語のライブラリルーチンは，きぐぉたぃはねねを引数として取るようにプロトタイプが規定されている．
〯〯 ぃ てふのっぴどはの ばひはぴはぴべばづ
づへぴづひの 〢ぃ〢 ほ
ぶはどつ ったぬどぢたっちぬぬ〨きぐぉたぃはねね ったっはねね〩〻ぽぶはどつ っばばたてふのっぴどはの〨〩ほ〯〯 ぃひづちぴづ ち ぃ〫〫 っはねねふのどっちぴはひ〬 ちのつ どのどぴどちぬどぺづ どぴ ぷどぴと ち つふば はて〯〯きぐぉ〺〺ぃくききたしくげがいきぐぉ〺〺ぉのぴひちっはねね っばばたっはねね〨きぐぉ〺〺ぃくききたしくげがい〮いふば〨〩〩〻ったぬどぢたっちぬぬ〨っばばたっはねね〩〻
ぽ

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

根拠 コンストラクタによるぃ言語からぃ〫〫言語への変換，またキャストによるぃ〫〫言語からぃ言語への変換を行うと，コンパイラで自動的に変換が行われる．
ぃ言語またはうはひぴひちの言語のインターフェイスをぃ〫〫言語のライブラリに渡す場合と同様に，ぃ〫〫言語からぃ言語を呼び出すのが容易になる． （根拠の終わり）

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ユーザへのアドバイス キャストおよび昇格演算子は 新しいハンドルを値で返すことに注意すること．新しいハンドルをぉぎくさごパラメータとして使用すると内部のきぐぉオブジェクトには影響を及ぼすが，キャストされた元のハンドルには影響を及ぼさない． （ユーザへのアドバイス終わり）
対応するぃ言語のハンドルを持つぃ〫〫言語の全てのオブジェクトはアプリケーション
によって互換的に使用できることに注意する必要がある．例えば，アプリケーション
はきぐぉたぃくききたしくげがいに属性をキャッシュしておいて，後できぐぉ〺〺ぃくききたしくげがいから取得することができる．

〱〶〮〳〮 言語の相互運用性〵〲〵

16.3.5 ステータス〱〲

ぃ言語では，うはひぴひちの言語のステータス（整数の配列）からぃ言語のステータス（構造体）への変換，また逆の変換のため，以下の〲つのプロシージャが用意されている．変換は，隠されているものも含めて，ステータス内の全ての情報について行われる．つまり，変換で失われるステータスの情報はない．
どのぴ きぐぉたこぴちぴふびたて〲っ〨きぐぉたうどのぴ 〪てたびぴちぴふび〬 きぐぉたこぴちぴふび 〪ったびぴちぴふび〩てたびぴちぴふびが有効なうはひぴひちの言語のステータスであって， きぐぉたこごぁごさこたぉぇぎくげぅまたは
きぐぉたこごぁごさこぅこたぉぇぎくげぅのうはひぴひちの言語の値でない場合，きぐぉたこぴちぴふびたて〲っは同じ内容を持つ
有効なぃ言語のステータスをったびぴちぴふびに返す．てたびぴちぴふびがきぐぉたこごぁごさこたぉぇぎくげぅまたは
きぐぉたこごぁごさこぅこたぉぇぎくげぅのうはひぴひちの言 語 の 値 で あ る 場 合， あ る い はてたびぴちぴふびが有効なうはひぴひちの言語のステータスでない場合，呼び出しは誤りである．
ぃ言語のステータスはうはひぴひちの言語のステータスと同じソース，タグ，エラーコードの値を持ち，カウント，要素，取消しの問い合わせが行われた場合に同じ答えを返す．変
換関数の呼び出しは，未定義のエラーフィールドを持つうはひぴひちの言語のステータス引数を使用して行うことができるが，この場合，ぃ言語のステータス引数のエラーフィールドの値は未定義となる．
きぐぉたうたこごぁごさこたぉぇぎくげぅ，お よ びきぐぉたうたこごぁごさこぅこたぉぇぎくげぅの〲つ のきぐぉたうどのぴ〪型 の グ ロ

ーバル変数はねばど〮とで宣言され ている． これ らはそれ ぞれ，てたびぴちぴふびがきぐぉたこごぁごさこたぉぇぎくげぅま た はきぐぉたこごぁごさこぅこたぉぇぎくげぅのうはひぴひちの言 語 の 値 で あ る か ど う か
をぃ言語でテストするために使用できる． これらはグローバル変数であり，ぃ言語の定数式ではないため，ぃ言語で定数式が必要となる状況で使用することはできない．この値はきぐぉたぉぎぉご呼び出しときぐぉたうぉぎぁがぉずぅ呼び出しの間にのみ定義され，ユーザコード
によって変更されることはない．
逆方向の変換を行うために以下の関数が用意されている．
どのぴ きぐぉたこぴちぴふびたっ〲て〨きぐぉたこぴちぴふび 〪ったびぴちぴふび〬 きぐぉたうどのぴ 〪てたびぴちぴふび〩

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

この呼び出しはぃ言語のステータスをうはひぴひちの言語のステータスに変換するもので．動作はきぐぉたこぴちぴふびたて〲っと同様である．つまり，ったびぴちぴふびの値はきぐぉたこごぁごさこたぉぇぎくげぅであって
もきぐぉたこごぁごさこぅこたぉぇぎくげぅであってもならない．

〳〲

ユーザへのアドバイス ステータスの配列については，配列内の各ステータスを単に順に変換していくだけで済むため，配列専用の変換関数は用意されていない．
（ユーザへのアドバイス終わり）

〳〶

〳〳
〳〴
〳〵

〳〷
〳〸
〳〹
〴〰

根拠 ぃ言語のラッパーのみを使用してライブラリを階層化するため，
きぐぉたこごぁごさこたぉぇぎくげぅの処理が必要となる． うはひぴひちの言語の呼び出しできぐぉたこごぁごさこたぉぇぎくげぅが渡されている場合，ぃ言語のラッパーでこれを正しく処理する必要がある． この定数は，うはひぴひちの言語とぃ言語で同じ値を持つ必要はない．
きぐぉたこぴちぴふびたて〲っできぐぉたこごぁごさこたぉぇぎくげぅを処理することになっていた場合，その結果の型はきぐぉたこぴちぴふび〪〪でなければならず，これは不十分なソリューションと考えられた． （根拠の終わり）

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式〵〲〶〱

16.3.6 MPIの不可視オブジェクト

〲
〳
〴
〵
〶
〷
〸

特に規定がない限り，不可視オブジェクトは全ての言語で「共通」で，同じ情報が含
まれ，両方の言語で意味も同じである．前の節で説明したメカニズムを使用して，言語間できぐぉオブジェクトの参照を渡すことができる．ある言語で生成されたオブジェクト
は，別の言語でアクセス，変更，解放することができる．
以下で，きぐぉオブジェクトの各型で発生する問題を詳しく検証する．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

データ型
デ ー タ 型 は 全 て の 言 語 で 同 じ 情 報 を エ ン コ ー ド す る． 例 え ば，
きぐぉたごすぐぅたぇぅごたぅじごぅぎごなどのデータ型アクセサは全ての言語で同じ情報を返す．ある言語で定義されたデータ型が別の言語での通信呼び出しに使用される場合，送信されるメッセージは最初の言語から送信されるメッセージと同じになり，同じ通信バッファ
がアクセスされ，必要に応じて同じ表現変換が行われる．定義済みの全てのデータ型は任意の言語のデータ型コンストラクタで使用することができる．データ型がコミットされた場合，任意の言語の通信で使用することができる．
関数きぐぉたぇぅごたぁいいげぅここは全ての言語で同じ値を返す．ただし，定数きぐぉたあくごごくきは
全ての言語で同じ値を持つ必要はない（〵〳〳ページの第〱〶〮〳〮〹節を参照）
．

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

例 16.16〡 うくげごげぁぎ ぃくいぅ
げぅぁが げ〨〵〩ぉぎごぅぇぅげ ごすぐぅ〬 ぉぅげげ〬 ぁくあがぅぎ〨〱〩〬 ぁくごすぐぅ〨〱〩ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁくいぉこぐ〨〱〩

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

〡 っひづちぴづ ちの ちぢびはぬふぴづ つちぴちぴべばづ てはひ ちひひちべ げ
ぁくあがぅぎ〨〱〩 〽 〵ぃぁがが きぐぉたぇぅごたぁいいげぅここ〨 げ〬 ぁくいぉこぐ〨〱〩〬 ぉぅげげ〩ぁくごすぐぅ〨〱〩 〽 きぐぉたげぅぁが
ぃぁがが きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨〱〬 ぁくあがぅぎ〬ぁくいぉこぐ〬ぁくごすぐぅ〬 ごすぐぅ〬 ぉぅげげ〩ぃぁがが ぃたげくさごぉぎぅ〨ごすぐぅ〩

〳〴
〳〵
〳〶

〪〯 ぃ っはつづ 〪〯

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

ぶはどつ ぃたげくさごぉぎぅ〨きぐぉたうどのぴ 〪てぴべばづ〩
ほどのぴ っはふのぴ 〽 〵〻どのぴ ぬづのびせ〲そ 〽 ほ〱〬〱ぽ〻きぐぉたぁどのぴ つどびばぬびせ〲そ〻きぐぉたいちぴちぴべばづ ぴべばづびせ〲そ〬 のづぷぴべばづ〻〪〯 っひづちぴづ ちの ちぢびはぬふぴづ つちぴちぴべばづ てはひ ぢふててづひ ぴとちぴ っはのびどびぴび〪〯 はて っはふのぴ〬 てはぬぬはぷづつ ぢべ げ〨〵〩

〴〵
〴〶
〴〷
〴〸

きぐぉたぇづぴたちつつひづびび〨〦っはふのぴ〬 〦つどびばぬびせ〰そ〩〻つどびばぬびせ〱そ 〽 〰〻ぴべばづびせ〰そ 〽 きぐぉたぉぎご〻
ぴべばづびせ〱そ 〽 きぐぉたごべばづたて〲っ〨〪てぴべばづ〩〻〪〪〯〯〱〶〮〳〮 言語の相互運用性〵〲〷〱

きぐぉたごべばづたっひづちぴづたびぴひふっぴ〨〲〬 ぬづのび〬 つどびばぬび〬 ぴべばづび〬 〦のづぷぴべばづ〩〻
きぐぉたごべばづたっはねねどぴ〨〦のづぷぴべばづ〩〻〲〳

きぐぉたこづのつ〨きぐぉたあくごごくき〬 〱〬 のづぷぴべばづ〬 〱〬 〰〬 きぐぉたぃくききたしくげがい〩〻〪〯 ぴとづ ねづびびちでづ びづのぴ っはのぴちどのび ちの どのぴ っはふのぴ はて 〵〬 てはぬぬはぷづつ〪〯 ぢべ ぴとづ 〵 げぅぁが づのぴひどづび はて ぴとづ うはひぴひちの ちひひちべ げ〮

〪〯
〪〯

ぽ

〴
〵
〶
〷
〸

実 装 者 へ の ア ド バ イ ス 以 下 に 示 す よ う な 実 装 が 可 能 で あ る．
きぐぉたぇぅごたぁいいげぅここによって返されるきぐぉアドレスは全ての言語で同じ値となる．
明らかな設計方針は，きぐぉアドレスと通常のアドレスを同じにことである．絶対ア
ドレスを持つデータ型が構成されている場合，このアドレスがデータ型に格納される．送信または受信操作が行われると，データ型に格納されたアドレスは全てベースアドレスが加算された変位として解釈される．ベースアドレスはぢふて（のアドレス）で，ぢふて 〽 きぐぉたあくごごくきの場合は〰である．そのため， きぐぉたあくごごくきが〰の場合，ぢふて 〽 きぐぉたあくごごくきの送信または受信呼び出しはのアドレスを持つバッ
ファ引数を持つ呼び出しとして正確に実装され，どちらの場合もベースアド
レスはぢふて となる． それに対して， きぐぉたあくごごくき が〰でない場合，多少異なる実装が必要となる． ぢふて 〽 きぐぉたあくごごくきであるかどうかをチェックするためのテストが行われる． 真の場合，ベースアドレスは〰となり，偽の場合はぢふて となる．
特に， きぐぉたあくごごくきの値がうはひぴひちの言語ぃ言語／ぃ〫〫言語とで異なる場合，ぢふて 〽
きぐぉたあくごごくきであるかどうかをチェックするための追加テストが少なくとも〱つの言語で必要となる．
ぃ言語／ぃ〫〫言語でも，のふぬぬポインタと区別するため， きぐぉたあくごごくきに〰以外の値を使用するのが望ましい場合がある． きぐぉたあくごごくき 〽 っの場合，
きぐぉたぇぅごたぁいいげぅここによって返されて絶対データ型に格納されるきぐぉアドレスとしてきぐぉたあくごごくきからの変位（通常のアドレス 〭 っ）を使用することにより，ぢふて 〽
きぐぉたあくごごくきのテストを避けることができる． （実装者へのアドバイス終わり）

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

コールバック関数〳〵〳〶

きぐぉ呼び出しではコールバック関数ときぐぉオブジェクトを関連付けることができる．
例えば，エラーハンドラがコミュニケータおよびファイルと関連付けられ，属性のコ
ピーおよび削除関数が属性キーと関連付けられ，リデュース操作が操作オブジェクトと関連付けられる．多言語環境で，ある言語のきぐぉ呼び出しで渡された関数は別の言語のきぐぉ関数で呼び出すことができる．きぐぉ実装では，このような呼び出しが，関数が記述された言語の呼び出し規則に従うようにする必要がある．

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

実装者へのアドバイス コールバック関数には言語タグを設定する必要がある．このタグはライブラリ関数によってコールバック関数が渡されるときに設定される〨言語毎に異なることが望ましい〩．そして，コールバック関数の呼び出し時に正

〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〵〲〸
〱
〲

しい呼び出しシーケンスを実行するために使用される． （実装者へのアドバイス
終わり）

〳
〴
〵
〶
〷
〸
〹

エラーハンドラ
実装者へのアドバイス ぃ言語およびぃ〫〫言語では，エラーハンドラはぜびぴつちひでび〢引
数リストを持つ．エラーが発生した言語環境に関する情報をハンドラに渡すのは有益である． （実装者へのアドバイス終わり）〱〰
〱〱

リデュース操作

〱〲
〱〳
〱〴
〱〵
〱〶

ユーザへのアドバイス リデュース操作はその引数の〱つとして，オペランドのデータ型を受信する．そのため，ぃ言語，ぃ〫〫言語，うはひぴひちの言語のデータ型で有効な「多様型」リデュース操作を定義することができる． （ユーザへのアドバイス終わ
り）

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

アドレス
一部のデータ型アクセサおよびコンストラクタは，アドレスを保持するための（ぃ言語）または（ぃ〫〫言語）型の引数を持つ．うはひぴひちの言語の対応する引数はぉぎごぅぇぅげ型となる．このため，アドレスが〶〴ビットであるのに対してうはひぴひちの言語のぉぎごぅぇぅげが〳〲ビットである環境において，うはひぴひちの言語とぃ言語／ぃ〫〫言語の間で不整合が生じる．
これは言語間の課題に関係なく，問題である．うはひぴひちの言語のプロセスに〴ぇあ以上のアドレス空間があるとする．変数のアドレスが〲32 を超える場合，うはひぴひちの言語できぐぉたぁいいげぅここによってどのような値が返されるだろうか． ここに示す設計は，現在
のうはひぴひちの言語のコードとの互換性を維持しつつ，この問題に対処する．
定数きぐぉたぁいいげぅここたかぉぎいは，うはひぴひちの 〹〰言語でぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩がア
ドレスサイズの整数となるように定義されている（通常，ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩の
サイズは〳〲 ビットアドレスマシンでは〴，〶〴ビットアドレスマシンでは〸だが，必ずしもそうなってはいない）．同様に，定数きぐぉたぉぎごぅぇぅげたかぉぎいはぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぉぎごぅぇぅげたかぉぎい〩がデフォルトサイズのぉぎごぅぇぅげとなるように定義されている．
アドレス引数を持つ関数には〷つあり，それぞれきぐぉたごすぐぅたえざぅぃごくげ，
きぐぉたごすぐぅたえぉぎいぅじぅい， きぐぉたごすぐぅたこごげさぃご， きぐぉたぁいいげぅここ， きぐぉたごすぐぅたぅじごぅぎご，きぐぉたごすぐぅたがあ，きぐぉたごすぐぅたさあである．
このリストの最初の〴つの関数を補完するために新しい〴つの関数が用意されている，
これらの関数については，〸〹ページの第〴〮〱〮〱節で説明している．残りの〳つの関数は，新しい関数きぐぉたごすぐぅたぇぅごたぅじごぅぎご（同じ節で説明）によって補完される．新しい関数の機能は，ぃ言語／ぃ〫〫言語では古い関数と同じであり，うはひぴひちの言語システムでは，
デフォルトのぉぎごぅぇぅげがアドレスサイズであれば古い関数と同じになる．うはひぴひちの言語
では，ぃ言語およびぃ〫〫言語できぐぉたぁどのぴおよびきぐぉ〺〺ぁどのぴ型の引数が使用される状況では，ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩型の引数を使用できる．うはひぴひちの 〷〷言語システムのうち，うはひぴひちの 〹〰言語のかぉぎいの表記法をサポートしておらず，デフォルトぉぎごぅぇぅげが〳〲ビッ〱〶〮〳〮 言語の相互運用性〵〲〹

トであるにもかかわらずアドレスが〶〴ビットであるものは，これらの引数は適切な整数型となる．下位互換のため，古い関数も引き続き提供される．しかし，うはひぴひちの言語では，アドレスの範囲が〲32 を超えるシステムでの問題を防止するため，また言語間の互換性を保証するため，ユーザは新しい関数への切り替えが推奨される．

〱
〲
〳
〴
〵
〶

16.3.7 属性〷〸

ある言語で割り当てた属性キーを，別の言語で開放することができる．同様に，ある言語で設定した属性値を別の言語でアクセスすることができる．そのために，属性
キーは全ての言語で有効な整数範囲で割り当てられる．システムで定義された属性値（きぐぉたごぁぇたさあ， きぐぉたしごぉきぅたぉこたぇがくあぁがなど）についても同様である．
ある言語で宣言された属性キーは，その言語のコピーおよび削除関数に関連付けられる （きぐぉた{ごすぐぅ〬ぃくきき〬しぉぎ}たぃげぅぁごぅたかぅすざぁが呼び出しで提供される関数）．各属性に対してコミュニケータが複製される場合，その関数の言語のための正しい呼び出し規則を使用して対応するコピー関数が呼び出され，同様に削除コールバック関数も呼び出
される．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

実装者へのアドバイス ここでは，コールバック関数のための正しい呼び出し規則を使用するために，属性が ぜぃ〢，ぜぃ〫〫〢，またはぜうはひぴひちの〢としてタグ付けされ，
言語タグがチェックされなければならない． （実装者へのアドバイス終わり）

〲〰
〲〱
〲〲
〲〳
〲〴

〲〳〴ページの第〶〮〷節で説明した属性操作関数は，属性引数をぃ言語ではぶはどつ〪型として，
うはひぴひちの言語ではぉぎごぅぇぅげ型として定義する．一部のシステムでは， ぉぎごぅぇぅげが〳〲ビットであるのに対して，ぃ言語／ぃ〫〫言語のポインタが〶〴ビットとなる．このことは，コミュニケータ属性を使用してうはひぴひちの言語からぃ言語／ぃ〫〫言語を呼び出した場合，またはぃ言語／ぃ〫〫言語からうはひぴひちの言語を呼び出した場合に問題となる．
きぐぉは内部的にアドレスサイズの属性を格納するように動作する．うはひぴひちの言語のぉぎごぅぇぅげが小さい場合，うはひぴひちの言語の関数きぐぉたぁごごげたぇぅごは属性ワードの下位〳〲ビットを返し，うはひぴひちの言語の関数きぐぉたぁごごげたぐさご は属性ワードの下位〳〲ビットを設定する．
これはワード全体に符号拡張される（これらの〲つの関数はユーザコードによって明示的に呼び出されるか，または属性コピーコールバック関数によって暗黙的に呼び出される）．
アドレスの場合と同様，うはひぴひちの言語のアドレスサイズの属性を操作するための新しい関数が用意されており，機能はぃ言語／ぃ〫〫言語の古い関数と同じである．これらの関数については，〲〳〴ページの第〶〮〷節で説明している．ユーザはこれらの新しい関数の使用が推奨される．
きぐぉでは，〲つのタイプの属性，つまりアドレス値（ポインタ）属性と整数値属性がサポートされている． ぃ言語およびぃ〫〫言語の属性関数はアドレス値属性をプッ
ト／ゲットする． うはひぴひちの言語の属性関数は整数値属性をプット／ゲットする． ぃ言語またはぃ〫〫言語から整数値属性へのアクセスが行われた場合，きぐぉたへへへたでづぴたちぴぴひは
整数値属性の（ポインタの）アドレスを返す．これは，属性がうはひぴひちの言語の

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〳〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

第 〱〶〮 言語別の呼び出し形式

きぐぉたへへへたこぅごたぁごごげで格納された場合はきぐぉたぁどのぴのポインタとなり，廃止されたうはひぴひちの言
語のきぐぉたぁごごげたぐさごで格納された場合はどのぴのポインタとなる．うはひぴひちの言語からアドレ
ス値属性へのアクセスが行われた場合，きぐぉたへへへたぇぅごたぁごごげはアドレスを整数に変換し，この変換の結果を返す．新しい形式の属性関数を使用した場合，この変換で欠落する情報はなく， きぐぉたぁいいげぅここたかぉぎいの整数が返される． 廃止された属性関数が使用される場合，変換で切り詰めが発生することがある．ぃ言語では，廃止されたルーチ
ンきぐぉたぁぴぴひたばふぴお よ びきぐぉたぁぴぴひたでづぴ は，きぐぉたぃはねねたびづぴたちぴぴひお よ びきぐぉたぃはねねたでづぴたちぴぴひと同様に動作する．
例 16.17 ぁ〮 ぃ言語での属性値の設定
どのぴ びづぴたぶちぬ 〽 〳〻びぴひふっぴ てはは びづぴたびぴひふっぴ〻

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

〪〯 こづぴ ち ぶちぬふづ ぴとちぴ どび ち ばはどのぴづひ ぴは ちの どのぴ 〪〯きぐぉたぃはねねたびづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 にづべぶちぬ〱〬 〦びづぴたぶちぬ〩〻〪〯 こづぴ ち ぶちぬふづ ぴとちぴ どび ち ばはどのぴづひ ぴは ち びぴひふっぴ 〪〯きぐぉたぃはねねたびづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 にづべぶちぬ〲〬 〦びづぴたびぴひふっぴ〩〻〪〯 こづぴ ちの どのぴづでづひ ぶちぬふづ 〪〯きぐぉたぃはねねたびづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 にづべぶちぬ〳〬 〨ぶはどつ 〪〩 〱〷〩〻
あ〮 ぃ言語での属性値の読み取り

〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

どのぴ てぬちで〬 〪でづぴたぶちぬ〻
びぴひふっぴ てはは 〪でづぴたびぴひふっぴ〻〪〯 さばはの びふっっづびびてふぬ ひづぴふひの〬 でづぴたぶちぬ 〽〽 〦びづぴたぶちぬ〨ちのつ ぴとづひづてはひづ 〪でづぴたぶちぬ 〽〽 〳〩 〪〯きぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 にづべぶちぬ〱〬 〦でづぴたぶちぬ〬 〦てぬちで〩〻〪〯 さばはの びふっっづびびてふぬ ひづぴふひの〬 でづぴたびぴひふっぴ 〽〽 〦びづぴたびぴひふっぴ 〪〯きぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 にづべぶちぬ〲〬 〦でづぴたびぴひふっぴ〬 〦てぬちで〩〻〪〯 さばはの びふっっづびびてふぬ ひづぴふひの〬 でづぴたぶちぬ 〽〽 〨ぶはどつ〪〩 〱〷 〪〪〯〯ど〮づ〮〬 〨きぐぉたぁどのぴ〩 でづぴたぶちぬ 〽〽 〱〷 〪〯きぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 にづべぶちぬ〳〬 〦でづぴたぶちぬ〬 〦てぬちで〩〻ぃ〮 （廃止された）うはひぴひちの言語のきぐぉ〭〱呼び出しでの属性値の読み取り
がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげ〬 ぇぅごたざぁが〬 ぇぅごたこごげさぃご

〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ぇぅごたざぁが 〽〽 〦びづぴたぶちぬ〬 ばはびびどぢぬべ ぴひふのっちぴづつ
ぃぁがが きぐぉたぁごごげたぇぅご〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〱〬 ぇぅごたざぁが〬 うがぁぇ〬 ぉぅげげ〩〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ぇぅごたこごげさぃご 〽〽 〦びづぴたびぴひふっぴ〬 ばはびびどぢぬべ ぴひふのっちぴづつ
ぃぁがが きぐぉたぁごごげたぇぅご〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〲〬 ぇぅごたこごげさぃご〬 うがぁぇ〬 ぉぅげげ〩〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ぇぅごたざぁが 〽〽 〱〷ぃぁがが きぐぉたぁごごげたぇぅご〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〳〬 ぇぅごたざぁが〬 うがぁぇ〬 ぉぅげげ〩い〮 うはひぴひちの言語のきぐぉ〭〲呼び出しでの属性値の読み取り

〴〴
〴〵
〴〶
〴〷
〴〸

がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぇぅごたざぁが〬 ぇぅごたこごげさぃご〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ぇぅごたざぁが 〽〽 〦びづぴたぶちぬ〱〶〮〳〮 言語の相互運用性
ぃぁがが きぐぉたぃくききたぇぅごたぁごごげ〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〱〬 ぇぅごたざぁが〬 うがぁぇ〬 ぉぅげげ〩〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ぇぅごたこごげさぃご 〽〽 〦びづぴたびぴひふっぴ
ぃぁがが きぐぉたぃくききたぇぅごたぁごごげ〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〲〬 ぇぅごたこごげさぃご〬 うがぁぇ〬 ぉぅげげ〩〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ぇぅごたざぁが 〽〽 〱〷ぃぁがが きぐぉたぃくききたぇぅごたぁごごげ〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〳〬 ぇぅごたざぁが〬 うがぁぇ〬 ぉぅげげ〩

〵〳〱
〱
〲
〳
〴
〵
〶
〷
〸

例 16.18 ぁ〮 （廃止された）うはひぴひちの言語のきぐぉ〭〱呼び出しでの属性値の設定〹〱〰

ぉぎごぅぇぅげ ぉぅげげ〬 ざぁがざぁが 〽 〷
ぃぁがが きぐぉたぁごごげたぐさご〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〬 ざぁが〬 ぉぅげげ〩

〱〱
〱〲
〱〳

あ〮 ぃ言語での属性値の読み取り〱〴〱〵

どのぴ てぬちで〻
どのぴ 〪ぶちぬふづ〻〪〯 さばはの びふっっづびびてふぬ ひづぴふひの〬 ぶちぬふづ ばはどのぴび ぴは どのぴづひのちぬ きぐぉ びぴはひちでづ ちのつ〪ぶちぬふづ 〽〽 〨どのぴ〩 〷 〪〯きぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 にづべぶちぬ〬 〦ぶちぬふづ〬 〦てぬちで〩〻ぃ〮 （廃止された）うはひぴひちの言語のきぐぉ〭〱呼び出しでの属性値の読み取り

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげ〬 ざぁがさぅ〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ざぁがさぅ 〽〽 〷ぃぁがが きぐぉたぁごごげたぇぅご〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〬 ざぁがさぅ〬 うがぁぇ〬 ぉぅげげ〩

〲〳
〲〴
〲〵
〲〶
〲〷

い〮 うはひぴひちの言語のきぐぉ〭〲呼び出しでの属性値の読み取り〲〸〲〹がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ざぁがさぅ

〳〰
〳〱
〳〲

〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ざぁがさぅ 〽〽 〷 〨びどでの づへぴづのつづつ〩ぃぁがが きぐぉたぃくききたぇぅごたぁごごげ〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〬 ざぁがさぅ〬 うがぁぇ〬 ぉぅげげ〩

〳〳
〳〴
〳〵
〳〶
〳〷

例 16.19 ぁ〮 うはひぴひちの言語のきぐぉ〭〲読み取りによる属性値の設定〳〸〳〹

ぉぎごぅぇぅげ ぉぅげげぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ざぁがさぅ〱ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ざぁがさぅ〲
ざぁがさぅ〱 〽 〴〲ざぁがさぅ〲 〽 ぉぎご〨〲〬 かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 〪〪 〴〰

〴〰
〴〱
〴〲
〴〳
〴〴

ぃぁがが きぐぉたぃくききたこぅごたぁごごげ〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〱〬 ざぁがさぅ〱〬 ぉぅげげ〩ぃぁがが きぐぉたぃくききたこぅごたぁごごげ〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〲〬 ざぁがさぅ〲〬 ぉぅげげ〩あ〮 ぃ言語での属性値の読み取り

〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〵〳〲
〱
〲

どのぴ てぬちで〻きぐぉたぁどのぴ 〪ぶちぬふづ〱〬 〪ぶちぬふづ〲〻

〳
〴
〵
〶
〷
〸
〹

〪〯 さばはの びふっっづびびてふぬ ひづぴふひの〬 ぶちぬふづ〱 ばはどのぴび ぴは どのぴづひのちぬ きぐぉ びぴはひちでづ ちのつ〪ぶちぬふづ〱 〽〽 〴〲 〪〯きぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 にづべぶちぬ〱〬 〦ぶちぬふづ〱〬 〦てぬちで〩〻〪〯 さばはの びふっっづびびてふぬ ひづぴふひの〬 ぶちぬふづ〲 ばはどのぴび ぴは どのぴづひのちぬ きぐぉ びぴはひちでづ ちのつ〪ぶちぬふづ〲 〽〽 〲ぞ〴〰 〪〯きぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 にづべぶちぬ〲〬 〦ぶちぬふづ〲〬 〦てぬちで〩〻ぃ〮 （廃止された）うはひぴひちの言語のきぐぉ〭〱呼び出しでの属性値の読み取り

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげ〬 ざぁがさぅ〱〬 ざぁがさぅ〲〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ざぁがさぅ〱 〽〽 〴〲ぃぁがが きぐぉたぁごごげたぇぅご〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〱〬 ざぁがさぅ〱〬 うがぁぇ〬 ぉぅげげ〩〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ざぁがさぅ〲 〽〽 〲ぞ〴〰〬 はひ 〰 どて ぴひふのっちぴどはの〡 のづづつづつ 〨ど〮づ〮〬 ぴとづ ぬづちびぴ びどでのどてどっちのぴ ばちひぴ はて ぴとづ ちぴぴひどぢふぴづ ぷはひつ〩ぃぁがが きぐぉたぁごごげたぇぅご〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〲〬 ざぁがさぅ〲〬 うがぁぇ〬 ぉぅげげ〩い〮 うはひぴひちの言語のきぐぉ〭〲呼び出しでの属性値の読み取り

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ざぁがさぅ〱〬 ざぁがさぅ〲〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ざぁがさぅ〱 〽〽 〴〲ぃぁがが きぐぉたぃくききたぇぅごたぁごごげ〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〱〬 ざぁがさぅ〱〬 うがぁぇ〬 ぉぅげげ〩〡 さばはの びふっっづびびてふぬ ひづぴふひの〬 ざぁがさぅ〲 〽〽 〲ぞ〴〰
ぃぁがが きぐぉたぃくききたぇぅごたぁごごげ〨きぐぉたぃくききたしくげがい〬 かぅすざぁが〲〬 ざぁがさぅ〲〬 うがぁぇ〬 ぉぅげげ〩

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

定義済みのきぐぉ属性は整数値またはアドレス値となる． きぐぉたごぁぇたさあなどの定義済
みの整数値属性は，廃止されたうはひぴひちの言語のルーチンきぐぉたぁごごげたぐさごの呼び出しによ っ て プ ッ ト さ れ た の と 同 様 に 動 作 す る． つ ま り，うはひぴひちの言 語 で はきぐぉたぃくききたぇぅごたぁごごげ〨きぐぉたぃくききたしくげがい〬 きぐぉたごぁぇたさあ〬 ぶちぬ〬 」ちで〬 どづひひ〩はタグ値の上限をぶちぬに返し，ぃ言語ではきぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃくききたしくげがい〬 きぐぉたごぁぇたさあ〬〦ば〬 〦」ちで〩はタグ値の上限を持つどのぴのポインタをばに返す．
きぐぉたしぉぎたあぁこぅなどの定義済みのアドレス値属性は，ぃ言語の呼び出しによってプットされたのと同様に動作する． つまり，うはひぴひちの言語ではきぐぉたしぉぎたぇぅごたぁごごげ〨ぷどの〬
きぐぉたしぉぎたあぁこぅ〬 ぶちぬ〬 」ちで〬 どづひひはひ〩は整数型に変換されたウィンドウのベースアドレス
をぶちぬに返す．ぃ言語ではきぐぉたしどのたでづぴたちぴぴひ〨ぷどの〬 きぐぉたしぉぎたあぁこぅ〬 〦ば〬 〦」ちで〩は〨ぶはどつ 〪〩にキャストされたウィンドウのベースアドレスのポインタをばに返す．

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

根拠 この設計は定義済みの属性用に指定された動作と整合し，言語間で属性が受け渡されるときに情報が欠落しないことを保証している．定義済みの属性のための言語の相互運用性はきぐぉたぁごごげたぐさごに基づいて定義されているため，ルーチン自体は推奨されなくなっているが，互換性のためにこの定義が残されている． （根拠の終わり）

〱〶〮〳〮 言語の相互運用性〵〳〳

実装者へのアドバイス 実装では，〨〱〩ぃ言語（きぐぉたぁぴぴひたばふぴまたはきぐぉたじへへたびづぴたちぴぴひを使用），〨〲〩うはひぴひちの言語のきぐぉたじじじたこぅごたぁごごげ， 〨〳〩廃止されたうはひぴひちの言語 のルーチンきぐぉたぁごごげたぐさごのいずれで設定されたかに従って，〨〱〩アドレス属性，〨〲〩ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩属性，または 〨〳〩ぉぎごぅぇぅげ属性として属性のタグ付けを行う必要がある．そのため，属性の取得時に正しい選択が行える． （実装者へのアドバイス終わり）

〱
〲
〳
〴
〵
〶
〷
〸

16.3.8 追加ステート
追加ステートはコピーまたは削除コールバック関数によって変更されないようにする必要がある（これはぃ言語の呼び出し形式では明らかだが，うはひぴひちの言語の呼び出し形式では明らかでない）．しかし，これらの関数は追加ステートによって間接的にアクセスされる状態を更新することがある．例えば，ぃ言語では追加ステートを，コピーまたはコールバック関数によって変更されるデータ構造体のポインタとすることがで
き，うはひぴひちの言語では追加ステートを，コピーまたはコールバック関数によって変更され
るぃくききくぎ配列のエントリの添字とすることができる．マルチスレッド環境では，異なるスレッドが同じコールバック関数を同時に実行する場合があることを知っておく必要がある．この関数が追加ステートに関係する状態を変更した場合，相互排他コードを使用して，共有される状態の更新やアクセスを保護する必要がある．

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

16.3.9 定数〲〴

きぐぉの定数は，特に規定がない限り，全ての言語で同じ値を持つ．このことは，定数ハンドル（きぐぉたぉぎご〬 きぐぉたぃくききたしくげがい〬 きぐぉたぅげげくげこたげぅごさげぎ〬きぐぉたこさきなど）には適用されない．これらのハンドルは，第〱〶〮〳〮〴節で説明するように変換する必要がある．
最大文字列長を指定する定数（付録ぁ〮〱〮〱のリストを参照）は，うはひぴひちの言語ではぃ言語／ぃ〫〫言語よりも〱文字分小さな値となるが，これはぃ言語／ぃ〫〫言語では長さにのふぬぬ終了文字が含まれるためである．そのため，これらの定数は，文字列に含まれうる印字可
能文字の最大数ではなく，使用する可能性のある最大の文字列を保持するために割り当てる必要のある領域の量を表わす．

〲〶

〲〵

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

ユーザへのアドバイス この定義は，ぃ言語／ぃ〫〫言語で以下のような宣言を使用
して文字列の受信バッファを割り当てても安全であることを意味している．

〳〶
〳〷
〳〸
〳〹

っとちひ のちねづ せきぐぉたきぁじたくあおぅぃごたぎぁきぅそ〻（ユーザへのアドバイス終わり）

〴〰
〴〱
〴〲
〴〳

また， きぐぉたあくごごくきやきぐぉたこごぁごさこたぉぇぎくげぅのような定数「アドレス」，つまりハンド
ルでない参照引数のための特別な値は，言語毎に異なっていても構わない．

〴〴
〴〵
〴〶

根拠 現在のきぐぉ標準では，きぐぉたあくごごくきをぃ言語では初期化式に使用できるが，うはひぴひちの言語では使用できない．通常，うはひぴひちの言語では値による呼び出しがサポー〴〷〴〸

第 〱〶〮 言語別の呼び出し形式〵〳〴

トされていないため，きぐぉたあくごごくきはうはひぴひちの言語では定義済みのびぴちぴどっ変数，例
えばきぐぉで宣言されたぃくききくぎブロックの変数でなければならない．それに対してぃ言語では，きぐぉたあくごごくき 〽 〰とすることが自然である（警告：きぐぉたあくごごくき 〽
〰と定義すると，のふぬぬポインタをきぐぉたあくごごくきと区別できないことを意味するため，
きぐぉたあくごごくき 〽 〱とした方がよい）．うはひぴひちの言語とぃ言語の値を同じにしようとす
ると，初期化のプロセスが複雑になる． （根拠の終わり）

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

16.3.10 言語間の通信
きぐぉでの通信のための型一致規則は変更されておらず，送信される各項目のデータ
型の指定は，型シグネチャにおいて，（型の〱つがきぐぉたぐぁぃかぅいである場合を除いて）この項目を受信するためのデータ型の指定と一致していなければならない． また，型がきぐぉたあすごぅまたはきぐぉたぐぁぃかぅいである場合を除いて，メッセージ項目の型が対応する通信バッファ領域の型宣言と一致していなければならない．これらの規則に従っている場
合，言語間の通信を行うことができる．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

例 16.20 以下の例では，うはひぴひちの言語の配列がうはひぴひちの言語から送信され，ぃ言語で受信される．
〡 うくげごげぁぎ ぃくいぅ
げぅぁが げ〨〵〩ぉぎごぅぇぅげ ごすぐぅ〬 ぉぅげげ〬 きすげぁぎか〬 ぁくあがぅぎ〨〱〩〬 ぁくごすぐぅ〨〱〩ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁくいぉこぐ〨〱〩〡 っひづちぴづ ちの ちぢびはぬふぴづ つちぴちぴべばづ てはひ ちひひちべ げ
ぁくあがぅぎ〨〱〩 〽 〵ぃぁがが きぐぉたぇぅごたぁいいげぅここ〨 げ〬 ぁくいぉこぐ〨〱〩〬 ぉぅげげ〩ぁくごすぐぅ〨〱〩 〽 きぐぉたげぅぁが
ぃぁがが きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨〱〬 ぁくあがぅぎ〬ぁくいぉこぐ〬ぁくごすぐぅ〬 ごすぐぅ〬 ぉぅげげ〩ぃぁがが きぐぉたごすぐぅたぃくききぉご〨ごすぐぅ〬 ぉぅげげ〩

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

ぃぁがが きぐぉたぃくききたげぁぎか〨 きぐぉたぃくききたしくげがい〬 きすげぁぎか〬 ぉぅげげ〩ぉう 〨きすげぁぎか〮ぅけ〮〰〩 ごえぅぎ
ぃぁがが きぐぉたこぅぎい〨 きぐぉたあくごごくき〬 〱〬 ごすぐぅ〬 〱〬 〰〬 きぐぉたぃくききたしくげがい〬 ぉぅげげ〩ぅがこぅ
ぃぁがが ぃたげくさごぉぎぅ〨ごすぐぅ〩ぅぎい ぉう

〳〷
〳〸
〳〹
〴〰

〪〯 ぃ っはつづ 〪〯

〴〱
〴〲
〴〳
〴〴

ぶはどつ ぃたげくさごぉぎぅ〨きぐぉたうどのぴ 〪てとちのつぬづ〩
ほきぐぉたいちぴちぴべばづ ぴべばづ〻
きぐぉたこぴちぴふび びぴちぴふび〻〴〵

ぴべばづ 〽 きぐぉたごべばづたて〲っ〨〪てとちのつぬづ〩〻

〴〶
〴〷
〴〸

きぐぉたげづっぶ〨 きぐぉたあくごごくき〬 〱〬 ぴべばづ〬 〰〬 〰〬 きぐぉたぃくききたしくげがい〬 〦びぴちぴふび〩〻ぽ〱〶〮〳〮 言語の相互運用性〵〳〵

きぐぉの実装者は，それぞれの型が一致している場合，型一致規則を緩和し，うはひぴひちの言語の型を使用してメッセージを送信し，ぃ言語の型を使用して受信する．またはその逆を行うことができる．つまり，うはひぴひちの言語の型ぉぎごぅぇぅげがぃ言語の型どのぴと同じである場合，きぐぉ実装ではデータ型きぐぉたぉぎごぅぇぅげを使用してデータを送信し，データ型きぐぉたぉぎごを
使用してデータを受信することができる．しかし，このようなコードは可搬ではない．

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〳〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

第 〱〶〮 言語別の呼び出し形式

〱
〲
〳
〴
〵

付録A章

〶
〷
〸
〹

言語呼び出し形式要約

〱〰
〱〱
〱〲
〱〳
〱〴

この章では，ぃ言語，うはひぴひちの言語そしてぃ〫〫言語特有の 呼び出し形式を要約する．最初に定数，型宣言，どのては値そしてキーについて記述する．その後呼び出し形式毎にルーチンプロトタイプを示す．

〱〵
〱〶
〱〷
〱〸
〱〹

A.1 定義された値とハンドル〲〰

A.1.1 定義された定数〲〲

ぃ言語とうはひぴひちの言語の名前を左の列に列挙し，ぃ〫〫言語の名前を 中央か 右の列に列挙する． っはのびぴ どのぴ型の定数は，プリプロセッサが整数定数リテラルに置き換えて実装してもよい．

〲〴

〲〱

〲〳

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〳〷

付録 ぁ〮 言語呼び出し形式要約

〵〳〸
戻り値

〱
〲

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺 っはのびぴ どのぴ〴

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〨または名前無しづのふね〩〵

きぐぉたこさぃぃぅここ

きぐぉ〺〺こさぃぃぅここ〶

きぐぉたぅげげたあさううぅげ

きぐぉ〺〺ぅげげたあさううぅげ〷

きぐぉたぅげげたぃくさぎご

きぐぉ〺〺ぅげげたぃくさぎご

きぐぉたぅげげたごすぐぅ

きぐぉ〺〺ぅげげたごすぐぅ〱〰

きぐぉたぅげげたごぁぇ

きぐぉ〺〺ぅげげたごぁぇ〱〱

きぐぉたぅげげたぃくきき

きぐぉ〺〺ぅげげたぃくきき〱〲

きぐぉたぅげげたげぁぎか

きぐぉ〺〺ぅげげたげぁぎか〱〳

きぐぉたぅげげたげぅけさぅこご

きぐぉ〺〺ぅげげたげぅけさぅこご

きぐぉたぅげげたげくくご

きぐぉ〺〺ぅげげたげくくご〱〶

きぐぉたぅげげたぇげくさぐ

きぐぉ〺〺ぅげげたぇげくさぐ〱〷

きぐぉたぅげげたくぐ

きぐぉ〺〺ぅげげたくぐ〱〸

きぐぉたぅげげたごくぐくがくぇす

きぐぉ〺〺ぅげげたごくぐくがくぇす〱〹きぐぉたぅげげたいぉきこ

きぐぉ〺〺ぅげげたいぉきこ

きぐぉたぅげげたぁげぇ

きぐぉ〺〺ぅげげたぁげぇ〲〲

きぐぉたぅげげたさぎかぎくしぎ

きぐぉ〺〺ぅげげたさぎかぎくしぎ〲〳

きぐぉたぅげげたごげさぎぃぁごぅ

きぐぉ〺〺ぅげげたごげさぎぃぁごぅ〲〴

きぐぉたぅげげたくごえぅげ

きぐぉ〺〺ぅげげたくごえぅげ〲〵

きぐぉたぅげげたぉぎごぅげぎ

きぐぉ〺〺ぅげげたぉぎごぅげぎ

きぐぉたぅげげたぐぅぎいぉぎぇ

きぐぉ〺〺ぅげげたぐぅぎいぉぎぇ

〲〸

きぐぉたぅげげたぉぎたこごぁごさこ

きぐぉ〺〺ぅげげたぉぎたこごぁごさこ〲〹きぐぉたぅげげたぁぃぃぅここ

きぐぉ〺〺ぅげげたぁぃぃぅここ〳〰

きぐぉたぅげげたぁきくいぅ

きぐぉ〺〺ぅげげたぁきくいぅ〳〱

きぐぉたぅげげたぁここぅげご

きぐぉ〺〺ぅげげたぁここぅげご

きぐぉたぅげげたあぁいたうぉがぅ

きぐぉ〺〺ぅげげたあぁいたうぉがぅ〳〴

きぐぉたぅげげたあぁこぅ

きぐぉ〺〺ぅげげたあぁこぅ〳〵

きぐぉたぅげげたぃくぎざぅげこぉくぎ

きぐぉ〺〺ぅげげたぃくぎざぅげこぉくぎ〳〶

きぐぉたぅげげたいぉこぐ

きぐぉ〺〺ぅげげたいぉこぐ〳〷

きぐぉたぅげげたいさぐたいぁごぁげぅぐ

きぐぉ〺〺ぅげげたいさぐたいぁごぁげぅぐ

きぐぉたぅげげたうぉがぅたぅじぉこごこ

きぐぉ〺〺ぅげげたうぉがぅたぅじぉこごこ〴〰

きぐぉたぅげげたうぉがぅたぉぎたさこぅ

きぐぉ〺〺ぅげげたうぉがぅたぉぎたさこぅ〴〱

きぐぉたぅげげたうぉがぅ

きぐぉ〺〺ぅげげたうぉがぅ〴〲

きぐぉたぅげげたぉぎうくたかぅす

きぐぉ〺〺ぅげげたぉぎうくたざぁがさぅ〴〳

きぐぉたぅげげたぉぎうくたぎくかぅす

きぐぉ〺〺ぅげげたぉぎうくたぎくかぅす

きぐぉたぅげげたぉぎうくたざぁがさぅ

きぐぉ〺〺ぅげげたぉぎうくたかぅす

きぐぉたぅげげたぉぎうく

きぐぉ〺〺ぅげげたぉぎうく

〳

〸
〹

〱〴
〱〵

〲〰
〲〱

〲〶
〲〷

〳〲
〳〳

〳〸
〳〹

〴〴
〴〵
〴〶
〴〷
〴〸

（次ページに続く）

ぁ〮〱〮 定義された値とハンドル〵〳〹
戻り値 （続き）〱〲

きぐぉたぅげげたぉく

きぐぉ〺〺ぅげげたぉく

きぐぉたぅげげたかぅすざぁが

きぐぉ〺〺ぅげげたかぅすざぁがきぐぉたぅげげたがくぃかごすぐぅ

きぐぉ〺〺ぅげげたがくぃかごすぐぅ〵

きぐぉたぅげげたぎぁきぅ

きぐぉ〺〺ぅげげたぎぁきぅ〶

きぐぉたぅげげたぎくたきぅき

きぐぉ〺〺ぅげげたぎくたきぅき〷

きぐぉたぅげげたぎくごたこぁきぅ

きぐぉ〺〺ぅげげたぎくごたこぁきぅ

きぐぉたぅげげたぎくたこぐぁぃぅ

きぐぉ〺〺ぅげげたぎくたこぐぁぃぅ

きぐぉたぅげげたぎくたこさぃえたうぉがぅ

きぐぉ〺〺ぅげげたぎくたこさぃえたうぉがぅ〱〱

きぐぉたぅげげたぐくげご

きぐぉ〺〺ぅげげたぐくげご〱〲

きぐぉたぅげげたけさくごぁ

きぐぉ〺〺ぅげげたけさくごぁ〱〳

きぐぉたぅげげたげぅぁいたくぎがす

きぐぉ〺〺ぅげげたげぅぁいたくぎがす

きぐぉたぅげげたげきぁたぃくぎうがぉぃご

きぐぉ〺〺ぅげげたげきぁたぃくぎうがぉぃご

きぐぉたぅげげたげきぁたこすぎぃ

きぐぉ〺〺ぅげげたげきぁたこすぎぃ〱〷

きぐぉたぅげげたこぅげざぉぃぅ

きぐぉ〺〺ぅげげたこぅげざぉぃぅ〱〸

きぐぉたぅげげたこぉずぅ

きぐぉ〺〺ぅげげたこぉずぅ〱〹きぐぉたぅげげたこぐぁしぎ

きぐぉ〺〺ぅげげたこぐぁしぎ

きぐぉたぅげげたさぎこさぐぐくげごぅいたいぁごぁげぅぐ

きぐぉ〺〺ぅげげたさぎこさぐぐくげごぅいたいぁごぁげぅぐ

きぐぉたぅげげたさぎこさぐぐくげごぅいたくぐぅげぁごぉくぎ

きぐぉ〺〺ぅげげたさぎこさぐぐくげごぅいたくぐぅげぁごぉくぎ〲〳きぐぉたぅげげたしぉぎ

きぐぉ〺〺ぅげげたしぉぎ〲〴

きぐぉたぅげげたがぁこごぃくいぅ

きぐぉ〺〺ぅげげたがぁこごぃくいぅ

〲〵

〳
〴

〸
〹
〱〰

〱〴
〱〵
〱〶

〲〰
〲〱
〲〲

〲〶
〲〷
〲〸

バッファアドレス定数〲〹ぃ言語型〺 ぶはどつ 〪 っはのびぴぃ〫〫言語型〺〳〰

うはひぴひちの言語型〺 （定義済みメモリ位置）

ぶはどつ 〪 っはのびぴ〳〱

きぐぉたあくごごくききぐぉ〺〺あくごごくき〳〲きぐぉたぉぎたぐがぁぃぅ

きぐぉ〺〺ぉぎたぐがぁぃぅ

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

〵〴〰
様々な定数

〱
〲

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺〴

うはひぴひちの言語型〺 ぉぎごぅぇぅげっはのびぴ どのぴ 〨または名前無しづのふね〩〵

きぐぉたぐげくぃたぎさががきぐぉ〺〺ぐげくぃたぎさがが〶きぐぉたぁぎすたこくさげぃぅ

きぐぉ〺〺ぁぎすたこくさげぃぅ〷

きぐぉたぁぎすたごぁぇ

きぐぉ〺〺ぁぎすたごぁぇ

きぐぉたさぎいぅうぉぎぅいきぐぉ〺〺さぎいぅうぉぎぅい〱〰

きぐぉたあこぅぎいたくざぅげえぅぁい

きぐぉ〺〺あこぅぎいたくざぅげえぅぁい〱〱

きぐぉたかぅすざぁがたぉぎざぁがぉい

きぐぉ〺〺かぅすざぁがたぉぎざぁがぉい〱〲きぐぉたがくぃかたぅじぃがさこぉざぅ

きぐぉ〺〺がくぃかたぅじぃがさこぉざぅ〱〳

きぐぉたがくぃかたこえぁげぅい

きぐぉ〺〺がくぃかたこえぁげぅい

きぐぉたげくくごきぐぉ〺〺げくくご

〳

〸
〹

〱〴
〱〵
〱〶
〱〷
〱〸

ステータスのサイズと予約されたインデックス値（Fortran言語のみ）〱〹

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〲〰

きぐぉたこごぁごさこたこぉずぅ〲〱

きぐぉたこくさげぃぅ

〲〲
〲〳
〲〴

きぐぉたごぁぇ
きぐぉたぅげげくげぃ〫〫言語では定義されないぃ〫〫言語では定義されないぃ〫〫言語では定義されないぃ〫〫言語では定義されない

〲〵
〲〶
〲〷
〲〸
〲〹

可変のアドレスサイズ（Fortran言語のみ）
うはひぴひちの言語型〺 ぉぎごぅぇぅげきぐぉたぁいいげぅここたかぉぎい〳〰
〳〱

きぐぉたぉぎごぅぇぅげたかぉぎい〳〲

きぐぉたくううこぅごたかぉぎいぃ〫〫言語では定義されないぃ〫〫言語では定義されないぃ〫〫言語では定義されない〳〳〳〴

エラー処理指示子〳〵〳〶

ぃ言語型〺 きぐぉたぅひひとちのつぬづひぃ〫〫言語型〺 きぐぉ〺〺ぅひひとちのつぬづひ〳〷〳〸

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〳〹きぐぉたぅげげくげこたぁげぅたうぁごぁがきぐぉ〺〺ぅげげくげこたぁげぅたうぁごぁが〴〰

きぐぉたぅげげくげこたげぅごさげぎ

きぐぉ〺〺ぅげげくげこたげぅごさげぎ

〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこぁ〮〱〮 定義された値とハンドル〵〴〱
文字列の最大サイズ〱〲

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺

うはひぴひちの言語型〺 ぉぎごぅぇぅげっはのびぴ どのぴ 〨または名前無しづのふね〩〴

きぐぉたきぁじたぐげくぃぅここくげたぎぁきぅ

きぐぉ〺〺きぁじたぐげくぃぅここくげたぎぁきぅ〵

きぐぉたきぁじたぅげげくげたこごげぉぎぇ

きぐぉ〺〺きぁじたぅげげくげたこごげぉぎぇ〶

きぐぉたきぁじたいぁごぁげぅぐたこごげぉぎぇ

きぐぉ〺〺きぁじたいぁごぁげぅぐたこごげぉぎぇ〷

きぐぉたきぁじたぉぎうくたかぅす

きぐぉ〺〺きぁじたぉぎうくたかぅす

きぐぉたきぁじたぉぎうくたざぁがきぐぉ〺〺きぁじたぉぎうくたざぁが〱〰

きぐぉたきぁじたくあおぅぃごたぎぁきぅ

きぐぉ〺〺きぁじたくあおぅぃごたぎぁきぅ〱〱

きぐぉたきぁじたぐくげごたぎぁきぅ

きぐぉ〺〺きぁじたぐくげごたぎぁきぅ

〱〲

〳

〸
〹

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

〵〴〲
〱
〲
〳
〴
〵

名前付き定義済みデータ型
ぃ〫〫言語型〺 きぐぉ〺〺いちぴちぴべばづ

きぐぉたこえくげご
きぐぉたぉぎご
きぐぉたがくぎぇきぐぉたがくぎぇたがくぎぇたぉぎごきぐぉたがくぎぇたがくぎぇきぐぉたこぉぇぎぅいたぃえぁげ

きぐぉ〺〺こえくげご
きぐぉ〺〺ぉぎご
きぐぉ〺〺がくぎぇ
きぐぉ〺〺がくぎぇたがくぎぇたぉぎご
きぐぉ〺〺がくぎぇたがくぎぇ
きぐぉ〺〺こぉぇぎぅいたぃえぁげ

きぐぉたさぎこぉぇぎぅいたぃえぁげ

きぐぉ〺〺さぎこぉぇぎぅいたぃえぁげ

きぐぉたさぎこぉぇぎぅいたこえくげご
きぐぉたさぎこぉぇぎぅいきぐぉたさぎこぉぇぎぅいたがくぎぇきぐぉたさぎこぉぇぎぅいたがくぎぇたがくぎぇきぐぉたうがくぁご
きぐぉたいくさあがぅ
きぐぉたがくぎぇたいくさあがぅ
きぐぉたしぃえぁげ

きぐぉ〺〺さぎこぉぇぎぅいたこえくげご
きぐぉ〺〺さぎこぉぇぎぅい
きぐぉ〺〺さぎこぉぇぎぅいたがくぎぇ
きぐぉ〺〺さぎこぉぇぎぅいたがくぎぇたがくぎぇ
きぐぉ〺〺うがくぁご
きぐぉ〺〺いくさあがぅきぐぉ〺〺がくぎぇたいくさあがぅきぐぉ〺〺しぃえぁげ

きぐぉたぃたあくくがきぐぉたぉぎご〸たご
きぐぉたぉぎご〱〶たごきぐぉたぉぎご〳〲たごきぐぉたぉぎご〶〴たごきぐぉたさぉぎご〸たご
きぐぉたさぉぎご〱〶たごきぐぉたさぉぎご〳〲たごきぐぉたさぉぎご〶〴たごきぐぉたぁぉぎごきぐぉたくううこぅご
きぐぉたぃたぃくきぐがぅじ
きぐぉたぃたうがくぁごたぃくきぐがぅじ
きぐぉたぃたいくさあがぅたぃくきぐがぅじ
きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじ
きぐぉたあすごぅ
きぐぉたぐぁぃかぅい（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）（C言語のハンドル型を使用）

っとちひ（印字可能文字として扱われる）
びどでのづつ びとはひぴ どのぴ
びどでのづつ どのぴ
びどでのづつ ぬはのでびどでのづつ ぬはので ぬはので
ぬはので ぬはので （同義）
びどでのづつ っとちひ
（整数値として扱われる）
ふのびどでのづつ っとちひ
（整数値として扱われる）
ふのびどでのづつ びとはひぴ
ふのびどでのづつ どのぴ
ふのびどでのづつ ぬはので
ふのびどでのづつ ぬはので ぬはのでてぬはちぴ
つはふぢぬづ
ぬはので つはふぢぬづ
ぷっとちひたぴ（〼びぴつつづて〮と〾で定義される）（印字可能文字として
扱われる）
たあははぬ
どのぴ〸たぴどのぴ〱〶たぴ
どのぴ〳〲たぴ
どのぴ〶〴たぴ
ふどのぴ〸たぴ
ふどのぴ〱〶たぴ
ふどのぴ〳〲たぴ
ふどのぴ〶〴たぴ
きぐぉたぁどのぴ
きぐぉたくててびづぴてぬはちぴ たぃはねばぬづへてぬはちぴ たぃはねばぬづへ
つはふぢぬづ たぃはねばぬづへ
ぬはので つはふぢぬづ たぃはねばぬづへ

きぐぉ〺〺あすごぅ
きぐぉ〺〺ぐぁぃかぅい（任意のC言語／C++言語型）（任意のC言語／C++言語型）

きぐぉ〺〺ぃえぁげ

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

C言語／C++言語型

ぃ言語型〺 きぐぉたいちぴちぴべばづ
うはひぴひちの言語型〺 ぉぎごぅぇぅげきぐぉたぃえぁげぁ〮〱〮 定義された値とハンドル〵〴〳〱

名前付き定義済みデータ型
ぃ言語型〺 きぐぉたいちぴちぴべばづ

Fortran言語型〲〳

ぃ〫〫言語型〺 きぐぉ〺〺いちぴちぴべばづ〴

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〵きぐぉたぉぎごぅぇぅげきぐぉ〺〺ぉぎごぅぇぅげきぐぉたげぅぁが

きぐぉ〺〺げぅぁが

きぐぉたいくさあがぅたぐげぅぃぉこぉくぎ

きぐぉ〺〺いくさあがぅたぐげぅぃぉこぉくぎきぐぉたぃくきぐがぅじ

きぐぉ〺〺うたぃくきぐがぅじ

きぐぉたがくぇぉぃぁが

きぐぉ〺〺がくぇぉぃぁがきぐぉたぃえぁげぁぃごぅげ

きぐぉ〺〺ぃえぁげぁぃごぅげ

きぐぉたぁぉぎご

（C言語のハンドル型を使用）

きぐぉたくううこぅご（C言語のハンドル型を使用）

きぐぉたあすごぅ

きぐぉ〺〺あすごぅ

きぐぉたぐぁぃかぅい

きぐぉ〺〺ぐぁぃかぅいぉぎごぅぇぅげ
〶〷げぅぁが〸
いくさあがぅ ぐげぅぃぉこぉくぎ
〹
ぃくきぐがぅじ
〱〰
がくぇぉぃぁが〱〱ぃえぁげぁぃごぅげ〨〱〩〱〲ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩〱〳ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 〱〴〱〵（任意のうはひぴひちの言語型）〱〶（任意のうはひぴひちの言語型）
〱〷
〱〸
〱〹

名前付き定義済みデータ型

C++言語型〲〰

ぃ言語型〺 きぐぉたいちぴちぴべばづ〲〱

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〲〲

またはごすぐぅ〨きぐぉたいちぴちぴべばづ〩〲〳〲〴

きぐぉたぃじじたあくくがきぐぉたぃじじたぃくきぐがぅじ
きぐぉたぃじじたいくさあがぅたぃくきぐがぅじ
きぐぉたぃじじたがくぎぇたいくさあがぅたぃくきぐがぅじ

ぢははぬ
びぴつ〺〺っはねばぬづへ〼てぬはちぴ〾
びぴつ〺〺っはねばぬづへ〼つはふぢぬづ〾
びぴつ〺〺っはねばぬづへ〼ぬはので つはふぢぬづ〾

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

〵〴〴
〱
〲

オプションのデータ型 （うはひぴひちの言語）
ぃ言語型〺 きぐぉたいちぴちぴべばづ

Fortran言語型

ぃ〫〫言語型〺 きぐぉ〺〺いちぴちぴべばづ〳〴

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〵きぐぉたいくさあがぅたぃくきぐがぅじ

きぐぉ〺〺うたいくさあがぅたぃくきぐがぅじ〶

きぐぉたぉぎごぅぇぅげ〱きぐぉ〺〺ぉぎごぅぇぅげ〱〷きぐぉたぉぎごぅぇぅげ〲きぐぉ〺〺ぉぎごぅぇぅげ〲きぐぉたぉぎごぅぇぅげ〴きぐぉ〺〺ぉぎごぅぇぅげ〴〱〰

きぐぉたぉぎごぅぇぅげ〸きぐぉ〺〺ぉぎごぅぇぅげ〸〱〱きぐぉたぉぎごぅぇぅげ〱〶

きぐぉ〺〺ぉぎごぅぇぅげ〱〶〱〲

きぐぉたげぅぁが〲きぐぉ〺〺げぅぁが〲〱〳

きぐぉたげぅぁが〴きぐぉ〺〺げぅぁが〴

きぐぉたげぅぁが〸きぐぉ〺〺げぅぁが〸〱〶

きぐぉたげぅぁが〱〶きぐぉ〺〺うたげぅぁが〱〶〱〷きぐぉたぃくきぐがぅじ〴

きぐぉ〺〺うたぃくきぐがぅじ〴〱〸

きぐぉたぃくきぐがぅじ〸

きぐぉ〺〺うたぃくきぐがぅじ〸〱〹

きぐぉたぃくきぐがぅじ〱〶きぐぉ〺〺うたぃくきぐがぅじ〱〶きぐぉたぃくきぐがぅじ〳〲きぐぉ〺〺うたぃくきぐがぅじ〳〲

〸
〹

〱〴
〱〵

〲〰
〲〱

いくさあがぅ ぃくきぐがぅじぉぎごぅぇぅげ〪〱ぉぎごぅぇぅげ〪〸ぉぎごぅぇぅげ〪〴ぉぎごぅぇぅげ〪〸ぉぎごぅぇぅげ〪〱〶げぅぁが〪〲げぅぁが〪〴げぅぁが〪〸げぅぁが〪〱〶
ぃくきぐがぅじ〪〴ぃくきぐがぅじ〪〸ぃくきぐがぅじ〪〱〶ぃくきぐがぅじ〪〳〲

〲〲
〲〳
〲〴

リダクション関数のためのデータ型 （C言語／C++言語）〲〵

ぃ言語型〺 きぐぉたいちぴちぴべばづ〲〶

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〲〷ぃ〫〫言語型〺 きぐぉ〺〺いちぴちぴべばづ

きぐぉたうがくぁごたぉぎご

きぐぉ〺〺うがくぁごたぉぎご

きぐぉたいくさあがぅたぉぎご

きぐぉ〺〺いくさあがぅたぉぎご〳〰

きぐぉたがくぎぇたぉぎご

きぐぉ〺〺がくぎぇたぉぎご

〳〱きぐぉた〲ぉぎご

きぐぉ〺〺ごしくぉぎご〳〲

きぐぉたこえくげごたぉぎご

きぐぉ〺〺こえくげごたぉぎご

きぐぉたがくぎぇたいくさあがぅたぉぎご

きぐぉ〺〺がくぎぇたいくさあがぅたぉぎご

〲〸
〲〹

〳〳
〳〴
〳〵
〳〶
〳〷

リダクション関数のためのデータ型 （Fortran言語）〳〸ぃ言語型〺 きぐぉたいちぴちぴべばづ〳〹

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〴〰

きぐぉた〲げぅぁが

きぐぉ〺〺ごしくげぅぁが

きぐぉた〲いくさあがぅたぐげぅぃぉこぉくぎ

きぐぉ〺〺ごしくいくさあがぅたぐげぅぃぉこぉくぎ

きぐぉた〲ぉぎごぅぇぅげきぐぉ〺〺ごしくぉぎごぅぇぅげ〴〱ぃ〫〫言語型〺 きぐぉ〺〺いちぴちぴべばづ

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぁ〮〱〮 定義された値とハンドル〵〴〵

派生データ型作成のための特別なデータ型
ぃ言語型〺 きぐぉたいちぴちぴべばづぃ〫〫言語型〺 きぐぉ〺〺いちぴちぴべばづ〱〲〳

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〴きぐぉたさあきぐぉ〺〺さあ〵

きぐぉたがあきぐぉ〺〺があ〶〷〸予約されたコミュニケータ

〹〱〰

ぃ言語型〺 きぐぉたぃはねね

ぃ〫〫言語型〺 きぐぉ〺〺ぉのぴひちっはねね

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〱〱〱〲きぐぉたぃくききたしくげがいきぐぉ〺〺ぃくききたしくげがい〱〳きぐぉたぃくききたこぅがう

きぐぉ〺〺ぃくききたこぅがう

〱〴
〱〵
〱〶

コミュニケータとグループ比較の結果〱〷〱〸

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺 っはのびぴ どのぴ〱〹

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〨または名前無しづのふね〩〲〰

きぐぉたぉいぅぎごきぐぉ〺〺ぉいぅぎご〲〱きぐぉたぃくぎぇげさぅぎご

きぐぉ〺〺ぃくぎぇげさぅぎご〲〲

きぐぉたこぉきぉがぁげきぐぉ〺〺こぉきぉがぁげ

きぐぉたさぎぅけさぁが

きぐぉ〺〺さぎぅけさぁが

〲〳
〲〴
〲〵
〲〶
〲〷

環境問い合わせのキー〲〸

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺 っはのびぴ どのぴ〲〹

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〨または名前無しづのふね〩〳〰

きぐぉたごぁぇたさあ

きぐぉ〺〺ごぁぇたさあきぐぉたぉくきぐぉ〺〺ぉく〳〳きぐぉたえくこご

きぐぉ〺〺えくこご〳〴

きぐぉたしごぉきぅたぉこたぇがくあぁがきぐぉ〺〺しごぉきぅたぉこたぇがくあぁが

〳〵

〳〱
〳〲

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

〵〴〶
集団操作

〱
〲

ぃ言語型〺 きぐぉたくば

ぃ〫〫言語型〺 っはのびぴ きぐぉ〺〺くば〳〴

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〵きぐぉたきぁじきぐぉ〺〺きぁじ〶

きぐぉたきぉぎ

きぐぉ〺〺きぉぎ〷

きぐぉたこさききぐぉ〺〺こさき

きぐぉたぐげくい

きぐぉ〺〺ぐげくい〱〰

きぐぉたきぁじがくぃ

きぐぉ〺〺きぁじがくぃ〱〱

きぐぉたきぉぎがくぃ

きぐぉ〺〺きぉぎがくぃ〱〲きぐぉたあぁぎいきぐぉ〺〺あぁぎい〱〳

きぐぉたあくげきぐぉ〺〺あくげ

きぐぉたあじくげ

きぐぉ〺〺あじくげ〱〶

きぐぉたがぁぎいきぐぉ〺〺がぁぎい〱〷

きぐぉたがくげきぐぉ〺〺がくげ〱〸きぐぉたがじくげ

きぐぉ〺〺がじくげ〱〹

きぐぉたげぅぐがぁぃぅ

きぐぉ〺〺げぅぐがぁぃぅ

〸
〹

〱〴
〱〵

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぁ〮〱〮 定義された値とハンドル〵〴〷〱

nullハンドル
ぃ言語／うはひぴひちの言語での名前

ぃ〫〫言語での名前

ぃ言語／うはひぴひちの言語での型

ぃ〫〫言語型〲〳

きぐぉたぇげくさぐたぎさががきぐぉ〺〺ぇげくさぐたぎさががきぐぉたぇひはふば 〯 ぉぎごぅぇぅげっはのびぴ きぐぉ〺〺ぇひはふば

きぐぉたぃくききたぎさががきぐぉ〺〺ぃくききたぎさがが

〵
〶
〷
〸

1〩

きぐぉたぃはねね 〯 ぉぎごぅぇぅげ〴〹きぐぉたいぁごぁごすぐぅたぎさががきぐぉ〺〺いぁごぁごすぐぅたぎさががきぐぉたいちぴちぴべばづ 〯 ぉぎごぅぇぅげきぐぉたげぅけさぅこごたぎさががっはのびぴ きぐぉ〺〺いちぴちぴべばづ
きぐぉ〺〺げぅけさぅこごたぎさががきぐぉたげづぱふづびぴ 〯 ぉぎごぅぇぅげっはのびぴ きぐぉ〺〺げづぱふづびぴ

きぐぉたくぐたぎさががきぐぉ〺〺くぐたぎさがが

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

きぐぉたくば 〯 ぉぎごぅぇぅげっはのびぴ きぐぉ〺〺くば

きぐぉたぅげげえぁぎいがぅげたぎさががきぐぉ〺〺ぅげげえぁぎいがぅげたぎさががきぐぉたぅひひとちのつぬづひ 〯 ぉぎごぅぇぅげきぐぉたうぉがぅたぎさががっはのびぴ きぐぉ〺〺ぅひひとちのつぬづひ
きぐぉ〺〺うぉがぅたぎさがが

〱〶
〱〷
〱〸
〱〹
〲〰

きぐぉたうどぬづ 〯 ぉぎごぅぇぅげ〲〱きぐぉたぉぎうくたぎさががきぐぉ〺〺ぉぎうくたぎさががきぐぉたぉのては 〯 ぉぎごぅぇぅげっはのびぴ きぐぉ〺〺ぉのては

きぐぉたしぉぎたぎさががきぐぉ〺〺しぉぎたぎさがが

〲〲
〲〳
〲〴
〲〵

きぐぉたしどの 〯 ぉぎごぅぇぅげ1 〩 ぃ〫〫言語型〺 クラス階層ときぐぉ〺〺ぃくききたぎさががの型については〴〹〵ページの第〱〶〮〱〮〷節を参照

〲〶
〲〷
〲〸
〲〹
〳〰

空のグループぃ言語型〺 きぐぉたぇひはふば〳〱

ぃ〫〫言語型〺 っはのびぴ きぐぉ〺〺ぇひはふば〳〲〳〳

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〳〴きぐぉたぇげくさぐたぅきぐごす

きぐぉ〺〺ぇげくさぐたぅきぐごす

〳〵
〳〶
〳〷

トポロジー

〳〸

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺 っはのびぴ どのぴ〳〹

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〨または名前無しづのふね〩〴〰

きぐぉたぇげぁぐえ

きぐぉ〺〺ぇげぁぐえ

きぐぉたぃぁげご

きぐぉ〺〺ぃぁげご〴〳

きぐぉたいぉこごたぇげぁぐえ

きぐぉ〺〺いぉこごたぇげぁぐえ

〴〴

〴〱
〴〲

〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約〵〴〸
定義済み機能〱〲ぃ言語／うはひぴひちの言語での名前

ぃ〫〫言語での名前

ぃ言語／うはひぴひちの言語型

ぃ〫〫言語型〳〴〵

きぐぉたぃくききたぎさががたぃくぐすたうぎ〶

きぐぉたぃはねねたっはばべたちぴぴひたてふのっぴどはの〷〯 ぃくききたぃくぐすたぁごごげたうぎ〸

きぐぉたぃくききたいさぐたうぎ

きぐぉたぃくききたぎさががたぃくぐすたうぎ
ぃ言語と同じ1 〩きぐぉたぃくききたいさぐたうぎ〹〱〰

きぐぉたぃはねねたっはばべたちぴぴひたてふのっぴどはの〱〱〯 ぃくききたぃくぐすたぁごごげたうぎ

〱〲
〱〳
〱〴
〱〵
〱〶

きぐぉたぃくききたぎさががたいぅがぅごぅたうぎきぐぉたぃはねねたつづぬづぴづたちぴぴひたてふのっぴどはの

きぐぉたしぉぎたぎさががたぃくぐすたうぎ
きぐぉたしどのたっはばべたちぴぴひたてふのっぴどはの〱〸〯 しぉぎたぃくぐすたぁごごげたうぎ

きぐぉたしぉぎたいさぐたうぎ

〲〰
〲〱
〲〲
〲〳

きぐぉたしどのたっはばべたちぴぴひたてふのっぴどはの

きぐぉたしぉぎたぎさががたいぅがぅごぅたうぎきぐぉたしどのたつづぬづぴづたちぴぴひたてふのっぴどはの〲〵〯 しぉぎたいぅがぅごぅたぁごごげたうぎ〲〷

きぐぉたごすぐぅたぎさががたぃくぐすたうぎ〲〸

きぐぉたごべばづたっはばべたちぴぴひたてふのっぴどはの〲〹〯 ごすぐぅたぃくぐすたぁごごげたうぎ

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

きぐぉたごすぐぅたいさぐたうぎ
きぐぉたごべばづたっはばべたちぴぴひたてふのっぴどはの

きぐぉたごすぐぅたぎさががたいぅがぅごぅたうぎきぐぉたごべばづたつづぬづぴづたちぴぴひたてふのっぴどはの〯 ごすぐぅたいぅがぅごぅたぁごごげたうぎ〳〷

1 〲〳〶ページの第〶〮〷〮〲節の

〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたしぉぎたぎさががたぃくぐすたうぎ
ぃ言語と同じ1 〩きぐぉたしぉぎたいさぐたうぎ
ぃ言語と同じ1 〩きぐぉたしぉぎたぎさががたいぅがぅごぅたうぎぃ言語と同じ1 〩きぐぉたごすぐぅたぎさががたぃくぐすたうぎ
ぃ言語と同じ1 〩きぐぉたごすぐぅたいさぐたうぎ
ぃ言語と同じ1 〩〯 ごすぐぅたぃくぐすたぁごごげたうぎ〳〶〳〸

ぃ言語と同じ1 〩〯 しぉぎたぃくぐすたぁごごげたうぎ〲〴〲〶

きぐぉたぃくききたぎさががたいぅがぅごぅたうぎ〯 ぃくききたいぅがぅごぅたぁごごげたうぎ〱〷〱〹

ぃ言語と同じ1 〩きぐぉたごすぐぅたぎさががたいぅがぅごぅたうぎぃ言語と同じ1 〩きぐぉたぃくききたぎさががたぃくぐすたうぎなどに関する実装者へのアドバイス参照

ぁ〮〱〮 定義された値とハンドル〵〴〹廃止された定義済み関数〱

ぃ言語／うはひぴひちの言語での名前

ぃ〫〫言語での名前

ぃ言語／うはひぴひちの言語型

ぃ〫〫言語型〲〳

きぐぉたぎさががたぃくぐすたうぎ

きぐぉ〺〺ぎさががたぃくぐすたうぎ

きぐぉたぃはばべたてふのっぴどはの 〯 ぃくぐすたうさぎぃごぉくぎ

きぐぉ〺〺ぃはばべたてふのっぴどはの

きぐぉたいさぐたうぎ

きぐぉ〺〺いさぐたうぎ

きぐぉたぃはばべたてふのっぴどはの 〯 ぃくぐすたうさぎぃごぉくぎ

きぐぉ〺〺ぃはばべたてふのっぴどはの

きぐぉたぎさががたいぅがぅごぅたうぎきぐぉ〺〺ぎさががたいぅがぅごぅたうぎきぐぉたいづぬづぴづたてふのっぴどはの 〯 いぅがぅごぅたうさぎぃごぉくぎ

きぐぉ〺〺いづぬづぴづたてふのっぴどはの

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

定義済み属性キー〱〴〱〵

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺

うはひぴひちの言語型〺 ぉぎごぅぇぅげっはのびぴ どのぴ 〨または名前無しづのふね〩

きぐぉたぁぐぐぎさき

きぐぉ〺〺ぁぐぐぎさき〱〸

きぐぉたがぁこごさこぅいぃくいぅ

きぐぉ〺〺がぁこごさこぅいぃくいぅ〱〹

きぐぉたさぎぉざぅげこぅたこぉずぅ

きぐぉ〺〺さぎぉざぅげこぅたこぉずぅ〲〰

きぐぉたしぉぎたあぁこぅ

きぐぉ〺〺しぉぎたあぁこぅ

きぐぉたしぉぎたいぉこぐたさぎぉご

きぐぉ〺〺しぉぎたいぉこぐたさぎぉご

きぐぉたしぉぎたこぉずぅ

きぐぉ〺〺しぉぎたこぉずぅ

〱〶
〱〷

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

モード定数

〲〷
〲〸

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺

うはひぴひちの言語型〺 ぉぎごぅぇぅげっはのびぴ どのぴ 〨または名前無しづのふね〩

きぐぉたきくいぅたぁぐぐぅぎい

きぐぉ〺〺きくいぅたぁぐぐぅぎい〳〱

きぐぉたきくいぅたぃげぅぁごぅ

きぐぉ〺〺きくいぅたぃげぅぁごぅ〳〲

きぐぉたきくいぅたいぅがぅごぅたくぎたぃがくこぅ

きぐぉ〺〺きくいぅたいぅがぅごぅたくぎたぃがくこぅ〳〳

きぐぉたきくいぅたぅじぃが

きぐぉ〺〺きくいぅたぅじぃが〳〴

きぐぉたきくいぅたぎくぃえぅぃか

きぐぉ〺〺きくいぅたぎくぃえぅぃか

きぐぉたきくいぅたぎくぐげぅぃぅいぅ

きぐぉ〺〺きくいぅたぎくぐげぅぃぅいぅ〳〷きぐぉたきくいぅたぎくぐさご

きぐぉ〺〺きくいぅたぎくぐさご〳〸

きぐぉたきくいぅたぎくこごくげぅ

きぐぉ〺〺きくいぅたぎくこごくげぅ〳〹きぐぉたきくいぅたぎくこさぃぃぅぅい

きぐぉ〺〺きくいぅたぎくこさぃぃぅぅい〴〰

きぐぉたきくいぅたげいくぎがす

きぐぉ〺〺きくいぅたげいくぎがす

きぐぉたきくいぅたげいしげ

きぐぉ〺〺きくいぅたげいしげ〴〳

きぐぉたきくいぅたこぅけさぅぎごぉぁが

きぐぉ〺〺きくいぅたこぅけさぅぎごぉぁが〴〴きぐぉたきくいぅたさぎぉけさぅたくぐぅぎ

きぐぉ〺〺きくいぅたさぎぉけさぅたくぐぅぎ〴〵

きぐぉたきくいぅたしげくぎがす

きぐぉ〺〺きくいぅたしげくぎがす

〴〶

〲〹
〳〰

〳〵
〳〶

〴〱
〴〲

〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約〵〵〰
データ型デコード定数〱〲

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺〴

うはひぴひちの言語型〺 ぉぎごぅぇぅげっはのびぴ どのぴ 〨または名前無しづのふね〩〵

きぐぉたぃくきあぉぎぅげたぃくぎごぉぇさくさこ

きぐぉ〺〺ぃくきあぉぎぅげたぃくぎごぉぇさくさこ〶

きぐぉたぃくきあぉぎぅげたいぁげげぁす

きぐぉ〺〺ぃくきあぉぎぅげたいぁげげぁす〷

きぐぉたぃくきあぉぎぅげたいさぐ

きぐぉ〺〺ぃくきあぉぎぅげたいさぐ

きぐぉたぃくきあぉぎぅげたう〹〰たぃくきぐがぅじ

きぐぉ〺〺ぃくきあぉぎぅげたう〹〰たぃくきぐがぅじ〱〰

きぐぉたぃくきあぉぎぅげたう〹〰たぉぎごぅぇぅげきぐぉ〺〺ぃくきあぉぎぅげたう〹〰たぉぎごぅぇぅげ〱〱きぐぉたぃくきあぉぎぅげたう〹〰たげぅぁが

きぐぉ〺〺ぃくきあぉぎぅげたう〹〰たげぅぁが〱〲

きぐぉたぃくきあぉぎぅげたえぉぎいぅじぅいたぉぎごぅぇぅげきぐぉ〺〺ぃくきあぉぎぅげたえぉぎいぅじぅいたぉぎごぅぇぅげ〱〳きぐぉたぃくきあぉぎぅげたえぉぎいぅじぅいきぐぉ〺〺ぃくきあぉぎぅげたえぉぎいぅじぅいきぐぉたぃくきあぉぎぅげたえざぅぃごくげたぉぎごぅぇぅげきぐぉ〺〺ぃくきあぉぎぅげたえざぅぃごくげたぉぎごぅぇぅげ〱〶きぐぉたぃくきあぉぎぅげたえざぅぃごくげ

きぐぉ〺〺ぃくきあぉぎぅげたえざぅぃごくげ〱〷きぐぉたぃくきあぉぎぅげたぉぎいぅじぅいたあがくぃか

きぐぉ〺〺ぃくきあぉぎぅげたぉぎいぅじぅいたあがくぃか〱〸

きぐぉたぃくきあぉぎぅげたぉぎいぅじぅいきぐぉ〺〺ぃくきあぉぎぅげたぉぎいぅじぅい〱〹きぐぉたぃくきあぉぎぅげたぎぁきぅいきぐぉ〺〺ぃくきあぉぎぅげたぎぁきぅいきぐぉたぃくきあぉぎぅげたげぅこぉずぅいきぐぉ〺〺ぃくきあぉぎぅげたげぅこぉずぅい〲〲

きぐぉたぃくきあぉぎぅげたこごげさぃごたぉぎごぅぇぅげきぐぉ〺〺ぃくきあぉぎぅげたこごげさぃごたぉぎごぅぇぅげ〲〳きぐぉたぃくきあぉぎぅげたこごげさぃご

きぐぉ〺〺ぃくきあぉぎぅげたこごげさぃご〲〴

きぐぉたぃくきあぉぎぅげたこさあぁげげぁす

きぐぉ〺〺ぃくきあぉぎぅげたこさあぁげげぁす〲〵

きぐぉたぃくきあぉぎぅげたざぅぃごくげ

きぐぉ〺〺ぃくきあぉぎぅげたざぅぃごくげ

〳

〸
〹

〱〴
〱〵

〲〰
〲〱

〲〶
〲〷
〲〸

スレッド定数〲〹〳〰

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺〳〱

うはひぴひちの言語型〺 ぉぎごぅぇぅげっはのびぴ どのぴ 〨または名前無しづのふね〩〳〲

きぐぉたごえげぅぁいたうさぎぎぅがぅい

きぐぉ〺〺ごえげぅぁいたうさぎぎぅがぅい

きぐぉたごえげぅぁいたきさがごぉぐがぅきぐぉ〺〺ごえげぅぁいたきさがごぉぐがぅきぐぉたごえげぅぁいたこぅげぉぁがぉずぅいきぐぉ〺〺ごえげぅぁいたこぅげぉぁがぉずぅいきぐぉたごえげぅぁいたこぉぎぇがぅ

きぐぉ〺〺ごえげぅぁいたこぉぎぇがぅ

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ファイル操作定数（その1）
ぃ言語型〺 っはのびぴ きぐぉたくててびづぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺

うはひぴひちの言語型〺 ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩

っはのびぴ きぐぉ〺〺くててびづぴ 〨または名前無しづのふね〩

きぐぉたいぉこぐがぁぃぅきぅぎごたぃさげげぅぎご

きぐぉ〺〺いぉこぐがぁぃぅきぅぎごたぃさげげぅぎごぁ〮〱〮 定義された値とハンドル〵〵〱ファイル操作定数（その2）〱〲

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺

うはひぴひちの言語型〺 ぉぎごぅぇぅげっはのびぴ どのぴ 〨または名前無しづのふね〩〴

きぐぉたいぉこごげぉあさごぅたあがくぃか

きぐぉ〺〺いぉこごげぉあさごぅたあがくぃか〵

きぐぉたいぉこごげぉあさごぅたぃすぃがぉぃきぐぉ〺〺いぉこごげぉあさごぅたぃすぃがぉぃ〶きぐぉたいぉこごげぉあさごぅたいうがごたいぁげぇ

きぐぉ〺〺いぉこごげぉあさごぅたいうがごたいぁげぇ〷

きぐぉたいぉこごげぉあさごぅたぎくぎぅ

きぐぉ〺〺いぉこごげぉあさごぅたぎくぎぅ

きぐぉたくげいぅげたぃきぐぉ〺〺くげいぅげたぃ〱〰

きぐぉたくげいぅげたうくげごげぁぎ

きぐぉ〺〺くげいぅげたうくげごげぁぎ〱〱

きぐぉたこぅぅかたぃさげきぐぉ〺〺こぅぅかたぃさげ〱〲

きぐぉたこぅぅかたぅぎい

きぐぉ〺〺こぅぅかたぅぎい〱〳

きぐぉたこぅぅかたこぅご

きぐぉ〺〺こぅぅかたこぅご

〳

〸
〹

〱〴
〱〵
〱〶
〱〷

Fortran 90言語データ型マッチング定数〱〸

ぃ言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩

ぃ〫〫言語型〺〱〹

うはひぴひちの言語型〺 ぉぎごぅぇぅげっはのびぴ どのぴ 〨または名前無しづのふね〩〲〰

きぐぉたごすぐぅぃがぁここたぃくきぐがぅじ

きぐぉ〺〺ごすぐぅぃがぁここたぃくきぐがぅじ

きぐぉたごすぐぅぃがぁここたぉぎごぅぇぅげきぐぉ〺〺ごすぐぅぃがぁここたぉぎごぅぇぅげきぐぉたごすぐぅぃがぁここたげぅぁが

きぐぉ〺〺ごすぐぅぃがぁここたげぅぁが

〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

空または無視すべき入力を指定する定数
ぃ言語／うはひぴひちの言語での名前

ぃ〫〫言語での名前

ぃ言語／うはひぴひちの言語型

ぃ〫〫言語型

きぐぉたぁげぇざこたぎさががっとちひ〪〪〪 〯 ぃえぁげぁぃごぅげ〪〨〪〩の〲次元配列
きぐぉたぁげぇざたぎさががっとちひ〪〪 〯 ぃえぁげぁぃごぅげ〪〨〪〩の配列

〲〷
〲〸
〲〹
〳〰

きぐぉ〺〺ぁげぇざこたぎさがが〳〱っはのびぴ っとちひ 〪〪〪〳〲きぐぉ〺〺ぁげぇざたぎさががっはのびぴ っとちひ 〪〪

〳〳
〳〴
〳〵

きぐぉたぅげげぃくいぅこたぉぇぎくげぅ

ぃ〫〫言語では定義されない

どのぴ〪 〯 ぉぎごぅぇぅげの配列
きぐぉたこごぁごさこぅこたぉぇぎくげぅ〳〷

ぃ〫〫言語では定義されない〳〸〳〹きぐぉたこぴちぴふび〪 〯 ぉぎごぅぇぅげ〬 いぉきぅぎこぉくぎ〨きぐぉたこごぁごさこたこぉずぅ〪〬〩
きぐぉたこごぁごさこたぉぇぎくげぅ〳〶

ぃ〫〫言語では定義されない〴〰
〴〱

きぐぉたこぴちぴふび〪 〯 ぉぎごぅぇぅげ〬 いぉきぅぎこぉくぎ〨きぐぉたこごぁごさこたこぉずぅ〩
きぐぉたさぎしぅぉぇえごぅい〴〲ぃ〫〫言語では定義されない

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約〵〵〲

無視すべき入力を指定するC言語定数（C++言語またはFortran言語には存在しない）

〱
〲
〳
〴

ぃ言語型〺 きぐぉたうどのぴ〪〵

きぐぉたうたこごぁごさこぅこたぉぇぎくげぅ〶

きぐぉたうたこごぁごさこたぉぇぎくげぅ〷〸〹

C言語／C++言語プリプロセッサ定数とFortran言語パラメータ〱〰

ぃ〯ぃ〫〫言語型〺 っはのびぴ どのぴ 〨または名前無しづのふね〩〱〱〱〲

うはひぴひちの言語型〺 ぉぎごぅぇぅげ〱〳きぐぉたこさあざぅげこぉくぎ〱〴

きぐぉたざぅげこぉくぎ

〱〵
〱〶
〱〷
〱〸

A.1.2 型
以下はねばど〮とファイルに含むぃ言語の型定義である．

〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

〪〯 ぃ はばちぱふづ ぴべばづび 〪〯きぐぉたぁどのぴ
きぐぉたうどのぴ
きぐぉたく》びづぴ
きぐぉたこぴちぴふび〲〵〲〶〪〯 ぃ とちのつぬづび ぴは ちびびはひぴづつ びぴひふっぴふひづび 〪〯〲〷きぐぉたぃはねね
きぐぉたいちぴちぴべばづ
きぐぉたぅひひとちのつぬづひ
きぐぉたうどぬづ
きぐぉたぇひはふば
きぐぉたぉのては
きぐぉたくばきぐぉたげづぱふづびぴ
きぐぉたしどの

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

〯〯 ぃ〫〫 はばちぱふづ ぴべばづび 〨ちぬぬ ぷどぴとどの ぴとづ きぐぉ のちねづびばちっづ〩〳〷

きぐぉ〺〺ぁどのぴ
きぐぉ〺〺く》びづぴ
きぐぉ〺〺こぴちぴふび

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〯〯 ぃ〫〫 とちのつぬづび ぴは ちびびはひぴづつ びぴひふっぴふひづび 〨っぬちびびづび〯〯〬 ちぬぬ ぷどぴとどの ぴとづ きぐぉ のちねづびばちっづ〩
きぐぉ〺〺ぃはねね
きぐぉ〺〺ぉのぴひちっはねね
きぐぉ〺〺ぇひちばとっはねね
きぐぉ〺〺いどびぴでひちばとっはねね
きぐぉ〺〺ぃちひぴっはねね
きぐぉ〺〺ぉのぴづひっはねね
きぐぉ〺〺いちぴちぴべばづぁ〮〱〮 定義された値とハンドル〵〵〳

きぐぉ〺〺ぅひひとちのつぬづひ
きぐぉ〺〺ぅへっづばぴどはの
きぐぉ〺〺うどぬづ
きぐぉ〺〺ぇひはふば
きぐぉ〺〺ぉのては
きぐぉ〺〺くばきぐぉ〺〺げづぱふづびぴ
きぐぉ〺〺ぐひづぱふづびぴ
きぐぉ〺〺ぇひづぱふづびぴ
きぐぉ〺〺しどの

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

A.1.3 プロトタイプ宣言〱〳〱〴

以下は，ユーザ定義関数のためのぃ言語のぴべばづつづての定義であり，これらもねばど〮とファイルに含まれている．

〱〵
〱〶
〱〷

〪〯 ばひはぴはぴべばづび てはひ ふびづひ〭つづてどのづつ てふのっぴどはのび 〪〯ぴべばづつづて ぶはどつ きぐぉたさびづひたてふのっぴどはの〨ぶはどつ 〪どのぶづっ〬 ぶはどつ 〪どのはふぴぶづっ〬 どのぴ 〪ぬづの〬
きぐぉたいちぴちぴべばづ 〪つちぴちぴべばづ〩〻

〱〸
〱〹
〲〰
〲〱

ぴべばづつづて どのぴ きぐぉたぃはねねたっはばべたちぴぴひたてふのっぴどはの〨きぐぉたぃはねね はぬつっはねね〬
どのぴ っはねねたにづべぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ〪てぬちで〩〻ぴべばづつづて どのぴ きぐぉたぃはねねたつづぬづぴづたちぴぴひたてふのっぴどはの〨きぐぉたぃはねね っはねね〬
どのぴ っはねねたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻

〲〲
〲〳
〲〴
〲〵
〲〶

ぴべばづつづて どのぴ きぐぉたしどのたっはばべたちぴぴひたてふのっぴどはの〨きぐぉたしどの はぬつぷどの〬 どのぴ ぷどのたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩〻ぴべばづつづて どのぴ きぐぉたしどのたつづぬづぴづたちぴぴひたてふのっぴどはの〨きぐぉたしどの ぷどの〬 どのぴ ぷどのたにづべぶちぬ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻

〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

ぴべばづつづて どのぴ きぐぉたごべばづたっはばべたちぴぴひたてふのっぴどはの〨きぐぉたいちぴちぴべばづ はぬつぴべばづ〬
どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩〻ぴべばづつづて どのぴ きぐぉたごべばづたつづぬづぴづたちぴぴひたてふのっぴどはの〨きぐぉたいちぴちぴべばづ ぴべばづ〬
どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻

〳〳
〳〴
〳〵
〳〶
〳〷

ぴべばづつづて ぶはどつ きぐぉたぃはねねたづひひとちのつぬづひたてふのっぴどはの〨きぐぉたぃはねね 〪〬 どのぴ 〪〬 〮〮〮〩〻
ぴべばづつづて ぶはどつ きぐぉたしどのたづひひとちのつぬづひたてふのっぴどはの〨きぐぉたしどの 〪〬 どのぴ 〪〬 〮〮〮〩〻
ぴべばづつづて ぶはどつ きぐぉたうどぬづたづひひとちのつぬづひたてふのっぴどはの〨きぐぉたうどぬづ 〪〬 どのぴ 〪〬 〮〮〮〩〻

〳〸
〳〹
〴〰
〴〱

ぴべばづつづて どのぴ きぐぉたぇひづぱふづびぴたぱふづひべたてふのっぴどはの〨ぶはどつ 〪づへぴひちたびぴちぴづ〬
きぐぉたこぴちぴふび 〪びぴちぴふび〩〻
ぴべばづつづて どのぴ きぐぉたぇひづぱふづびぴたてひづづたてふのっぴどはの〨ぶはどつ 〪づへぴひちたびぴちぴづ〩〻
ぴべばづつづて どのぴ きぐぉたぇひづぱふづびぴたっちのっづぬたてふのっぴどはの〨ぶはどつ 〪づへぴひちたびぴちぴづ〬 どのぴ っはねばぬづぴづ〩〻

〴〲
〴〳
〴〴
〴〵

ぴべばづつづて どのぴ きぐぉたいちぴちひづばたづへぴづのぴたてふのっぴどはの〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
きぐぉたぁどのぴ 〪てどぬづたづへぴづのぴ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻
ぴべばづつづて どのぴ きぐぉたいちぴちひづばたっはのぶづひびどはのたてふのっぴどはの〨ぶはどつ 〪ふびづひぢふて〬

〴〶
〴〷
〴〸

〵〵〴
〱
〲

付録 ぁ〮 言語呼び出し形式要約
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ っはふのぴ〬 ぶはどつ 〪てどぬづぢふて〬きぐぉたくててびづぴ ばはびどぴどはの〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻

〳
〴
〵
〶
〷
〸

うはひぴひちの言語における，ユーザ定義サブルーチンの宣言方法の例は以下の通りである．
きぐぉたくぐたぃげぅぁごぅへのユーザ関数の引数は以下の様に宣言するべきである〺
こさあげくさごぉぎぅ さこぅげたうさぎぃごぉくぎ〨ぉぎざぅぃ〬 ぉぎくさござぅぃ〬 がぅぎ〬 ごすぐぅ〩〼ぴべばづ〾 ぉぎざぅぃ〨がぅぎ〩〬 ぉぎくさござぅぃ〨がぅぎ〩ぉぎごぅぇぅげ がぅぎ〬 ごすぐぅ

〹
〱〰
〱〱

きぐぉたぃくききたぃげぅぁごぅたかぅすざぁがへ渡す複製関数と削除関数の引数は以下の様に宣言するべきである〺

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

こさあげくさごぉぎぅ ぃくききたぃくぐすたぁごごげたうぎ〨くがいぃくきき〬 ぃくききたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬ぁごごげぉあさごぅたざぁがたぉぎ〬 ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴

こさあげくさごぉぎぅ ぃくききたいぅがぅごぅたぁごごげたうぎ〨ぃくきき〬 ぃくききたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ
きぐぉたしぉぎたぃげぅぁごぅたかぅすざぁがへ渡す複製関数と削除関数の引数は以下の様に宣言するべきである〺

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰

こさあげくさごぉぎぅ しぉぎたぃくぐすたぁごごげたうぎ〨くがいしぉぎ〬 しぉぎたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬ぁごごげぉあさごぅたざぁがたぉぎ〬 ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいしぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

こさあげくさごぉぎぅ しぉぎたいぅがぅごぅたぁごごげたうぎ〨しぉぎ〬 しぉぎたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ
きぐぉたごすぐぅたぃげぅぁごぅたかぅすざぁがへ渡す複製関数と削除関数の引数は以下の様に宣言するべきである〺
こさあげくさごぉぎぅ ごすぐぅたぃくぐすたぁごごげたうぎ〨くがいごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬ぁごごげぉあさごぅたざぁがたぉぎ〬 ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬ぁごごげぉあさごぅたざぁがたぉぎ〬 ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ
こさあげくさごぉぎぅ ごすぐぅたいぅがぅごぅたぁごごげたうぎ〨ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ

ぁ〮〱〮 定義された値とハンドル〵〵〵

きぐぉたぃくききたぃげぅぁごぅたぅげげえぁぎいがぅげへのハンドラ関数引数は以下の様に宣言するべ
きである〺

〱
〲
〳

こさあげくさごぉぎぅ ぃくききたぅげげえぁぎいがぅげたうさぎぃごぉくぎ〨ぃくきき〬 ぅげげくげたぃくいぅ〩
ぉぎごぅぇぅげ ぃくきき〬 ぅげげくげたぃくいぅ〴〵〶

きぐぉたしぉぎたぃげぅぁごぅたぅげげえぁぎいがぅげへのハンドラ関数引数は以下の様に宣言するべき
である〺

〷
〸
〹

こさあげくさごぉぎぅ しぉぎたぅげげえぁぎいがぅげたうさぎぃごぉくぎ〨しぉぎ〬 ぅげげくげたぃくいぅ〩
ぉぎごぅぇぅげ しぉぎ〬 ぅげげくげたぃくいぅ
きぐぉたうぉがぅたぃげぅぁごぅたぅげげえぁぎいがぅげへのハンドラ関数引数は以下の様に宣言するべきである〺
こさあげくさごぉぎぅ うぉがぅたぅげげえぁぎいがぅげたうさぎぃごぉくぎ〨うぉがぅ〬 ぅげげくげたぃくいぅ〩
ぉぎごぅぇぅげ うぉがぅ〬 ぅげげくげたぃくいぅ

〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

きぐぉたぇげぅけさぅこごたこごぁげごへ渡すクエリ関数，開放関数，キャンセル関数の引数は以下の様に宣言するべきである〺

〱〸
〱〹
〲〰

こさあげくさごぉぎぅ ぇげぅけさぅこごたけさぅげすたうさぎぃごぉくぎ〨ぅじごげぁたこごぁごぅ〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ

〲〱
〲〲
〲〳
〲〴

こさあげくさごぉぎぅ ぇげぅけさぅこごたうげぅぅたうさぎぃごぉくぎ〨ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
こさあげくさごぉぎぅ ぇげぅけさぅこごたぃぁぎぃぅがたうさぎぃごぉくぎ〨ぅじごげぁたこごぁごぅ〬 ぃくきぐがぅごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
がくぇぉぃぁが ぃくきぐがぅごぅ

〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

きぐぉたげぅぇぉこごぅげたいぁごぁげぅぐへ渡す拡張関数と変換関数の引数は以下の様に宣言するべ
きである〺

〳〳
〳〴
〳〵

こさあげくさごぉぎぅ いぁごぁげぅぐたぅじごぅぎごたうさぎぃごぉくぎ〨いぁごぁごすぐぅ〬 ぅじごぅぎご〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごぅぎご〬 ぅじごげぁたこごぁごぅ
こさあげくさごぉぎぅ いぁごぁげぅぐたぃくぎざぅげこぉくぎたうさぎぃごぉくぎ〨さこぅげあさう〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 うぉがぅあさう〬ぐくこぉごぉくぎ〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩〼ごすぐぅ〾 さこぅげあさう〨〪〩〬 うぉがぅあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 ぐくこぉごぉくぎ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
以下は，ぃ〫〫言語のぴべばづつづての定義であり，これらもねばど〮とファイルに含まれている．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〵〶
〱
〲
〳

付録 ぁ〮 言語呼び出し形式要約

のちねづびばちっづ きぐぉ ほ
ぴべばづつづて ぶはどつ さびづひたてふのっぴどはの〨っはのびぴ ぶはどつ〪 どのぶづっ〬 ぶはどつ 〪どのはふぴぶづっ〬
どのぴ ぬづの〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩〻〴

ぴべばづつづて どのぴ ぃはねね〺〺ぃはばべたちぴぴひたてふのっぴどはの〨っはのびぴ ぃはねね〦 はぬつっはねね〬
どのぴ っはねねたにづべぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたどの〬
ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたはふぴ〬 ぢははぬ〦 てぬちで〩〻ぴべばづつづて どのぴ ぃはねね〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〨ぃはねね〦 っはねね〬 どのぴ
っはねねたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻

〵
〶
〷
〸
〹
〱〰

ぴべばづつづて どのぴ しどの〺〺ぃはばべたちぴぴひたてふのっぴどはの〨っはのびぴ しどの〦 はぬつぷどの〬
どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたどの〬
ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたはふぴ〬 ぢははぬ〦 てぬちで〩〻ぴべばづつづて どのぴ しどの〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〨しどの〦 ぷどの〬 どのぴ
ぷどのたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻

〱〱
〱〲
〱〳
〱〴
〱〵

ぴべばづつづて どのぴ いちぴちぴべばづ〺〺ぃはばべたちぴぴひたてふのっぴどはの〨っはのびぴ いちぴちぴべばづ〦 はぬつぴべばづ〬
どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〬
っはのびぴ ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬたはふぴ〬
ぢははぬ〦 てぬちで〩〻ぴべばづつづて どのぴ いちぴちぴべばづ〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〨いちぴちぴべばづ〦 ぴべばづ〬
どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

ぴべばづつづて ぶはどつ ぃはねね〺〺ぅひひとちのつぬづひたてふのっぴどはの〨ぃはねね 〦〬 どのぴ 〪〬 〮〮〮〩〻
ぴべばづつづて ぶはどつ しどの〺〺ぅひひとちのつぬづひたてふのっぴどはの〨しどの 〦〬 どのぴ 〪〬 〮〮〮〩〻
ぴべばづつづて ぶはどつ うどぬづ〺〺ぅひひとちのつぬづひたてふのっぴどはの〨うどぬづ 〦〬 どのぴ 〪〬 〮〮〮〩〻

〲〲
〲〳
〲〴
〲〵

ぴべばづつづて どのぴ ぇひづぱふづびぴ〺〺けふづひべたてふのっぴどはの〨ぶはどつ〪 づへぴひちたびぴちぴづ〬 こぴちぴふび〦 びぴちぴふび〩〻
ぴべばづつづて どのぴ ぇひづぱふづびぴ〺〺うひづづたてふのっぴどはの〨ぶはどつ〪 づへぴひちたびぴちぴづ〩〻
ぴべばづつづて どのぴ ぇひづぱふづびぴ〺〺ぃちのっづぬたてふのっぴどはの〨ぶはどつ〪 づへぴひちたびぴちぴづ〬 ぢははぬ っはねばぬづぴづ〩〻

〲〶
〲〷
〲〸

ぴべばづつづて ぶはどつ いちぴちひづばたづへぴづのぴたてふのっぴどはの〨っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
ぁどのぴ〦 てどぬづたづへぴづのぴ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻
ぴべばづつづて ぶはどつ いちぴちひづばたっはのぶづひびどはのたてふのっぴどはの〨ぶはどつ〪 ふびづひぢふて〬
いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ っはふのぴ〬 ぶはどつ〪 てどぬづぢふて〬
くててびづぴ ばはびどぴどはの〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩〻

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

ぽ

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

A.1.4 廃止されたプロトタイプ宣言
以下は，廃止されたユーザ定義関数のためのぃ言語のぴべばづつづての定義であり，これら
もねばど〮とファイルに含まれている．
〪〯 ばひはぴはぴべばづび てはひ ふびづひ〭つづてどのづつ てふのっぴどはのび 〪〯ぴべばづつづて どのぴ きぐぉたぃはばべたてふのっぴどはの〨きぐぉたぃはねね はぬつっはねね〬 どのぴ にづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩〻ぴべばづつづて どのぴ きぐぉたいづぬづぴづたてふのっぴどはの〨きぐぉたぃはねね っはねね〬 どのぴ にづべぶちぬ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩〻
ぴべばづつづて ぶはどつ きぐぉたえちのつぬづひたてふのっぴどはの〨きぐぉたぃはねね 〪〬 どのぴ 〪〬 〮〮〮〩〻

ぁ〮〱〮 定義された値とハンドル〵〵〷

以下は，廃止されたうはひぴひちの言語ユーザ定義コールバックサブルーチンプロトタイプである． きぐぉたかぅすざぁがたぃげぅぁごぅへ渡す廃止された複製関数と削除関数の引数は，以下のように宣言すべきである〺
こさあげくさごぉぎぅ ぃくぐすたうさぎぃごぉくぎ〨くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬ぁごごげぉあさごぅたざぁがたぉぎ〬 ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげ〩ぉぎごぅぇぅげ くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 ぉぅげげがくぇぉぃぁが うがぁぇ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲

こさあげくさごぉぎぅ いぅがぅごぅたうさぎぃごぉくぎ〨ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげ〱〳〱〴廃止された，エラーハンドラのためのハンドラ関数は以下の様に宣言すべきである〺〱〵〱〶

こさあげくさごぉぎぅ えぁぎいがぅげたうさぎぃごぉくぎ〨ぃくきき〬 ぅげげくげたぃくいぅ〩
ぉぎごぅぇぅげ ぃくきき〬 ぅげげくげたぃくいぅ

〱〷
〱〸
〱〹
〲〰
〲〱

A.1.5 Infoキー
ちっっづびびたびぴべぬづ
ちばばのふね
ちひっとっぢたぢぬはっにたびどぺづ
っぢたぢふ》づひたびどぺづ
っぢたのはつづび
っとふのにづつたどぴづね
っとふのにづつたびどぺづ
っとふのにづつ
っはぬぬづっぴどぶづたぢふ》づひどので「ぬづたばづひね「ぬづのちねづ「ぬづとはびぴ
どはたのはつづたぬどびぴ
どばたちつつひづびび
どばたばはひぴのぢたばひはっのはたぬはっにびのふねたどはたのはつづび
ばちぴと
びはてぴ
びぴひどばどのでたてちっぴはひ
びぴひどばどのでたふのどぴ
ぷつどひ

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〵〸
〱

A.1.6 Info値

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

てちぬびづ
ひちのつはね
ひづちつたねはびぴぬべ
ひづちつたはのっづ
ひづぶづひびづたびづぱふづのぴどちぬ
びづぱふづのぴどちぬ
ぴひふづ
ぷひどぴづたねはびぴぬべ
ぷひどぴづたはのっづ

付録 ぁ〮 言語呼び出し形式要約

ぁ〮〲〮 ぃ言語呼び出し形式〵〵〹

A.2 C言語呼び出し形式〱〲

A.2.1 1対1通信 C 言語呼び出し形式〳〴

どのぴ きぐぉたあびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたあびづのつたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたあふててづひたちぴぴちっと〨ぶはどつ〪 ぢふててづひ〬 どのぴ びどぺづ〩
どのぴ きぐぉたあふててづひたつづぴちっと〨ぶはどつ〪 ぢふててづひたちつつひ〬 どのぴ〪 びどぺづ〩
どのぴ きぐぉたぃちのっづぬ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたぇづぴたっはふのぴ〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ 〪っはふのぴ〩
どのぴ きぐぉたぉぢびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたぉばひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 どのぴ 〪てぬちで〬きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたぉひづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたぉひびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたぉびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたぉびびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたぐひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたげづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたげづっぶたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたげづぱふづびぴたてひづづ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたげづぱふづびぴたでづぴたびぴちぴふび〨きぐぉたげづぱふづびぴ ひづぱふづびぴ〬 どのぴ 〪てぬちで〬きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたげびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたげびづのつたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたこづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたこづのつたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたこづのつひづっぶ〨ぶはどつ 〪びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 ぶはどつ 〪ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬
どのぴ びはふひっづ〬 どのぴ ひづっぶぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたこづのつひづっぶたひづばぬちっづ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 どのぴ びはふひっづ〬 どのぴ ひづっぶぴちで〬 きぐぉたぃはねね っはねね〬
きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたこびづのつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたこびづのつたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ つづびぴ〬
どのぴ ぴちで〬 きぐぉたぃはねね っはねね〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〶〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

付録 ぁ〮 言語呼び出し形式要約

どのぴ きぐぉたこぴちひぴ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたこぴちひぴちぬぬ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〩
どのぴ きぐぉたごづびぴ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〬 どのぴ 〪てぬちで〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたごづびぴたっちのっづぬぬづつ〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 どのぴ 〪てぬちで〩
どのぴ きぐぉたごづびぴちぬぬ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬 どのぴ 〪てぬちで〬きぐぉたこぴちぴふび 〪ちひひちべたはてたびぴちぴふびづび〩
どのぴ きぐぉたごづびぴちのべ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬 どのぴ 〪どのつづへ〬
どのぴ 〪てぬちで〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたごづびぴびはねづ〨どのぴ どのっはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬
どのぴ 〪はふぴっはふのぴ〬 どのぴ 〪ちひひちべたはてたどのつどっづび〬 きぐぉたこぴちぴふび 〪ちひひちべたはてたびぴちぴふびづび〩
どのぴ きぐぉたしちどぴ〨きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたしちどぴちぬぬ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬
きぐぉたこぴちぴふび 〪ちひひちべたはてたびぴちぴふびづび〩
どのぴ きぐぉたしちどぴちのべ〨どのぴ っはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬 どのぴ 〪どのつづへ〬
きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたしちどぴびはねづ〨どのぴ どのっはふのぴ〬 きぐぉたげづぱふづびぴ 〪ちひひちべたはてたひづぱふづびぴび〬
どのぴ 〪はふぴっはふのぴ〬 どのぴ 〪ちひひちべたはてたどのつどっづび〬 きぐぉたこぴちぴふび 〪ちひひちべたはてたびぴちぴふびづび〩

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

A.2.2 データ型 C 言語呼び出し形式
どのぴ きぐぉたぇづぴたちつつひづびび〨ぶはどつ 〪ぬはっちぴどはの〬 きぐぉたぁどのぴ 〪ちつつひづびび〩
どのぴ きぐぉたぇづぴたづぬづねづのぴび〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ 〪っはふのぴ〩
どのぴ きぐぉたぐちっに〨ぶはどつ〪 どのぢふて〬 どのぴ どのっはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 ぶはどつ 〪はふぴぢふて〬
どのぴ はふぴびどぺづ〬 どのぴ 〪ばはびどぴどはの〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたぐちっにたづへぴづひのちぬ〨っとちひ 〪つちぴちひづば〬 ぶはどつ 〪どのぢふて〬 どのぴ どのっはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 ぶはどつ 〪はふぴぢふて〬 きぐぉたぁどのぴ はふぴびどぺづ〬 きぐぉたぁどのぴ 〪ばはびどぴどはの〩
どのぴ きぐぉたぐちっにたづへぴづひのちぬたびどぺづ〨っとちひ 〪つちぴちひづば〬 どのぴ どのっはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ 〪びどぺづ〩
どのぴ きぐぉたぐちっにたびどぺづ〨どのぴ どのっはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぃはねね っはねね〬
どのぴ 〪びどぺづ〩
どのぴ きぐぉたごべばづたっはねねどぴ〨きぐぉたいちぴちぴべばづ 〪つちぴちぴべばづ〩
どのぴ きぐぉたごべばづたっはのぴどでふはふび〨どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたっひづちぴづたつちひひちべ〨どのぴ びどぺづ〬 どのぴ ひちのに〬 どのぴ のつどねび〬
どのぴ ちひひちべたはてたでびどぺづびせそ〬 どのぴ ちひひちべたはてたつどびぴひどぢびせそ〬 どのぴ ちひひちべたはてたつちひでびせそ〬 どのぴ
ちひひちべたはてたばびどぺづびせそ〬 どのぴ はひつづひ〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたっひづちぴづたとどのつづへづつ〨どのぴ っはふのぴ〬 どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬
きぐぉたぁどのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたっひづちぴづたとぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬 きぐぉたぁどのぴ びぴひどつづ〬きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたっひづちぴづたどのつづへづつたぢぬはっに〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬
どのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたっひづちぴづたひづびどぺづつ〨きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたぁどのぴ ぬぢ〬 きぐぉたぁどのぴ
づへぴづのぴ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたっひづちぴづたびぴひふっぴ〨どのぴ っはふのぴ〬 どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬
きぐぉたぁどのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〬 きぐぉたいちぴちぴべばづ ちひひちべたはてたぴべばづびせそ〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩ぁ〮〲〮 ぃ言語呼び出し形式〵〶〱

どのぴ きぐぉたごべばづたっひづちぴづたびふぢちひひちべ〨どのぴ のつどねび〬 どのぴ ちひひちべたはてたびどぺづびせそ〬
どのぴ ちひひちべたはてたびふぢびどぺづびせそ〬 どのぴ ちひひちべたはてたびぴちひぴびせそ〬 どのぴ はひつづひ〬 きぐぉたいちぴちぴべばづ
はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたつふば〨きぐぉたいちぴちぴべばづ ぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたてひづづ〨きぐぉたいちぴちぴべばづ 〪つちぴちぴべばづ〩
どのぴ きぐぉたごべばづたでづぴたっはのぴづのぴび〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ ねちへたどのぴづでづひび〬
どのぴ ねちへたちつつひづびびづび〬 どのぴ ねちへたつちぴちぴべばづび〬 どのぴ ちひひちべたはてたどのぴづでづひびせそ〬
きぐぉたぁどのぴ ちひひちべたはてたちつつひづびびづびせそ〬 きぐぉたいちぴちぴべばづ ちひひちべたはてたつちぴちぴべばづびせそ〩
どのぴ きぐぉたごべばづたでづぴたづのぶづぬはばづ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ 〪のふねたどのぴづでづひび〬
どのぴ 〪のふねたちつつひづびびづび〬 どのぴ 〪のふねたつちぴちぴべばづび〬 どのぴ 〪っはねぢどのづひ〩
どのぴ きぐぉたごべばづたでづぴたづへぴづのぴ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ 〪ぬぢ〬
きぐぉたぁどのぴ 〪づへぴづのぴ〩
どのぴ きぐぉたごべばづたでづぴたぴひふづたづへぴづのぴ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ 〪ぴひふづたぬぢ〬
きぐぉたぁどのぴ 〪ぴひふづたづへぴづのぴ〩
どのぴ きぐぉたごべばづたどのつづへづつ〨どのぴ っはふのぴ〬 どのぴ 〪ちひひちべたはてたぢぬはっにぬづのでぴとび〬
どのぴ 〪ちひひちべたはてたつどびばぬちっづねづのぴび〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたびどぺづ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ 〪びどぺづ〩
どのぴ きぐぉたごべばづたぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬 どのぴ びぴひどつづ〬きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたさのばちっに〨ぶはどつ〪 どのぢふて〬 どのぴ どのびどぺづ〬 どのぴ 〪ばはびどぴどはの〬 ぶはどつ 〪はふぴぢふて〬
どのぴ はふぴっはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたさのばちっにたづへぴづひのちぬ〨っとちひ 〪つちぴちひづば〬 ぶはどつ 〪どのぢふて〬 きぐぉたぁどのぴ どのびどぺづ〬
きぐぉたぁどのぴ 〪ばはびどぴどはの〬 ぶはどつ 〪はふぴぢふて〬 どのぴ はふぴっはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳

A.2.3 集団的通信 C 言語呼び出し形式
どのぴ きぐぉたぁぬぬでちぴとづひ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたぁぬぬでちぴとづひぶ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ 〪ひづっぶっはふのぴび〬 どのぴ 〪つどびばぬび〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬
きぐぉたぃはねね っはねね〩
どのぴ きぐぉたぁぬぬひづつふっづ〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたぁぬぬぴはちぬぬ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたぁぬぬぴはちぬぬぶ〨ぶはどつ〪 びづのつぢふて〬 どのぴ 〪びづのつっはふのぴび〬 どのぴ 〪びつどびばぬび〬
きぐぉたいちぴちぴべばづ びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ 〪ひづっぶっはふのぴび〬 どのぴ 〪ひつどびばぬび〬
きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたぁぬぬぴはちぬぬぷ〨ぶはどつ 〪びづのつぢふて〬 どのぴ びづのつっはふのぴびせそ〬 どのぴ びつどびばぬびせそ〬
きぐぉたいちぴちぴべばづ びづのつぴべばづびせそ〬 ぶはどつ 〪ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴびせそ〬 どのぴ ひつどびばぬびせそ〬
きぐぉたいちぴちぴべばづ ひづっぶぴべばづびせそ〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたあちひひどづひ〨きぐぉたぃはねね っはねね〩
どのぴ きぐぉたあっちびぴ〨ぶはどつ〪 ぢふててづひ〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね 〩どのぴ きぐぉたぅへびっちの〨ぶはどつ 〪びづのつぢふて〬 ぶはどつ 〪ひづっぶぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたぇちぴとづひ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね〩

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〶〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

付録 ぁ〮 言語呼び出し形式要約

どのぴ きぐぉたぇちぴとづひぶ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ 〪ひづっぶっはふのぴび〬 どのぴ 〪つどびばぬび〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬
どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたくばたっはねねふぴちぴどぶづ〨きぐぉたくば はば〬 どのぴ 〪っはねねふぴづ〩
どのぴ きぐぉたくばたっひづちぴづ〨きぐぉたさびづひたてふのっぴどはの 〪てふのっぴどはの〬 どのぴ っはねねふぴづ〬 きぐぉたくば 〪はば〩
どのぴ きぐぉたげづつふっづ〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたげづつふっづたぬはっちぬ〨ぶはどつ〪 どのぢふて〬 ぶはどつ〪 どのはふぴぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〩
どのぴ きぐぉたげづつふっづたびっちぴぴづひ〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ 〪ひづっぶっはふのぴび〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたげづつふっづたびっちぴぴづひたぢぬはっに〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたこっちの〨ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたぃはねね っはねね 〩どのぴ きぐぉたこっちぴぴづひ〨ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 きぐぉたいちぴちぴべばづ びづのつぴべばづ〬
ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね〩
どのぴ きぐぉたこっちぴぴづひぶ〨ぶはどつ〪 びづのつぢふて〬 どのぴ 〪びづのつっはふのぴび〬 どのぴ 〪つどびばぬび〬
きぐぉたいちぴちぴべばづ びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬 きぐぉたいちぴちぴべばづ ひづっぶぴべばづ〬
どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〩
どのぴ きぐぉたはばたてひづづ〨 きぐぉたくば 〪はば〩

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

A.2.4 グループ，コンテクスト，コミュニケータ，キャッシング C 言語呼び出
し形式
どのぴ きぐぉたぃくききたいさぐたうぎ〨きぐぉたぃはねね はぬつっはねね〬 どのぴ っはねねたにづべぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩
どのぴ きぐぉたぃくききたぎさががたぃくぐすたうぎ〨きぐぉたぃはねね はぬつっはねね〬 どのぴ っはねねたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬
どのぴ 〪てぬちで〩
どのぴ きぐぉたぃくききたぎさががたいぅがぅごぅたうぎ〨きぐぉたぃはねね っはねね〬 どのぴ っはねねたにづべぶちぬ〬 ぶはどつ
〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩
どのぴ きぐぉたぃはねねたっはねばちひづ〨きぐぉたぃはねね っはねね〱〬きぐぉたぃはねね っはねね〲〬 どのぴ 〪ひづびふぬぴ〩
どのぴ きぐぉたぃはねねたっひづちぴづ〨きぐぉたぃはねね っはねね〬 きぐぉたぇひはふば でひはふば〬 きぐぉたぃはねね 〪のづぷっはねね〩
どのぴ きぐぉたぃはねねたっひづちぴづたにづべぶちぬ〨きぐぉたぃはねねたっはばべたちぴぴひたてふのっぴどはの 〪っはねねたっはばべたちぴぴひたての〬きぐぉたぃはねねたつづぬづぴづたちぴぴひたてふのっぴどはの 〪っはねねたつづぬづぴづたちぴぴひたての〬 どのぴ 〪っはねねたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〩
どのぴ きぐぉたぃはねねたつづぬづぴづたちぴぴひ〨きぐぉたぃはねね っはねね〬 どのぴ っはねねたにづべぶちぬ〩
どのぴ きぐぉたぃはねねたつふば〨きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪のづぷっはねね〩
どのぴ きぐぉたぃはねねたてひづづ〨きぐぉたぃはねね 〪っはねね〩
どのぴ きぐぉたぃはねねたてひづづたにづべぶちぬ〨どのぴ 〪っはねねたにづべぶちぬ〩
どのぴ きぐぉたぃはねねたでづぴたちぴぴひ〨きぐぉたぃはねね っはねね〬 どのぴ っはねねたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬
どのぴ 〪てぬちで〩
どのぴ きぐぉたぃはねねたでづぴたのちねづ〨きぐぉたぃはねね っはねね〬 っとちひ 〪っはねねたのちねづ〬 どのぴ 〪ひづびふぬぴぬづの〩
どのぴ きぐぉたぃはねねたでひはふば〨きぐぉたぃはねね っはねね〬 きぐぉたぇひはふば 〪でひはふば〩
どのぴ きぐぉたぃはねねたひちのに〨きぐぉたぃはねね っはねね〬 どのぴ 〪ひちのに〩
どのぴ きぐぉたぃはねねたひづねはぴづたでひはふば〨きぐぉたぃはねね っはねね〬 きぐぉたぇひはふば 〪でひはふば〩
どのぴ きぐぉたぃはねねたひづねはぴづたびどぺづ〨きぐぉたぃはねね っはねね〬 どのぴ 〪びどぺづ〩

ぁ〮〲〮 ぃ言語呼び出し形式〵〶〳

どのぴ きぐぉたぃはねねたびづぴたちぴぴひ〨きぐぉたぃはねね っはねね〬 どのぴ っはねねたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〩
どのぴ きぐぉたぃはねねたびづぴたのちねづ〨きぐぉたぃはねね っはねね〬 っとちひ 〪っはねねたのちねづ〩
どのぴ きぐぉたぃはねねたびどぺづ〨きぐぉたぃはねね っはねね〬 どのぴ 〪びどぺづ〩
どのぴ きぐぉたぃはねねたびばぬどぴ〨きぐぉたぃはねね っはねね〬 どのぴ っはぬはひ〬 どのぴ にづべ〬 きぐぉたぃはねね 〪のづぷっはねね〩
どのぴ きぐぉたぃはねねたぴづびぴたどのぴづひ〨きぐぉたぃはねね っはねね〬 どのぴ 〪てぬちで〩
どのぴ きぐぉたぇひはふばたっはねばちひづ〨きぐぉたぇひはふば でひはふば〱〬きぐぉたぇひはふば でひはふば〲〬 どのぴ 〪ひづびふぬぴ〩
どのぴ きぐぉたぇひはふばたつどててづひづのっづ〨きぐぉたぇひはふば でひはふば〱〬 きぐぉたぇひはふば でひはふば〲〬
きぐぉたぇひはふば 〪のづぷでひはふば〩
どのぴ きぐぉたぇひはふばたづへっぬ〨きぐぉたぇひはふば でひはふば〬 どのぴ の〬 どのぴ 〪ひちのにび〬 きぐぉたぇひはふば 〪のづぷでひはふば〩
どのぴ きぐぉたぇひはふばたてひづづ〨きぐぉたぇひはふば 〪でひはふば〩
どのぴ きぐぉたぇひはふばたどのっぬ〨きぐぉたぇひはふば でひはふば〬 どのぴ の〬 どのぴ 〪ひちのにび〬 きぐぉたぇひはふば 〪のづぷでひはふば〩
どのぴ きぐぉたぇひはふばたどのぴづひびづっぴどはの〨きぐぉたぇひはふば でひはふば〱〬 きぐぉたぇひはふば でひはふば〲〬
きぐぉたぇひはふば 〪のづぷでひはふば〩
どのぴ きぐぉたぇひはふばたひちのでづたづへっぬ〨きぐぉたぇひはふば でひはふば〬 どのぴ の〬 どのぴ ひちのでづびせそせ〳そ〬きぐぉたぇひはふば 〪のづぷでひはふば〩
どのぴ きぐぉたぇひはふばたひちのでづたどのっぬ〨きぐぉたぇひはふば でひはふば〬 どのぴ の〬 どのぴ ひちのでづびせそせ〳そ〬きぐぉたぇひはふば 〪のづぷでひはふば〩
どのぴ きぐぉたぇひはふばたひちのに〨きぐぉたぇひはふば でひはふば〬 どのぴ 〪ひちのに〩
どのぴ きぐぉたぇひはふばたびどぺづ〨きぐぉたぇひはふば でひはふば〬 どのぴ 〪びどぺづ〩
どのぴ きぐぉたぇひはふばたぴひちのびぬちぴづたひちのにび 〨きぐぉたぇひはふば でひはふば〱〬 どのぴ の〬 どのぴ 〪ひちのにび〱〬
きぐぉたぇひはふば でひはふば〲〬 どのぴ 〪ひちのにび〲〩
どのぴ きぐぉたぇひはふばたふのどはの〨きぐぉたぇひはふば でひはふば〱〬 きぐぉたぇひはふば でひはふば〲〬
きぐぉたぇひはふば 〪のづぷでひはふば〩
どのぴ きぐぉたぉのぴづひっはねねたっひづちぴづ〨きぐぉたぃはねね ぬはっちぬたっはねね〬 どのぴ ぬはっちぬたぬづちつづひ〬
きぐぉたぃはねね ばづづひたっはねね〬 どのぴ ひづねはぴづたぬづちつづひ〬 どのぴ ぴちで〬 きぐぉたぃはねね 〪のづぷどのぴづひっはねね〩
どのぴ きぐぉたぉのぴづひっはねねたねづひでづ〨きぐぉたぃはねね どのぴづひっはねね〬 どのぴ とどでと〬きぐぉたぃはねね 〪のづぷどのぴひちっはねね〩
どのぴ きぐぉたごすぐぅたいさぐたうぎ〨きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 どのぴ ぴべばづたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬
どのぴ 〪てぬちで〩
どのぴ きぐぉたごすぐぅたぎさががたぃくぐすたうぎ〨きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 どのぴ ぴべばづたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬
どのぴ 〪てぬちで〩
どのぴ きぐぉたごすぐぅたぎさががたいぅがぅごぅたうぎ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ
〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩
どのぴ きぐぉたごべばづたっひづちぴづたにづべぶちぬ〨きぐぉたごべばづたっはばべたちぴぴひたてふのっぴどはの 〪ぴべばづたっはばべたちぴぴひたての〬きぐぉたごべばづたつづぬづぴづたちぴぴひたてふのっぴどはの 〪ぴべばづたつづぬづぴづたちぴぴひたての〬 どのぴ 〪ぴべばづたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〩
どのぴ きぐぉたごべばづたつづぬづぴづたちぴぴひ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 どのぴ ぴべばづたにづべぶちぬ〩
どのぴ きぐぉたごべばづたてひづづたにづべぶちぬ〨どのぴ 〪ぴべばづたにづべぶちぬ〩
どのぴ きぐぉたごべばづたでづぴたちぴぴひ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ
〪ちぴぴひどぢふぴづたぶちぬ〬 どのぴ 〪てぬちで〩
どのぴ きぐぉたごべばづたでづぴたのちねづ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 っとちひ 〪ぴべばづたのちねづ〬 どのぴ 〪ひづびふぬぴぬづの〩
どのぴ きぐぉたごべばづたびづぴたちぴぴひ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 どのぴ ぴべばづたにづべぶちぬ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〩
どのぴ きぐぉたごべばづたびづぴたのちねづ〨きぐぉたいちぴちぴべばづ ぴべばづ〬 っとちひ 〪ぴべばづたのちねづ〩
どのぴ きぐぉたしぉぎたいさぐたうぎ〨きぐぉたしどの はぬつぷどの〬 どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〶〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴

付録 ぁ〮 言語呼び出し形式要約

どのぴ きぐぉたしぉぎたぎさががたぃくぐすたうぎ〨きぐぉたしどの はぬつぷどの〬 どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩
どのぴ きぐぉたしぉぎたぎさががたいぅがぅごぅたうぎ〨きぐぉたしどの ぷどの〬 どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ
〪ちぴぴひどぢふぴづたぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩
どのぴ きぐぉたしどのたっひづちぴづたにづべぶちぬ〨きぐぉたしどのたっはばべたちぴぴひたてふのっぴどはの 〪ぷどのたっはばべたちぴぴひたての〬きぐぉたしどのたつづぬづぴづたちぴぴひたてふのっぴどはの 〪ぷどのたつづぬづぴづたちぴぴひたての〬 どのぴ 〪ぷどのたにづべぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〩
どのぴ きぐぉたしどのたつづぬづぴづたちぴぴひ〨きぐぉたしどの ぷどの〬 どのぴ ぷどのたにづべぶちぬ〩
どのぴ きぐぉたしどのたてひづづたにづべぶちぬ〨どのぴ 〪ぷどのたにづべぶちぬ〩
どのぴ きぐぉたしどのたでづぴたちぴぴひ〨きぐぉたしどの ぷどの〬 どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬
どのぴ 〪てぬちで〩
どのぴ きぐぉたしどのたでづぴたのちねづ〨きぐぉたしどの ぷどの〬 っとちひ 〪ぷどのたのちねづ〬 どのぴ 〪ひづびふぬぴぬづの〩
どのぴ きぐぉたしどのたびづぴたちぴぴひ〨きぐぉたしどの ぷどの〬 どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〩
どのぴ きぐぉたしどのたびづぴたのちねづ〨きぐぉたしどの ぷどの〬 っとちひ 〪ぷどのたのちねづ〩〱〵〱〶

A.2.5 プロセストポロジー C 言語呼び出し形式

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

どのぴ きぐぉたぃちひぴたっははひつび〨きぐぉたぃはねね っはねね〬 どのぴ ひちのに〬 どのぴ ねちへつどねび〬 どのぴ 〪っははひつび〩
どのぴ きぐぉたぃちひぴたっひづちぴづ〨きぐぉたぃはねね っはねねたはぬつ〬 どのぴ のつどねび〬 どのぴ 〪つどねび〬 どのぴ 〪ばづひどはつび〬
どのぴ ひづはひつづひ〬 きぐぉたぃはねね 〪っはねねたっちひぴ〩
どのぴ きぐぉたぃちひぴたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ ねちへつどねび〬 どのぴ 〪つどねび〬 どのぴ 〪ばづひどはつび〬
どのぴ 〪っははひつび〩
どのぴ きぐぉたぃちひぴたねちば〨きぐぉたぃはねね っはねね〬 どのぴ のつどねび〬 どのぴ 〪つどねび〬 どのぴ 〪ばづひどはつび〬
どのぴ 〪のづぷひちのに〩
どのぴ きぐぉたぃちひぴたひちのに〨きぐぉたぃはねね っはねね〬 どのぴ 〪っははひつび〬 どのぴ 〪ひちのに〩
どのぴ きぐぉたぃちひぴたびとどてぴ〨きぐぉたぃはねね っはねね〬 どのぴ つどひづっぴどはの〬 どのぴ つどびば〬
どのぴ 〪ひちのにたびはふひっづ〬 どのぴ 〪ひちのにたつづびぴ〩
どのぴ きぐぉたぃちひぴたびふぢ〨きぐぉたぃはねね っはねね〬 どのぴ 〪ひづねちどのたつどねび〬 きぐぉたぃはねね 〪のづぷっはねね〩
どのぴ きぐぉたぃちひぴつどねたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ 〪のつどねび〩
どのぴ きぐぉたいどねびたっひづちぴづ〨どのぴ ののはつづび〬 どのぴ のつどねび〬 どのぴ 〪つどねび〩
どのぴ きぐぉたいどびぴたでひちばとたっひづちぴづ〨きぐぉたぃはねね っはねねたはぬつ〬 どのぴ の〬 どのぴ びはふひっづびせそ〬
どのぴ つづでひづづびせそ〬 どのぴ つづびぴどのちぴどはのびせそ〬 どのぴ ぷづどでとぴびせそ〬 きぐぉたぉのては どのては〬
どのぴ ひづはひつづひ〬 きぐぉたぃはねね 〪っはねねたつどびぴたでひちばと〩
どのぴ きぐぉたいどびぴたでひちばとたっひづちぴづたちつなちっづのぴ〨きぐぉたぃはねね っはねねたはぬつ〬 どのぴ どのつづでひづづ〬
どのぴ びはふひっづびせそ〬 どのぴ びはふひっづぷづどでとぴびせそ〬 どのぴ はふぴつづでひづづ〬 どのぴ つづびぴどのちぴどはのびせそ〬 どのぴ
つづびぴぷづどでとぴびせそ〬 きぐぉたぉのては どのては〬 どのぴ ひづはひつづひ〬 きぐぉたぃはねね 〪っはねねたつどびぴたでひちばと〩
どのぴ きぐぉたいどびぴたでひちばとたのづどでとぢはひび〨きぐぉたぃはねね っはねね〬 どのぴ ねちへどのつづでひづづ〬 どのぴ びはふひっづびせそ〬
どのぴ びはふひっづぷづどでとぴびせそ〬 どのぴ ねちへはふぴつづでひづづ〬 どのぴ つづびぴどのちぴどはのびせそ〬
どのぴ つづびぴぷづどでとぴびせそ〩
どのぴ きぐぉたいどびぴたでひちばとたのづどでとぢはひびたっはふのぴ〨きぐぉたぃはねね っはねね〬 どのぴ 〪どのつづでひづづ〬
どのぴ 〪はふぴつづでひづづ〬 どのぴ 〪ぷづどでとぴづつ〩
どのぴ きぐぉたぇひちばとたっひづちぴづ〨きぐぉたぃはねね っはねねたはぬつ〬 どのぴ ののはつづび〬 どのぴ 〪どのつづへ〬 どのぴ 〪づつでづび〬
どのぴ ひづはひつづひ〬 きぐぉたぃはねね 〪っはねねたでひちばと〩
どのぴ きぐぉたぇひちばとたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ ねちへどのつづへ〬 どのぴ ねちへづつでづび〬 どのぴ 〪どのつづへ〬
どのぴ 〪づつでづび〩
どのぴ きぐぉたぇひちばとたねちば〨きぐぉたぃはねね っはねね〬 どのぴ ののはつづび〬 どのぴ 〪どのつづへ〬 どのぴ 〪づつでづび〬
どのぴ 〪のづぷひちのに〩
どのぴ きぐぉたぇひちばとたのづどでとぢはひび〨きぐぉたぃはねね っはねね〬 どのぴ ひちのに〬 どのぴ ねちへのづどでとぢはひび〬
どのぴ 〪のづどでとぢはひび〩
どのぴ きぐぉたぇひちばとたのづどでとぢはひびたっはふのぴ〨きぐぉたぃはねね っはねね〬 どのぴ ひちのに〬 どのぴ 〪ののづどでとぢはひび〩

ぁ〮〲〮 ぃ言語呼び出し形式
どのぴ きぐぉたぇひちばとつどねびたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ 〪ののはつづび〬 どのぴ 〪のづつでづび〩
どのぴ きぐぉたごはばはたぴづびぴ〨きぐぉたぃはねね っはねね〬 どのぴ 〪びぴちぴふび〩

〵〶〵
〱
〲
〳

A.2.6 MPI環境管理 C 言語呼び出し形式
つはふぢぬづ きぐぉたしぴどっに〨ぶはどつ〩
つはふぢぬづ きぐぉたしぴどねづ〨ぶはどつ〩
どのぴ きぐぉたぁぢはひぴ〨きぐぉたぃはねね っはねね〬 どのぴ づひひはひっはつづ〩どのぴ きぐぉたぁつつたづひひはひたっぬちびび〨どのぴ 〪づひひはひっぬちびび〩
どのぴ きぐぉたぁつつたづひひはひたっはつづ〨どのぴ づひひはひっぬちびび〬 どのぴ 〪づひひはひっはつづ〩どのぴ きぐぉたぁつつたづひひはひたびぴひどので〨どのぴ づひひはひっはつづ〬 っとちひ 〪びぴひどので〩
どのぴ きぐぉたぁぬぬはったねづね〨きぐぉたぁどのぴ びどぺづ〬 きぐぉたぉのては どのては〬 ぶはどつ 〪ぢちびづばぴひ〩
どのぴ きぐぉたぃはねねたっちぬぬたづひひとちのつぬづひ〨きぐぉたぃはねね っはねね〬 どのぴ づひひはひっはつづ〩どのぴ きぐぉたぃはねねたっひづちぴづたづひひとちのつぬづひ〨きぐぉたぃはねねたづひひとちのつぬづひたてふのっぴどはの 〪てふのっぴどはの〬
きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
どのぴ きぐぉたぃはねねたでづぴたづひひとちのつぬづひ〨きぐぉたぃはねね っはねね〬 きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
どのぴ きぐぉたぃはねねたびづぴたづひひとちのつぬづひ〨きぐぉたぃはねね っはねね〬 きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩
どのぴ きぐぉたぅひひとちのつぬづひたてひづづ〨きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
どのぴ きぐぉたぅひひはひたっぬちびび〨どのぴ づひひはひっはつづ〬 どのぴ 〪づひひはひっぬちびび〩
どのぴ きぐぉたぅひひはひたびぴひどので〨どのぴ づひひはひっはつづ〬 っとちひ 〪びぴひどので〬 どのぴ 〪ひづびふぬぴぬづの〩
どのぴ きぐぉたうどぬづたっちぬぬたづひひとちのつぬづひ〨きぐぉたうどぬづ てと〬 どのぴ づひひはひっはつづ〩どのぴ きぐぉたうどぬづたっひづちぴづたづひひとちのつぬづひ〨きぐぉたうどぬづたづひひとちのつぬづひたてふのっぴどはの 〪てふのっぴどはの〬
きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
どのぴ きぐぉたうどぬづたでづぴたづひひとちのつぬづひ〨きぐぉたうどぬづ てどぬづ〬 きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
どのぴ きぐぉたうどぬづたびづぴたづひひとちのつぬづひ〨きぐぉたうどぬづ てどぬづ〬 きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩
どのぴ きぐぉたうどのちぬどぺづ〨ぶはどつ〩
どのぴ きぐぉたうどのちぬどぺづつ〨どのぴ 〪てぬちで〩
どのぴ きぐぉたうひづづたねづね〨ぶはどつ 〪ぢちびづ〩
どのぴ きぐぉたぇづぴたばひはっづびびはひたのちねづ〨っとちひ 〪のちねづ〬 どのぴ 〪ひづびふぬぴぬづの〩
どのぴ きぐぉたぇづぴたぶづひびどはの〨どのぴ 〪ぶづひびどはの〬 どのぴ 〪びふぢぶづひびどはの〩
どのぴ きぐぉたぉのどぴ〨どのぴ 〪ちひでっ〬 っとちひ 〪〪〪ちひでぶ〩
どのぴ きぐぉたぉのどぴどちぬどぺづつ〨どのぴ 〪てぬちで〩
どのぴ きぐぉたしどのたっちぬぬたづひひとちのつぬづひ〨きぐぉたしどの ぷどの〬 どのぴ づひひはひっはつづ〩どのぴ きぐぉたしどのたっひづちぴづたづひひとちのつぬづひ〨きぐぉたしどのたづひひとちのつぬづひたてふのっぴどはの 〪てふのっぴどはの〬
きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
どのぴ きぐぉたしどのたでづぴたづひひとちのつぬづひ〨きぐぉたしどの ぷどの〬 きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
どのぴ きぐぉたしどのたびづぴたづひひとちのつぬづひ〨きぐぉたしどの ぷどの〬 きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩

〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

A.2.7 Infoオブジェクト C 言語呼び出し形式
どのぴ きぐぉたぉのてはたっひづちぴづ〨きぐぉたぉのては 〪どのては〩
どのぴ きぐぉたぉのてはたつづぬづぴづ〨きぐぉたぉのては どのては〬 っとちひ 〪にづべ〩
どのぴ きぐぉたぉのてはたつふば〨きぐぉたぉのては どのては〬 きぐぉたぉのては 〪のづぷどのては〩
どのぴ きぐぉたぉのてはたてひづづ〨きぐぉたぉのては 〪どのては〩
どのぴ きぐぉたぉのてはたでづぴ〨きぐぉたぉのては どのては〬 っとちひ 〪にづべ〬 どのぴ ぶちぬふづぬづの〬 っとちひ 〪ぶちぬふづ〬
どのぴ 〪てぬちで〩
どのぴ きぐぉたぉのてはたでづぴたのにづべび〨きぐぉたぉのては どのては〬 どのぴ 〪のにづべび〩

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〶〶
〱
〲
〳
〴

付録 ぁ〮 言語呼び出し形式要約

どのぴ きぐぉたぉのてはたでづぴたのぴとにづべ〨きぐぉたぉのては どのては〬 どのぴ の〬 っとちひ 〪にづべ〩
どのぴ きぐぉたぉのてはたでづぴたぶちぬふづぬづの〨きぐぉたぉのては どのては〬 っとちひ 〪にづべ〬 どのぴ 〪ぶちぬふづぬづの〬
どのぴ 〪てぬちで〩
どのぴ きぐぉたぉのてはたびづぴ〨きぐぉたぉのては どのては〬 っとちひ 〪にづべ〬 っとちひ 〪ぶちぬふづ〩

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

A.2.8 プロセスの生成と管理 C 言語呼び出し形式
どのぴ きぐぉたぃぬはびづたばはひぴ〨っとちひ 〪ばはひぴたのちねづ〩
どのぴ きぐぉたぃはねねたちっっづばぴ〨っとちひ 〪ばはひぴたのちねづ〬 きぐぉたぉのては どのては〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪のづぷっはねね〩
どのぴ きぐぉたぃはねねたっはののづっぴ〨っとちひ 〪ばはひぴたのちねづ〬 きぐぉたぉのては どのては〬 どのぴ ひははぴ〬
きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪のづぷっはねね〩
どのぴ きぐぉたぃはねねたつどびっはののづっぴ〨きぐぉたぃはねね 〪っはねね〩
どのぴ きぐぉたぃはねねたでづぴたばちひづのぴ〨きぐぉたぃはねね 〪ばちひづのぴ〩
どのぴ きぐぉたぃはねねたなはどの〨どのぴ てつ〬 きぐぉたぃはねね 〪どのぴづひっはねね〩
どのぴ きぐぉたぃはねねたびばちぷの〨っとちひ 〪っはねねちのつ〬 っとちひ 〪ちひでぶせそ〬 どのぴ ねちへばひはっび〬 きぐぉたぉのては
どのては〬 どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪どのぴづひっはねね〬
どのぴ ちひひちべたはてたづひひっはつづびせそ〩
どのぴ きぐぉたぃはねねたびばちぷのたねふぬぴどばぬづ〨どのぴ っはふのぴ〬 っとちひ 〪ちひひちべたはてたっはねねちのつびせそ〬
っとちひ 〪〪ちひひちべたはてたちひでぶせそ〬 どのぴ ちひひちべたはてたねちへばひはっびせそ〬 きぐぉたぉのては ちひひちべたはてたどのてはせそ〬
どのぴ ひははぴ〬 きぐぉたぃはねね っはねね〬 きぐぉたぃはねね 〪どのぴづひっはねね〬 どのぴ ちひひちべたはてたづひひっはつづびせそ〩
どのぴ きぐぉたがははにふばたのちねづ〨っとちひ 〪びづひぶどっづたのちねづ〬 きぐぉたぉのては どのては〬 っとちひ 〪ばはひぴたのちねづ〩
どのぴ きぐぉたくばづのたばはひぴ〨きぐぉたぉのては どのては〬 っとちひ 〪ばはひぴたのちねづ〩
どのぴ きぐぉたぐふぢぬどびとたのちねづ〨っとちひ 〪びづひぶどっづたのちねづ〬 きぐぉたぉのては どのては〬 っとちひ 〪ばはひぴたのちねづ〩
どのぴ きぐぉたさのばふぢぬどびとたのちねづ〨っとちひ 〪びづひぶどっづたのちねづ〬 きぐぉたぉのては どのては〬 っとちひ 〪ばはひぴたのちねづ〩

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

A.2.9 片方向通信 C 言語呼び出し形式
どのぴ きぐぉたぁっっふねふぬちぴづ〨ぶはどつ 〪はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬
きぐぉたいちぴちぴべばづ はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 きぐぉたぁどのぴ ぴちひでづぴたつどびば〬
どのぴ ぴちひでづぴたっはふのぴ〬 きぐぉたいちぴちぴべばづ ぴちひでづぴたつちぴちぴべばづ〬 きぐぉたくば はば〬 きぐぉたしどの ぷどの〩
どのぴ きぐぉたぇづぴ〨ぶはどつ 〪はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 きぐぉたいちぴちぴべばづ
はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 きぐぉたぁどのぴ ぴちひでづぴたつどびば〬 どのぴ ぴちひでづぴたっはふのぴ〬
きぐぉたいちぴちぴべばづ ぴちひでづぴたつちぴちぴべばづ〬 きぐぉたしどの ぷどの〩
どのぴ きぐぉたぐふぴ〨ぶはどつ 〪はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 きぐぉたいちぴちぴべばづ
はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 きぐぉたぁどのぴ ぴちひでづぴたつどびば〬 どのぴ ぴちひでづぴたっはふのぴ〬
きぐぉたいちぴちぴべばづ ぴちひでづぴたつちぴちぴべばづ〬 きぐぉたしどの ぷどの〩
どのぴ きぐぉたしどのたっはねばぬづぴづ〨きぐぉたしどの ぷどの〩
どのぴ きぐぉたしどのたっひづちぴづ〨ぶはどつ 〪ぢちびづ〬 きぐぉたぁどのぴ びどぺづ〬 どのぴ つどびばたふのどぴ〬 きぐぉたぉのては どのては〬きぐぉたぃはねね っはねね〬 きぐぉたしどの 〪ぷどの〩
どのぴ きぐぉたしどのたてづのっづ〨どのぴ ちびびづひぴ〬 きぐぉたしどの ぷどの〩
どのぴ きぐぉたしどのたてひづづ〨きぐぉたしどの 〪ぷどの〩
どのぴ きぐぉたしどのたでづぴたでひはふば〨きぐぉたしどの ぷどの〬 きぐぉたぇひはふば 〪でひはふば〩
どのぴ きぐぉたしどのたぬはっに〨どのぴ ぬはっにたぴべばづ〬 どのぴ ひちのに〬 どのぴ ちびびづひぴ〬 きぐぉたしどの ぷどの〩
どのぴ きぐぉたしどのたばはびぴ〨きぐぉたぇひはふば でひはふば〬 どのぴ ちびびづひぴ〬 きぐぉたしどの ぷどの〩
どのぴ きぐぉたしどのたびぴちひぴ〨きぐぉたぇひはふば でひはふば〬 どのぴ ちびびづひぴ〬 きぐぉたしどの ぷどの〩
どのぴ きぐぉたしどのたぴづびぴ〨きぐぉたしどの ぷどの〬 どのぴ 〪てぬちで〩
どのぴ きぐぉたしどのたふのぬはっに〨どのぴ ひちのに〬 きぐぉたしどの ぷどの〩
どのぴ きぐぉたしどのたぷちどぴ〨きぐぉたしどの ぷどの〩ぁ〮〲〮 ぃ言語呼び出し形式〵〶〷

A.2.10 外部インターフェイス C 言語呼び出し形式〱〲

どのぴ きぐぉたぇひづぱふづびぴたっはねばぬづぴづ〨きぐぉたげづぱふづびぴ ひづぱふづびぴ〩
どのぴ きぐぉたぇひづぱふづびぴたびぴちひぴ〨きぐぉたぇひづぱふづびぴたぱふづひべたてふのっぴどはの 〪ぱふづひべたての〬きぐぉたぇひづぱふづびぴたてひづづたてふのっぴどはの 〪てひづづたての〬 きぐぉたぇひづぱふづびぴたっちのっづぬたてふのっぴどはの〪っちのっづぬたての〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたぉのどぴたぴとひづちつ〨どのぴ 〪ちひでっ〬 っとちひ 〪〨〨〪ちひでぶ〩せそ〩〬 どのぴ ひづぱふどひづつ〬
どのぴ 〪ばひはぶどつづつ〩
どのぴ きぐぉたぉびたぴとひづちつたねちどの〨どのぴ 〪てぬちで〩
どのぴ きぐぉたけふづひべたぴとひづちつ〨どのぴ 〪ばひはぶどつづつ〩
どのぴ きぐぉたこぴちぴふびたびづぴたっちのっづぬぬづつ〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 どのぴ てぬちで〩
どのぴ きぐぉたこぴちぴふびたびづぴたづぬづねづのぴび〨きぐぉたこぴちぴふび 〪びぴちぴふび〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
どのぴ っはふのぴ〩

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

A.2.11 入出力 C 言語呼び出し形式〱〴

どのぴ きぐぉたうどぬづたっぬはびづ〨きぐぉたうどぬづ 〪てと〩どのぴ きぐぉたうどぬづたつづぬづぴづ〨っとちひ 〪てどぬづのちねづ〬 きぐぉたぉのては どのては〩
どのぴ きぐぉたうどぬづたでづぴたちねはつづ〨きぐぉたうどぬづ てと〬 どのぴ 〪ちねはつづ〩どのぴ きぐぉたうどぬづたでづぴたちぴはねどっどぴべ〨きぐぉたうどぬづ てと〬 どのぴ 〪てぬちで〩
どのぴ きぐぉたうどぬづたでづぴたぢべぴづたはててびづぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬
きぐぉたくててびづぴ 〪つどびば〩
どのぴ きぐぉたうどぬづたでづぴたでひはふば〨きぐぉたうどぬづ てと〬 きぐぉたぇひはふば 〪でひはふば〩
どのぴ きぐぉたうどぬづたでづぴたどのては〨きぐぉたうどぬづ てと〬 きぐぉたぉのては 〪どのてはたふびづつ〩
どのぴ きぐぉたうどぬづたでづぴたばはびどぴどはの〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ 〪はててびづぴ〩
どのぴ きぐぉたうどぬづたでづぴたばはびどぴどはのたびとちひづつ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ 〪はててびづぴ〩
どのぴ きぐぉたうどぬづたでづぴたびどぺづ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ 〪びどぺづ〩
どのぴ きぐぉたうどぬづたでづぴたぴべばづたづへぴづのぴ〨きぐぉたうどぬづ てと〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
きぐぉたぁどのぴ 〪づへぴづのぴ〩
どのぴ きぐぉたうどぬづたでづぴたぶどづぷ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ 〪つどびば〬 きぐぉたいちぴちぴべばづ 〪づぴべばづ〬
きぐぉたいちぴちぴべばづ 〪てどぬづぴべばづ〬 っとちひ 〪つちぴちひづば〩
どのぴ きぐぉたうどぬづたどひづちつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたうどぬづたどひづちつたちぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたうどぬづたどひづちつたびとちひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたうどぬづたどぷひどぴづ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたうどぬづたどぷひどぴづたちぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたうどぬづたどぷひどぴづたびとちひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたげづぱふづびぴ 〪ひづぱふづびぴ〩
どのぴ きぐぉたうどぬづたはばづの〨きぐぉたぃはねね っはねね〬 っとちひ 〪てどぬづのちねづ〬 どのぴ ちねはつづ〬 きぐぉたぉのては どのては〬きぐぉたうどぬづ 〪てと〩どのぴ きぐぉたうどぬづたばひづちぬぬはっちぴづ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ びどぺづ〩
どのぴ きぐぉたうどぬづたひづちつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬
きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたひづちつたちぬぬ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩

〱〶

〱〵

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〶〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

どのぴ きぐぉたうどぬづたひづちつたちぬぬたぢづでどの〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
どのぴ きぐぉたうどぬづたひづちつたちぬぬたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたひづちつたちぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたひづちつたちぴたちぬぬ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたひづちつたちぴたちぬぬたぢづでどの〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
どのぴ きぐぉたうどぬづたひづちつたちぴたちぬぬたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたひづちつたはひつづひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたひづちつたはひつづひづつたぢづでどの〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
どのぴ きぐぉたうどぬづたひづちつたはひつづひづつたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたひづちつたびとちひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたびづづに〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 どのぴ ぷとづのっづ〩
どのぴ きぐぉたうどぬづたびづづにたびとちひづつ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 どのぴ ぷとづのっづ〩
どのぴ きぐぉたうどぬづたびづぴたちぴはねどっどぴべ〨きぐぉたうどぬづ てと〬 どのぴ てぬちで〩
どのぴ きぐぉたうどぬづたびづぴたどのては〨きぐぉたうどぬづ てと〬 きぐぉたぉのては どのては〩
どのぴ きぐぉたうどぬづたびづぴたびどぺづ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ びどぺづ〩
どのぴ きぐぉたうどぬづたびづぴたぶどづぷ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ つどびば〬 きぐぉたいちぴちぴべばづ づぴべばづ〬
きぐぉたいちぴちぴべばづ てどぬづぴべばづ〬 っとちひ 〪つちぴちひづば〬 きぐぉたぉのては どのては〩
どのぴ きぐぉたうどぬづたびべのっ〨きぐぉたうどぬづ てと〩
どのぴ きぐぉたうどぬづたぷひどぴづ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたぷひどぴづたちぬぬ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたぷひどぴづたちぬぬたぢづでどの〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
どのぴ きぐぉたうどぬづたぷひどぴづたちぬぬたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたぷひどぴづたちぴ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたぷひどぴづたちぴたちぬぬ〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたぷひどぴづたちぴたちぬぬたぢづでどの〨きぐぉたうどぬづ てと〬 きぐぉたくててびづぴ はててびづぴ〬 ぶはどつ 〪ぢふて〬
どのぴ っはふのぴ〬 きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
どのぴ きぐぉたうどぬづたぷひどぴづたちぴたちぬぬたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたぷひどぴづたはひつづひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたぷひどぴづたはひつづひづつたぢづでどの〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
どのぴ きぐぉたうどぬづたぷひどぴづたはひつづひづつたづのつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたうどぬづたぷひどぴづたびとちひづつ〨きぐぉたうどぬづ てと〬 ぶはどつ 〪ぢふて〬 どのぴ っはふのぴ〬
きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたこぴちぴふび 〪びぴちぴふび〩
どのぴ きぐぉたげづでどびぴづひたつちぴちひづば〨っとちひ 〪つちぴちひづば〬
きぐぉたいちぴちひづばたっはのぶづひびどはのたてふのっぴどはの 〪ひづちつたっはのぶづひびどはのたての〬きぐぉたいちぴちひづばたっはのぶづひびどはのたてふのっぴどはの 〪ぷひどぴづたっはのぶづひびどはのたての〬きぐぉたいちぴちひづばたづへぴづのぴたてふのっぴどはの 〪つぴべばづたてどぬづたづへぴづのぴたての〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩

ぁ〮〲〮 ぃ言語呼び出し形式〵〶〹

A.2.12 言語呼び出し形式 C 言語呼び出し形式〱〲

どのぴ きぐぉたごべばづたっひづちぴづたて〹〰たっはねばぬづへ〨どのぴ ば〬 どのぴ ひ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたっひづちぴづたて〹〰たどのぴづでづひ〨どのぴ ひ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたっひづちぴづたて〹〰たひづちぬ〨どのぴ ば〬 どのぴ ひ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたねちぴっとたびどぺづ〨どのぴ ぴべばづっぬちびび〬 どのぴ びどぺづ〬 きぐぉたいちぴちぴべばづ 〪ぴべばづ〩
きぐぉたうどのぴ きぐぉたぃはねねたっ〲て〨きぐぉたぃはねね っはねね〩
きぐぉたぃはねね きぐぉたぃはねねたて〲っ〨きぐぉたうどのぴ っはねね〩
きぐぉたうどのぴ きぐぉたぅひひとちのつぬづひたっ〲て〨きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩
きぐぉたぅひひとちのつぬづひ きぐぉたぅひひとちのつぬづひたて〲っ〨きぐぉたうどのぴ づひひとちのつぬづひ〩
きぐぉたうどのぴ きぐぉたうどぬづたっ〲て〨きぐぉたうどぬづ てどぬづ〩
きぐぉたうどぬづ きぐぉたうどぬづたて〲っ〨きぐぉたうどのぴ てどぬづ〩
きぐぉたうどのぴ きぐぉたぇひはふばたっ〲て〨きぐぉたぇひはふば でひはふば〩
きぐぉたぇひはふば きぐぉたぇひはふばたて〲っ〨きぐぉたうどのぴ でひはふば〩
きぐぉたうどのぴ きぐぉたぉのてはたっ〲て〨きぐぉたぉのては どのては〩きぐぉたぉのては きぐぉたぉのてはたて〲っ〨きぐぉたうどのぴ どのては〩きぐぉたうどのぴ きぐぉたくばたっ〲て〨きぐぉたくば はば〩きぐぉたくば きぐぉたくばたて〲っ〨きぐぉたうどのぴ はば〩
きぐぉたうどのぴ きぐぉたげづぱふづびぴたっ〲て〨きぐぉたげづぱふづびぴ ひづぱふづびぴ〩
きぐぉたげづぱふづびぴ きぐぉたげづぱふづびぴたて〲っ〨きぐぉたうどのぴ ひづぱふづびぴ〩
どのぴ きぐぉたこぴちぴふびたっ〲て〨きぐぉたこぴちぴふび 〪ったびぴちぴふび〬 きぐぉたうどのぴ 〪てたびぴちぴふび〩
どのぴ きぐぉたこぴちぴふびたて〲っ〨きぐぉたうどのぴ 〪てたびぴちぴふび〬 きぐぉたこぴちぴふび 〪ったびぴちぴふび〩
きぐぉたうどのぴ きぐぉたごべばづたっ〲て〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〩
きぐぉたいちぴちぴべばづ きぐぉたごべばづたて〲っ〨きぐぉたうどのぴ つちぴちぴべばづ〩
きぐぉたうどのぴ きぐぉたしどのたっ〲て〨きぐぉたしどの ぷどの〩
きぐぉたしどの きぐぉたしどのたて〲っ〨きぐぉたうどのぴ ぷどの〩

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷

A.2.13 プロファイルインターフェイス C 言語呼び出し形式
どのぴ きぐぉたぐっはのぴひはぬ〨っはのびぴ どのぴ ぬづぶづぬ〬 〮〮〮〩

〲〸
〲〹
〳〰
〳〱

A.2.14 廃止された C 言語呼び出し形式
どのぴ きぐぉたぁつつひづびび〨ぶはどつ〪 ぬはっちぴどはの〬 きぐぉたぁどのぴ 〪ちつつひづびび〩
どのぴ きぐぉたぁぴぴひたつづぬづぴづ〨きぐぉたぃはねね っはねね〬 どのぴ にづべぶちぬ〩
どのぴ きぐぉたぁぴぴひたでづぴ〨きぐぉたぃはねね っはねね〬 どのぴ にづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬 どのぴ 〪てぬちで〩
どのぴ きぐぉたぁぴぴひたばふぴ〨きぐぉたぃはねね っはねね〬 どのぴ にづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩
どのぴ きぐぉたいさぐたうぎ〨きぐぉたぃはねね はぬつっはねね〬 どのぴ にづべぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩
どのぴ きぐぉたぅひひとちのつぬづひたっひづちぴづ〨きぐぉたえちのつぬづひたてふのっぴどはの 〪てふのっぴどはの〬
きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
どのぴ きぐぉたぅひひとちのつぬづひたでづぴ〨きぐぉたぃはねね っはねね〬 きぐぉたぅひひとちのつぬづひ 〪づひひとちのつぬづひ〩
どのぴ きぐぉたぅひひとちのつぬづひたびづぴ〨きぐぉたぃはねね っはねね〬 きぐぉたぅひひとちのつぬづひ づひひとちのつぬづひ〩
どのぴ きぐぉたかづべぶちぬたっひづちぴづ〨きぐぉたぃはばべたてふのっぴどはの 〪っはばべたての〬 きぐぉたいづぬづぴづたてふのっぴどはの〪つづぬづぴづたての〬 どのぴ 〪にづべぶちぬ〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩
どのぴ きぐぉたかづべぶちぬたてひづづ〨どのぴ 〪にづべぶちぬ〩
どのぴ きぐぉたぎさががたぃくぐすたうぎ〨きぐぉたぃはねね はぬつっはねね〬 どのぴ にづべぶちぬ〬 ぶはどつ 〪づへぴひちたびぴちぴづ〬
ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたどの〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬたはふぴ〬 どのぴ 〪てぬちで〩

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〷〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

どのぴ きぐぉたぎさががたいぅがぅごぅたうぎ〨きぐぉたぃはねね っはねね〬 どのぴ にづべぶちぬ〬 ぶはどつ 〪ちぴぴひどぢふぴづたぶちぬ〬
ぶはどつ 〪づへぴひちたびぴちぴづ〩
どのぴ きぐぉたごべばづたづへぴづのぴ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ 〪づへぴづのぴ〩
どのぴ きぐぉたごべばづたとどのつづへづつ〨どのぴ っはふのぴ〬 どのぴ 〪ちひひちべたはてたぢぬはっにぬづのでぴとび〬
きぐぉたぁどのぴ 〪ちひひちべたはてたつどびばぬちっづねづのぴび〬 きぐぉたいちぴちぴべばづ はぬつぴべばづ〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたとぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬 きぐぉたぁどのぴ びぴひどつづ〬きぐぉたいちぴちぴべばづ はぬつぴべばづ〬 きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたぬぢ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ〪 つどびばぬちっづねづのぴ〩
どのぴ きぐぉたごべばづたびぴひふっぴ〨どのぴ っはふのぴ〬 どのぴ 〪ちひひちべたはてたぢぬはっにぬづのでぴとび〬
きぐぉたぁどのぴ 〪ちひひちべたはてたつどびばぬちっづねづのぴび〬 きぐぉたいちぴちぴべばづ 〪ちひひちべたはてたぴべばづび〬
きぐぉたいちぴちぴべばづ 〪のづぷぴべばづ〩
どのぴ きぐぉたごべばづたふぢ〨きぐぉたいちぴちぴべばづ つちぴちぴべばづ〬 きぐぉたぁどのぴ〪 つどびばぬちっづねづのぴ〩

ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式

A.3 Fortran言語呼び出し形式

〵〷〱
〱
〲

A.3.1 1対1通信 Fortran 言語呼び出し形式〳〴

きぐぉたあこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげきぐぉたあこぅぎいたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたあさううぅげたぁごごぁぃえ〨あさううぅげ〬 こぉずぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさううぅげ〨〪〩ぉぎごぅぇぅげ こぉずぅ〬 ぉぅげげくげきぐぉたあさううぅげたいぅごぁぃえ〨あさううぅげたぁいいげ〬 こぉずぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさううぅげたぁいいげ〨〪〩ぉぎごぅぇぅげ こぉずぅ〬 ぉぅげげくげきぐぉたぃぁぎぃぅが〨げぅけさぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげきぐぉたぇぅごたぃくさぎご〨こごぁごさこ〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげきぐぉたぉあこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたぉぐげくあぅ〨こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 うがぁぇ〬 こごぁごさこ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたぉげぅぃざ〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたぉげこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたぉこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたぉここぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたぐげくあぅ〨こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたげぅぃざ〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬ぉぅげげくげきぐぉたげぅぃざたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 こくさげぃぅ〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたげぅけさぅこごたうげぅぅ〨げぅけさぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげきぐぉたげぅけさぅこごたぇぅごたこごぁごさこ〨 げぅけさぅこご〬 うがぁぇ〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ

〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〷〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

きぐぉたげこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげきぐぉたげこぅぎいたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたこぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげきぐぉたこぅぎいげぅぃざ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 いぅこご〬 こぅぎいごぁぇ〬 げぅぃざあさう〬げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 こくさげぃぅ〬 げぅぃざごぁぇ〬 ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 いぅこご〬 こぅぎいごぁぇ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬
こくさげぃぅ〬 げぅぃざごぁぇ〬 ぃくきき〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたこぅぎいげぅぃざたげぅぐがぁぃぅ〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 こぅぎいごぁぇ〬 こくさげぃぅ〬 げぅぃざごぁぇ〬
ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 こぅぎいごぁぇ〬 こくさげぃぅ〬 げぅぃざごぁぇ〬 ぃくきき〬
こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたこぅぎいたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたここぅぎい〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 ぉぅげげくげきぐぉたここぅぎいたぉぎぉご〨あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 いぅこご〬 ごぁぇ〬 ぃくきき〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたこごぁげご〨げぅけさぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげきぐぉたこごぁげごぁがが〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 ぉぅげげくげきぐぉたごぅこご〨げぅけさぅこご〬 うがぁぇ〬 こごぁごさこ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ げぅけさぅこご〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたごぅこごぁがが〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 うがぁぇ〬 ぁげげぁすたくうたこごぁごさこぅこ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬ぁげげぁすたくうたこごぁごさこぅこ〨きぐぉたこごぁごさこたこぉずぅ〪〬〩〬 ぉぅげげくげきぐぉたごぅこごぁぎす〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 ぉぎいぅじ〬 うがぁぇ〬 こごぁごさこ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 ぉぎいぅじ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬ぉぅげげくげきぐぉたごぅこごこくきぅ〨ぉぎぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 くさごぃくさぎご〬 ぁげげぁすたくうたぉぎいぉぃぅこ〬ぁげげぁすたくうたこごぁごさこぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 くさごぃくさぎご〬 ぁげげぁすたくうたぉぎいぉぃぅこ〨〪〩〬ぁげげぁすたくうたこごぁごさこぅこ〨きぐぉたこごぁごさこたこぉずぅ〪〬〩〬 ぉぅげげくげきぐぉたごぅこごたぃぁぎぃぅががぅい〨こごぁごさこ〬 うがぁぇ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたしぁぉご〨げぅけさぅこご〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ

ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式〵〷〳

きぐぉたしぁぉごぁがが〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 ぁげげぁすたくうたこごぁごさこぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩ぉぎごぅぇぅげ ぁげげぁすたくうたこごぁごさこぅこ〨きぐぉたこごぁごさこたこぉずぅ〪〬〩〬 ぉぅげげくげきぐぉたしぁぉごぁぎす〨ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 ぉぎいぅじ〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 ぉぎいぅじ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬ぉぅげげくげきぐぉたしぁぉごこくきぅ〨ぉぎぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〬 くさごぃくさぎご〬 ぁげげぁすたくうたぉぎいぉぃぅこ〬ぁげげぁすたくうたこごぁごさこぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 ぁげげぁすたくうたげぅけさぅこごこ〨〪〩〬 くさごぃくさぎご〬 ぁげげぁすたくうたぉぎいぉぃぅこ〨〪〩〬ぁげげぁすたくうたこごぁごさこぅこ〨きぐぉたこごぁごさこたこぉずぅ〪〬〩〬 ぉぅげげくげ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

A.3.2 データ型 Fortran 言語呼び出し形式〱〱

きぐぉたぇぅごたぁいいげぅここ〨がくぃぁごぉくぎ〬 ぁいいげぅここ〬 ぉぅげげくげ〩〼ぴべばづ〾 がくぃぁごぉくぎ〨〪〩ぉぎごぅぇぅげ ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁいいげぅここ
きぐぉたぇぅごたぅがぅきぅぎごこ〨こごぁごさこ〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげきぐぉたぐぁぃか〨ぉぎあさう〬 ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 くさごあさう〬 くさごこぉずぅ〬 ぐくこぉごぉくぎ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 ぉぎあさう〨〪〩〬 くさごあさう〨〪〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 くさごこぉずぅ〬 ぐくこぉごぉくぎ〬 ぃくきき〬 ぉぅげげくげきぐぉたぐぁぃかたぅじごぅげぎぁが〨いぁごぁげぅぐ〬 ぉぎあさう〬 ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 くさごあさう〬 くさごこぉずぅ〬ぐくこぉごぉくぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 くさごこぉずぅ〬 ぐくこぉごぉくぎ
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐ〼ぴべばづ〾 ぉぎあさう〨〪〩〬 くさごあさう〨〪〩きぐぉたぐぁぃかたぅじごぅげぎぁがたこぉずぅ〨いぁごぁげぅぐ〬 ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 こぉずぅぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐ
きぐぉたぐぁぃかたこぉずぅ〨ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 ぃくきき〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎぃくさぎご〬 いぁごぁごすぐぅ〬 ぃくきき〬 こぉずぅ〬 ぉぅげげくげきぐぉたごすぐぅたぃくききぉご〨いぁごぁごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたぃくぎごぉぇさくさこ〨ぃくさぎご〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁす〨こぉずぅ〬 げぁぎか〬 ぎいぉきこ〬 ぁげげぁすたくうたぇこぉずぅこ〬ぁげげぁすたくうたいぉこごげぉあこ〬 ぁげげぁすたくうたいぁげぇこ〬 ぁげげぁすたくうたぐこぉずぅこ〬 くげいぅげ〬 くがいごすぐぅ〬
ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こぉずぅ〬 げぁぎか〬 ぎいぉきこ〬 ぁげげぁすたくうたぇこぉずぅこ〨〪〩〬 ぁげげぁすたくうたいぉこごげぉあこ〨〪〩〬ぁげげぁすたくうたいぁげぇこ〨〪〩〬 ぁげげぁすたくうたぐこぉずぅこ〨〪〩〬 くげいぅげ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅい〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬
ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげ〨ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 こごげぉいぅ
きぐぉたごすぐぅたぃげぅぁごぅたぉぎいぅじぅいたあがくぃか〨ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩

〱〳

〱〲

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〷〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約ぉぎごぅぇぅげ ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩〬 くがいごすぐぅ〬
ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅい〨くがいごすぐぅ〬 があ〬 ぅじごぅぎご〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 があ〬 ぅじごぅぎご
きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬
ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬 ぁげげぁすたくうたごすぐぅこ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 ぁげげぁすたくうたごすぐぅこ〨〪〩〬 ぎぅしごすぐぅ〬ぉぅげげくげぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩きぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁす〨ぎいぉきこ〬 ぁげげぁすたくうたこぉずぅこ〬 ぁげげぁすたくうたこさあこぉずぅこ〬ぁげげぁすたくうたこごぁげごこ〬 くげいぅげ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぎいぉきこ〬 ぁげげぁすたくうたこぉずぅこ〨〪〩〬 ぁげげぁすたくうたこさあこぉずぅこ〨〪〩〬ぁげげぁすたくうたこごぁげごこ〨〪〩〬 くげいぅげ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたいさぐ〨ごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたうげぅぅ〨いぁごぁごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこ〨いぁごぁごすぐぅ〬 きぁじたぉぎごぅぇぅげこ〬 きぁじたぁいいげぅここぅこ〬 きぁじたいぁごぁごすぐぅこ〬
ぁげげぁすたくうたぉぎごぅぇぅげこ〬 ぁげげぁすたくうたぁいいげぅここぅこ〬 ぁげげぁすたくうたいぁごぁごすぐぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 きぁじたぉぎごぅぇぅげこ〬 きぁじたぁいいげぅここぅこ〬 きぁじたいぁごぁごすぐぅこ〬
ぁげげぁすたくうたぉぎごぅぇぅげこ〨〪〩〬 ぁげげぁすたくうたいぁごぁごすぐぅこ〨〪〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁげげぁすたくうたぁいいげぅここぅこ〨〪〩きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅ〨いぁごぁごすぐぅ〬 ぎさきたぉぎごぅぇぅげこ〬 ぎさきたぁいいげぅここぅこ〬 ぎさきたいぁごぁごすぐぅこ〬ぃくきあぉぎぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぎさきたぉぎごぅぇぅげこ〬 ぎさきたぁいいげぅここぅこ〬 ぎさきたいぁごぁごすぐぅこ〬 ぃくきあぉぎぅげ〬ぉぅげげくげきぐぉたごすぐぅたぇぅごたぅじごぅぎご〨いぁごぁごすぐぅ〬 があ〬 ぅじごぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい 〽 きぐぉたぁいいげぅここたかぉぎい〩 があ〬 ぅじごぅぎご
きぐぉたごすぐぅたぇぅごたごげさぅたぅじごぅぎご〨いぁごぁごすぐぅ〬 ごげさぅたがあ〬 ごげさぅたぅじごぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい 〽 きぐぉたぁいいげぅここたかぉぎい〩 ごげさぅたがあ〬 ごげさぅたぅじごぅぎご
きぐぉたごすぐぅたぉぎいぅじぅい〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたこぉずぅ〨いぁごぁごすぐぅ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 こぉずぅ〬 ぉぅげげくげきぐぉたごすぐぅたざぅぃごくげ〨ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたさぎぐぁぃか〨ぉぎあさう〬 ぉぎこぉずぅ〬 ぐくこぉごぉくぎ〬 くさごあさう〬 くさごぃくさぎご〬 いぁごぁごすぐぅ〬 ぃくきき〬ぉぅげげくげ〩〼ぴべばづ〾 ぉぎあさう〨〪〩〬 くさごあさう〨〪〩ぉぎごぅぇぅげ ぉぎこぉずぅ〬 ぐくこぉごぉくぎ〬 くさごぃくさぎご〬 いぁごぁごすぐぅ〬 ぃくきき〬 ぉぅげげくげきぐぉたさぎぐぁぃかたぅじごぅげぎぁが〨いぁごぁげぅぐ〬 ぉぎあさう〬 ぉぎこぉずぅ〬 ぐくこぉごぉくぎ〬 くさごあさう〬 くさごぃくさぎご〬
いぁごぁごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くさごぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぉぎこぉずぅ〬 ぐくこぉごぉくぎ
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐ〼ぴべばづ〾 ぉぎあさう〨〪〩〬 くさごあさう〨〪〩ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式〵〷〵

A.3.3 集団的通信 Fortran 言語呼び出し形式〱〲

きぐぉたぁががぇぁごえぅげ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげきぐぉたぁががぇぁごえぅげざ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬 いぉこぐがこ〬げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎごこ〨〪〩〬 いぉこぐがこ〨〪〩〬 げぅぃざごすぐぅ〬 ぃくきき〬ぉぅげげくげきぐぉたぁががげぅいさぃぅ〨こぅぎいあさう〬 げぅぃざあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげきぐぉたぁががごくぁがが〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげきぐぉたぁががごくぁががざ〨こぅぎいあさう〬 こぅぎいぃくさぎごこ〬 こいぉこぐがこ〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬
げいぉこぐがこ〬 げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎごこ〨〪〩〬 こいぉこぐがこ〨〪〩〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎごこ〨〪〩〬 げいぉこぐがこ〨〪〩〬げぅぃざごすぐぅ〬 ぃくきき〬 ぉぅげげくげきぐぉたぁががごくぁががし〨こぅぎいあさう〬 こぅぎいぃくさぎごこ〬 こいぉこぐがこ〬 こぅぎいごすぐぅこ〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬
げいぉこぐがこ〬 げぅぃざごすぐぅこ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎごこ〨〪〩〬 こいぉこぐがこ〨〪〩〬 こぅぎいごすぐぅこ〨〪〩〬 げぅぃざぃくさぎごこ〨〪〩〬げいぉこぐがこ〨〪〩〬 げぅぃざごすぐぅこ〨〪〩〬 ぃくきき〬 ぉぅげげくげきぐぉたあぁげげぉぅげ〨ぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげきぐぉたあぃぁこご〨あさううぅげ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 あさううぅげ〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげきぐぉたぅじこぃぁぎ〨こぅぎいあさう〬 げぅぃざあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげきぐぉたぇぁごえぅげ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬
げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげきぐぉたぇぁごえぅげざ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬 いぉこぐがこ〬げぅぃざごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎごこ〨〪〩〬 いぉこぐがこ〨〪〩〬 げぅぃざごすぐぅ〬 げくくご〬
ぃくきき〬 ぉぅげげくげきぐぉたくぐたぃくききさごぁごぉざぅ〨くぐ〬 ぃくききさごぅ〬 ぉぅげげくげ〩がくぇぉぃぁが ぃくききさごぅぉぎごぅぇぅげ くぐ〬 ぉぅげげくげきぐぉたくぐたぃげぅぁごぅ〨 うさぎぃごぉくぎ〬 ぃくききさごぅ〬 くぐ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
がくぇぉぃぁが ぃくききさごぅぉぎごぅぇぅげ くぐ〬 ぉぅげげくげきぐぉたくぐたうげぅぅ〨 くぐ〬 ぉぅげげくげ〩

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〷〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

付録 ぁ〮 言語呼び出し形式要約ぉぎごぅぇぅげ くぐ〬 ぉぅげげくげきぐぉたげぅいさぃぅ〨こぅぎいあさう〬 げぅぃざあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 げくくご〬 ぃくきき〬 ぉぅげげくげきぐぉたげぅいさぃぅたがくぃぁが〨ぉぎあさう〬 ぉぎくさあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぉぅげげくげ〩〼ぴべばづ〾 ぉぎあさう〨〪〩〬 ぉぎくさごあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぉぅげげくげきぐぉたげぅいさぃぅたこぃぁごごぅげ〨こぅぎいあさう〬 げぅぃざあさう〬 げぅぃざぃくさぎごこ〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ げぅぃざぃくさぎごこ〨〪〩〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげきぐぉたげぅいさぃぅたこぃぁごごぅげたあがくぃか〨こぅぎいあさう〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ げぅぃざぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげきぐぉたこぃぁぎ〨こぅぎいあさう〬 げぅぃざあさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ ぃくさぎご〬 いぁごぁごすぐぅ〬 くぐ〬 ぃくきき〬 ぉぅげげくげきぐぉたこぃぁごごぅげ〨こぅぎいあさう〬 こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬
げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎご〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげきぐぉたこぃぁごごぅげざ〨こぅぎいあさう〬 こぅぎいぃくさぎごこ〬 いぉこぐがこ〬 こぅぎいごすぐぅ〬 げぅぃざあさう〬 げぅぃざぃくさぎご〬げぅぃざごすぐぅ〬 げくくご〬 ぃくきき〬 ぉぅげげくげ〩〼ぴべばづ〾 こぅぎいあさう〨〪〩〬 げぅぃざあさう〨〪〩ぉぎごぅぇぅげ こぅぎいぃくさぎごこ〨〪〩〬 いぉこぐがこ〨〪〩〬 こぅぎいごすぐぅ〬 げぅぃざぃくさぎご〬 げぅぃざごすぐぅ〬 げくくご〬
ぃくきき〬 ぉぅげげくげ

〲〶
〲〷
〲〸

A.3.4 グループ，コンテクスト，コミュニケータ，キャッシング Fortran 言語呼
び出し形式

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぃくききたぃくきぐぁげぅ〨ぃくきき〱〬 ぃくきき〲〬 げぅこさがご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〱〬 ぃくきき〲〬 げぅこさがご〬 ぉぅげげくげきぐぉたぃくききたぃげぅぁごぅ〨ぃくきき〬 ぇげくさぐ〬 ぎぅしぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぇげくさぐ〬 ぎぅしぃくきき〬 ぉぅげげくげきぐぉたぃくききたぃげぅぁごぅたかぅすざぁが〨ぃくききたぃくぐすたぁごごげたうぎ〬 ぃくききたいぅがぅごぅたぁごごげたうぎ〬 ぃくききたかぅすざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぅじごぅげぎぁが ぃくききたぃくぐすたぁごごげたうぎ〬 ぃくききたいぅがぅごぅたぁごごげたうぎぉぎごぅぇぅげ ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
きぐぉたぃくききたいぅがぅごぅたぁごごげ〨ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげきぐぉたぃくききたいさぐ〨ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげきぐぉたぃくききたいさぐたうぎ〨くがいぃくきき〬 ぃくききたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ
きぐぉたぃくききたうげぅぅ〨ぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげ

ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式〵〷〷

きぐぉたぃくききたうげぅぅたかぅすざぁが〨ぃくききたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたかぅすざぁが〬 ぉぅげげくげきぐぉたぃくききたぇぅごたぁごごげ〨ぃくきき〬 ぃくききたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが
がくぇぉぃぁが うがぁぇ
きぐぉたぃくききたぇぅごたぎぁきぅ〨ぃくきき〬 ぃくききたぎぁきぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 げぅこさがごがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ぃくききたぎぁきぅ
きぐぉたぃくききたぇげくさぐ〨ぃくきき〬 ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぇげくさぐ〬 ぉぅげげくげきぐぉたぃくききたぎさががたぃくぐすたうぎ〨くがいぃくきき〬 ぃくききたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ
きぐぉたぃくききたぎさががたいぅがぅごぅたうぎ〨ぃくきき〬 ぃくききたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ
きぐぉたぃくききたげぁぎか〨ぃくきき〬 げぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 げぁぎか〬 ぉぅげげくげきぐぉたぃくききたげぅきくごぅたぇげくさぐ〨ぃくきき〬 ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぇげくさぐ〬 ぉぅげげくげきぐぉたぃくききたげぅきくごぅたこぉずぅ〨ぃくきき〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 こぉずぅ〬 ぉぅげげくげきぐぉたぃくききたこぅごたぁごごげ〨ぃくきき〬 ぃくききたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくききたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁがきぐぉたぃくききたこぅごたぎぁきぅ〨ぃくきき〬 ぃくききたぎぁきぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ぃくききたぎぁきぅ
きぐぉたぃくききたこぉずぅ〨ぃくきき〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 こぉずぅ〬 ぉぅげげくげきぐぉたぃくききたこぐがぉご〨ぃくきき〬 ぃくがくげ〬 かぅす〬 ぎぅしぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくがくげ〬 かぅす〬 ぎぅしぃくきき〬 ぉぅげげくげきぐぉたぃくききたごぅこごたぉぎごぅげ〨ぃくきき〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
きぐぉたぇげくさぐたぃくきぐぁげぅ〨ぇげくさぐ〱〬 ぇげくさぐ〲〬 げぅこさがご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぇげくさぐ〲〬 げぅこさがご〬 ぉぅげげくげきぐぉたぇげくさぐたいぉううぅげぅぎぃぅ〨ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげきぐぉたぇげくさぐたぅじぃが〨ぇげくさぐ〬 ぎ〬 げぁぎかこ〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぎ〬 げぁぎかこ〨〪〩〬 ぎぅしぇげくさぐ〬 ぉぅげげくげきぐぉたぇげくさぐたうげぅぅ〨ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぉぅげげくげきぐぉたぇげくさぐたぉぎぃが〨ぇげくさぐ〬 ぎ〬 げぁぎかこ〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぎ〬 げぁぎかこ〨〪〩〬 ぎぅしぇげくさぐ〬 ぉぅげげくげきぐぉたぇげくさぐたぉぎごぅげこぅぃごぉくぎ〨ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〷〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

きぐぉたぇげくさぐたげぁぎぇぅたぅじぃが〨ぇげくさぐ〬 ぎ〬 げぁぎぇぅこ〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぎ〬 げぁぎぇぅこ〨〳〪〬〩〬 ぎぅしぇげくさぐ〬 ぉぅげげくげきぐぉたぇげくさぐたげぁぎぇぅたぉぎぃが〨ぇげくさぐ〬 ぎ〬 げぁぎぇぅこ〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぎ〬 げぁぎぇぅこ〨〳〪〬〩〬 ぎぅしぇげくさぐ〬 ぉぅげげくげきぐぉたぇげくさぐたげぁぎか〨ぇげくさぐ〬 げぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 げぁぎか〬 ぉぅげげくげきぐぉたぇげくさぐたこぉずぅ〨ぇげくさぐ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 こぉずぅ〬 ぉぅげげくげきぐぉたぇげくさぐたごげぁぎこがぁごぅたげぁぎかこ〨ぇげくさぐ〱〬 ぎ〬 げぁぎかこ〱〬 ぇげくさぐ〲〬 げぁぎかこ〲〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぎ〬 げぁぎかこ〱〨〪〩〬 ぇげくさぐ〲〬 げぁぎかこ〲〨〪〩〬 ぉぅげげくげきぐぉたぇげくさぐたさぎぉくぎ〨ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〱〬 ぇげくさぐ〲〬 ぎぅしぇげくさぐ〬 ぉぅげげくげきぐぉたぉぎごぅげぃくききたぃげぅぁごぅ〨がくぃぁがたぃくきき〬 がくぃぁがたがぅぁいぅげ〬 ぐぅぅげたぃくきき〬 げぅきくごぅたがぅぁいぅげ〬
ごぁぇ〬 ぎぅしぉぎごぅげぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ がくぃぁがたぃくきき〬 がくぃぁがたがぅぁいぅげ〬 ぐぅぅげたぃくきき〬 げぅきくごぅたがぅぁいぅげ〬 ごぁぇ〬ぎぅしぉぎごぅげぃくきき〬 ぉぅげげくげきぐぉたぉぎごぅげぃくききたきぅげぇぅ〨ぉぎごぅげぃくきき〬 えぉぇえ〬 ぉぎごげぁぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎごぅげぃくきき〬 ぉぎごげぁぃくきき〬 ぉぅげげくげ
がくぇぉぃぁが えぉぇえ
きぐぉたごすぐぅたぃげぅぁごぅたかぅすざぁが〨ごすぐぅたぃくぐすたぁごごげたうぎ〬 ごすぐぅたいぅがぅごぅたぁごごげたうぎ〬 ごすぐぅたかぅすざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぅじごぅげぎぁが ごすぐぅたぃくぐすたぁごごげたうぎ〬 ごすぐぅたいぅがぅごぅたぁごごげたうぎぉぎごぅぇぅげ ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
きぐぉたごすぐぅたいぅがぅごぅたぁごごげ〨ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげきぐぉたごすぐぅたいさぐたうぎ〨くがいごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ
きぐぉたごすぐぅたうげぅぅたかぅすざぁが〨ごすぐぅたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅたかぅすざぁが〬 ぉぅげげくげきぐぉたごすぐぅたぇぅごたぁごごげ〨ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが
がくぇぉぃぁが うがぁぇ
きぐぉたごすぐぅたぇぅごたぎぁきぅ〨ごすぐぅ〬 ごすぐぅたぎぁきぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ごすぐぅたぎぁきぅ
きぐぉたごすぐぅたぎさががたぃくぐすたうぎ〨くがいごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ
きぐぉたごすぐぅたぎさががたいぅがぅごぅたうぎ〨ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ
きぐぉたごすぐぅたこぅごたぁごごげ〨ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ〩ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式〵〷〹

ぉぎごぅぇぅげ ごすぐぅ〬 ごすぐぅたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁがきぐぉたごすぐぅたこぅごたぎぁきぅ〨ごすぐぅ〬 ごすぐぅたぎぁきぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ごすぐぅたぎぁきぅ
きぐぉたしぉぎたぃげぅぁごぅたかぅすざぁが〨しぉぎたぃくぐすたぁごごげたうぎ〬 しぉぎたいぅがぅごぅたぁごごげたうぎ〬 しぉぎたかぅすざぁが〬ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぅじごぅげぎぁが しぉぎたぃくぐすたぁごごげたうぎ〬 しぉぎたいぅがぅごぅたぁごごげたうぎぉぎごぅぇぅげ しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
きぐぉたしぉぎたいぅがぅごぅたぁごごげ〨しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげきぐぉたしぉぎたいさぐたうぎ〨くがいしぉぎ〬 しぉぎたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいしぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ
きぐぉたしぉぎたうげぅぅたかぅすざぁが〨しぉぎたかぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎたかぅすざぁが〬 ぉぅげげくげきぐぉたしぉぎたぇぅごたぁごごげ〨しぉぎ〬 しぉぎたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが
がくぇぉぃぁが うがぁぇ
きぐぉたしぉぎたぇぅごたぎぁきぅ〨しぉぎ〬 しぉぎたぎぁきぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 しぉぎたぎぁきぅ
きぐぉたしぉぎたぎさががたぃくぐすたうぎ〨くがいしぉぎ〬 しぉぎたかぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ くがいしぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご
がくぇぉぃぁが うがぁぇ
きぐぉたしぉぎたぎさががたいぅがぅごぅたうぎ〨しぉぎ〬 しぉぎたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ
きぐぉたしぉぎたこぅごたぁごごげ〨しぉぎ〬 しぉぎたかぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 しぉぎたかぅすざぁが〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぁごごげぉあさごぅたざぁがきぐぉたしぉぎたこぅごたぎぁきぅ〨しぉぎ〬 しぉぎたぎぁきぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 しぉぎたぎぁきぅ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹

A.3.5 プロセストポロジー Fortran 言語呼び出し形式〴〰

きぐぉたぃぁげごいぉきたぇぅご〨ぃくきき〬 ぎいぉきこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎいぉきこ〬 ぉぅげげくげきぐぉたぃぁげごたぃくくげいこ〨ぃくきき〬 げぁぎか〬 きぁじいぉきこ〬 ぃくくげいこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 げぁぎか〬 きぁじいぉきこ〬 ぃくくげいこ〨〪〩〬 ぉぅげげくげきぐぉたぃぁげごたぃげぅぁごぅ〨ぃくききたくがい〬 ぎいぉきこ〬 いぉきこ〬 ぐぅげぉくいこ〬 げぅくげいぅげ〬 ぃくききたぃぁげご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたくがい〬 ぎいぉきこ〬 いぉきこ〨〪〩〬 ぃくききたぃぁげご〬 ぉぅげげくげ
がくぇぉぃぁが ぐぅげぉくいこ〨〪〩〬 げぅくげいぅげ

〴〲

〴〱

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〸〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

きぐぉたぃぁげごたぇぅご〨ぃくきき〬 きぁじいぉきこ〬 いぉきこ〬 ぐぅげぉくいこ〬 ぃくくげいこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 きぁじいぉきこ〬 いぉきこ〨〪〩〬 ぃくくげいこ〨〪〩〬 ぉぅげげくげ
がくぇぉぃぁが ぐぅげぉくいこ〨〪〩きぐぉたぃぁげごたきぁぐ〨ぃくきき〬 ぎいぉきこ〬 いぉきこ〬 ぐぅげぉくいこ〬 ぎぅしげぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎいぉきこ〬 いぉきこ〨〪〩〬 ぎぅしげぁぎか〬 ぉぅげげくげ
がくぇぉぃぁが ぐぅげぉくいこ〨〪〩きぐぉたぃぁげごたげぁぎか〨ぃくきき〬 ぃくくげいこ〬 げぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぃくくげいこ〨〪〩〬 げぁぎか〬 ぉぅげげくげきぐぉたぃぁげごたこえぉうご〨ぃくきき〬 いぉげぅぃごぉくぎ〬 いぉこぐ〬 げぁぎかたこくさげぃぅ〬 げぁぎかたいぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 いぉげぅぃごぉくぎ〬 いぉこぐ〬 げぁぎかたこくさげぃぅ〬 げぁぎかたいぅこご〬 ぉぅげげくげきぐぉたぃぁげごたこさあ〨ぃくきき〬 げぅきぁぉぎたいぉきこ〬 ぎぅしぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ
がくぇぉぃぁが げぅきぁぉぎたいぉきこ〨〪〩
きぐぉたいぉきこたぃげぅぁごぅ〨ぎぎくいぅこ〬 ぎいぉきこ〬 いぉきこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぎぎくいぅこ〬 ぎいぉきこ〬 いぉきこ〨〪〩〬 ぉぅげげくげきぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅ〨ぃくききたくがい〬 ぎ〬 こくさげぃぅこ〬 いぅぇげぅぅこ〬 いぅこごぉぎぁごぉくぎこ〬 しぅぉぇえごこ〬ぉぎうく〬 げぅくげいぅげ〬 ぃくききたいぉこごたぇげぁぐえ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたくがい〬 ぎ〬 こくさげぃぅこ〨〪〩〬 いぅぇげぅぅこ〨〪〩〬 いぅこごぉぎぁごぉくぎこ〨〪〩〬しぅぉぇえごこ〨〪〩〬 ぉぎうく〬 ぃくききたいぉこごたぇげぁぐえ〬 ぉぅげげくげ
がくぇぉぃぁが げぅくげいぅげ
きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎご〨ぃくききたくがい〬 ぉぎいぅぇげぅぅ〬 こくさげぃぅこ〬 こくさげぃぅしぅぉぇえごこ〬
くさごいぅぇげぅぅ〬 いぅこごぉぎぁごぉくぎこ〬 いぅこごしぅぉぇえごこ〬 ぉぎうく〬 げぅくげいぅげ〬 ぃくききたいぉこごたぇげぁぐえ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたくがい〬 ぉぎいぅぇげぅぅ〬 こくさげぃぅこ〨〪〩〬 こくさげぃぅしぅぉぇえごこ〨〪〩〬 くさごいぅぇげぅぅ〬
いぅこごぉぎぁごぉくぎこ〨〪〩〬 いぅこごしぅぉぇえごこ〨〪〩〬 ぉぎうく〬 ぃくききたいぉこごたぇげぁぐえ〬 ぉぅげげくげ
がくぇぉぃぁが げぅくげいぅげ
きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこ〨ぃくきき〬 きぁじぉぎいぅぇげぅぅ〬 こくさげぃぅこ〬 こくさげぃぅしぅぉぇえごこ〬
きぁじくさごいぅぇげぅぅ〬 いぅこごぉぎぁごぉくぎこ〬 いぅこごしぅぉぇえごこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 きぁじぉぎいぅぇげぅぅ〬 こくさげぃぅこ〨〪〩〬 こくさげぃぅしぅぉぇえごこ〨〪〩〬 きぁじくさごいぅぇげぅぅ〬
いぅこごぉぎぁごぉくぎこ〨〪〩〬 いぅこごしぅぉぇえごこ〨〪〩〬 ぉぅげげくげきぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご〨ぃくきき〬 ぉぎいぅぇげぅぅ〬 くさごいぅぇげぅぅ〬 しぅぉぇえごぅい〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぎいぅぇげぅぅ〬 くさごいぅぇげぅぅ〬 ぉぅげげくげ
がくぇぉぃぁが しぅぉぇえごぅい
きぐぉたぇげぁぐえいぉきこたぇぅご〨ぃくきき〬 ぎぎくいぅこ〬 ぎぅいぇぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎぎくいぅこ〬 ぎぅいぇぅこ〬 ぉぅげげくげきぐぉたぇげぁぐえたぃげぅぁごぅ〨ぃくききたくがい〬 ぎぎくいぅこ〬 ぉぎいぅじ〬 ぅいぇぅこ〬 げぅくげいぅげ〬 ぃくききたぇげぁぐえ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくききたくがい〬 ぎぎくいぅこ〬 ぉぎいぅじ〨〪〩〬 ぅいぇぅこ〨〪〩〬 ぃくききたぇげぁぐえ〬 ぉぅげげくげ
がくぇぉぃぁが げぅくげいぅげ
きぐぉたぇげぁぐえたぇぅご〨ぃくきき〬 きぁじぉぎいぅじ〬 きぁじぅいぇぅこ〬 ぉぎいぅじ〬 ぅいぇぅこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 きぁじぉぎいぅじ〬 きぁじぅいぇぅこ〬 ぉぎいぅじ〨〪〩〬 ぅいぇぅこ〨〪〩〬 ぉぅげげくげきぐぉたぇげぁぐえたきぁぐ〨ぃくきき〬 ぎぎくいぅこ〬 ぉぎいぅじ〬 ぅいぇぅこ〬 ぎぅしげぁぎか〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぎぎくいぅこ〬 ぉぎいぅじ〨〪〩〬 ぅいぇぅこ〨〪〩〬 ぎぅしげぁぎか〬 ぉぅげげくげきぐぉたぇげぁぐえたぎぅぉぇえあくげこ〨ぃくきき〬 げぁぎか〬 きぁじぎぅぉぇえあくげこ〬 ぎぅぉぇえあくげこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 げぁぎか〬 きぁじぎぅぉぇえあくげこ〬 ぎぅぉぇえあくげこ〨〪〩〬 ぉぅげげくげきぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご〨ぃくきき〬 げぁぎか〬 ぎぎぅぉぇえあくげこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 げぁぎか〬 ぎぎぅぉぇえあくげこ〬 ぉぅげげくげきぐぉたごくぐくたごぅこご〨ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 こごぁごさこ〬 ぉぅげげくげ

ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式

A.3.6 MPI環境管理 Fortran 言語呼び出し形式

〵〸〱
〱
〲

いくさあがぅ ぐげぅぃぉこぉくぎ きぐぉたしごぉぃか〨〩いくさあがぅ ぐげぅぃぉこぉくぎ きぐぉたしごぉきぅ〨〩きぐぉたぁあくげご〨ぃくきき〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげくげぃくいぅ〬 ぉぅげげくげきぐぉたぁいいたぅげげくげたぃがぁここ〨ぅげげくげぃがぁここ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃがぁここ〬 ぉぅげげくげきぐぉたぁいいたぅげげくげたぃくいぅ〨ぅげげくげぃがぁここ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃがぁここ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげきぐぉたぁいいたぅげげくげたこごげぉぎぇ〨ぅげげくげぃくいぅ〬 こごげぉぎぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃくいぅ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 こごげぉぎぇ
きぐぉたぁががくぃたきぅき〨こぉずぅ〬 ぉぎうく〬 あぁこぅぐごげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 こぉずぅ〬 あぁこぅぐごげ
きぐぉたぃくききたぃぁががたぅげげえぁぎいがぅげ〨ぃくきき〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげくげぃくいぅ〬 ぉぅげげくげきぐぉたぃくききたぃげぅぁごぅたぅげげえぁぎいがぅげ〨うさぎぃごぉくぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたぃくききたぇぅごたぅげげえぁぎいがぅげ〨ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたぃくききたこぅごたぅげげえぁぎいがぅげ〨ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたぅげげえぁぎいがぅげたうげぅぅ〨ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたぅげげくげたぃがぁここ〨ぅげげくげぃくいぅ〬 ぅげげくげぃがぁここ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃくいぅ〬 ぅげげくげぃがぁここ〬 ぉぅげげくげきぐぉたぅげげくげたこごげぉぎぇ〨ぅげげくげぃくいぅ〬 こごげぉぎぇ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぅげげくげぃくいぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 こごげぉぎぇ
きぐぉたうぉがぅたぃぁががたぅげげえぁぎいがぅげ〨うえ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげきぐぉたうぉがぅたぃげぅぁごぅたぅげげえぁぎいがぅげ〨うさぎぃごぉくぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたうぉがぅたぇぅごたぅげげえぁぎいがぅげ〨うぉがぅ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うぉがぅ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたうぉがぅたこぅごたぅげげえぁぎいがぅげ〨うぉがぅ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うぉがぅ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたうぉぎぁがぉずぅ〨ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぅげげくげきぐぉたうぉぎぁがぉずぅい〨うがぁぇ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげくげきぐぉたうげぅぅたきぅき〨あぁこぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あぁこぅ〨〪〩ぉぎごぅぇぅげ ぉぅげげくげきぐぉたぇぅごたぐげくぃぅここくげたぎぁきぅ〨 ぎぁきぅ〬 げぅこさがごがぅぎ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぎぁきぅ
ぉぎごぅぇぅげ げぅこさがごがぅぎ〬ぉぅげげくげ

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〸〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵

付録 ぁ〮 言語呼び出し形式要約

きぐぉたぇぅごたざぅげこぉくぎ〨ざぅげこぉくぎ〬 こさあざぅげこぉくぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ざぅげこぉくぎ〬 こさあざぅげこぉくぎ〬 ぉぅげげくげきぐぉたぉぎぉご〨ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぅげげくげきぐぉたぉぎぉごぉぁがぉずぅい〨うがぁぇ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげくげきぐぉたしぉぎたぃぁががたぅげげえぁぎいがぅげ〨しぉぎ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぅげげくげぃくいぅ〬 ぉぅげげくげきぐぉたしぉぎたぃげぅぁごぅたぅげげえぁぎいがぅげ〨うさぎぃごぉくぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたしぉぎたぇぅごたぅげげえぁぎいがぅげ〨しぉぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたしぉぎたこぅごたぅげげえぁぎいがぅげ〨しぉぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

A.3.7 Infoオブジェクト Fortran 言語呼び出し形式
きぐぉたぉぎうくたぃげぅぁごぅ〨ぉぎうく〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげきぐぉたぉぎうくたいぅがぅごぅ〨ぉぎうく〬 かぅす〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす
きぐぉたぉぎうくたいさぐ〨ぉぎうく〬 ぎぅしぉぎうく〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぎぅしぉぎうく〬 ぉぅげげくげきぐぉたぉぎうくたうげぅぅ〨ぉぎうく〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげきぐぉたぉぎうくたぇぅご〨ぉぎうく〬 かぅす〬 ざぁがさぅがぅぎ〬 ざぁがさぅ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ざぁがさぅがぅぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす〬 ざぁがさぅ
がくぇぉぃぁが うがぁぇ
きぐぉたぉぎうくたぇぅごたぎかぅすこ〨ぉぎうく〬 ぎかぅすこ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぎかぅすこ〬 ぉぅげげくげきぐぉたぉぎうくたぇぅごたぎごえかぅす〨ぉぎうく〬 ぎ〬 かぅす〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぎ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす
きぐぉたぉぎうくたぇぅごたざぁがさぅがぅぎ〨ぉぎうく〬 かぅす〬 ざぁがさぅがぅぎ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ざぁがさぅがぅぎ〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす
きぐぉたぉぎうくたこぅご〨ぉぎうく〬 かぅす〬 ざぁがさぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 かぅす〬 ざぁがさぅ〴〲〴〳

A.3.8 プロセスの生成と管理 Fortran 言語呼び出し形式

〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぃがくこぅたぐくげご〨ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぅげげくげきぐぉたぃくききたぁぃぃぅぐご〨ぐくげごたぎぁきぅ〬 ぉぎうく〬 げくくご〬 ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ〩ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式〵〸〳

ぃえぁげぁぃごぅげ〪〨〪〩 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぎうく〬 げくくご〬 ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげきぐぉたぃくききたぃくぎぎぅぃご〨ぐくげごたぎぁきぅ〬 ぉぎうく〬 げくくご〬 ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぎうく〬 げくくご〬 ぃくきき〬 ぎぅしぃくきき〬 ぉぅげげくげきぐぉたぃくききたいぉこぃくぎぎぅぃご〨ぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぉぅげげくげきぐぉたぃくききたぇぅごたぐぁげぅぎご〨ぐぁげぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぐぁげぅぎご〬 ぉぅげげくげきぐぉたぃくききたおくぉぎ〨うい〬 ぉぎごぅげぃくきき〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うい〬 ぉぎごぅげぃくきき〬 ぉぅげげくげきぐぉたぃくききたこぐぁしぎ〨ぃくききぁぎい〬 ぁげぇざ〬 きぁじぐげくぃこ〬 ぉぎうく〬 げくくご〬 ぃくきき〬 ぉぎごぅげぃくきき〬
ぁげげぁすたくうたぅげげぃくいぅこ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぃくききぁぎい〬 ぁげぇざ〨〪〩ぉぎごぅぇぅげ ぉぎうく〬 きぁじぐげくぃこ〬 げくくご〬 ぃくきき〬 ぉぎごぅげぃくきき〬 ぁげげぁすたくうたぅげげぃくいぅこ〨〪〩〬ぉぅげげくげきぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅ〨ぃくさぎご〬 ぁげげぁすたくうたぃくききぁぎいこ〬 ぁげげぁすたくうたぁげぇざ〬
ぁげげぁすたくうたきぁじぐげくぃこ〬 ぁげげぁすたくうたぉぎうく〬 げくくご〬 ぃくきき〬 ぉぎごぅげぃくきき〬 ぁげげぁすたくうたぅげげぃくいぅこ〬ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたぉぎうく〨〪〩〬 ぁげげぁすたくうたきぁじぐげくぃこ〨〪〩〬 げくくご〬 ぃくきき〬ぉぎごぅげぃくきき〬 ぁげげぁすたくうたぅげげぃくいぅこ〨〪〩〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 ぁげげぁすたくうたぃくききぁぎいこ〨〪〩〬 ぁげげぁすたくうたぁげぇざ〨ぃくさぎご〬 〪〩きぐぉたがくくかさぐたぎぁきぅ〨こぅげざぉぃぅたぎぁきぅ〬 ぉぎうく〬 ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 こぅげざぉぃぅたぎぁきぅ〬 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげきぐぉたくぐぅぎたぐくげご〨ぉぎうく〬 ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 ぐくげごたぎぁきぅぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげきぐぉたぐさあがぉこえたぎぁきぅ〨こぅげざぉぃぅたぎぁきぅ〬 ぉぎうく〬 ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 こぅげざぉぃぅたぎぁきぅ〬 ぐくげごたぎぁきぅ
きぐぉたさぎぐさあがぉこえたぎぁきぅ〨こぅげざぉぃぅたぎぁきぅ〬 ぉぎうく〬 ぐくげごたぎぁきぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 こぅげざぉぃぅたぎぁきぅ〬 ぐくげごたぎぁきぅ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

A.3.9 片方向通信 Fortran 言語呼び出し形式〳〳

きぐぉたぁぃぃさきさがぁごぅ〨くげぉぇぉぎたぁいいげ〬 くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬
ごぁげぇぅごたいぉこぐ〬 ごぁげぇぅごたぃくさぎご〬 ごぁげぇぅごたいぁごぁごすぐぅ〬 くぐ〬 しぉぎ〬 ぉぅげげくげ〩〼ぴべばづ〾 くげぉぇぉぎたぁいいげ〨〪〩ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ごぁげぇぅごたいぉこぐぉぎごぅぇぅげ くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬ごぁげぇぅごたげぁぎか〬 ごぁげぇぅごたぃくさぎご〬
ごぁげぇぅごたいぁごぁごすぐぅ〬 くぐ〬 しぉぎ〬 ぉぅげげくげきぐぉたぇぅご〨くげぉぇぉぎたぁいいげ〬 くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬
ごぁげぇぅごたいぉこぐ〬 ごぁげぇぅごたぃくさぎご〬 ごぁげぇぅごたいぁごぁごすぐぅ〬 しぉぎ〬 ぉぅげげくげ〩〼ぴべばづ〾 くげぉぇぉぎたぁいいげ〨〪〩ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ごぁげぇぅごたいぉこぐぉぎごぅぇぅげ くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬 ごぁげぇぅごたぃくさぎご〬
ごぁげぇぅごたいぁごぁごすぐぅ〬 しぉぎ〬 ぉぅげげくげきぐぉたぐさご〨くげぉぇぉぎたぁいいげ〬 くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬
ごぁげぇぅごたいぉこぐ〬 ごぁげぇぅごたぃくさぎご〬 ごぁげぇぅごたいぁごぁごすぐぅ〬 しぉぎ〬 ぉぅげげくげ〩〼ぴべばづ〾 くげぉぇぉぎたぁいいげ〨〪〩ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ごぁげぇぅごたいぉこぐ

〳〵

〳〴

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〸〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵

付録 ぁ〮 言語呼び出し形式要約ぉぎごぅぇぅげ くげぉぇぉぎたぃくさぎご〬 くげぉぇぉぎたいぁごぁごすぐぅ〬 ごぁげぇぅごたげぁぎか〬 ごぁげぇぅごたぃくさぎご〬
ごぁげぇぅごたいぁごぁごすぐぅ〬 しぉぎ〬 ぉぅげげくげきぐぉたしぉぎたぃくきぐがぅごぅ〨しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげきぐぉたしぉぎたぃげぅぁごぅ〨あぁこぅ〬 こぉずぅ〬 いぉこぐたさぎぉご〬 ぉぎうく〬 ぃくきき〬 しぉぎ〬 ぉぅげげくげ〩〼ぴべばづ〾 あぁこぅ〨〪〩ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 こぉずぅぉぎごぅぇぅげ いぉこぐたさぎぉご〬 ぉぎうく〬 ぃくきき〬 しぉぎ〬 ぉぅげげくげきぐぉたしぉぎたうぅぎぃぅ〨ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぁここぅげご〬 しぉぎ〬 ぉぅげげくげきぐぉたしぉぎたうげぅぅ〨しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげきぐぉたしぉぎたぇぅごたぇげくさぐ〨しぉぎ〬 ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぇげくさぐ〬 ぉぅげげくげきぐぉたしぉぎたがくぃか〨がくぃかたごすぐぅ〬 げぁぎか〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ がくぃかたごすぐぅ〬 げぁぎか〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげきぐぉたしぉぎたぐくこご〨ぇげくさぐ〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげきぐぉたしぉぎたこごぁげご〨ぇげくさぐ〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぇげくさぐ〬 ぁここぅげご〬 しぉぎ〬 ぉぅげげくげきぐぉたしぉぎたごぅこご〨しぉぎ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
きぐぉたしぉぎたさぎがくぃか〨げぁぎか〬 しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぁぎか〬 しぉぎ〬 ぉぅげげくげきぐぉたしぉぎたしぁぉご〨しぉぎ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ しぉぎ〬 ぉぅげげくげ

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

A.3.10 外部インターフェイス Fortran 言語呼び出し形式
きぐぉたぇげぅけさぅこごたぃくきぐがぅごぅ〨げぅけさぅこご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげきぐぉたぇげぅけさぅこごたこごぁげご〨けさぅげすたうぎ〬 うげぅぅたうぎ〬 ぃぁぎぃぅがたうぎ〬 ぅじごげぁたこごぁごぅ〬 げぅけさぅこご〬ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぅこご〬 ぉぅげげくげ
ぅじごぅげぎぁが けさぅげすたうぎ〬 うげぅぅたうぎ〬 ぃぁぎぃぅがたうぎ
ぉぎごぅぇぅげ 〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
きぐぉたぉぎぉごたごえげぅぁい〨げぅけさぉげぅい〬 ぐげくざぉいぅい〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げぅけさぉげぅい〬 ぐげくざぉいぅい〬 ぉぅげげくげきぐぉたぉこたごえげぅぁいたきぁぉぎ〨うがぁぇ〬 ぉぅげげくげ〩がくぇぉぃぁが うがぁぇぉぎごぅぇぅげ ぉぅげげくげきぐぉたけさぅげすたごえげぅぁい〨ぐげくざぉいぅい〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぐげくざぉいぅい〬 ぉぅげげくげきぐぉたこごぁごさこたこぅごたぃぁぎぃぅががぅい〨こごぁごさこ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
きぐぉたこごぁごさこたこぅごたぅがぅきぅぎごこ〨こごぁごさこ〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 いぁごぁごすぐぅ〬 ぃくさぎご〬 ぉぅげげくげ

ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式

A.3.11 入出力 Fortran 言語呼び出し形式

〵〸〵
〱
〲

きぐぉたうぉがぅたぃがくこぅ〨うえ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげきぐぉたうぉがぅたいぅがぅごぅ〨うぉがぅぎぁきぅ〬 ぉぎうく〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 うぉがぅぎぁきぅ
ぉぎごぅぇぅげ ぉぎうく〬 ぉぅげげくげきぐぉたうぉがぅたぇぅごたぁきくいぅ〨うえ〬 ぁきくいぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぁきくいぅ〬 ぉぅげげくげきぐぉたうぉがぅたぇぅごたぁごくきぉぃぉごす〨うえ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
きぐぉたうぉがぅたぇぅごたあすごぅたくううこぅご〨うえ〬 くううこぅご〬 いぉこぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご〬 いぉこぐきぐぉたうぉがぅたぇぅごたぇげくさぐ〨うえ〬 ぇげくさぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぇげくさぐ〬 ぉぅげげくげきぐぉたうぉがぅたぇぅごたぉぎうく〨うえ〬 ぉぎうくたさこぅい〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぎうくたさこぅい〬 ぉぅげげくげきぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎ〨うえ〬 くううこぅご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎたこえぁげぅい〨うえ〬 くううこぅご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたぇぅごたこぉずぅ〨うえ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 こぉずぅ
きぐぉたうぉがぅたぇぅごたごすぐぅたぅじごぅぎご〨うえ〬 いぁごぁごすぐぅ〬 ぅじごぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごぅぎご
きぐぉたうぉがぅたぇぅごたざぉぅし〨うえ〬 いぉこぐ〬 ぅごすぐぅ〬 うぉがぅごすぐぅ〬 いぁごぁげぅぐ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぅごすぐぅ〬 うぉがぅごすぐぅ〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 いぉこぐきぐぉたうぉがぅたぉげぅぁい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたうぉがぅたぉげぅぁいたぁご〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたぉげぅぁいたこえぁげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたうぉがぅたぉしげぉごぅ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたうぉがぅたぉしげぉごぅたぁご〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたぉしげぉごぅたこえぁげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげ〩

〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〸〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 げぅけさぅこご〬 ぉぅげげくげきぐぉたうぉがぅたくぐぅぎ〨ぃくきき〬 うぉがぅぎぁきぅ〬 ぁきくいぅ〬 ぉぎうく〬 うえ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 うぉがぅぎぁきぅ
ぉぎごぅぇぅげ ぃくきき〬 ぁきくいぅ〬 ぉぎうく〬 うえ〬 ぉぅげげくげきぐぉたうぉがぅたぐげぅぁががくぃぁごぅ〨うえ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 こぉずぅ
きぐぉたうぉがぅたげぅぁい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたげぅぁいたぁがが〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげきぐぉたうぉがぅたげぅぁいたぁががたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたげぅぁいたぁご〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたげぅぁいたぁごたぁがが〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたげぅぁいたぁごたぁががたあぅぇぉぎ〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたげぅぁいたぁごたぁががたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたげぅぁいたくげいぅげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたげぅぁいたくげいぅげぅいたあぅぇぉぎ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげきぐぉたうぉがぅたげぅぁいたくげいぅげぅいたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたげぅぁいたこえぁげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたこぅぅか〨うえ〬 くううこぅご〬 しえぅぎぃぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 しえぅぎぃぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたこぅぅかたこえぁげぅい〨うえ〬 くううこぅご〬 しえぅぎぃぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 しえぅぎぃぅ〬 ぉぅげげくげ

ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたこぅごたぁごくきぉぃぉごす〨うえ〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
きぐぉたうぉがぅたこぅごたぉぎうく〨うえ〬 ぉぎうく〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぎうく〬 ぉぅげげくげきぐぉたうぉがぅたこぅごたこぉずぅ〨うえ〬 こぉずぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 こぉずぅ
きぐぉたうぉがぅたこぅごたざぉぅし〨うえ〬 いぉこぐ〬 ぅごすぐぅ〬 うぉがぅごすぐぅ〬 いぁごぁげぅぐ〬 ぉぎうく〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぅごすぐぅ〬 うぉがぅごすぐぅ〬 ぉぎうく〬 ぉぅげげくげ
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 いぉこぐきぐぉたうぉがぅたこすぎぃ〨うえ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ うえ〬 ぉぅげげくげきぐぉたうぉがぅたしげぉごぅ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたしげぉごぅたぁがが〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたしげぉごぅたぁががたあぅぇぉぎ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげきぐぉたうぉがぅたしげぉごぅたぁががたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたしげぉごぅたぁご〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたしげぉごぅたぁごたぁがが〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたしげぉごぅたぁごたぁががたあぅぇぉぎ〨うえ〬 くううこぅご〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ
ぉぎごぅぇぅげ〨かぉぎい〽きぐぉたくううこぅごたかぉぎい〩 くううこぅご
きぐぉたうぉがぅたしげぉごぅたぁごたぁががたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたしげぉごぅたくげいぅげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたあぅぇぉぎ〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 ぉぅげげくげきぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたぅぎい〨うえ〬 あさう〬 こごぁごさこ〬 ぉぅげげくげ〩〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたうぉがぅたしげぉごぅたこえぁげぅい〨うえ〬 あさう〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〬 ぉぅげげくげ〩

〵〸〷
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〸〸
〱
〲
〳
〴
〵
〶
〷

付録 ぁ〮 言語呼び出し形式要約〼ぴべばづ〾 あさう〨〪〩ぉぎごぅぇぅげ うえ〬 ぃくさぎご〬 いぁごぁごすぐぅ〬 こごぁごさこ〨きぐぉたこごぁごさこたこぉずぅ〩〬 ぉぅげげくげきぐぉたげぅぇぉこごぅげたいぁごぁげぅぐ〨いぁごぁげぅぐ〬 げぅぁいたぃくぎざぅげこぉくぎたうぎ〬 しげぉごぅたぃくぎざぅげこぉくぎたうぎ〬
いごすぐぅたうぉがぅたぅじごぅぎごたうぎ〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩
ぃえぁげぁぃごぅげ〪〨〪〩 いぁごぁげぅぐぅじごぅげぎぁが げぅぁいたぃくぎざぅげこぉくぎたうぎ〬 しげぉごぅたぃくぎざぅげこぉくぎたうぎ〬 いごすぐぅたうぉがぅたぅじごぅぎごたうぎぉぎごぅぇぅげ〨かぉぎい〽きぐぉたぁいいげぅここたかぉぎい〩 ぅじごげぁたこごぁごぅ
ぉぎごぅぇぅげ ぉぅげげくげ

〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

A.3.12 言語呼び出し形式 Fortran 言語呼び出し形式
きぐぉたこぉずぅくう〨じ〬 こぉずぅ〬 ぉぅげげくげ〩〼ぴべばづ〾 じぉぎごぅぇぅげ こぉずぅ〬 ぉぅげげくげきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじ〨ぐ〬 げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぐ〬 げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげ〨げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが〨ぐ〬 げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぐ〬 げ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたきぁごぃえたこぉずぅ〨ごすぐぅぃがぁここ〬 こぉずぅ〬 ごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ごすぐぅぃがぁここ〬 こぉずぅ〬 ごすぐぅ〬 ぉぅげげくげ

〲〱
〲〲
〲〳
〲〴
〲〵

A.3.13 プロファイルインターフェイス Fortran 言語呼び出し形式
きぐぉたぐぃくぎごげくが〨がぅざぅが〩ぉぎごぅぇぅげ がぅざぅが

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

A.3.14 廃止された Fortran 言語呼び出し形式
きぐぉたぁいいげぅここ〨がくぃぁごぉくぎ〬 ぁいいげぅここ〬 ぉぅげげくげ〩〼ぴべばづ〾 がくぃぁごぉくぎ〨〪〩ぉぎごぅぇぅげ ぁいいげぅここ〬 ぉぅげげくげきぐぉたぁごごげたいぅがぅごぅ〨ぃくきき〬 かぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぉぅげげくげきぐぉたぁごごげたぇぅご〨ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 うがぁぇ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ
がくぇぉぃぁが うがぁぇ
きぐぉたぁごごげたぐさご〨ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぉぅげげくげきぐぉたいさぐたうぎ〨くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげ〩ぉぎごぅぇぅげ くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 ぉぅげげがくぇぉぃぁが うがぁぇ
きぐぉたぅげげえぁぎいがぅげたぃげぅぁごぅ〨うさぎぃごぉくぎ〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぅじごぅげぎぁが うさぎぃごぉくぎ
ぉぎごぅぇぅげ ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたぅげげえぁぎいがぅげたぇぅご〨ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげきぐぉたぅげげえぁぎいがぅげたこぅご〨ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 ぅげげえぁぎいがぅげ〬 ぉぅげげくげ

ぁ〮〳〮 うくげごげぁぎ言語呼び出し形式〵〸〹

きぐぉたかぅすざぁがたぃげぅぁごぅ〨ぃくぐすたうぎ〬 いぅがぅごぅたうぎ〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぅじごぅげぎぁが ぃくぐすたうぎ〬 いぅがぅごぅたうぎぉぎごぅぇぅげ かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげきぐぉたかぅすざぁがたうげぅぅ〨かぅすざぁが〬 ぉぅげげくげ〩ぉぎごぅぇぅげ かぅすざぁが〬 ぉぅげげくげきぐぉたぎさががたぃくぐすたうぎ〨くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげ〩ぉぎごぅぇぅげ くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 ぉぅげげがくぇぉぃぁが うがぁぇ
きぐぉたぎさががたいぅがぅごぅたうぎ〨ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげくげきぐぉたごすぐぅたぅじごぅぎご〨いぁごぁごすぐぅ〬 ぅじごぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 ぅじごぅぎご〬 ぉぅげげくげきぐぉたごすぐぅたえぉぎいぅじぅい〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩〬くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたえざぅぃごくげ〨ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 あがくぃかがぅぎぇごえ〬 こごげぉいぅ〬 くがいごすぐぅ〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたがあ〨 いぁごぁごすぐぅ〬 いぉこぐがぁぃぅきぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 いぉこぐがぁぃぅきぅぎご〬 ぉぅげげくげきぐぉたごすぐぅたこごげさぃご〨ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〬ぁげげぁすたくうたごすぐぅこ〬 ぎぅしごすぐぅ〬 ぉぅげげくげ〩ぉぎごぅぇぅげ ぃくさぎご〬 ぁげげぁすたくうたあがくぃかがぅぎぇごえこ〨〪〩〬 ぁげげぁすたくうたいぉこぐがぁぃぅきぅぎごこ〨〪〩〬ぁげげぁすたくうたごすぐぅこ〨〪〩〬 ぎぅしごすぐぅ〬 ぉぅげげくげきぐぉたごすぐぅたさあ〨 いぁごぁごすぐぅ〬 いぉこぐがぁぃぅきぅぎご〬 ぉぅげげくげ〩ぉぎごぅぇぅげ いぁごぁごすぐぅ〬 いぉこぐがぁぃぅきぅぎご〬 ぉぅげげくげ
こさあげくさごぉぎぅ ぃくぐすたうさぎぃごぉくぎ〨くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 うがぁぇ〬 ぉぅげげ〩ぉぎごぅぇぅげ くがいぃくきき〬 かぅすざぁが〬 ぅじごげぁたこごぁごぅ〬 ぁごごげぉあさごぅたざぁがたぉぎ〬ぁごごげぉあさごぅたざぁがたくさご〬 ぉぅげげがくぇぉぃぁが うがぁぇ
こさあげくさごぉぎぅ いぅがぅごぅたうさぎぃごぉくぎ〨ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげ〩ぉぎごぅぇぅげ ぃくきき〬 かぅすざぁが〬 ぁごごげぉあさごぅたざぁが〬 ぅじごげぁたこごぁごぅ〬 ぉぅげげ

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〵〹〰
〱

付録 ぁ〮 言語呼び出し形式要約

A.4 C++言語呼び出し形式（廃止された）〲〳A.4.1 1対1通信 C++ 言語呼び出し形式〴〵

のちねづびばちっづ きぐぉ ほ

〶
〷
〸
〹

{ぶはどつ ぁぴぴちっとたぢふててづひ〨ぶはどつ〪 ぢふててづひ〬 どのぴ びどぺづ〩 （廃止された呼び出し形式, 第15.2節を参照）
}

〱〰
〱〱
〱〲

{ぶはどつ ぃはねね〺〺あびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〳
〱〴
〱〵
〱〶

{ぐひづぱふづびぴ ぃはねね〺〺あびづのつたどのどぴ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し
形式, 第15.2節を参照）}〱〷〱〸{ぶはどつ げづぱふづびぴ〺〺ぃちのっづぬ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〹〲〰

{どのぴ いづぴちっとたぢふててづひ〨ぶはどつ〪〦 ぢふててづひ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〱
〲〲
〲〳

{ぶはどつ げづぱふづびぴ〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〴
〲〵
〲〶

{どのぴ こぴちぴふび〺〺ぇづぴたっはふのぴ〨っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}〲〷〲〸{どのぴ こぴちぴふび〺〺ぇづぴたづひひはひ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〲〹〳〰

{どのぴ こぴちぴふび〺〺ぇづぴたびはふひっづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〳〱〳〲{ぢははぬ げづぱふづびぴ〺〺ぇづぴたびぴちぴふび〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〳
〳〴
〳〵

{ぢははぬ げづぱふづびぴ〺〺ぇづぴたびぴちぴふび〨こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を
参照）}

〳〶
〳〷
〳〸

{どのぴ こぴちぴふび〺〺ぇづぴたぴちで〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〹
〴〰
〴〱

{げづぱふづびぴ ぃはねね〺〺ぉぢびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〲
〴〳
〴〴

{ぢははぬ ぃはねね〺〺ぉばひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参
照）}

〴〵
〴〶
〴〷
〴〸

{ぢははぬ ぃはねね〺〺ぉばひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〬 こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〵〹〱{げづぱふづびぴ ぃはねね〺〺ぉひづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〲〳{げづぱふづびぴ ぃはねね〺〺ぉひびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〴〵〶{ぢははぬ こぴちぴふび〺〺ぉびたっちのっづぬぬづつ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〷〸{げづぱふづびぴ ぃはねね〺〺ぉびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〹
〱〰
〱〱
〱〲

{げづぱふづびぴ ぃはねね〺〺ぉびびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〳
〱〴
〱〵

{ぶはどつ ぃはねね〺〺ぐひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参
照）}

〱〶
〱〷
〱〸

{ぶはどつ ぃはねね〺〺ぐひはぢづ〨どのぴ びはふひっづ〬 どのぴ ぴちで〬 こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}

〱〹
〲〰
〲〱

{ぶはどつ ぃはねね〺〺げづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〲
〲〳
〲〴

{ぶはどつ ぃはねね〺〺げづっぶ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ びはふひっづ〬 どのぴ ぴちで〬 こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形
式, 第15.2節を参照）}

〲〵
〲〶
〲〷
〲〸

{ぐひづぱふづびぴ ぃはねね〺〺げづっぶたどのどぴ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ びはふひっづ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〹
〳〰
〳〱

{ぶはどつ ぃはねね〺〺げびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〲
〳〳
〳〴

{ぐひづぱふづびぴ ぃはねね〺〺げびづのつたどのどぴ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し
形式, 第15.2節を参照）}

〳〵
〳〶
〳〷
〳〸

{ぶはどつ ぃはねね〺〺こづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〹
〴〰
〴〱

{ぐひづぱふづびぴ ぃはねね〺〺こづのつたどのどぴ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し
形式, 第15.2節を参照）}

〴〲
〴〳
〴〴
〴〵

{ぶはどつ ぃはねね〺〺こづのつひづっぶ〨っはのびぴ ぶはどつ 〪びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 びづのつぴべばづ〬 どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 ぶはどつ 〪ひづっぶぢふて〬

〴〶
〴〷
〴〸

〵〹〲
〱
〲

付録 ぁ〮 言語呼び出し形式要約
どのぴ ひづっぶっはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ひづっぶぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳
〴
〵
〶
〷
〸

{ぶはどつ ぃはねね〺〺こづのつひづっぶ〨っはのびぴ ぶはどつ 〪びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 びづのつぴべばづ〬 どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 ぶはどつ 〪ひづっぶぢふて〬
どのぴ ひづっぶっはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ びはふひっづ〬
どのぴ ひづっぶぴちで〬 こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形式, 第15.2節
を参照）}

〹
〱〰
〱〱
〱〲

{ぶはどつ ぃはねね〺〺こづのつひづっぶたひづばぬちっづ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 どのぴ びはふひっづ〬
どのぴ ひづっぶぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〳
〱〴
〱〵
〱〶

{ぶはどつ ぃはねね〺〺こづのつひづっぶたひづばぬちっづ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ びづのつぴちで〬 どのぴ びはふひっづ〬
どのぴ ひづっぶぴちで〬 こぴちぴふび〦 びぴちぴふび〩 っはのびぴ （廃止された呼び出し形式, 第15.2節
を参照）}

〱〷
〱〸
〱〹

{ぶはどつ こぴちぴふび〺〺こづぴたづひひはひ〨どのぴ づひひはひ〩 （廃止された呼び出し形式, 第15.2節を参照）}〲〰
〲〱{ぶはどつ こぴちぴふび〺〺こづぴたびはふひっづ〨どのぴ びはふひっづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〲〲〲〳{ぶはどつ こぴちぴふび〺〺こづぴたぴちで〨どのぴ ぴちで〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〴
〲〵
〲〶

{ぶはどつ ぃはねね〺〺こびづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〷
〲〸
〲〹
〳〰

{ぐひづぱふづびぴ ぃはねね〺〺こびづのつたどのどぴ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ つづびぴ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し
形式, 第15.2節を参照）}〳〱〳〲{ぶはどつ ぐひづぱふづびぴ〺〺こぴちひぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〳
〳〴
〳〵

{びぴちぴどっ ぶはどつ ぐひづぱふづびぴ〺〺こぴちひぴちぬぬ〨どのぴ っはふのぴ〬 ぐひづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〩（廃止された呼び出し形式, 第15.2節を参照）}

〳〶
〳〷
〳〸

{ぢははぬ げづぱふづびぴ〺〺ごづびぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〳〹〴〰

{ぢははぬ げづぱふづびぴ〺〺ごづびぴ〨こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〱
〴〲
〴〳

{びぴちぴどっ ぢははぬ げづぱふづびぴ〺〺ごづびぴちぬぬ〨どのぴ っはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〴
〴〵
〴〶
〴〷
〴〸

{びぴちぴどっ ぢははぬ げづぱふづびぴ〺〺ごづびぴちぬぬ〨どのぴ っはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
こぴちぴふび ちひひちべたはてたびぴちぴふびづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〵〹〳{びぴちぴどっ ぢははぬ げづぱふづびぴ〺〺ごづびぴちのべ〨どのぴ っはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
どのぴ〦 どのつづへ〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〲〳{びぴちぴどっ ぢははぬ げづぱふづびぴ〺〺ごづびぴちのべ〨どのぴ っはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
どのぴ〦 どのつづへ〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}〴〵〶{びぴちぴどっ どのぴ げづぱふづびぴ〺〺ごづびぴびはねづ〨どのぴ どのっはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
どのぴ ちひひちべたはてたどのつどっづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}〷〸〹{びぴちぴどっ どのぴ げづぱふづびぴ〺〺ごづびぴびはねづ〨どのぴ どのっはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
どのぴ ちひひちべたはてたどのつどっづびせそ〬 こぴちぴふび ちひひちべたはてたびぴちぴふびづびせそ〩 （廃止された
呼び出し形式, 第15.2節を参照）}

〱〰
〱〱
〱〲
〱〳

{ぶはどつ げづぱふづびぴ〺〺しちどぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〴〱〵{ぶはどつ げづぱふづびぴ〺〺しちどぴ〨こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〶
〱〷
〱〸

{びぴちぴどっ ぶはどつ げづぱふづびぴ〺〺しちどぴちぬぬ〨どのぴ っはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〹
〲〰
〲〱

{びぴちぴどっ ぶはどつ げづぱふづびぴ〺〺しちどぴちぬぬ〨どのぴ っはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
こぴちぴふび ちひひちべたはてたびぴちぴふびづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〲
〲〳
〲〴

{びぴちぴどっ どのぴ げづぱふづびぴ〺〺しちどぴちのべ〨どのぴ っはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〵
〲〶
〲〷

{びぴちぴどっ どのぴ げづぱふづびぴ〺〺しちどぴちのべ〨どのぴ っはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〸
〲〹
〳〰

{びぴちぴどっ どのぴ げづぱふづびぴ〺〺しちどぴびはねづ〨どのぴ どのっはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
どのぴ ちひひちべたはてたどのつどっづびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〱
〳〲
〳〳

{びぴちぴどっ どのぴ げづぱふづびぴ〺〺しちどぴびはねづ〨どのぴ どのっはふのぴ〬 げづぱふづびぴ ちひひちべたはてたひづぱふづびぴびせそ〬
どのぴ ちひひちべたはてたどのつどっづびせそ〬 こぴちぴふび ちひひちべたはてたびぴちぴふびづびせそ〩 （廃止された
呼び出し形式, 第15.2節を参照）}

〳〴
〳〵
〳〶
〳〷

ぽ〻

〳〸
〳〹

A.4.2 データ型 C++ 言語呼び出し形式〴〰

のちねづびばちっづ きぐぉ ほ

〴〲

〴〱

〴〳
〴〴

{ぶはどつ いちぴちぴべばづ〺〺ぃはねねどぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〴〵〴〶{いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたっはのぴどでふはふび〨どのぴ っはふのぴ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〴〷
〴〸

〵〹〴

付録 ぁ〮 言語呼び出し形式要約

〱
〲
〳
〴
〵

{いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたつちひひちべ〨どのぴ びどぺづ〬 どのぴ ひちのに〬 どのぴ のつどねび〬
っはのびぴ どのぴ ちひひちべたはてたでびどぺづびせそ〬 っはのびぴ どのぴ ちひひちべたはてたつどびぴひどぢびせそ〬
っはのびぴ どのぴ ちひひちべたはてたつちひでびせそ〬 っはのびぴ どのぴ ちひひちべたはてたばびどぺづびせそ〬
どのぴ はひつづひ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〶
〷
〸
〹

{いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたとどのつづへづつ〨どのぴ っはふのぴ〬
っはのびぴ どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬っはのびぴ ぁどのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〩 っはのびぴ （廃止された呼び出し形
式, 第15.2節を参照）}

〱〰
〱〱
〱〲

{いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたとぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬 ぁどのぴ びぴひどつづ〩っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〳
〱〴
〱〵
〱〶
〱〷

{いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたどのつづへづつ〨どのぴ っはふのぴ〬
っはのびぴ どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬っはのびぴ どのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〱〸
〱〹
〲〰
〲〱

{いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたどのつづへづつたぢぬはっに〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬っはのびぴ どのぴ ちひひちべたはてたつどびばぬちっづねづのぴびせそ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〲〲
〲〳
〲〴

{いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたひづびどぺづつ〨っはのびぴ ぁどのぴ ぬぢ〬 っはのびぴ ぁどのぴ づへぴづのぴ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}

〲〵
〲〶
〲〷
〲〸
〲〹

{びぴちぴどっ いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたびぴひふっぴ〨どのぴ っはふのぴ〬
っはのびぴ どのぴ ちひひちべたはてたぢぬはっにぬづのでぴとびせそ〬 っはのびぴ ぁどのぴ
ちひひちべたはてたつどびばぬちっづねづのぴびせそ〬 っはのびぴ いちぴちぴべばづ ちひひちべたはてたぴべばづびせそ〩（廃止された呼び出し形式, 第15.2節を参照）}

〳〰
〳〱
〳〲
〳〳

{いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたびふぢちひひちべ〨どのぴ のつどねび〬 っはのびぴ どのぴ ちひひちべたはてたびどぺづびせそ〬
っはのびぴ どのぴ ちひひちべたはてたびふぢびどぺづびせそ〬 っはのびぴ どのぴ ちひひちべたはてたびぴちひぴびせそ〬
どのぴ はひつづひ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〴
〳〵
〳〶

{いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたぶづっぴはひ〨どのぴ っはふのぴ〬 どのぴ ぢぬはっにぬづのでぴと〬 どのぴ びぴひどつづ〩っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〳〷〳〸{いちぴちぴべばづ いちぴちぴべばづ〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〹
〴〰
〴〱

{ぶはどつ いちぴちぴべばづ〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〴〲〴〳{ぁどのぴ ぇづぴたちつつひづびび〨ぶはどつ〪 ぬはっちぴどはの〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〴
〴〵
〴〶
〴〷
〴〸

{ぶはどつ いちぴちぴべばづ〺〺ぇづぴたっはのぴづのぴび〨どのぴ ねちへたどのぴづでづひび〬 どのぴ ねちへたちつつひづびびづび〬
どのぴ ねちへたつちぴちぴべばづび〬 どのぴ ちひひちべたはてたどのぴづでづひびせそ〬ぁどのぴ ちひひちべたはてたちつつひづびびづびせそ〬 いちぴちぴべばづ ちひひちべたはてたつちぴちぴべばづびせそ〩
っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〵〹〵〱{どのぴ こぴちぴふび〺〺ぇづぴたづぬづねづのぴび〨っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 っはのびぴ （廃止された呼び出し形
式, 第15.2節を参照）}〲〳〴{ぶはどつ いちぴちぴべばづ〺〺ぇづぴたづのぶづぬはばづ〨どのぴ〦 のふねたどのぴづでづひび〬 どのぴ〦 のふねたちつつひづびびづび〬
どのぴ〦 のふねたつちぴちぴべばづび〬 どのぴ〦 っはねぢどのづひ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〵
〶
〷
〸

{ぶはどつ いちぴちぴべばづ〺〺ぇづぴたづへぴづのぴ〨ぁどのぴ〦 ぬぢ〬 ぁどのぴ〦 づへぴづのぴ〩 っはのびぴ （廃止された呼び出し形
式, 第15.2節を参照）}

〹
〱〰
〱〱

{どのぴ いちぴちぴべばづ〺〺ぇづぴたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〲〱〳{ぶはどつ いちぴちぴべばづ〺〺ぇづぴたぴひふづたづへぴづのぴ〨ぁどのぴ〦 ぴひふづたぬぢ〬 ぁどのぴ〦 ぴひふづたづへぴづのぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〴
〱〵
〱〶

{ぶはどつ いちぴちぴべばづ〺〺ぐちっに〨っはのびぴ ぶはどつ〪 どのぢふて〬 どのぴ どのっはふのぴ〬 ぶはどつ 〪はふぴぢふて〬
どのぴ はふぴびどぺづ〬 どのぴ〦 ばはびどぴどはの〬 っはのびぴ ぃはねね 〦っはねね〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}

〱〷
〱〸
〱〹
〲〰

{ぶはどつ いちぴちぴべばづ〺〺ぐちっにたづへぴづひのちぬ〨っはのびぴ っとちひ〪 つちぴちひづば〬 っはのびぴ ぶはどつ〪 どのぢふて〬
どのぴ どのっはふのぴ〬 ぶはどつ〪 はふぴぢふて〬 ぁどのぴ はふぴびどぺづ〬 ぁどのぴ〦 ばはびどぴどはの〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}

〲〱
〲〲
〲〳
〲〴

{ぁどのぴ いちぴちぴべばづ〺〺ぐちっにたづへぴづひのちぬたびどぺづ〨っはのびぴ っとちひ〪 つちぴちひづば〬 どのぴ どのっはふのぴ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}

〲〵
〲〶
〲〷

{どのぴ いちぴちぴべばづ〺〺ぐちっにたびどぺづ〨どのぴ どのっはふのぴ〬 っはのびぴ ぃはねね〦 っはねね〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〸
〲〹
〳〰

{ぶはどつ いちぴちぴべばづ〺〺さのばちっに〨っはのびぴ ぶはどつ〪 どのぢふて〬 どのぴ どのびどぺづ〬 ぶはどつ 〪はふぴぢふて〬
どのぴ はふぴっはふのぴ〬 どのぴ〦 ばはびどぴどはの〬 っはのびぴ ぃはねね〦 っはねね〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〱
〳〲
〳〳
〳〴

{ぶはどつ いちぴちぴべばづ〺〺さのばちっにたづへぴづひのちぬ〨っはのびぴ っとちひ〪 つちぴちひづば〬 っはのびぴ ぶはどつ〪 どのぢふて〬ぁどのぴ どのびどぺづ〬 ぁどのぴ〦 ばはびどぴどはの〬 ぶはどつ〪 はふぴぢふて〬 どのぴ はふぴっはふのぴ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}

〳〵
〳〶
〳〷
〳〸

ぽ〻

〳〹
〴〰

A.4.3 集団的通信 C++ 言語呼び出し形式
のちねづびばちっづ きぐぉ ほ

〴〱
〴〲
〴〳
〴〴
〴〵

{ぶはどつ ぃはねね〺〺ぁぬぬでちぴとづひ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬

〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約〵〹〶〱

っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節

〲

を参照）}

〳
〴
〵
〶
〷

{ぶはどつ ぃはねね〺〺ぁぬぬでちぴとづひぶ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 っはのびぴ どのぴ ひづっぶっはふのぴびせそ〬
っはのびぴ どのぴ つどびばぬびせそ〬 っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〸
〹
〱〰
〱〱

{ぶはどつ ぃはねね〺〺ぁぬぬひづつふっづ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ くば〦 はば〩 っはのびぴ 〽 〰 （廃止された呼び出し形
式, 第15.2節を参照）}

〱〲
〱〳
〱〴
〱〵
〱〶

{ぶはどつ ぃはねね〺〺ぁぬぬぴはちぬぬ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節
を参照）}

〱〷
〱〸
〱〹
〲〰
〲〱

{ぶはどつ ぃはねね〺〺ぁぬぬぴはちぬぬぶ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 っはのびぴ どのぴ びづのつっはふのぴびせそ〬
っはのびぴ どのぴ びつどびばぬびせそ〬 っはのびぴ いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬っはのびぴ どのぴ ひづっぶっはふのぴびせそ〬 っはのびぴ どのぴ ひつどびばぬびせそ〬
っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節
を参照）}

〲〲
〲〳
〲〴
〲〵
〲〶

{ぶはどつ ぃはねね〺〺ぁぬぬぴはちぬぬぷ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 っはのびぴ どのぴ びづのつっはふのぴびせそ〬 っはのびぴ
どのぴ びつどびばぬびせそ〬 っはのびぴ いちぴちぴべばづ びづのつぴべばづびせそ〬 ぶはどつ〪 ひづっぶぢふて〬っはのびぴ どのぴ ひづっぶっはふのぴびせそ〬 っはのびぴ どのぴ ひつどびばぬびせそ〬 っはのびぴ いちぴちぴべばづ
ひづっぶぴべばづびせそ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}〲〷〲〸{ぶはどつ ぃはねね〺〺あちひひどづひ〨〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〲〹
〳〰
〳〱

{ぶはどつ ぃはねね〺〺あっちびぴ〨ぶはどつ〪 ぢふててづひ〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
どのぴ ひははぴ〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〳〲
〳〳
〳〴
〳〵

{ぶはどつ ぉのぴひちっはねね〺〺ぅへびっちの〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ くば〦 はば〩 っはのびぴ （廃止された呼び出し
形式, 第15.2節を参照）}〳〶〳〷{ぶはどつ くば〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〸
〳〹
〴〰
〴〱
〴〲

{ぶはどつ ぃはねね〺〺ぇちぴとづひ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ ひははぴ〩 っはのびぴ 〽 〰 （廃止された呼び出し
形式, 第15.2節を参照）}

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

{ぶはどつ ぃはねね〺〺ぇちぴとづひぶ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 っはのびぴ どのぴ ひづっぶっはふのぴびせそ〬
っはのびぴ どのぴ つどびばぬびせそ〬 っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ ひははぴ〩
っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〵〹〷〱{ぶはどつ くば〺〺ぉのどぴ〨さびづひたてふのっぴどはの〪 てふのっぴどはの〬 ぢははぬ っはねねふぴづ〩 （廃止された呼び出し形式,
第15.2節を参照）}〲〳〴{ぢははぬ くば〺〺ぉびたっはねねふぴちぴどぶづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〵〶{ぶはどつ ぃはねね〺〺げづつふっづ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ くば〦 はば〬 どのぴ ひははぴ〩 っはのびぴ 〽 〰
（廃止された呼び出し形式, 第15.2節を参照）}

〷
〸
〹
〱〰

{ぶはどつ くば〺〺げづつふっづたぬはっちぬ〨っはのびぴ ぶはどつ〪 どのぢふて〬 ぶはどつ〪 どのはふぴぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 つちぴちぴべばづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〱
〱〲
〱〳

{ぶはどつ ぃはねね〺〺げづつふっづたびっちぴぴづひ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬
どのぴ ひづっぶっはふのぴびせそ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ くば〦 はば〩
っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〱〴
〱〵
〱〶
〱〷

{ぶはどつ ぃはねね〺〺げづつふっづたびっちぴぴづひたぢぬはっに〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬
どのぴ ひづっぶっはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ くば〦 はば〩
っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}

〱〸
〱〹
〲〰
〲〱

{ぶはどつ ぉのぴひちっはねね〺〺こっちの〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ っはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 つちぴちぴべばづ〬 っはのびぴ くば〦 はば〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〲〲
〲〳
〲〴
〲〵

{ぶはどつ ぃはねね〺〺こっちぴぴづひ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 どのぴ びづのつっはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬 どのぴ ひづっぶっはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ ひははぴ〩 っはのびぴ 〽 〰 （廃止された呼び出し
形式, 第15.2節を参照）}

〲〶
〲〷
〲〸
〲〹
〳〰

{ぶはどつ ぃはねね〺〺こっちぴぴづひぶ〨っはのびぴ ぶはどつ〪 びづのつぢふて〬 っはのびぴ どのぴ びづのつっはふのぴびせそ〬
っはのびぴ どのぴ つどびばぬびせそ〬 っはのびぴ いちぴちぴべばづ〦 びづのつぴべばづ〬 ぶはどつ〪 ひづっぶぢふて〬
どのぴ ひづっぶっはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 ひづっぶぴべばづ〬 どのぴ ひははぴ〩 っはのびぴ 〽 〰
（廃止された呼び出し形式, 第15.2節を参照）}

〳〱
〳〲
〳〳
〳〴
〳〵

ぽ〻

〳〶
〳〷

A.4.4 グループ，コンテクスト，コミュニケータ，キャッシング C++ 言語呼び
出し形式
のちねづびばちっづ きぐぉ ほ

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳

{ぃはねね〦 ぃはねね〺〺ぃぬはのづ〨〩 っはのびぴ 〽 〰 （廃止された呼び出し形式, 第15.2節を参照）}〴〴〴〵{ぃちひぴっはねね〦 ぃちひぴっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〶
〴〷
〴〸

〵〹〸
〱
〲

付録 ぁ〮 言語呼び出し形式要約{いどびぴでひちばとっはねね〦 いどびぴでひちばとっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参
照）}

〳
〴

{ぇひちばとっはねね〦 ぇひちばとっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〵〶〷{ぉのぴづひっはねね〦 ぉのぴづひっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〸〹{ぉのぴひちっはねね〦 ぉのぴひちっはねね〺〺ぃぬはのづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〰
〱〱
〱〲

{びぴちぴどっ どのぴ ぃはねね〺〺ぃはねばちひづ〨っはのびぴ ぃはねね〦 っはねね〱〬 っはのびぴ ぃはねね〦 っはねね〲〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〳
〱〴
〱〵

{びぴちぴどっ どのぴ ぇひはふば〺〺ぃはねばちひづ〨っはのびぴ ぇひはふば〦 でひはふば〱〬 っはのびぴ ぇひはふば〦 でひはふば〲〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〶
〱〷
〱〸

{ぉのぴひちっはねね ぉのぴひちっはねね〺〺ぃひづちぴづ〨っはのびぴ ぇひはふば〦 でひはふば〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〱〹
〲〰
〲〱

{ぉのぴづひっはねね ぉのぴづひっはねね〺〺ぃひづちぴづ〨っはのびぴ ぇひはふば〦 でひはふば〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〲〲
〲〳
〲〴
〲〵

{ぉのぴづひっはねね ぉのぴひちっはねね〺〺ぃひづちぴづたどのぴづひっはねね〨どのぴ ぬはっちぬたぬづちつづひ〬 っはのびぴ
ぃはねね〦 ばづづひたっはねね〬 どのぴ ひづねはぴづたぬづちつづひ〬 どのぴ ぴちで〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〶
〲〷
〲〸
〲〹
〳〰

{びぴちぴどっ どのぴ ぃはねね〺〺ぃひづちぴづたにづべぶちぬ〨ぃはねね〺〺ぃはばべたちぴぴひたてふのっぴどはの〪っはねねたっはばべたちぴぴひたての〬ぃはねね〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〪 っはねねたつづぬづぴづたちぴぴひたての〬
ぶはどつ〪 づへぴひちたびぴちぴづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〱
〳〲
〳〳
〳〴
〳〵

{びぴちぴどっ どのぴ いちぴちぴべばづ〺〺ぃひづちぴづたにづべぶちぬ〨いちぴちぴべばづ〺〺ぃはばべたちぴぴひたてふのっぴどはの〪
ぴべばづたっはばべたちぴぴひたての〬 いちぴちぴべばづ〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〪
ぴべばづたつづぬづぴづたちぴぴひたての〬 ぶはどつ〪 づへぴひちたびぴちぴづ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〳〶
〳〷
〳〸
〳〹

{びぴちぴどっ どのぴ しどの〺〺ぃひづちぴづたにづべぶちぬ〨しどの〺〺ぃはばべたちぴぴひたてふのっぴどはの〪 ぷどのたっはばべたちぴぴひたての〬しどの〺〺いづぬづぴづたちぴぴひたてふのっぴどはの〪 ぷどのたつづぬづぴづたちぴぴひたての〬
ぶはどつ〪 づへぴひちたびぴちぴづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〴〰
〴〱{ぶはどつ ぃはねね〺〺いづぬづぴづたちぴぴひ〨どのぴ っはねねたにづべぶちぬ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〲
〴〳
〴〴

{ぶはどつ いちぴちぴべばづ〺〺いづぬづぴづたちぴぴひ〨どのぴ ぴべばづたにづべぶちぬ〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〴〵
〴〶
〴〷
〴〸

{ぶはどつ しどの〺〺いづぬづぴづたちぴぴひ〨どのぴ ぷどのたにづべぶちぬ〩 （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〵〹〹{びぴちぴどっ ぇひはふば ぇひはふば〺〺いどててづひづのっづ〨っはのびぴ ぇひはふば〦 でひはふば〱〬 っはのびぴ ぇひはふば〦 でひはふば〲〩（廃止された呼び出し形式, 第15.2節を参照）}〱〲〳{ぃちひぴっはねね ぃちひぴっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〴〵{いどびぴでひちばとっはねね いどびぴでひちばとっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〶〷〸{ぇひちばとっはねね ぇひちばとっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〹〱〰

{ぉのぴづひっはねね ぉのぴづひっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〱〱〲{ぉのぴひちっはねね ぉのぴひちっはねね〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〳〱〴{ぇひはふば ぇひはふば〺〺ぅへっぬ〨どのぴ の〬 っはのびぴ どのぴ ひちのにびせそ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〱〵
〱〶
〱〷

{ぶはどつ ぃはねね〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〸
〱〹
〲〰

{ぶはどつ ぇひはふば〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〲〱〲〲{びぴちぴどっ ぶはどつ ぃはねね〺〺うひづづたにづべぶちぬ〨どのぴ〦 っはねねたにづべぶちぬ〩 （廃止された呼び出し形式, 第15.2節
を参照）}

〲〳
〲〴
〲〵

{びぴちぴどっ ぶはどつ いちぴちぴべばづ〺〺うひづづたにづべぶちぬ〨どのぴ〦 ぴべばづたにづべぶちぬ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〲〶
〲〷
〲〸

{びぴちぴどっ ぶはどつ しどの〺〺うひづづたにづべぶちぬ〨どのぴ〦 ぷどのたにづべぶちぬ〩 （廃止された呼び出し形式, 第15.2節を
参照）}

〲〹
〳〰
〳〱

{ぢははぬ ぃはねね〺〺ぇづぴたちぴぴひ〨どのぴ っはねねたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}

〳〲
〳〳
〳〴

{ぢははぬ いちぴちぴべばづ〺〺ぇづぴたちぴぴひ〨どのぴ ぴべばづたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〵
〳〶
〳〷

{ぢははぬ しどの〺〺ぇづぴたちぴぴひ〨どのぴ ぷどのたにづべぶちぬ〬 ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〸
〳〹
〴〰

{ぇひはふば ぃはねね〺〺ぇづぴたでひはふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〱
〴〲
〴〳

{ぶはどつ ぃはねね〺〺ぇづぴたのちねづ〨っとちひ〪 っはねねたのちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}

〴〴
〴〵
〴〶

{ぶはどつ いちぴちぴべばづ〺〺ぇづぴたのちねづ〨っとちひ〪 ぴべばづたのちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〷
〴〸

〶〰〰

付録 ぁ〮 言語呼び出し形式要約〱〲〳{ぶはどつ しどの〺〺ぇづぴたのちねづ〨っとちひ〪 ぷどのたのちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 っはのびぴ （廃止された呼び出し形
式, 第15.2節を参照）}〴〵{どのぴ ぃはねね〺〺ぇづぴたひちのに〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〶〷{どのぴ ぇひはふば〺〺ぇづぴたひちのに〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〸〹〱〰

{ぇひはふば ぉのぴづひっはねね〺〺ぇづぴたひづねはぴづたでひはふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）
}

〱〱
〱〲
〱〳

{どのぴ ぉのぴづひっはねね〺〺ぇづぴたひづねはぴづたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〴〱〵{どのぴ ぃはねね〺〺ぇづぴたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〶〱〷{どのぴ ぇひはふば〺〺ぇづぴたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〸
〱〹
〲〰

{ぇひはふば ぇひはふば〺〺ぉのっぬ〨どのぴ の〬 っはのびぴ どのぴ ひちのにびせそ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〲〱
〲〲
〲〳

{びぴちぴどっ ぇひはふば ぇひはふば〺〺ぉのぴづひびづっぴ〨っはのびぴ ぇひはふば〦 でひはふば〱〬 っはのびぴ ぇひはふば〦 でひはふば〲〩（廃止された呼び出し形式, 第15.2節を参照）}

〲〴
〲〵
〲〶

{ぢははぬ ぃはねね〺〺ぉびたどのぴづひ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〷
〲〸
〲〹

{ぉのぴひちっはねね ぉのぴづひっはねね〺〺きづひでづ〨ぢははぬ とどでと〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参
照）}

〳〰
〳〱
〳〲

{ぇひはふば ぇひはふば〺〺げちのでづたづへっぬ〨どのぴ の〬 っはのびぴ どのぴ ひちのでづびせそせ〳そ〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}

〳〳
〳〴
〳〵

{ぇひはふば ぇひはふば〺〺げちのでづたどのっぬ〨どのぴ の〬 っはのびぴ どのぴ ひちのでづびせそせ〳そ〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}

〳〶
〳〷
〳〸

{ぶはどつ ぃはねね〺〺こづぴたちぴぴひ〨どのぴ っはねねたにづべぶちぬ〬 っはのびぴ ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〹
〴〰
〴〱

{ぶはどつ いちぴちぴべばづ〺〺こづぴたちぴぴひ〨どのぴ ぴべばづたにづべぶちぬ〬 っはのびぴ ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〲
〴〳
〴〴

{ぶはどつ しどの〺〺こづぴたちぴぴひ〨どのぴ ぷどのたにづべぶちぬ〬 っはのびぴ ぶはどつ〪 ちぴぴひどぢふぴづたぶちぬ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〵
〴〶
〴〷
〴〸

{ぶはどつ ぃはねね〺〺こづぴたのちねづ〨っはのびぴ っとちひ〪 っはねねたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〶〰〱〱{ぶはどつ いちぴちぴべばづ〺〺こづぴたのちねづ〨っはのびぴ っとちひ〪 ぴべばづたのちねづ〩 （廃止された呼び出し形式, 第15.2節を
参照）}

〲
〳
〴

{ぶはどつ しどの〺〺こづぴたのちねづ〨っはのびぴ っとちひ〪 ぷどのたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〵〶{ぉのぴづひっはねね ぉのぴづひっはねね〺〺こばぬどぴ〨どのぴ っはぬはひ〬 どのぴ にづべ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}〷〸〹{ぉのぴひちっはねね ぉのぴひちっはねね〺〺こばぬどぴ〨どのぴ っはぬはひ〬 どのぴ にづべ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〱〰
〱〱
〱〲

{びぴちぴどっ ぶはどつ ぇひはふば〺〺ごひちのびぬちぴづたひちのにび 〨っはのびぴ ぇひはふば〦 でひはふば〱〬 どのぴ の〬っはのびぴ どのぴ ひちのにび〱せそ〬 っはのびぴ ぇひはふば〦 でひはふば〲〬 どのぴ ひちのにび〲せそ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〳
〱〴
〱〵
〱〶

{びぴちぴどっ ぇひはふば ぇひはふば〺〺さのどはの〨っはのびぴ ぇひはふば〦 でひはふば〱〬 っはのびぴ ぇひはふば〦 でひはふば〲〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〷
〱〸
〱〹
〲〰

ぽ〻

〲〱
〲〲

A.4.5 プロセストポロジー C++ 言語呼び出し形式〲〳〲〴

のちねづびばちっづ きぐぉ ほ〲〵〲〶{ぶはどつ ぃはねばふぴづたつどねび〨どのぴ ののはつづび〬 どのぴ のつどねび〬 どのぴ つどねびせそ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〲〷
〲〸
〲〹
〳〰

{ぃちひぴっはねね ぉのぴひちっはねね〺〺ぃひづちぴづたっちひぴ〨どのぴ のつどねび〬 っはのびぴ どのぴ つどねびせそ〬
っはのびぴ ぢははぬ ばづひどはつびせそ〬 ぢははぬ ひづはひつづひ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〳〱
〳〲
〳〳

{ぇひちばとっはねね ぉのぴひちっはねね〺〺ぃひづちぴづたでひちばと〨どのぴ ののはつづび〬 っはのびぴ どのぴ どのつづへせそ〬
っはのびぴ どのぴ づつでづびせそ〬 ぢははぬ ひづはひつづひ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〳〴
〳〵
〳〶
〳〷

{いどびぴでひちばとっはねね ぉのぴひちっはねね〺〺いどびぴたでひちばとたっひづちぴづ〨どのぴ の〬 っはのびぴ どのぴ びはふひっづびせそ〬
っはのびぴ どのぴ つづでひづづびせそ〬 っはのびぴ どのぴ つづびぴどのちぴどはのびせそ〬
っはのびぴ どのぴ ぷづどでとぴびせそ〬 っはのびぴ ぉのては〦 どのては〬 ぢははぬ ひづはひつづひ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}

〳〸
〳〹
〴〰
〴〱
〴〲

{いどびぴでひちばとっはねね ぉのぴひちっはねね〺〺いどびぴたでひちばとたっひづちぴづ〨どのぴ の〬 っはのびぴ どのぴ びはふひっづびせそ〬
っはのびぴ どのぴ つづでひづづびせそ〬 っはのびぴ どのぴ つづびぴどのちぴどはのびせそ〬
っはのびぴ ぉのては〦 どのては〬 ぢははぬ ひづはひつづひ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〶〰〲
〱
〲
〳
〴
〵

付録 ぁ〮 言語呼び出し形式要約{いどびぴでひちばとっはねね ぉのぴひちっはねね〺〺いどびぴたでひちばとたっひづちぴづたちつなちっづのぴ〨どのぴ どのつづでひづづ〬
っはのびぴ どのぴ びはふひっづびせそ〬 っはのびぴ どのぴ びはふひっづぷづどでとぴびせそ〬 どのぴ はふぴつづでひづづ〬
っはのびぴ どのぴ つづびぴどのちぴどはのびせそ〬 っはのびぴ どのぴ つづびぴぷづどでとぴびせそ〬
っはのびぴ ぉのては〦 どのては〬 ぢははぬ ひづはひつづひ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〶
〷
〸
〹

{いどびぴでひちばとっはねね ぉのぴひちっはねね〺〺いどびぴたでひちばとたっひづちぴづたちつなちっづのぴ〨どのぴ どのつづでひづづ〬
っはのびぴ どのぴ びはふひっづびせそ〬 どのぴ はふぴつづでひづづ〬 っはのびぴ どのぴ つづびぴどのちぴどはのびせそ〬
っはのびぴ ぉのては〦 どのては〬 ぢははぬ ひづはひつづひ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〱〰
〱〱
〱〲

{どのぴ ぃちひぴっはねね〺〺ぇづぴたっちひぴたひちのに〨っはのびぴ どのぴ っははひつびせそ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〱〳
〱〴
〱〵
〱〶

{ぶはどつ ぃちひぴっはねね〺〺ぇづぴたっははひつび〨どのぴ ひちのに〬 どのぴ ねちへつどねび〬 どのぴ っははひつびせそ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〷〱〸{どのぴ ぃちひぴっはねね〺〺ぇづぴたつどね〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〹
〲〰
〲〱

{ぶはどつ ぇひちばとっはねね〺〺ぇづぴたつどねび〨どのぴ ののはつづびせそ〬 どのぴ のづつでづびせそ〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}

〲〲
〲〳
〲〴
〲〵

{ぶはどつ いどびぴでひちばとっはねね〺〺ぇづぴたつどびぴたのづどでとぢはひび〨どのぴ ねちへどのつづでひづづ〬 どのぴ びはふひっづびせそ〬
どのぴ びはふひっづぷづどでとぴびせそ〬 どのぴ ねちへはふぴつづでひづづ〬 どのぴ つづびぴどのちぴどはのびせそ〬
どのぴ つづびぴぷづどでとぴびせそ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〶
〲〷
〲〸
〲〹

{ぶはどつ いどびぴでひちばとっはねね〺〺ぇづぴたつどびぴたのづどでとぢはひびたっはふのぴ〨どのぴ〦 どのつづでひづづ〬
どのぴ〦 はふぴつづでひづづ〬 ぢははぬ〦 ぷづどでとぴづつ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〳〰
〳〱
〳〲
〳〳

{ぶはどつ いどびぴでひちばとっはねね〺〺ぇづぴたつどびぴたのづどでとぢはひびたっはふのぴ〨どのぴ ひちのに〬 どのぴ どのつづでひづづせそ〬
どのぴ はふぴつづでひづづせそ〬 ぢははぬ〦 ぷづどでとぴづつ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〳〴
〳〵
〳〶

{ぶはどつ ぇひちばとっはねね〺〺ぇづぴたのづどでとぢはひび〨どのぴ ひちのに〬 どのぴ ねちへのづどでとぢはひび〬 どのぴ のづどでとぢはひびせそ〩
っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〷
〳〸
〳〹

{どのぴ ぇひちばとっはねね〺〺ぇづぴたのづどでとぢはひびたっはふのぴ〨どのぴ ひちのに〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〴〰
〴〱
〴〲

{ぶはどつ ぃちひぴっはねね〺〺ぇづぴたぴはばは〨どのぴ ねちへつどねび〬 どのぴ つどねびせそ〬 ぢははぬ ばづひどはつびせそ〬
どのぴ っははひつびせそ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〳
〴〴
〴〵

{ぶはどつ ぇひちばとっはねね〺〺ぇづぴたぴはばは〨どのぴ ねちへどのつづへ〬 どのぴ ねちへづつでづび〬 どのぴ どのつづへせそ〬
どのぴ づつでづびせそ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〶
〴〷
〴〸

{どのぴ ぃはねね〺〺ぇづぴたぴはばはぬはでべ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〶〰〳〱{どのぴ ぃちひぴっはねね〺〺きちば〨どのぴ のつどねび〬 っはのびぴ どのぴ つどねびせそ〬 っはのびぴ ぢははぬ ばづひどはつびせそ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}〲〳〴{どのぴ ぇひちばとっはねね〺〺きちば〨どのぴ ののはつづび〬 っはのびぴ どのぴ どのつづへせそ〬 っはのびぴ どのぴ づつでづびせそ〩 っはのびぴ（廃止された呼び出し形式, 第15.2節を参照）}〵〶〷{ぶはどつ ぃちひぴっはねね〺〺ことどてぴ〨どのぴ つどひづっぴどはの〬 どのぴ つどびば〬 どのぴ〦 ひちのにたびはふひっづ〬
どのぴ〦 ひちのにたつづびぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〸〹〱〰

{ぃちひぴっはねね ぃちひぴっはねね〺〺こふぢ〨っはのびぴ ぢははぬ ひづねちどのたつどねびせそ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〱〱
〱〲
〱〳

ぽ〻

〱〴
〱〵

A.4.6 MPI環境管理 C++ 言語呼び出し形式
のちねづびばちっづ きぐぉ ほ

〱〶
〱〷
〱〸
〱〹
〲〰

{ぶはどつ ぃはねね〺〺ぁぢはひぴ〨どのぴ づひひはひっはつづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〲〱〲〲{どのぴ ぁつつたづひひはひたっぬちびび〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〳
〲〴
〲〵

{どのぴ ぁつつたづひひはひたっはつづ〨どのぴ づひひはひっぬちびび〩 （廃止された呼び出し形式, 第15.2節を参照）}〲〶〲〷{ぶはどつ ぁつつたづひひはひたびぴひどので〨どのぴ づひひはひっはつづ〬 っはのびぴ っとちひ〪 びぴひどので〩 （廃止された呼び出し形
式, 第15.2節を参照）}

〲〸
〲〹
〳〰

{ぶはどつ〪 ぁぬぬはったねづね〨ぁどのぴ びどぺづ〬 っはのびぴ ぉのては〦 どのては〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〳〱
〳〲
〳〳

{ぶはどつ ぃはねね〺〺ぃちぬぬたづひひとちのつぬづひ〨どのぴ づひひはひっはつづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節
を参照）}

〳〴
〳〵
〳〶

{ぶはどつ うどぬづ〺〺ぃちぬぬたづひひとちのつぬづひ〨どのぴ づひひはひっはつづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節
を参照）}

〳〷
〳〸
〳〹

{ぶはどつ しどの〺〺ぃちぬぬたづひひとちのつぬづひ〨どのぴ づひひはひっはつづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を
参照）}

〴〰
〴〱
〴〲

{びぴちぴどっ ぅひひとちのつぬづひ ぃはねね〺〺ぃひづちぴづたづひひとちのつぬづひ〨ぃはねね〺〺ぅひひとちのつぬづひたてふのっぴどはの〪てふのっぴどはの〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〳
〴〴
〴〵

{びぴちぴどっ ぅひひとちのつぬづひ うどぬづ〺〺ぃひづちぴづたづひひとちのつぬづひ〨うどぬづ〺〺ぅひひとちのつぬづひたてふのっぴどはの〪てふのっぴどはの〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〶
〴〷
〴〸

〶〰〴

付録 ぁ〮 言語呼び出し形式要約〱〲〳{びぴちぴどっ ぅひひとちのつぬづひ しどの〺〺ぃひづちぴづたづひひとちのつぬづひ〨しどの〺〺ぅひひとちのつぬづひたてふのっぴどはの〪てふのっぴどはの〩 （廃止された呼び出し形式, 第15.2節を参照）}〴〵{ぶはどつ うどのちぬどぺづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〶〷{ぶはどつ ぅひひとちのつぬづひ〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〸〹〱〰

{ぶはどつ うひづづたねづね〨ぶはどつ 〪ぢちびづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〱〱〲{ぅひひとちのつぬづひ ぃはねね〺〺ぇづぴたづひひとちのつぬづひ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〳〱〴{ぅひひとちのつぬづひ うどぬづ〺〺ぇづぴたづひひとちのつぬづひ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〵〱〶{ぅひひとちのつぬづひ しどの〺〺ぇづぴたづひひとちのつぬづひ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〷
〱〸
〱〹

{どのぴ ぇづぴたづひひはひたっぬちびび〨どのぴ づひひはひっはつづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〰
〲〱
〲〲

{ぶはどつ ぇづぴたづひひはひたびぴひどので〨どのぴ づひひはひっはつづ〬 っとちひ〪 のちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 （廃止された
呼び出し形式, 第15.2節を参照）}

〲〳
〲〴
〲〵

{ぶはどつ ぇづぴたばひはっづびびはひたのちねづ〨っとちひ〪 のちねづ〬 どのぴ〦 ひづびふぬぴぬづの〩 （廃止された呼び出し形式,
第15.2節を参照）}

〲〶
〲〷
〲〸

{ぶはどつ ぇづぴたぶづひびどはの〨どのぴ〦 ぶづひびどはの〬 どのぴ〦 びふぢぶづひびどはの〩 （廃止された呼び出し形式, 第15.2節
を参照）}

〲〹
〳〰

{ぶはどつ ぉのどぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〳〱〳〲{ぶはどつ ぉのどぴ〨どのぴ〦 ちひでっ〬 っとちひ〪〪〦 ちひでぶ〩 （廃止された呼び出し形式, 第15.2節を参照）}〳〳〳〴{ぢははぬ ぉびたてどのちぬどぺづつ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〵
〳〶
〳〷

{ぢははぬ ぉびたどのどぴどちぬどぺづつ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〸
〳〹
〴〰

{ぶはどつ ぃはねね〺〺こづぴたづひひとちのつぬづひ〨っはのびぴ ぅひひとちのつぬづひ〦 づひひとちのつぬづひ〩 （廃止された呼び出し形
式, 第15.2節を参照）}

〴〱
〴〲
〴〳

{ぶはどつ うどぬづ〺〺こづぴたづひひとちのつぬづひ〨っはのびぴ ぅひひとちのつぬづひ〦 づひひとちのつぬづひ〩 （廃止された呼び出し形
式, 第15.2節を参照）}

〴〴
〴〵
〴〶

{ぶはどつ しどの〺〺こづぴたづひひとちのつぬづひ〨っはのびぴ ぅひひとちのつぬづひ〦 づひひとちのつぬづひ〩 （廃止された呼び出し形式,
第15.2節を参照）}〴〷〴〸{つはふぢぬづ しぴどっに〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〶〰〵〱{つはふぢぬづ しぴどねづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲
〳

ぽ〻

〴
〵

A.4.7 Infoオブジェクト C++ 言語呼び出し形式
のちねづびばちっづ きぐぉ ほ

〶
〷
〸
〹
〱〰

{びぴちぴどっ ぉのては ぉのては〺〺ぃひづちぴづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〱〱〲{ぶはどつ ぉのては〺〺いづぬづぴづ〨っはのびぴ っとちひ〪 にづべ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〳
〱〴
〱〵

{ぉのては ぉのては〺〺いふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〶〱〷{ぶはどつ ぉのては〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〸〱〹{ぢははぬ ぉのては〺〺ぇづぴ〨っはのびぴ っとちひ〪 にづべ〬 どのぴ ぶちぬふづぬづの〬 っとちひ〪 ぶちぬふづ〩 っはのびぴ （廃止された
呼び出し形式, 第15.2節を参照）}

〲〰
〲〱
〲〲

{どのぴ ぉのては〺〺ぇづぴたのにづべび〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〲〳〲〴{ぶはどつ ぉのては〺〺ぇづぴたのぴとにづべ〨どのぴ の〬 っとちひ〪 にづべ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を
参照）}

〲〵
〲〶
〲〷
〲〸

{ぢははぬ ぉのては〺〺ぇづぴたぶちぬふづぬづの〨っはのびぴ っとちひ〪 にづべ〬 どのぴ〦 ぶちぬふづぬづの〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〹
〳〰
〳〱

{ぶはどつ ぉのては〺〺こづぴ〨っはのびぴ っとちひ〪 にづべ〬 っはのびぴ っとちひ〪 ぶちぬふづ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〳〲
〳〳
〳〴

ぽ〻

〳〵
〳〶

A.4.8 プロセスの生成と管理 C++ 言語呼び出し形式〳〷〳〸

のちねづびばちっづ きぐぉ ほ

〳〹
〴〰
〴〱

{ぉのぴづひっはねね ぉのぴひちっはねね〺〺ぁっっづばぴ〨っはのびぴ っとちひ〪 ばはひぴたのちねづ〬 っはのびぴ ぉのては〦 どのては〬
どのぴ ひははぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〲
〴〳
〴〴

{ぶはどつ ぃぬはびづたばはひぴ〨っはのびぴ っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〴〵〴〶{ぉのぴづひっはねね ぉのぴひちっはねね〺〺ぃはののづっぴ〨っはのびぴ っとちひ〪 ばはひぴたのちねづ〬 っはのびぴ ぉのては〦 どのては〬
どのぴ ひははぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〷
〴〸

〶〰〶

付録 ぁ〮 言語呼び出し形式要約〱〲{ぶはどつ ぃはねね〺〺いどびっはののづっぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〳〴{びぴちぴどっ ぉのぴづひっはねね ぃはねね〺〺ぇづぴたばちひづのぴ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〵〶〷{びぴちぴどっ ぉのぴづひっはねね ぃはねね〺〺おはどの〨っはのびぴ どのぴ てつ〩 （廃止された呼び出し形式, 第15.2節を参照）
}

〸
〹
〱〰

{ぶはどつ がははにふばたのちねづ〨っはのびぴ っとちひ〪 びづひぶどっづたのちねづ〬 っはのびぴ ぉのては〦 どのては〬
っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〱
〱〲
〱〳
〱〴

{ぶはどつ くばづのたばはひぴ〨っはのびぴ ぉのては〦 どのては〬 っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〱〵
〱〶
〱〷

{ぶはどつ ぐふぢぬどびとたのちねづ〨っはのびぴ っとちひ〪 びづひぶどっづたのちねづ〬 っはのびぴ ぉのては〦 どのては〬っはのびぴ っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〸
〱〹
〲〰
〲〱

{ぉのぴづひっはねね ぉのぴひちっはねね〺〺こばちぷの〨っはのびぴ っとちひ〪 っはねねちのつ〬 っはのびぴ っとちひ〪 ちひでぶせそ〬
どのぴ ねちへばひはっび〬 っはのびぴ ぉのては〦 どのては〬 どのぴ ひははぴ〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}

〲〲
〲〳
〲〴
〲〵

{ぉのぴづひっはねね ぉのぴひちっはねね〺〺こばちぷの〨っはのびぴ っとちひ〪 っはねねちのつ〬 っはのびぴ っとちひ〪 ちひでぶせそ〬
どのぴ ねちへばひはっび〬 っはのびぴ ぉのては〦 どのては〬 どのぴ ひははぴ〬
どのぴ ちひひちべたはてたづひひっはつづびせそ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参
照）}

〲〶
〲〷
〲〸
〲〹
〳〰

{ぉのぴづひっはねね ぉのぴひちっはねね〺〺こばちぷのたねふぬぴどばぬづ〨どのぴ っはふのぴ〬
っはのびぴ っとちひ〪 ちひひちべたはてたっはねねちのつびせそ〬 っはのびぴ っとちひ〪〪 ちひひちべたはてたちひでぶせそ〬
っはのびぴ どのぴ ちひひちべたはてたねちへばひはっびせそ〬 っはのびぴ ぉのては ちひひちべたはてたどのてはせそ〬
どのぴ ひははぴ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

{ぉのぴづひっはねね ぉのぴひちっはねね〺〺こばちぷのたねふぬぴどばぬづ〨どのぴ っはふのぴ〬
っはのびぴ っとちひ〪 ちひひちべたはてたっはねねちのつびせそ〬 っはのびぴ っとちひ〪〪 ちひひちべたはてたちひでぶせそ〬
っはのびぴ どのぴ ちひひちべたはてたねちへばひはっびせそ〬 っはのびぴ ぉのては ちひひちべたはてたどのてはせそ〬
どのぴ ひははぴ〬 どのぴ ちひひちべたはてたづひひっはつづびせそ〩 （廃止された呼び出し形式, 第15.2節
を参照）}

〳〷
〳〸
〳〹

{ぶはどつ さのばふぢぬどびとたのちねづ〨っはのびぴ っとちひ〪 びづひぶどっづたのちねづ〬 っはのびぴ ぉのては〦 どのては〬っはのびぴ っとちひ〪 ばはひぴたのちねづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〰
〴〱

ぽ〻

〴〲
〴〳

A.4.9 片方向通信 C++ 言語呼び出し形式

〴〴
〴〵
〴〶
〴〷
〴〸

のちねづびばちっづ きぐぉ ほぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〶〰〷{ぶはどつ しどの〺〺ぁっっふねふぬちぴづ〨っはのびぴ ぶはどつ〪 はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 っはのびぴ
いちぴちぴべばづ〦 はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 ぁどのぴ ぴちひでづぴたつどびば〬
どのぴ ぴちひでづぴたっはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 ぴちひでづぴたつちぴちぴべばづ〬 っはのびぴ くば〦
はば〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱
〲
〳
〴
〵

{ぶはどつ しどの〺〺ぃはねばぬづぴづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〶〷{びぴちぴどっ しどの しどの〺〺ぃひづちぴづ〨っはのびぴ ぶはどつ〪 ぢちびづ〬 ぁどのぴ びどぺづ〬 どのぴ つどびばたふのどぴ〬 っはのびぴぉのては〦 どのては〬 っはのびぴ ぉのぴひちっはねね〦 っはねね〩 （廃止された呼び出し形式, 第15.2節
を参照）}

〸
〹
〱〰
〱〱

{ぶはどつ しどの〺〺うづのっづ〨どのぴ ちびびづひぴ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〲〱〳{ぶはどつ しどの〺〺うひづづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〴〱〵{ぶはどつ しどの〺〺ぇづぴ〨ぶはどつ 〪はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 っはのびぴ いちぴちぴべばづ〦
はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 ぁどのぴ ぴちひでづぴたつどびば〬 どのぴ
ぴちひでづぴたっはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 ぴちひでづぴたつちぴちぴべばづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〶
〱〷
〱〸
〱〹
〲〰

{ぇひはふば しどの〺〺ぇづぴたでひはふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〲〱〲〲{ぶはどつ しどの〺〺がはっに〨どのぴ ぬはっにたぴべばづ〬 どのぴ ひちのに〬 どのぴ ちびびづひぴ〩 っはのびぴ （廃止された呼び出し
形式, 第15.2節を参照）}

〲〳
〲〴
〲〵
〲〶

{ぶはどつ しどの〺〺ぐはびぴ〨っはのびぴ ぇひはふば〦 でひはふば〬 どのぴ ちびびづひぴ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〲〷
〲〸
〲〹

{ぶはどつ しどの〺〺ぐふぴ〨っはのびぴ ぶはどつ〪 はひどでどのたちつつひ〬 どのぴ はひどでどのたっはふのぴ〬 っはのびぴ いちぴちぴべばづ〦
はひどでどのたつちぴちぴべばづ〬 どのぴ ぴちひでづぴたひちのに〬 ぁどのぴ ぴちひでづぴたつどびば〬 どのぴ
ぴちひでづぴたっはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 ぴちひでづぴたつちぴちぴべばづ〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〰
〳〱
〳〲
〳〳

{ぶはどつ しどの〺〺こぴちひぴ〨っはのびぴ ぇひはふば〦 でひはふば〬 どのぴ ちびびづひぴ〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}

〳〴
〳〵
〳〶

{ぢははぬ しどの〺〺ごづびぴ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〳〷
〳〸
〳〹

{ぶはどつ しどの〺〺さのぬはっに〨どのぴ ひちのに〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〴〰
〴〱{ぶはどつ しどの〺〺しちどぴ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〲
〴〳

ぽ〻

〴〴
〴〵

A.4.10 外部インターフェイス C++ 言語呼び出し形式〴〶

のちねづびばちっづ きぐぉ ほ

〴〸

〴〷

〶〰〸

付録 ぁ〮 言語呼び出し形式要約〱〲{ぶはどつ ぇひづぱふづびぴ〺〺ぃはねばぬづぴづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〳〴{どのぴ ぉのどぴたぴとひづちつ〨どのぴ ひづぱふどひづつ〩 （廃止された呼び出し形式, 第15.2節を参照）}〵〶〷{どのぴ ぉのどぴたぴとひづちつ〨どのぴ〦 ちひでっ〬 っとちひ〪〪〦 ちひでぶ〬 どのぴ ひづぱふどひづつ〩 （廃止された呼び出し形式,
第15.2節を参照）}〸〹〱〰

{ぢははぬ ぉびたぴとひづちつたねちどの〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〱〱〲{どのぴ けふづひべたぴとひづちつ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〳〱〴{ぶはどつ こぴちぴふび〺〺こづぴたっちのっづぬぬづつ〨ぢははぬ てぬちで〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〵
〱〶
〱〷

{ぶはどつ こぴちぴふび〺〺こづぴたづぬづねづのぴび〨っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 どのぴ っはふのぴ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〸
〱〹
〲〰
〲〱
〲〲

{びぴちぴどっ ぇひづぱふづびぴ ぇひづぱふづびぴ〺〺こぴちひぴ〨っはのびぴ ぇひづぱふづびぴ〺〺けふづひべたてふのっぴどはの〪 ぱふづひべたての〬っはのびぴ ぇひづぱふづびぴ〺〺うひづづたてふのっぴどはの〪 てひづづたての〬っはのびぴ ぇひづぱふづびぴ〺〺ぃちのっづぬたてふのっぴどはの〪 っちのっづぬたての〬 ぶはどつ 〪づへぴひちたびぴちぴづ〩（廃止された呼び出し形式, 第15.2節を参照）}

〲〳
〲〴

ぽ〻

〲〵
〲〶
〲〷
〲〸

A.4.11 入出力 C++ 言語呼び出し形式
のちねづびばちっづ きぐぉ ほ

〲〹
〳〰
〳〱

{ぶはどつ うどぬづ〺〺ぃぬはびづ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〲
〳〳
〳〴

{びぴちぴどっ ぶはどつ うどぬづ〺〺いづぬづぴづ〨っはのびぴ っとちひ〪 てどぬづのちねづ〬 っはのびぴ ぉのては〦 どのては〩 （廃止された
呼び出し形式, 第15.2節を参照）}

〳〵
〳〶
〳〷

{どのぴ うどぬづ〺〺ぇづぴたちねはつづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〳〸〳〹{ぢははぬ うどぬづ〺〺ぇづぴたちぴはねどっどぴべ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〰
〴〱
〴〲

{くててびづぴ うどぬづ〺〺ぇづぴたぢべぴづたはててびづぴ〨っはのびぴ くててびづぴ つどびば〩 っはのびぴ （廃止された呼び出し形式,
第15.2節を参照）}〴〳〴〴{ぇひはふば うどぬづ〺〺ぇづぴたでひはふば〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〴〵
〴〶
〴〷
〴〸

{ぉのては うどぬづ〺〺ぇづぴたどのては〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〶〰〹{くててびづぴ うどぬづ〺〺ぇづぴたばはびどぴどはの〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〱〲{くててびづぴ うどぬづ〺〺ぇづぴたばはびどぴどはのたびとちひづつ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〳〴{くててびづぴ うどぬづ〺〺ぇづぴたびどぺづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〵〶〷{ぁどのぴ うどぬづ〺〺ぇづぴたぴべばづたづへぴづのぴ〨っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 っはのびぴ （廃止された呼び出
し形式, 第15.2節を参照）}〸〹〱〰

{ぶはどつ うどぬづ〺〺ぇづぴたぶどづぷ〨くててびづぴ〦 つどびば〬 いちぴちぴべばづ〦 づぴべばづ〬 いちぴちぴべばづ〦 てどぬづぴべばづ〬
っとちひ〪 つちぴちひづば〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〱〱
〱〲
〱〳

{げづぱふづびぴ うどぬづ〺〺ぉひづちつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〴
〱〵
〱〶

{げづぱふづびぴ うどぬづ〺〺ぉひづちつたちぴ〨くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〷
〱〸
〱〹

{げづぱふづびぴ うどぬづ〺〺ぉひづちつたびとちひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩（廃止された呼び出し形式, 第15.2節を参照）}

〲〰
〲〱
〲〲

{げづぱふづびぴ うどぬづ〺〺ぉぷひどぴづ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩（廃止された呼び出し形式, 第15.2節を参照）}

〲〳
〲〴
〲〵

{げづぱふづびぴ うどぬづ〺〺ぉぷひどぴづたちぴ〨くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〶
〲〷
〲〸

{げづぱふづびぴ うどぬづ〺〺ぉぷひどぴづたびとちひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〹
〳〰
〳〱

{びぴちぴどっ うどぬづ うどぬづ〺〺くばづの〨っはのびぴ ぉのぴひちっはねね〦 っはねね〬 っはのびぴ っとちひ〪 てどぬづのちねづ〬
どのぴ ちねはつづ〬 っはのびぴ ぉのては〦 どのては〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〲
〳〳
〳〴

{ぶはどつ うどぬづ〺〺ぐひづちぬぬはっちぴづ〨くててびづぴ びどぺづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〵
〳〶
〳〷

{ぶはどつ うどぬづ〺〺げづちつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された
呼び出し形式, 第15.2節を参照）}

〳〸
〳〹
〴〰

{ぶはどつ うどぬづ〺〺げづちつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 こぴちぴふび〦
びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〱
〴〲
〴〳

{ぶはどつ うどぬづ〺〺げづちつたちぬぬ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〴
〴〵
〴〶

{ぶはどつ うどぬづ〺〺げづちつたちぬぬ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〷
〴〸

〶〱〰

付録 ぁ〮 言語呼び出し形式要約〱〲〳{ぶはどつ うどぬづ〺〺げづちつたちぬぬたぢづでどの〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩（廃止された呼び出し形式, 第15.2節を参照）}〴〵{ぶはどつ うどぬづ〺〺げづちつたちぬぬたづのつ〨ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を参照）}〶〷〸{ぶはどつ うどぬづ〺〺げづちつたちぬぬたづのつ〨ぶはどつ〪 ぢふて〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式,
第15.2節を参照）}

〹
〱〰
〱〱

{ぶはどつ うどぬづ〺〺げづちつたちぴ〨くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〲
〱〳
〱〴
〱〵

{ぶはどつ うどぬづ〺〺げづちつたちぴ〨くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式,
第15.2節を参照）}

〱〶
〱〷
〱〸

{ぶはどつ うどぬづ〺〺げづちつたちぴたちぬぬ〨くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〹
〲〰
〲〱
〲〲

{ぶはどつ うどぬづ〺〺げづちつたちぴたちぬぬ〨くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式,
第15.2節を参照）}

〲〳
〲〴
〲〵

{ぶはどつ うどぬづ〺〺げづちつたちぴたちぬぬたぢづでどの〨くててびづぴ はててびづぴ〬 ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〶
〲〷
〲〸

{ぶはどつ うどぬづ〺〺げづちつたちぴたちぬぬたづのつ〨ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〹
〳〰
〳〱

{ぶはどつ うどぬづ〺〺げづちつたちぴたちぬぬたづのつ〨ぶはどつ〪 ぢふて〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式,
第15.2節を参照）}

〳〲
〳〳
〳〴

{ぶはどつ うどぬづ〺〺げづちつたはひつづひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩（廃止された呼び出し形式, 第15.2節を参照）}

〳〵
〳〶
〳〷

{ぶはどつ うどぬづ〺〺げづちつたはひつづひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〸
〳〹
〴〰

{ぶはどつ うどぬづ〺〺げづちつたはひつづひづつたぢづでどの〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〴〱〴〲{ぶはどつ うどぬづ〺〺げづちつたはひつづひづつたづのつ〨ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

{ぶはどつ うどぬづ〺〺げづちつたはひつづひづつたづのつ〨ぶはどつ〪 ぢふて〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式,
第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〶〱〱{ぶはどつ うどぬづ〺〺げづちつたびとちひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〲〳{ぶはどつ うどぬづ〺〺げづちつたびとちひづつ〨ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}〴〵〶{ぶはどつ げづでどびぴづひたつちぴちひづば〨っはのびぴ っとちひ〪 つちぴちひづば〬
いちぴちひづばたっはのぶづひびどはのたてふのっぴどはの〪 ひづちつたっはのぶづひびどはのたての〬いちぴちひづばたっはのぶづひびどはのたてふのっぴどはの〪 ぷひどぴづたっはのぶづひびどはのたての〬いちぴちひづばたづへぴづのぴたてふのっぴどはの〪 つぴべばづたてどぬづたづへぴづのぴたての〬
ぶはどつ〪 づへぴひちたびぴちぴづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〷
〸
〹
〱〰
〱〱
〱〲

{ぶはどつ うどぬづ〺〺こづづに〨くててびづぴ はててびづぴ〬 どのぴ ぷとづのっづ〩 （廃止された呼び出し形式, 第15.2節を参照）
}

〱〳
〱〴
〱〵

{ぶはどつ うどぬづ〺〺こづづにたびとちひづつ〨くててびづぴ はててびづぴ〬 どのぴ ぷとづのっづ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〱〶
〱〷
〱〸

{ぶはどつ うどぬづ〺〺こづぴたちぴはねどっどぴべ〨ぢははぬ てぬちで〩 （廃止された呼び出し形式, 第15.2節を参照）}〱〹〲〰

{ぶはどつ うどぬづ〺〺こづぴたどのては〨っはのびぴ ぉのては〦 どのては〩 （廃止された呼び出し形式, 第15.2節を参照）}〲〱〲〲{ぶはどつ うどぬづ〺〺こづぴたびどぺづ〨くててびづぴ びどぺづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〳
〲〴
〲〵

{ぶはどつ うどぬづ〺〺こづぴたぶどづぷ〨くててびづぴ つどびば〬 っはのびぴ いちぴちぴべばづ〦 づぴべばづ〬
っはのびぴ いちぴちぴべばづ〦 てどぬづぴべばづ〬 っはのびぴ っとちひ〪 つちぴちひづば〬っはのびぴ ぉのては〦 どのては〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〶
〲〷
〲〸
〲〹

{ぶはどつ うどぬづ〺〺こべのっ〨〩 （廃止された呼び出し形式, 第15.2節を参照）}〳〰
〳〱{ぶはどつ うどぬづ〺〺しひどぴづ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〲
〳〳
〳〴

{ぶはどつ うどぬづ〺〺しひどぴづ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〵
〳〶
〳〷

{ぶはどつ うどぬづ〺〺しひどぴづたちぬぬ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩（廃止された呼び出し形式, 第15.2節を参照）}

〳〸
〳〹
〴〰

{ぶはどつ うどぬづ〺〺しひどぴづたちぬぬ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬 っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬
こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〱
〴〲
〴〳

{ぶはどつ うどぬづ〺〺しひどぴづたちぬぬたぢづでどの〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〴
〴〵
〴〶
〴〷
〴〸

〶〱〲
〱
〲

付録 ぁ〮 言語呼び出し形式要約{ぶはどつ うどぬづ〺〺しひどぴづたちぬぬたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を参照）
}

〳
〴
〵

{ぶはどつ うどぬづ〺〺しひどぴづたちぬぬたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し
形式, 第15.2節を参照）}〶〷〸{ぶはどつ うどぬづ〺〺しひどぴづたちぴ〨くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〹
〱〰
〱〱
〱〲

{ぶはどつ うどぬづ〺〺しひどぴづたちぴ〨くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式,
第15.2節を参照）}

〱〳
〱〴
〱〵

{ぶはどつ うどぬづ〺〺しひどぴづたちぴたちぬぬ〨くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〱〶
〱〷
〱〸
〱〹

{ぶはどつ うどぬづ〺〺しひどぴづたちぴたちぬぬ〨くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式,
第15.2節を参照）}

〲〰
〲〱
〲〲

{ぶはどつ うどぬづ〺〺しひどぴづたちぴたちぬぬたぢづでどの〨くててびづぴ はててびづぴ〬 っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〳
〲〴
〲〵

{ぶはどつ うどぬづ〺〺しひどぴづたちぴたちぬぬたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を参
照）}

〲〶
〲〷
〲〸

{ぶはどつ うどぬづ〺〺しひどぴづたちぴたちぬぬたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〲〹
〳〰
〳〱
〳〲

{ぶはどつ うどぬづ〺〺しひどぴづたはひつづひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〳
〳〴
〳〵

{ぶはどつ うどぬづ〺〺しひどぴづたはひつづひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式,
第15.2節を参照）}

〳〶
〳〷
〳〸
〳〹

{ぶはどつ うどぬづ〺〺しひどぴづたはひつづひづつたぢづでどの〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〰
〴〱
〴〲

{ぶはどつ うどぬづ〺〺しひどぴづたはひつづひづつたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〩 （廃止された呼び出し形式, 第15.2節を
参照）}

〴〳
〴〴
〴〵

{ぶはどつ うどぬづ〺〺しひどぴづたはひつづひづつたづのつ〨っはのびぴ ぶはどつ〪 ぢふて〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式, 第15.2節を参照）}

〴〶
〴〷
〴〸

{ぶはどつ うどぬづ〺〺しひどぴづたびとちひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〶〱〳〱{ぶはどつ うどぬづ〺〺しひどぴづたびとちひづつ〨っはのびぴ ぶはどつ〪 ぢふて〬 どのぴ っはふのぴ〬
っはのびぴ いちぴちぴべばづ〦 つちぴちぴべばづ〬 こぴちぴふび〦 びぴちぴふび〩 （廃止された呼び出し形式,
第15.2節を参照）}

〲
〳
〴
〵

ぽ〻

〶
〷

A.4.12 言語呼び出し形式 C++ 言語呼び出し形式〸〹

のちねづびばちっづ きぐぉ ほ

〱〰
〱〱
〱〲

{びぴちぴどっ いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたて〹〰たっはねばぬづへ〨どのぴ ば〬 どのぴ ひ〩 （廃止された呼び出
し形式, 第15.2節を参照）}

〱〳
〱〴
〱〵

{びぴちぴどっ いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたて〹〰たどのぴづでづひ〨どのぴ ひ〩 （廃止された呼び出し形式,
第15.2節を参照）}

〱〶
〱〷
〱〸

{びぴちぴどっ いちぴちぴべばづ いちぴちぴべばづ〺〺ぃひづちぴづたて〹〰たひづちぬ〨どのぴ ば〬 どのぴ ひ〩 （廃止された呼び出し形
式, 第15.2節を参照）}

〱〹
〲〰
〲〱
〲〲

ぅへっづばぴどはの〺〺ぅへっづばぴどはの〨どのぴ づひひはひたっはつづ〩〲〳{どのぴ ぅへっづばぴどはの〺〺ぇづぴたづひひはひたっぬちびび〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}

〲〴
〲〵
〲〶

{どのぴ ぅへっづばぴどはの〺〺ぇづぴたづひひはひたっはつづ〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節を参照）}〲〷〲〸{っはのびぴ っとちひ〪 ぅへっづばぴどはの〺〺ぇづぴたづひひはひたびぴひどので〨〩 っはのびぴ （廃止された呼び出し形式, 第15.2節
を参照）}

〲〹
〳〰
〳〱

{びぴちぴどっ いちぴちぴべばづ いちぴちぴべばづ〺〺きちぴっとたびどぺづ〨どのぴ ぴべばづっぬちびび〬 どのぴ びどぺづ〩 （廃止された呼び出し形式, 第15.2節を参照）}

〳〲
〳〳
〳〴
〳〵

ぽ〻

〳〶

A.4.13 プロファイルインターフェイス C++ 言語呼び出し形式〳〷

のちねづびばちっづ きぐぉ ほ

〳〹

〳〸

〴〰
〴〱

{ぶはどつ ぐっはのぴひはぬ〨っはのびぴ どのぴ ぬづぶづぬ〬 〮〮〮〩

（廃止された呼び出し形式, 第15.2節を参照）}

〴〲
〴〳

ぽ〻

〴〴
〴〵
〴〶
〴〷
〴〸

〶〱〴
〱

付録 ぁ〮 言語呼び出し形式要約

A.4.14 全てのMPIクラスにおける C++言語呼び出し形式

〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

ぃ〫〫言語は〬 全てのクラスが〴つの特別な機能を持つ必要がある〺デフォルトのコンス
トラクタ〬 コピーコンストラクタ〬 デストラクタそして割当てられた演算子である〮 これら機能の呼び出し形式を以下に列挙する〮 これらの意味論セクション 〱〶〮〱〮〵にて述べている〮〲つのコンストラクタは仮想ではない〮 プロトタイプ関数の呼び出し形式 は〬 hぃがぁここi型
よりもすべてのきぐぉ クラス の関数をそれぞれ列挙する方法を使う〮 hぃがぁここiトークンは通知されたとき以外〬 ぇひはふば〬 いちぴちぴべばづなどの有効なきぐぉ〭〲クラス名によってによって置
き換えることができる〮 加えて呼び出し形式はっはねばちひどびはの ちのつ どのぴづひ〭ぬちのでふちでづ セクショ
ン 〱〶〮〱〮〵と 〱〶〮〱〮〹の 操作性ために提供される〮〱〴〱〵

A.4.15 コンストラクション／デストラクション〱〶〱〷

のちねづびばちっづ きぐぉ ほ〱〸hぃがぁここi〺〺hぃがぁここi〨〩〱〹〲〰

hぃがぁここi〺〺∼ hぃがぁここi〨〩

〲〱
〲〲
〲〳

ぽ〻

〲〴
〲〵
〲〶
〲〷

A.4.16 複製／割当て
のちねづびばちっづ きぐぉ ほ〲〸hぃがぁここi〺〺hぃがぁここi〨っはのびぴ hぃがぁここi〦 つちぴち〩〲〹〳〰

hぃがぁここi〦 hぃがぁここi〺〺はばづひちぴはひ〽〨っはのびぴ hぃがぁここi〦 つちぴち〩

〳〱
〳〲
〳〳
〳〴

ぽ〻

〳〵
〳〶

A.4.17 比較

〳〷
〳〸
〳〹

こぴちぴふびインスタンスが，根本的なオブジェクトへのハンドラではないため，はばづひちぴはひ〽〽〨〩とはばづひちぴはひ〡〽〨〩関数はこぴちぴふびクラスに宣言されていない〮〴〰
〴〱

のちねづびばちっづ きぐぉ ほ〴〲

ぢははぬ hぃがぁここi〺〺はばづひちぴはひ〽〽〨っはのびぴ hぃがぁここi〦 つちぴち〩 っはのびぴ〴〳〴〴

ぢははぬ hぃがぁここi〺〺はばづひちぴはひ〡〽〨っはのびぴ hぃがぁここi〦 つちぴち〩 っはのびぴ

〴〵
〴〶
〴〷
〴〸

ぽ〻

ぁ〮〴〮 ぃ〫〫言語呼び出し形式（廃止された）〶〱〵A.4.18 言語間操作性〱〲

ぃ〫〫言語オブジェクトのきぐぉ〺〺こごぁごさこたぉぇぎくげぅ ときぐぉ〺〺こごぁごさこぅこたぉぇぎくげぅがないため〬結果とし て ぃ言 語かうはひぴひちの言 語に働き か ける〨きぐぉたこごぁごさこたぉぇぎくげぅ ときぐぉたこごぁごさこぅこたぉぇぎくげぅ〩ぃ〫〫言語が未定義である〮

〳
〴
〵
〶

のちねづびばちっづ きぐぉ ほ〷〸hぃがぁここi〦 hぃがぁここi〺〺はばづひちぴはひ〽〨っはのびぴ きぐぉたhぃがぁここi〦 つちぴち〩
hぃがぁここi〺〺hぃがぁここi〨っはのびぴ きぐぉたhぃがぁここi〦 つちぴち〩

〹
〱〰
〱〱
〱〲

hぃがぁここi〺〺はばづひちぴはひ きぐぉたhぃがぁここi〨〩 っはのびぴ

〱〳
〱〴
〱〵

ぽ〻

〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〶〱〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 ぁ〮 言語呼び出し形式要約

〱
〲
〳
〴
〵

付録B章

〶
〷
〸
〹

変更履歴

〱〰
〱〱
〱〲
〱〳
〱〴

この付録ではきぐぉ標準のこれまでの版からの変更をまとめる． きぐぉライブラリの実装が必要となるような，あるいはユーザ観点でのきぐぉの理解が変わるような，大きな変更
のみ（すなわち〬 明確化と新機能）を記載する． 校正修正，フォーマット変更，誤植修
正，そして些細な明確化は記載しない．

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

B.1 2.1から2.2への変更点〲〲〱〮 〱〷ページの 第〲〮〵〮〴節
定義済みの名前付き定数ハンドルを（他の定数と同様に）初期化式や代入に使用して良いことが保証された．すなわち，きぐぉたぉぎぉごの呼び出し前でも良い．

〲〳
〲〴
〲〵
〲〶
〲〷

〲〮 〱〹ページの 第〲〮〶節， 〲〲ページの 第〲〮〶〮〴節， 〴〸〷ページの 第〱〶〮〱節ぃ〫〫言語呼び出し形式は廃止されたため，将来的にきぐぉの仕様から削除されること
がある．

〲〸
〲〹
〳〰
〳〱

〳〮 〳〲ページの 第〳〮〲〮〲節
印字可能な文字のためのきぐぉたぃえぁげは，ぃ言語の（びどでのづつ っとちひの代わりに）っとちひとして定義している．この変更はどのようなアプリケーションやきぐぉ ライブラリ（いくつかのコメント行以外）に影響を与えてはならない．なぜなら，印字可能な文字
は，過去も現在もぃ言語のっとちひ型，びどでのづつ っとちひ型，ふのびどでのづつ っとちひ型のいずれにも格納でき，また，きぐぉたぃえぁげは定義済みのリダクション操作には使えないためである．

〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

〴〮 〳〲ページの 第〳〮〲〮〲節
きぐぉた〨さ〩ぉぎご{〸〬〱〶〬〳〲〬〶〴}たご〬〴〱

きぐぉたぁぉぎご， きぐぉたくううこぅご， きぐぉたぃたあくくが，きぐぉたぃたぃくきぐがぅじ， きぐぉたぃたうがくぁごたぃくきぐがぅじ， きぐぉたぃたいくさあがぅたぃくきぐがぅじ，
きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじは，定義済みきぐぉデータ型として有効になった．

〵〮 〴〶ページの 第〳〮〴節， 〵〸ページの 第〳〮〷〮〲節， 〷〸ページの 第〳〮〹節， 〱〴〱ページの 第〵〮〱節
〶〱〷

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 あ〮 変更履歴

〶〱〸
〱
〲
〳
〴
〵

ブロッキング，ノンブロッキング，集団ぁぐぉの送信バッファへの読込みアクセスの制限が解除された．送信バッファが操作中であっても読込みアクセスを許可する．
〶〮 〵〶ページの 第〳〮〷節ぉあこぅぎいとぉげこぅぎいのユーザへのアドバイスが若干変更になった．

〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸

〷〮 〶〱ページの 第〳〮〷〮〳節
きぐぉたげぅけさぅこごたうげぅぅのユーザへのアドバイスで，アクティブな要求の解放のアドバイスを削除した．
〸〮 〷〳ページの 第〳〮〷〮〶節
きぐぉたげぅけさぅこごたぇぅごたこごぁごさこの入力として非アクティブかのふぬぬリクエストを許可するように変更した．
〹〮 〱〶〷ページの 第〵〮〸節
ぜどの ばぬちっづ〢オプションがグループ内コミュニケータを使用したきぐぉたぁががごくぁがが，きぐぉたぁががごくぁががざ，きぐぉたぁががごくぁががしに追加された．

〱〹
〲〰
〲〱
〲〲
〲〳

〱〰〮 〱〷〴ページの 第〵〮〹〮〲節
定義済みのパラメータ化されたデータ型（例えば，きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁがが返す型）と選択可能な名前付き定義済みデータ型（例えば，きぐぉたげぅぁが〸）をリダク
ション操作の有効なデータ型のリストに追加した．

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱

〱〱〮 〱〷〴ページの 第〵〮〹〮〲節
きぐぉた〨さ〩ぉぎご{〸〬〱〶〬〳〲〬〶〴}たごは，定義済みのリダクション操作を目的として全てぃ言

語の整数型と認識する． きぐぉたぁぉぎごときぐぉたくううこぅごはうはひぴひちの言語の整数型と認識す
る．きぐぉたぃたあくくがは論理型と認識する．きぐぉたぃたぃくきぐがぅじ，きぐぉたぃたうがくぁごたぃくきぐがぅじ，
きぐぉたぃたいくさあがぅたぃくきぐがぅじ， きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじは 複 素 数 型 と 認 識 す
る．

〳〲
〳〳
〳〴

〱〲〮 〱〸〶ページの 第〵〮〹〮〷節
ローカルルーチンのきぐぉたげぅいさぃぅたがくぃぁがときぐぉたくぐたぃくききさごぁごぉざぅを追加した．

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〳〮 〱〸〷ページの 第〵〮〱〰〮〱節
集団関数のきぐぉたげぅいさぃぅたこぃぁごごぅげたあがくぃかをきぐぉ標準に追加した．
〱〴〮 〱〹〰ページの 第〵〮〱〱〮〲節
きぐぉたぅじこぃぁぎにインプレイス引数を追加した．
〱〵〮 〲〱〱ページの 第〶〮〴〮〲節 〲〲〵ページの 第〶〮〶節
グループ間コミュニケータに関するきぐぉたぃくききたぃげぅぁごぅをサポートしていない実装については，この関数を追加しなければならない．グループ間コミュニケータの操作の挙動が標準で示されているが，それは既にほとんどの実装にて提供されていると考えたからである．きぐぉたぃくききたぃげぅぁごぅときぐぉたぃくききたこぐがぉご両方のぃ〫〫言あ〮〱〮 〲〮〱から〲〮〲への変更点〶〱〹

語呼び出し形式は，グループ間コミュニケータを明確にを許可していることも留意
すること．

〱
〲
〳

〱〶〮 〲〱〱ページの 第〶〮〴〮〲節
きぐぉたぃくききたぃげぅぁごぅは，っはねねがグループ内コミュニケータの場合，互いに疎な複数のサブグループを入力とすることが許されるよう拡張された．っはねねがグルー
プ間コミュニケータの場合，っはねねの同じローカルグループの全てのプロセスはグループに同じ値を指定しなければならないと明文化された．

〴
〵
〶
〷
〸
〹
〱〰

〱〷〮 〲〶〲ページの 第〷〮〵〮〴節
スケーラブル分散グラフトポロジーインターフェイスの新しい関数を追加した． こ の 節 で は，きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎご関 数 ときぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅ関 数， きぐぉたさぎしぅぉぇえごぅい定 数，ぃ〫〫言 語 の 派 生 ク ラ
スいどびぴでひちばとっはねねが追加された．
〱〸〮 〲〶〸ページの 第〷〮〵〮〵節
スケーラブル分散グラフトポロジーインターフェイスのため，きぐぉたいぉこごたぎぅぉぇえあくげこたぃくさぎご関数ときぐぉたいぉこごたぎぅぉぇえあくげこ関数，
きぐぉたいぉこごたぇげぁぐえ定数を追加した．

〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

〱〹〮 〲〶〸ページの 第〷〮〵〮〵節
きぐぉたぇげぁぐえたぎぅぉぇえあくげこときぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎごによって複製された隣接に関する曖昧さを削除した．

〲〳
〲〴
〲〵
〲〶

〲〰〮 〲〸〱ページの 第〸〮〱〮〱節
サブバージョンを〱から〲へ変更した．

〲〷
〲〸
〲〹

〲〱〮 〲〸〶ページの 第〸〮〳節， 〴〸〵ページの 第〱〵〮〲節， 〵〵〳ページの 付録ぁ〮〱〮〳
関 数 ポ イ ン タ のぴべばづつづて名 をきぐぉた{ぃはねね〬うどぬづ〬しどの}たづひひとちのつぬづひたてのか ら
きぐぉた{ぃはねね〬うどぬづ〬しどの}たづひひとちのつぬづひたてふのっぴどはのに変更した．古いぜたての〢名は望ましくない．

〳〰

〲〲〮 〳〰〶ページの 第〸〮〷〮〱節
きぐぉたぃくききたこぅがうの属性削除コールバックはがぉうくで呼び出されるようになった．実
装者は，きぐぉたぉぎぉご〯きぐぉたぉぎぉごたごえげぅぁいから戻る前にきぐぉたぃくききたこぅがうの全ての実装
内部の属性削除コールバックを登録しなければならない．

〳〴

〳〱
〳〲
〳〳

〳〵
〳〶
〳〷
〳〸
〳〹

〲〳〮 〳〵〷ページの 第〱〱〮〳〮〴節
きぐぉたぁぃぃさきさがぁごぅのきぐぉたげぅぐがぁぃぅが定義済みのデータ型でのみ使うことができ
る制限がきぐぉ 〲〮〱で追加されたが削除された． きぐぉたげぅぐがぁぃぅは，きぐぉ 〲〮〰の時と同様に派生データ型を使用できるようになった． また， きぐぉたげぅぐがぁぃぅはきぐぉたぁぃぃさきさがぁごぅの中だけで使用でき，きぐぉたげぅいさぃぅなどのリダクション集団操作の中では使用できないということを明確にした．

〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〶〲〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱

付録 あ〮 変更履歴〲〴〮 〳〸〹ページの 第〱〲〮〲節
きぐぉ〺〺ぇひづぱふづびぴ〺〺こぴちひぴ〨〩のぃ〫〫言語呼び出し形式のぱふづひべたての，てひづづたての，っちのっづぬたてのの引数にぜ〪〢を追加した．これは，関数ポインタを引数とする他のきぐぉ関数との一貫性を保つためである．
〲〵〮 〴〴〸ページの 第〱〳〮〵〮〲節， 〴〵〰ページの 表〱〳〮〲づへぴづひのちぬ〳〲表現の宣言済みのデータ型としてきぐぉた〨さ〩ぉぎご{〸〬〱〶〬〳〲〬〶〴}たご， きぐぉたぁぉぎご，きぐぉたくううこぅご， きぐぉたぃたぃくきぐがぅじ， きぐぉたぃたうがくぁごたぃくきぐがぅじ，
きぐぉたぃたいくさあがぅたぃくきぐがぅじ， きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじ， きぐぉたぃたあくくがを 追 加
した．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹

〲〶〮 〵〲〹ページの 第〱〶〮〳〮〷節
きぐぉが内部的にどのように属性を格納するかではなく，どのようにきぐぉの 実装が振る舞うかの説明だけに説明文を変更した．誤ったきぐぉ〭〲〮〱 例〱〶〮〱〷は， 〵〳〰ページ〭〵〳〱ページの〳つの新しい例である例〱〶〮〱〷，例〱〶〮〱〸， 例〱〶〮〱〹に置き換えられ，言語間の属性の詳細な動きを明示している．古い例の動作にマッチする動作をする
実装は更新する必要がある．

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

〲〷〮 〵〳〷ページの 付録ぁ〮〱〮〱きぐぉ〺〺うどのぴ型（ 〵〵〲ページの 第ぁ〮〱〮〲節にあるきぐぉたうどのぴと比較すること）を削除した．
〲〸〮 〵〳〷ページの 付録ぁ〮〱〮〱 表 Named Predefined Datatypes
定義済みのデータ型として， きぐぉた〨さ〩ぉぎご{〸〬〱〶〬〳〲〬〶〴}たご， きぐぉたぁぉぎご，きぐぉたくううこぅご， きぐぉたぃたあくくが， きぐぉたぃたうがくぁごたぃくきぐがぅじ， きぐぉたぃたぃくきぐがぅじ，
きぐぉたぃたいくさあがぅたぃくきぐがぅじ，きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじを追加した．

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱

B.2 2.0から2.1への変更点〱〮 〳〲ページの 第〳〮〲〮〲節， 〴〹〲ページの 第〱〶〮〱〮〶節， 〵〳〷ページの 付録ぁ〮〱きぐぉたがくぎぇたがくぎぇは，オプションとして追加されなければならない．
きぐぉたがくぎぇたがくぎぇたぉぎごと同義である．
〲〮 〳〲ページの 第〳〮〲〮〲節， 〴〹〲ページの 第〱〶〮〱〮〶節， 〵〳〷ページの 付録ぁ〮〱きぐぉたがくぎぇたがくぎぇたぉぎご， きぐぉたがくぎぇたがくぎぇ （同 義 の 別 名），
きぐぉたさぎこぉぇぎぅいたがくぎぇたがくぎぇ， きぐぉたこぉぇぎぅいたぃえぁげ， ときぐぉたしぃえぁげは， オ プ シ
ョンから公式になり〳言語全ての言語呼び出し形式で定義された．

〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〳〮 こづっぴどはの 〳〸ページの 第〳〮〲〮〵節長さ〰のデータ型に対するきぐぉたぇぅごたぃくさぎごについて
長さゼロのデータ型に対して〰バイトが転送された場合，きぐぉたぇぅごたぃくさぎご関数
のっはふのぴ引数に返される値はゼロである．転送バイト数がゼロより大きいならば，
きぐぉたさぎいぅうぉぎぅいを返される．

あ〮〲〮 〲〮〰から〲〮〱への変更点〶〲〱〴〮 〸〷ページの 第〴〮〱節 派生データ型の基本ルールについてほとんどのデータ型コンストラクタは，反復回数やブロック長の引数を持つ．これ
らの引数に対し許される値は非負整数である．ただし，これらの値が〰の場合，型マップの中には要素を何も生じさせないし，データ型の上下限や範囲に対し何の影響も与えない．

〱
〲
〳
〴
〵
〶
〷

〵〮 〱〳〷ページの 第〴〮〳節
きぐぉたぐぁぃかたぅじごぅげぎぁがによってパックされたデータの送信と受信には，
きぐぉたあすごぅが使用されなくてはならない．

〸
〹
〱〰
〱〱

〶〮 〱〸〵ページの 第〵〮〹〮〶節
っはねねがきぐぉたぁががげぅいさぃぅのグループ間コミュニケータの場合， 両グループは，同一の型シグネチャとなるようなっはふのぴとつちぴちぴべばづを引数として渡さなけらばならな
い． （すなわち，両グループが同じっはふのぴ値を提供する必要はない．）〷〮 〲〰〲ページの 第〶〮〳〮〱節 きぐぉたぇげくさぐたごげぁぎこがぁごぅたげぁぎかこときぐぉたぐげくぃたぎさががについてきぐぉたぇげくさぐたごげぁぎこがぁごぅたげぁぎかこの 入 力 と し てきぐぉたぐげくぃたぎさががは 有 効 な ラ ン ク
で，変換されたランクとしてきぐぉたぐげくぃたぎさががを返却する．

〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲

〸〮 〲〳〴ページの 第〶〮〷節属性キャッシュ関数について

〲〳
〲〴
〲〵

実装者へのアドバイス 高品質な実装であれば， きぐぉたじじじたぃげぅぁごぅたかぅすざぁが
の呼び出しによって生成されたにづべぶちぬ が， きぐぉたすすすたぇぅごたぁごごげ〬
きぐぉたすすすたこぅごたぁごごげ〬 きぐぉたすすすたいぅがぅごぅたぁごごげ〬きぐぉたすすすたうげぅぅたかぅすざぁがへの呼び出しで誤った型のオブジェクトを指定して使用された場合，エラーを発生させなくてはならない．そのためには，関連するユーザ関数の型に関する情報をにづべぶちぬ毎に管理する必要がある． （実装者へのアドバイス終わり）

〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

〹〮 〲〴〸ページの 第〶〮〸節 きぐぉたぃくききたぇぅごたぎぁきぅについて
ぃ言語では，のちねづせひづびふぬぴぬづのそにのふぬぬ文字が追加で保存される． ひづびふぬぴぬづのは，
きぐぉたきぁじたくあおぅぃごたぎぁきぅ〭〱よ り も 大 き く な っ て は い け な い． うはひぴひちの言 語 で は，
のちねづの右に空白文字がパディングされる． ひづびふぬぴぬづのは，きぐぉたきぁじたくあおぅぃごたぎぁきぅよ
りも大きくなってはいけない．
〱〰〮 〲〵〷ページの 第〷〮〴節 きぐぉたぇげぁぐえたぃげぅぁごぅときぐぉたぃぁげごたぃげぅぁごぅについて
全ての入力引数は，っはねねたはぬつグループのすべてのプロセスで同一値を持たなくてはならない．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴

〱〱〮 〲〵〸ページの 第〷〮〵〮〱節 きぐぉたぃぁげごたぃげぅぁごぅについて
のつどねびがゼロの場合，〰次元のカルテシアントポロジーが生成される．グループサイズよりも大きな格子を指定した場合，またはのつどねびが負の値の場合は誤りである．

〴〵
〴〶
〴〷
〴〸

付録 あ〮 変更履歴

〶〲〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰

〱〲〮 〲〶〰ページの 第〷〮〵〮〳節 きぐぉたぇげぁぐえたぃげぅぁごぅについて
もしグラフが空ならば，すなわちののはつづび 〽〽 〰ならば，全プロセスできぐぉたぃくききたぎさががが返却される．
〱〳〮 〲〶〰ページの 第〷〮〵〮〳節 きぐぉたぇげぁぐえたぃげぅぁごぅについて
プロセスの隣接リスト内で〱つのプロセスを複数回定義することができる（つまり，〲つのプロセスの間に複数のエッジが存在する可能性がある）．また，プロセスはそれ自体の隣接とすることもできる（つまり，グラフ内の自己参照ループ）．隣接行
列は非対称とすることができる．

〱〱
〱〲
〱〳
〱〴

ユーザへのアドバイス 複数のエッジまたは非対称の隣接行列を使用した場合の性能の詳細は定義されていない．ノード隣接エッジの定義では通信の方向は示されていない． （ユーザへのアドバイス終わり）

〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

〱〴〮 〲〶〸ページの 第〷〮〵〮〵節 きぐぉたぃぁげごいぉきたぇぅごときぐぉたぃぁげごたぇぅごについてっはねねに〰次元のカルテシアントポロジーが関連付けされている場合，
きぐぉたぃぁげごいぉきたぇぅごはのつどねび〽〰を返し，きぐぉたぃぁげごたぇぅごはすべての出力引数を変更しないで保持する．

〲〱
〲〲
〲〳
〲〴

〱〵〮 〲〶〸ページの 第〷〮〵〮〵節 きぐぉたぃぁげごたげぁぎかについてっはねねに〰次元のカルテシアントポロジーが関連付けされている場合，っははひつは意味を持たず，ひちのにに〰が返される．

〲〵
〲〶
〲〷
〲〸

〱〶〮 〲〶〸ページの 第〷〮〵〮〵節 きぐぉたぃぁげごたぃくくげいこについて
っはねねに〰次元のカルテシアントポロジーが関連付けされている場合，っははひつびは変更
されない．

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵

〱〷〮 〲〷〵ページの 第〷〮〵〮〶節 きぐぉたぃぁげごたこえぉうごについてある方向について負の値またはカルテシアンコミュニケータの次元数以上の値を指定してきぐぉたぃぁげごたこえぉうごを呼び出すのは誤りである．このことは，〰次元のカルテ
シアントポロジーが関連付けられたっはねねを使用するのは，きぐぉたぃぁげごたこえぉうごの呼び出しは誤りとなることを示している．

〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〱〸〮 〲〷〶ページの 第〷〮〵〮〷節 きぐぉたぃぁげごたこさあについて
ひづねちどのたつどねびのすべてのエントリが偽か，またはっはねねにすでに〰次元のカルテシア
ントポロジーが関連付けられている場合，のづぷっはねねに〰次元のカルテシアントポロ
ジーが関連付けられる．
〱〸〮〱〮 〲〸〱ページの 第〸〮〱〮〱節
サブバージョン番号が〰から〱に変更になった．
〱〹〮 〲〸〲ページの 第〸〮〱〮〲節 きぐぉたぇぅごたぐげくぃぅここくげたぎぁきぅについて
ぃ言語では加えて，のちねづせひづびふぬぴぬづのそにのふぬぬ文字が保存される． ひづびふぬぴぬづのは，
きぐぉたきぁじたぐげくぃぅここくげたぎぁきぅ〭〱よりも大きくならない．うはひぴひちの言語では，のちねづのあ〮〲〮 〲〮〰から〲〮〱への変更点〶〲〳

右にスペースがパディングされる．ひづびふぬぴぬづのは， きぐぉたきぁじたぐげくぃぅここくげたぎぁきぅよりも大きくならない．

〱〲〳〴〲〰〮 〲〸〶ページの 第〸〮〳節〵
きぐぉた{ぃくきき〬しぉぎ〬うぉがぅ}たぇぅごたぅげげえぁぎいがぅげ の動作は，新しいエラーハンドラオ〶
ブジェクトが生成されるのと同様である．つまり，エラーハンドラが不要となった〷
時点で，きぐぉたぅげげえぁぎいがぅげたぇぅごまたはきぐぉた{ぃくきき〬しぉぎ〬うぉがぅ}たぇぅごたぅげげえぁぎいがぅげ 〸〹
から返されたエラーハンドラを使用してきぐぉたぅげげえぁぎいがぅげたうげぅぅを呼び出し，エ〱〰
ラーハンドラを解放のためにマークする必要がある． この動作は，〱〱きぐぉたぃくききたぇげくさぐおよびきぐぉたぇげくさぐたうげぅぅと同様である．
〱〲〲〱〮 〳〰〱ページの 第〸〮〷節，きぐぉたうぉぎぁがぉずぅの説明参照
きぐぉたうぉぎぁがぉずぅは接続されている全てのプロセスに対して集団的である．スポーン（びばちぷの），アクセプト（ちっっづばぴ），またはコネクト（っはののづっぴ）が行われたプロセスがない場合，これはきぐぉたぃくききたしくげがいが対象となる．それ以外の場合，かつて接続していたまたは現在も接続中である全てのプロセスの集合に対して集団的である．これらの事項は，〳〴〳ページの第〱〰〮〵〮〴節で説明している．

〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰

〲〲〮 〳〰〱ページの 第〸〮〷節 きぐぉたぁあくげごについて

〲〱
〲〲
〲〳

ユーザへのアドバイス エラーコードが実行可能ファイルから返されるか，
きぐぉプロセスの起動メカニズム（ねばどづへづっなど）から返されるかは，きぐぉライ
ブラリの品質に関する事柄であり，必須事項ではない． （ユーザへのアドバ
イス終わり）

〲〴
〲〵
〲〶
〲〷
〲〸
〲〹

実装者へのアドバイス 高品質な実装では，可能なかぎり，きぐぉプロセスの起
動メカニズム（ねばどづへづっ，シングルトンどのどぴなど）からエラーコードを返そうとする． （実装者へのアドバイス終わり）

〳〰
〳〱
〳〲
〳〳

〲〳〮 〳〱〱ページの 第〹節
実装では，キーを識別するかどうかに関係なく，どのてはオブジェクト を任意の〨にづべ〬ぶちぬふづ〩のペアのキャッシュとしてサポートする必要がある．識別しないキーを無視するため，きぐぉたぉのてはの形式でヒントを取得する各関数を用意する必要がある．
どのてはオブジェクトのこの記述は，キーは識別するが付加された値は識別しない場合に，特定の関数が対処する方法を定義するものではない．きぐぉたぉぎうくたぇぅごたぎかぅすこ，
きぐぉたぉぎうくたぇぅごたぎごえかぅす，きぐぉたぉぎうくたぇぅごたざぁがさぅがぅぎ，きぐぉたぉぎうくたぇぅごは，レイ
ヤー化された機能でもぉのてはオブジェクトを使用できるように，すべての 〨にづべ〬
ぶちぬふづ〩のペアを保持する必要がある．

〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵

〲〴〮 〳〵〱ページの 第〱〱〮〳節
きぐぉたぐげくぃたぎさががはきぐぉ げきぁ 呼び出しのきぐぉたぁぃぃさきさがぁごぅ，きぐぉたぇぅご，

〴〶
〴〷
〴〸

付録 あ〮 変更履歴

〶〲〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷

きぐぉたぐさごにおける有効なターゲットランクである．効果は きぐぉ の〱対〱通信のきぐぉたぐげくぃたぎさががの場合と同様である． 項番〲〵も参照のこと．
〲〵〮 〳〵〱ページの 第〱〱〮〳節
ランクきぐぉたぐげくぃたぎさががをもつどんな げきぁ 操作の後にも，それでもなお，そのアク
セスエポックを開始した同期メソッドでアクセスエポックを終わらせる必要があ
る． 項番〲〴も参照のこと．
〲〶〮 〳〵〷ページの 第〱〱〮〳〮〴節
きぐぉたぁぃぃさきさがぁごぅのきぐぉたげぅぐがぁぃぅは， 他 の 定 義 済 み 操 作 の よ う に， 定 義 済
みきぐぉデータ型のためだけに定義されている．
〲〷〮 〴〱〵ページの 第〱〳〮〲〮〸節 きぐぉたうぉがぅたこぅごたざぉぅしときぐぉたうぉがぅたこぅごたぉぎうくについて有効なヒントのサブセットを指定したどのてはオブジェクトをきぐぉたうぉがぅたこぅごたざぉぅしまたはきぐぉたうぉがぅたこぅごたぉぎうくに渡す場合，このどのてはで指定しない設定済みのヒントやデフォルトのヒントには影響しない．

〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴

〲〸〮 〴〱〵ページの 第〱〳〮〲〮〸節 きぐぉたうぉがぅたぇぅごたぉぎうくについててとで関連付けられたファイルのヒントが存在しない場合，新しく生成された，キー値のペアが格納されていないどのてはオブジェクトへのハンドルが返される．
〲〹〮 〴〱〹ページの 第〱〳〮〳節
ファイルがきぐぉたきくいぅたこぅけさぅぎごぉぁがモードを持っていなかった場合，
きぐぉたうぉがぅたこぅごたざぉぅしのつどびば同様，きぐぉたいぉこぐがぁぃぅきぅぎごたぃさげげぅぎごも無効である．
〳〰〮 〴〴〸ページの 第〱〳〮〵〮〲節〱〶バイトぜいはふぢぬづ ぅへぴづのつづつ〢形式のぢどちびについてぢどちび 〽 〫〱〰〳〸〳と定義されていた．
正しい値は〱〶〳〸〳である．
〳〱〮 〴〸〸ページの 第〱〶〮〱〮〴節
この節の例では，バッファはっはのびぴ ぶはどつ〪 ぢふてとして宣言されるべきである．
〳〲〮 〵〱〱ページの 第〱〶〮〲〮〵節 きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たへへへへについて

〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

実装者へのアドバイス アプリケーションは同じ〨へへへへ〬ば〬ひ〩の組み合わせできぐぉたごすぐぅたぃげぅぁごぅたう〹〰たへへへへの呼び出しを繰り返すことがよくある．アプリ
ケーションでは，返された定義済みの名前無しデータ型ハンドルを解放することはできない．非常に多数のハンドルが生成されるのを防止するため，きぐぉ
実装では同じ〨げぅぁが〯ぃくきぐがぅじ〯ぉぎごぅぇぅげ〬ば〬ひ〩の組み合わせに対して同じデー
タ型ハンドルを返す必要がある．その前のきぐぉたごすぐぅたぃげぅぁごぅたう〹〰たへへへへの呼び出しでの〨ば〬ひ〩の組み合わせをチェックし，ハッシュテーブルにより前に生成されたハンドルを検出すると，〨へへへへ〬ば〬ひ〩の同じ組み合わせで以前に生成されたデータ型を検索する際のオーバーヘッドが抑えられる． （実装者へのアドバイス終わり）

あ〮〲〮 〲〮〰から〲〮〱への変更点〳〳〮 〵〳〷ページの 第ぁ〮〱〮〱節
きぐぉたあくごごくきは，ぶはどつ 〪 っはのびぴ きぐぉ〺〺あくごごくきとして宣言された．

〶〲〵
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〶〲〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

付録 あ〮 変更履歴

〱
〲
〳
〴
〵

参考文献

〶
〷
〸
〹
〱〰

せ〱そ ざ〮 あちぬち ちのつ こ〮 かどばのどび〮 ぐひはっづびび でひはふばび〺 ち ねづっとちのどびね てはひ ぴとづ っははひつどのちぴどはの はて ちのつ っはね〭
ねふのどっちぴどはの ちねはので ばひはっづびびづび どの ぴとづ ざづのふび っはぬぬづっぴどぶづ っはねねふのどっちぴどはの ぬどぢひちひべ〮 ごづっとのどっちぬひづばはひぴ〬 ぉあき ご〮 お〮 しちぴびはの げづびづちひっと ぃづのぴづひ〬 くっぴはぢづひ 〱〹〹〲〮 ぐひづばひどのぴ〮 〱〮〲

〱〱
〱〲
〱〳

せ〲そ ざ〮 あちぬち〬 こ〮 かどばのどび〬 が〮 げふつはぬばと〬 ちのつ きちひっ このどひ〮 いづびどでのどので づ『っどづのぴ〬 びっちぬちぢぬづ〬 ちのつばはひぴちぢぬづ っはぬぬづっぴどぶづ っはねねふのどっちぴどはの ぬどぢひちひどづび〮 ごづっとのどっちぬ ひづばはひぴ〬 ぉあき ご〮 お〮 しちぴびはの げづ〭
びづちひっと ぃづのぴづひ〬 くっぴはぢづひ 〱〹〹〲〮 ぐひづばひどのぴ〮 〱〮〲〱〴せ〳そ ぐふひふびとはぴとちね ざ〮 あちのでちぬはひづ〬 ぎちぴとちの ぅ〮 いはびび〬 ちのつ ぁのぴとはのべ こになづぬぬふね〮 きぐぉ〫〫〺 ぉびびふづび
ちのつ うづちぴふひづび〮 ぉの OON-SKI ’94〬 ばちでづ どの ばひづびび〬 〱〹〹〴〮 〶〮〱

〱〷

〱〵
〱〶

〱〸
〱〹

せ〴そ ぁ〮 あづでふづぬどの〬 お〮 いはのでちひひち〬 ぁ〮 ぇづどびぴ〬 げ〮 きちのっとづに〬 ちのつ ざ〮 こふのつづひちね〮 ざどびふちぬどぺちぴどはの ちのつつづぢふででどので どの ち とづぴづひはでづのづはふび づのぶどひはのねづのぴ〮 IEEE Computer〬 〲〶〨〶〩〺〸〸ほ〹〵〬 おふのづ 〱〹〹〳〮〱〮〲
せ〵そ がふっ あはねちのび ちのつ げはぬて えづねばづぬ〮 ごとづ ぁひではののづ〯ぇきい ねちっひはび どの うくげごげぁぎ てはひ ばはひぴちぢぬづ
ばちひちぬぬづぬ ばひはでひちねねどので ちのつ ぴとづどひ どねばぬづねづのぴちぴどはの はの ぴとづ ぉのぴづぬ どぐこぃ〯〲〮 Parallel Computing〬 〱〵〺〱〱〹ほ〱〳〲〬 〱〹〹〰〮 〱〮〲

〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶

せ〶そ げちなづびと あはひつちぷづにちひ〬 おふちの きどでふづぬ つづぬ げはびちひどは〬 ちのつ ぁぬはに ぃとはふつとちひべ〮 いづびどでの ちのつ づぶちぬ〭
ふちぴどはの はて ばひどねどぴどぶづび てはひ ばちひちぬぬづぬ ぉ〯く〮 ぉの Proceedings of Supercomputing ’93〬 ばちでづび〴〵〲ほ〴〶〱〬 〱〹〹〳〮 〱〳〮〱

〲〷
〲〸
〲〹

せ〷そ げ〮 あふぴぬづひ ちのつ ぅ〮 がふびに〮 さびづひ〧び でふどつづ ぴは ぴとづ ば〴 ばひはでひちねねどので びべびぴづね〮 ごづっとのどっちぬ げづばはひぴ
ごき〭ぁぎがほ〹〲〯〱〷〬 ぁひではののづ ぎちぴどはのちぬ がちぢはひちぴはひべ〬 〱〹〹〲〮 〱〮〲せ〸そ げちぬばと あふぴぬづひ ちのつ ぅぷどので がふびに〮 きはのどぴはひび〬 ねづびびちでづび〬 ちのつ っぬふびぴづひび〺 ごとづ ば〴 ばちひちぬぬづぬ
ばひはでひちねねどので びべびぴづね〮 Parallel Computing〬 〲〰〨〴〩〺〵〴〷ほ〵〶〴〬 ぁばひどぬ 〱〹〹〴〮 ぁぬびは ぁひではののづ
ぎちぴどはのちぬ がちぢはひちぴはひべ きちぴとづねちぴどっび ちのつ ぃはねばふぴづひ こっどづのっづ いどぶどびどはの ばひづばひどのぴ ぐ〳〶〲〭〰〴〹〳〮
〱〮〲

〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶

せ〹そ げはぢどの ぃちぬにどの〬 げはぬて えづねばづぬ〬 えちのび〭ぃとひどびぴどちの えはばばづ〬 ちのつ ぐづぴづひ しべばどはひ〮 ぐはひぴちぢぬづ
ばひはでひちねねどので ぷどぴと ぴとづ ぐぁげきぁぃこ ねづびびちでづ〭ばちびびどので ぬどぢひちひべ〮 Parallel Computing〬〲〰〨〴〩〺〶〱〵ほ〶〳〲〬 ぁばひどぬ 〱〹〹〴〮 〱〮〲

〳〷
〳〸
〳〹

せ〱〰そ こ〮 ぃとどぴぴはひ ちのつ げ〮 お〮 ぅのぢはつべ〮 ぐづひてはひねちのっづ づぶちぬふちぴどはの はて ねづびと〭っはののづっぴづつ ぷはひねとはぬづ〭
ひはふぴづつ のづぴぷはひにび てはひ どのぴづひばひはっづびびはひ っはねねふのどっちぴどはの どの ねふぬぴどっはねばふぴづひび〮 ぉの Proceedingsof the 1990 Supercomputing Conference〬 ばちでづび 〶〴〷ほ〶〵〶〬 〱〹〹〰〮 〷〮〱〴〰

せ〱〱そ こ〮 ぃとどぴぴはひ ちのつ げ〮 お〮 ぅのぢはつべ〮 ぐひづつどっぴどので ぴとづ づ》づっぴ はて ねちばばどので はの ぴとづ っはねねふのどっち〭
ぴどはの ばづひてはひねちのっづ はて ぬちひでづ ねふぬぴどっはねばふぴづひび〮 ぉの Proceedings of the 1991 International
Conference on Parallel Processing, vol. II (Software)〬 ばちでづび ぉぉほ〱 ほ ぉぉほ〴〬 〱〹〹〱〮 〷〮〱

〴〳

〴〱
〴〲

〴〴
〴〵
〴〶

せ〱〲そ ぐちひちびはてぴ ぃはひばはひちぴどはの〮 ぅへばひづびび ぶづひびどはの 〱〮〰〺 ぁ っはねねふのどっちぴどはの づのぶどひはのねづのぴ てはひ ばちひちぬぬづぬ
っはねばふぴづひび〬 〱〹〸〸〮 〱〮〲〬 〷〮〴
〶〲〷

〴〷
〴〸

〶〲〸
〱
〲
〳
〴
〵
〶
〷

参考文献

せ〱〳そ おふちの きどでふづぬ つづぬ げはびちひどは〬 げちなづびと あはひつちぷづにちひ〬 ちのつ ぁぬはに ぃとはふつとちひべ〮 ぉねばひはぶづつ ばちひちぬぬづぬぉ〯く ぶどち ち ぴぷは〭ばとちびづ ひふの〭ぴどねづ ちっっづびび びぴひちぴづでべ〮 ぉの IPPS ’93 Workshop on Input/Output
in Parallel Computer Systems〬 ばちでづび 〵〶ほ〷〰〬 〱〹〹〳〮 ぁぬびは ばふぢぬどびとづつ どの ぃはねばふぴづひ ぁひっとど〭
ぴづっぴふひづ ぎづぷび 〲〱〨〵〩〬 いづっづねぢづひ 〱〹〹〳〬 ばちでづび 〳〱ほ〳〸〮 〱〳〮〱
せ〱〴そ お〮 いはのでちひひち〬 ぁ〮 ぇづどびぴ〬 げ〮 きちのっとづに〬 ちのつ ざ〮 こふのつづひちね〮 ぉのぴづでひちぴづつ ぐざき てひちねづぷはひに
びふばばはひぴび とづぴづひはでづのづはふび のづぴぷはひに っはねばふぴどので〮 Computers in Physics〬 〷〨〲〩〺〱〶〶ほ〷〵〬 ぁばひどぬ〱〹〹〳〮 〱〮〲

〸
〹
〱〰
〱〱
〱〲
〱〳

せ〱〵そ お〮 お〮 いはのでちひひち〬 げ〮 えづねばづぬ〬 ぁ〮 お〮 ぇ〮 えづべ〬 ちのつ い〮 し〮 しちぬにづひ〮 ぁ ばひはばはびちぬ てはひ ち ふびづひ〭
ぬづぶづぬ〬 ねづびびちでづ ばちびびどので どのぴづひてちっづ どの ち つどびぴひどぢふぴづつ ねづねはひべ づのぶどひはのねづのぴ〮 ごづっとのどっちぬ げづばはひぴ
ごき〭〱〲〲〳〱〬 くちに げどつでづ ぎちぴどはのちぬ がちぢはひちぴはひべ〬 うづぢひふちひべ 〱〹〹〳〮 〱〮〲せ〱〶そ ぅつどのぢふひでと ぐちひちぬぬづぬ ぃはねばふぴどので ぃづのぴひづ〬 さのどぶづひびどぴべ はて ぅつどのぢふひでと〮 CHIMP Concepts〬
おふのづ 〱〹〹〱〮 〱〮〲

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱

せ〱〷そ ぅつどのぢふひでと ぐちひちぬぬづぬ ぃはねばふぴどので ぃづのぴひづ〬 さのどぶづひびどぴべ はて ぅつどのぢふひでと〮 CHIMP Version 1.0
Interface〬 きちべ 〱〹〹〲〮 〱〮〲せ〱〸そ きちひでちひづぴ ぁ〮 ぅぬぬどび ちのつ あなちひのづ こぴひはふびぴひふば〮 The Annotated C++ Reference Manual〮
ぁつつどびはの しづびぬづべ〬 〱〹〹〰〮せ〱〹そ い〮 うづどぴづぬびはの〮 ぃはねねふのどっちぴはひび〺 くぢなづっぴ〭ぢちびづつ ねふぬぴどばちひぴべ どのぴづひちっぴどはのび てはひ ばちひちぬぬづぬ ばひは〭でひちねねどので〮 ごづっとのどっちぬ げづばはひぴ 〹〱〭〱〲〬 いづばぴ〮 ぃはねばふぴづひ こっどづのっづ〬 ごとづ えづぢひづぷ さのどぶづひびどぴべ
はて おづひふびちぬづね〬 ぎはぶづねぢづひ 〱〹〹〱〮 〶〮〱〮〲

〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸

せ〲〰そ ぃ〫〫 うはひふね〮 しはひにどので ばちばづひ てはひ つひちてぴ ばひはばはびづつ どのぴづひのちぴどはのちぬ びぴちのつちひつ てはひ どのてはひねち〭
ぴどはの びべびぴづねび ぼ ばひはでひちねねどので ぬちのでふちでづ ぃ〮〫〫 ごづっとのどっちぬ ひづばはひぴ〬 ぁねづひどっちの ぎちぴどはのちぬこぴちのつちひつび ぉのびぴどぴふぴづ〬 〱〹〹〵〮
せ〲〱そ きづびびちでづ ぐちびびどので ぉのぴづひてちっづ うはひふね〮 きぐぉ〺 ぁ きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ びぴちのつちひつ〮 The International Journal of Supercomputer Applications and High Performance Computing〬〸〬 〱〹〹〴〮 〱〮〳

〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷

せ〲〲そ きづびびちでづ ぐちびびどので ぉのぴづひてちっづ うはひふね〮 きぐぉ〺 ぁ きづびびちでづ〭ぐちびびどので ぉのぴづひてちっづ びぴちのつちひつ 〨ぶづひびどはの〱〮〱〩〮 ごづっとのどっちぬ ひづばはひぴ〬 〱〹〹〵〮 とぴぴば〺〯〯ぷぷぷ〮ねばど〭てはひふね〮はひで〮 〱〮〳せ〲〳そ ぁぬ ぇづどびぴ〬 ぁつちね あづでふづぬどの〬 おちっに いはのでちひひち〬 しづどっとづので おどちので〬 あはぢ きちのっとづに〬 ちのつ ざちどつべ
こふのつづひちね〮 PVM: Parallel Virtual Machine—A User’s Guide and Tutorial for Network
Parallel Computing〮 きぉご ぐひづびび〬 〱〹〹〴〮 〱〰〮〱
せ〲〴そ ぇ〮 ぁ〮 ぇづどびぴ〬 き〮 ご〮 えづちぴと〬 あ〮 し〮 ぐづべぴはの〬 ちのつ ぐ〮 え〮 しはひぬづべ〮 ぐぉぃが〺 ぁ ばはひぴちぢぬづ どの〭
びぴひふねづのぴづつ っはねねふのどっちぴどはのび ぬどぢひちひべ〬 ぃ ひづてづひづのっづ ねちのふちぬ〮 ごづっとのどっちぬ げづばはひぴ ごき〭〱〱〱〳〰〬
くちに げどつでづ ぎちぴどはのちぬ がちぢはひちぴはひべ〬 くちに げどつでづ〬 ごぎ〬 おふぬべ 〱〹〹〰〮 〱〮〲

〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

せ〲〵そ しどぬぬどちね い〮 ぇひはばば ちのつ あちひひべ こねどぴと〮 ぃとちねづぬづはの ばちひちぬぬづぬ ばひはでひちねねどので ぴははぬび ふびづひび
ねちのふちぬ〮 ごづっとのどっちぬ げづばはひぴ ぁぎが〭〹〳〯〲〳〬 ぁひではののづ ぎちぴどはのちぬ がちぢはひちぴはひべ〬 きちひっと 〱〹〹〳〮 〱〮〲せ〲〶そ きどっとちづぬ えづののづっにづ〮
ぁ うはひぴひちの 〹〰 どのぴづひてちっづ ぴは きぐぉ ぶづひびどはの 〱〮〱〮
ごづっとのどっちぬ
げづばはひぴ ぉのぴづひのちぬ げづばはひぴ 〶〳〯〹〶〬 げづっとづのぺづのぴひふね〬 さのどぶづひびどぴみちぴ かちひぬびひふとづ〬 い〭〷〶〱〲〸 かちひぬびひふとづ〬 ぇづひねちのべ〬 おふのづ 〱〹〹〶〮
ぁぶちどぬちぢぬづ ぶどち ぷはひぬつ ぷどつづ ぷづぢ てひはねとぴぴば〺〯〯ぷぷぷ〮ふのど〭にちひぬびひふとづ〮つづ〯まきどっとちづぬ〮えづののづっにづ〯ぐふぢぬどっちぴどはのび〯〣きぐぉたう〹〰〮〱〶〮〲〮〴
せ〲〷そ ぉのびぴどぴふぴづ はて ぅぬづっぴひどっちぬ ちのつ ぅぬづっぴひはのどっび ぅのでどのづづひび〬 ぎづぷ すはひに〮 IEEE Standard for Binary
Floating-Point Arithmetic, ANSI/IEEE Standard 754-1985〬 〱〹〸〵〮 〱〳〮〵〮〲

参考文献

〶〲〹

せ〲〸そ ぉのぴづひのちぴどはのちぬ くひでちのどぺちぴどはの てはひ こぴちのつちひつどぺちぴどはの〬 ぇづのづぶち〮 Information processing —8-bit single-byte coded graphic character sets — Part 1: Latin alphabet No. 1〬 〱〹〸〷〮〱〳〮〵〮〲せ〲〹そ ぉのぴづひのちぴどはのちぬ くひでちのどぺちぴどはの てはひ こぴちのつちひつどぺちぴどはの〬 ぇづのづぶち〮 Information technology —Portable Operating System Interface (POSIX) — Part 1: System Application Program
Interface (API) [C Language]〬 いづっづねぢづひ 〱〹〹〶〮 〱〲〮〴〬 〱〳〮〲〮〱

〱
〲
〳
〴
〵
〶
〷

せ〳〰そ ぃとちひぬづび え〮 かはづぬぢづぬ〬 いちぶどつ あ〮 がはぶづねちの〬 げはぢづひぴ こ〮 こっとひづどぢづひ〬 ぇふべ が〮 こぴづづぬづ おひ〮〬 ちのつ
きちひべ ぅ〮 ずはびづぬ〮 The High Performance Fortran Handbook〮 きぉご ぐひづびび〬 〱〹〹〳〮 〴〮〱〮〴
せ〳〱そ いちぶどつ かはぴぺ〮 いどびに〭つどひづっぴづつ ぉ〯く てはひ きぉきい ねふぬぴどばひはっづびびはひび〮 ぉの Proceedings of the 1994
Symposium on Operating Systems Design and Implementation〬 ばちでづび 〶〱ほ〷〴〬 ぎはぶづねぢづひ〱〹〹〴〮 さばつちぴづつ ちび いちひぴねはふぴと ごげ ぐぃこ〭ごげ〹〴〭〲〲〶 はの ぎはぶづねぢづひ 〸〬 〱〹〹〴〮 〱〳〮〱

〸
〹
〱〰
〱〱
〱〲
〱〳

せ〳〲そ く〮 かひみ
ちねづひ ちのつ え〮 きみ
ふとぬづのぢづどの〮 きちばばどので びぴひちぴづでどづび どの ねづびびちでづ〭ぢちびづつ ねふぬぴどばひはっづびびはひ
びべびぴづねび〮 Parallel Computing〬 〹〺〲〱〳ほ〲〲〵〬 〱〹〸〹〮 〷〮〱〱〴〱〵せ〳〳そ こ〮 お〮 がづ』づぴ〬 げ〮 こ〮 うちぢひべ〬 し〮 ぎ〮 おはべ〬 ぐ〮 がちばびぬづべ〬 こ〮 きどぬぬづひ〬 ちのつ ぃ〮 ごはひづに〮 ぁの ちつぶちのっづつ〴〮〴あこい どのぴづひばひはっづびび っはねねふのどっちぴどはの ぴふぴはひどちぬ〬 さのどへ ばひはでひちねねづひ〧び びふばばぬづねづのぴちひべ つはっふ〭
ねづのぴび 〨ぐこい〩 〲〱〮 ごづっとのどっちぬ ひづばはひぴ〬 ぃはねばふぴづひ こべびぴづねび げづびづちひっと ぇひはふば〬 いづばづひぴねづのぴ はてぅぬづっぴひどっちぬ ぅのでどのづづひどので ちのつ ぃはねばふぴづひ こっどづのっづ〬 さのどぶづひびどぴべ はて ぃちぬどてはひのどち〬 あづひにづぬづべ〬 〱〹〹〳〮
ぁぬびは ちぶちどぬちぢぬづ ちぴ とぴぴば〺〯〯ぷぷぷ〮のづぴぢびつ〮はひで〯いはっふねづのぴちぴどはの〯ぬどぴづ〲〯ばびつ〯〮 〱〰〮〵〮〵〱〶

せ〳〴そ のぃさあぅ ぃはひばはひちぴどはの〮 nCUBE 2 Programmers Guide, r2.0〬 いづっづねぢづひ 〱〹〹〰〮 〱〮〲

〲〱

〱〷
〱〸
〱〹
〲〰

〲〲

せ〳〵そ あどぬぬ ぎどぴぺぢづひで〮 ぐづひてはひねちのっづ はて ぴとづ どぐこぃ〯〸〶〰 ぃはのっふひひづのぴ うどぬづ こべびぴづね〮 ごづっとのどっちぬ げづばはひぴ
げぎい〭〹〲〭〰〲〰〬 ぎぁこ こべびぴづねび いどぶどびどはの〬 ぎぁこぁ ぁねづび〬 いづっづねぢづひ 〱〹〹〲〮 〱〳〮〱
せ〳〶そ しどぬぬどちね お〮 ぎどぴぺぢづひで〮 Collective Parallel I/O〮 ぐとい ぴとづびどび〬 いづばちひぴねづのぴ はて ぃはねばふぴづひ
ちのつ ぉのてはひねちぴどはの こっどづのっづ〬 さのどぶづひびどぴべ はて くひづではの〬 いづっづねぢづひ 〱〹〹〵〮 〱〳〮〱

〲〳
〲〴
〲〵
〲〶
〲〷

せ〳〷そ 4.4BSD Programmer’s Supplementary Documents (PSD)〮 く〧げづどぬぬべ ちのつ ぁびびはっどちぴづび〬〱〹〹〴〮 〱〰〮〵〮〵
せ〳〸そ ぐちふぬ ぐどづひっづ〮 ごとづ ぎじ〯〲 はばづひちぴどので びべびぴづね〮 ぉの Proceedings of the Third Conference onHypercube Concurrent Computers and Applications〬 ばちでづび 〳〸〴ほ〳〹〰〮 ぁぃき ぐひづびび〬 〱〹〸〸〮
〱〮〲

〲〸
〲〹
〳〰
〳〱
〳〲
〳〳

せ〳〹そ か〮 ぅ〮 こづちねはのび〬 す〮 ぃとづの〬 ぐ〮 おはのづび〬 お〮 おはぺぷどちに〬 ちのつ き〮 しどのびぬづぴぴ〮 こづひぶづひ〭つどひづっぴづつ
っはぬぬづっぴどぶづ ぉ〯く どの ぐちのつち〮 ぉの Proceedings of Supercomputing ’95〬 いづっづねぢづひ 〱〹〹〵〮 〱〳〮〱〳〴〳〵

せ〴〰そ ぁ〮 こになづぬぬふね ちのつ ぁ〮 がづふので〮 ずどばっはつづ〺 ち ばはひぴちぢぬづ ねふぬぴどっはねばふぴづひ っはねねふのどっちぴどはの ぬどぢひちひべ
ちぴはば ぴとづ ひづちっぴどぶづ にづひのづぬ〮 ぉの い〮 し〮 しちぬにづひ ちのつ け〮 う〮 こぴはふぴ〬 づつどぴはひび〬 Proceedings of theFifth Distributed Memory Concurrent Computing Conference〬 ばちでづび 〷〶〷ほ〷〷〶〮 ぉぅぅぅぐひづびび〬 〱〹〹〰〮 〱〮〲〬 〶〮〱〮〲〳〶

せ〴〱そ ぁ〮 こになづぬぬふね〬 こ〮 こねどぴと〬 ぃ〮 こぴどぬぬ〬 ぁ〮 がづふので〬 ちのつ き〮 きはひちひど〮 ごとづ ずどばっはつづ ねづびびちでづ ばちびびどのでびべびぴづね〮 ごづっとのどっちぬ ひづばはひぴ〬 がちぷひづのっづ がどぶづひねはひづ ぎちぴどはのちぬ がちぢはひちぴはひべ〬 こづばぴづねぢづひ 〱〹〹〲〮
〱〮〲

〴〰

〳〷
〳〸
〳〹

〴〱
〴〲
〴〳

せ〴〲そ ぁのぴとはのべ こになづぬぬふね〬 ぎちぴとちの ぅ〮 いはびび〬 ちのつ ぐふひふびとはぴとちね ざ〮 あちのでちぬはひづ〮 しひどぴどので がどぢひちひどづび
どの きぐぉ〮 ぉの ぁのぴとはのべ こになづぬぬふね ちのつ いはののち こ〮 げづづびづ〬 づつどぴはひび〬 Proceedings of the Scalable
Parallel Libraries Conference〬 ばちでづび 〱〶〶ほ〱〷〳〮 ぉぅぅぅ ぃはねばふぴづひ こはっどづぴべ ぐひづびび〬 くっぴはぢづひ〱〹〹〳〮 〶〮〱

〴〴
〴〵
〴〶
〴〷
〴〸

〶〳〰
〱
〲
〳
〴
〵
〶
〷
〸

参考文献

せ〴〳そ ぁのぴとはのべ こになづぬぬふね〬 ぎちぴとちの ぅ〮 いはびび〬 ちのつ かどびとはひづ ざどびぷちのちぴとちの〮 ぉのぴづひ〭っはねねふのどっちぴはひ
づへぴづのびどはのび ぴは きぐぉ どの ぴとづ きぐぉじ 〨きぐぉ づじぴづのびどはの〩 がどぢひちひべ〮 ごづっとのどっちぬ げづばはひぴ きこさ〭〹〴〰〷〲〲〬 きどびびどびびどばばど こぴちぴづ さのどぶづひびどぴべ ぼ いづばぴ〮 はて ぃはねばふぴづひ こっどづのっづ〬 ぁばひどぬ 〱〹〹〴〮とぴぴば〺〯〯ぷぷぷ〮づひっ〮ねびびぴちぴづ〮づつふ〯ねばど〯ねばどへ〮とぴねぬ〮 〵〮〲〮〲
せ〴〴そ ぁのぴとはのべ こになづぬぬふね〬 ずどべちので がふ〬 ぐふひふびとはぴとちね ざ〮 あちのでちぬはひづ〬 ちのつ ぎちぴとちの ぅ〮 いはびび〮 ぅへ〭
ばぬどっどぴ ばちひちぬぬづぬ ばひはでひちねねどので どの ぃ〫〫 ぢちびづつ はの ぴとづ ねづびびちでづ〭ばちびびどので どのぴづひてちっづ 〨きぐぉ〩〮 ぉの
ぇひづではひべ ざ〮 しどぬびはの〬 づつどぴはひ〬 Parallel Programming Using C++〬 ぅのでどのづづひどので ぃはねばふぴち〭
ぴどはの こづひどづび〮 きぉご ぐひづびび〬 おふぬべ 〱〹〹〶〮 ぉこあぎ 〰〭〲〶〲〭〷〳〱〱〸〭〵〮

〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶

せ〴〵そ ぁのぴとはのべ こになづぬぬふね〬 こぴづぶづの ぇ〮 こねどぴと〬 ぎちぴとちの ぅ〮 いはびび〬 ぁぬぶどの ぐ〮 がづふので〬 ちのつ きちのてひづつ
きはひちひど〮 ごとづ いづびどでの ちのつ ぅぶはぬふぴどはの はて ずどばっはつづ〮 Parallel Computing〬 〲〰〨〴〩〺〵〶〵ほ〵〹〶〬ぁばひどぬ 〱〹〹〴〮 〶〮〱〮〲〬 〶〮〵〮〶
せ〴〶そ げちなづづぶ ごとちにふひ ちのつ ぁぬはに ぃとはふつとちひべ〮 ぁの ぅへぴづのつづつ ごぷは〭ぐとちびづ きづぴとはつ てはひ ぁっっづびびどのでこづっぴどはのび はて くふぴ〭はて〭ぃはひづ ぁひひちべび〮 Scientific Programming〬 〵〨〴〩〺〳〰〱ほ〳〱〷〬 しどのぴづひ 〱〹〹〶〮〱〳〮〱
せ〴〷そ The Unicode Standard, Version 2.0〮 ぁつつどびはの〭しづびぬづべ〬 〱〹〹〶〮 ぉこあぎ 〰〭〲〰〱〭〴〸〳〴〵〭〹〮 〱〳〮〵〮〲

〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

せ〴〸そ い〮 しちぬにづひ〮 こぴちのつちひつび てはひ ねづびびちでづ ばちびびどので どの ち つどびぴひどぢふぴづつ ねづねはひべ づのぶどひはのねづのぴ〮 ごづっと〭のどっちぬ げづばはひぴ ごき〭〱〲〱〴〷〬 くちに げどつでづ ぎちぴどはのちぬ がちぢはひちぴはひべ〬 ぁふでふびぴ 〱〹〹〲〮 〱〮〲例の索引
全ての例の索引である．内容，あるいは，使われているきぐぉ関数により列挙されている．
きぐぉ関数のうち，名前が全て大文字のものはうはひぴひちの言語の例であり，そうでないもの
はぃ言語／ぃ〫〫言語の例である．
ぃ言 語 とぃ〫〫言 語 の 間 の ハ ン ド ル の変換〬 〵〲〳〬 〵〲〴ぃ言語とうはひぴひちの言語のハンドルの変換〬〵〲〲

ぁぴぴひどぢふぴづび ぢづぴぷづづの ぬちのでふちでづび〬 〵〳〰
ぃ〫〫 つづっぬちひちぴどはのび どの ねばど〮と〬 〴〹〹ぃ〫〫 つづひどぶどので てひはね ぃ〫〫 きぐぉ っぬちびび〬 〴〸〹ぃ〫〫 とちのつぬづ ちびびどでのづねづのぴ ちのつ っはねばちひどびはの
はばづひちぴはひび〬 〴〹〵ぃ〫〫 とちのつぬづ ちびびどでのねづのぴ はばづひちぴはひ〬 〴〹〱ぃ〫〫 とちのつぬづ びっはばづ つづびぴひふっぴどはの〬 〴〹〰
ぃ〫〫 どぬぬづでちぬ っはねねふのどっちぴはひ とちのつぬづ どのどぴどちぬ〭
どぺちぴどはの〬 〴〹〵ぃ〫〫 きぐぉ っぬちびび っはねばちひどびはの はばづひちぴはひ〬 〴〹〰
ぃ〫〫 ばひは「ぬどので づへちねばぬづ〬 〵〰〰〬 〵〰〱ぃ〫〫言語におけるきぐぉクラス比較演算子〬 〴〹〰
ぃ〫〫言語におけるハンドルデストラク
ションの有効範囲〬 〴〹〰
ぃ〫〫言語のハンドルの代入と比較演算子〬 〴〹〵
ぃ〫〫言語のプロファイリングの例〬 〵〰〰〬〵〰〱
ぃ〫〫言語の宣言〬 〴〹〹
ぃ〫〫言語の間違ったコミュニケータハ
ンドルの初期化〬 〴〹〵
ぃ〫〫言語派生きぐぉクラスの例〬 〴〸〹ぃ〯ぃ〫〫 とちのつぬづ っはのぶづひびどはの〬 〵〲〳〬 〵〲〴ぃ〯うはひぴひちの とちのつぬづ っはのぶづひびどはの〬 〵〲〲ぃぬどづのぴ〭びづひぶづひ っはつづ〬 〷〲ぷどぴと ぢぬはっにどので ばひはぢづ〬 〷〵ぷどぴと ぢぬはっにどので ばひはぢづ〬 ぷひはので〬 〷〶いちぴちぴべばづ〳い ちひひちべ〬 〱〲〴ちぢびはぬふぴづ ちつつひづびびづび〬 〱〲〸
ちひひちべ はて びぴひふっぴふひづび〬 〱〲〶づぬちぢはひちぴづ づへちねばぬづ〬 〱〳〵〬 〱〳〶ねちぴっとどので ぴべばづ〬 〱〱〳ねちぴひどへ ぴひちのびばはびづ〬 〱〲〵ふのどはの〬 〱〲〹
いちぴちぴべばづび
ねちぴっとどので〬 〴〳のはぴ ねちぴっとどので〬 〴〳ふのぴべばづつ〬 〴〳いづちつぬはっにどて のはぴ ぢふ》づひづつ〬 〵〳ぷどぴと きぐぉたあっちびぴ〬 〱〹〳
ぷひはので ねづびびちでづ づへっとちのでづ〬 〵〲うはひぴひちの 〹〰 っはばべどので ちのつ びづぱふづのっづ ばひはぢぬづね〬〵〰〳ほ〵〰〵
うはひぴひちの 〹〰 つづひどぶづつ ぴべばづび〬 〵〰〶うはひぴひちの 〹〰 とづぴづひはでづのづはふび っはねねふのどっちぴどはの〬〵〱〸〬 〵〱〹
うはひぴひちの 〹〰 どぬぬづでちぬ かぉぎい〬 〵〱〴うはひぴひちの 〹〰 きぐぉたごすぐぅたきぁごぃえたこぉずぅ どね〭
ばぬづねづのぴちぴどはの〬 〵〱〸
〶〳〱

〶〳〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳

うはひぴひちの 〹〰 ひづでどびぴづひ はばぴどねどぺちぴどはの〬 〵〰〸
うはひぴひちの 〹〰 不正なかぉぎい〬 〵〱〴うはひぴひちの 〹〰のきぐぉたごすぐぅたきぁごぃえたこぉずぅの実装〬 〵〱〸
うはひぴひちの 〹〰のレジスタ最適化〬 〵〰〸
うはひぴひちの 〹〰の派生型〬 〵〰〶うはひぴひちの 〹〰コピーとシーケンス問題〬 〵〰〳うはひぴひちの 〹〰データのコピーおよびシーケ
ンスの問題〬 〵〰〴〬 〵〰〵うはひぴひちの 〹〰異機種環境での通信（安全ではない）〬 〵〱〸〬 〵〱〹

〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

ぉのぴづひっはねねふのどっちぴはひ〬 〲〱〴〬 〲〱〸ぉのぴづひぬちのでふちでづ っはねねふのどっちぴどはの〬 〵〳〴ぉのぴづひぴぷどのづつ ねちぴっとどので ばちどひび〬 〵〱きづびびちでづ づへっとちのでづ〬 〵〲きぐぉ〺〺ぃはねね〺〺ぐひはぢづ〬 〴〱きぐぉたぁぃぃさきさがぁごぅ〬 〳〵〹
きぐぉたぁいいげぅここ〬 〱〰〶きぐぉたぁつつひづびび〬 〱〲〶〬 〱〲〸〬 〱〲〹〬 〱〳〵きぐぉたぁどのぴ〬 〱〲〶きぐぉたぁぬぬでちぴとづひ〬 〱〶〶きぐぉたぁががくぃたきぅき〬 〲〸〶
きぐぉたぁぬぬはったねづね〬 〲〸〶
きぐぉたぁががげぅいさぃぅ〬 〱〸〶
きぐぉたあちひひどづひ〬 〳〰〲〬 〳〰〳〬 〳〷〶〬 〳〸〱ほ〳〸〳
きぐぉたあっちびぴ〬 〱〴〹〬 〱〹〳〬 〱〹〴
きぐぉたあっちびぴの非決定性プログラム〬 〱〹〴
きぐぉたあこぅぎい〬 〵〰〬 〵〱きぐぉたあふ》づひたちぴぴちっと〬 〵〴〬 〳〰〳きぐぉたあふ》づひたつづぴちっと〬 〵〴きぐぉたあすごぅ〬 〴〳きぐぉたぃちのっづぬ〬 〳〰〳きぐぉたぃぁげごたぃくくげいこ〬 〲〷〶きぐぉたぃぁげごたぇぅご〬 〲〷〹
きぐぉたぃぁげごたげぁぎか〬 〲〷〶〬 〲〷〹
きぐぉたぃぁげごたこえぉうご〬 〲〷〶きぐぉたぃぁげごたこさあ〬 〲〷〷きぐぉたぃえぁげぁぃごぅげ〬 〴〴きぐぉたぃはねねたっひづちぴづ〬 〲〱〴例の索引
きぐぉたぃはねねたでひはふば〬 〲〱〴きぐぉたぃはねねたひづねはぴづたびどぺづ〬 〲〱〸
きぐぉたぃくききたこぐぁしぎ〬 〳〲〳きぐぉたぃはねねたびばちぷの〬 〳〲〳きぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅ〬 〳〲〸
きぐぉたぃはねねたびばちぷのたねふぬぴどばぬづ〬 〳〲〸
きぐぉたぃはねねたびばぬどぴ〬 〲〱〸
きぐぉたいぉきこたぃげぅぁごぅ〬 〲〵〹〬 〲〷〹
きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅ〬 〲〶〷きぐぉたいどびぴたでひちばとたっひづちぴづ〬 〲〶〸
きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎご〬〲〶〷
きぐぉたうぉがぅたぃがくこぅ〬 〴〲〹〬 〴〳〱きぐぉたうぉがぅたぇぅごたぁきくいぅ〬 〴〱〴きぐぉたうぉがぅたぉげぅぁい〬 〴〳〱きぐぉたうぉがぅたくぐぅぎ〬 〴〲〹〬 〴〳〱きぐぉたうぉがぅたげぅぁい〬 〴〲〹
きぐぉたうぉがぅたこぅごたぁごくきぉぃぉごす〬 〴〶〱きぐぉたうぉがぅたこぅごたざぉぅし〬 〴〲〹〬 〴〳〱きぐぉたうぉがぅたこすぎぃ〬 〴〶〲きぐぉたうどのちぬどぺづ〬 〳〰〲ほ〳〰〴きぐぉたうげぅぅたきぅき〬 〲〸〶
きぐぉたぇちぴとづひ〬 〱〳〶〬 〱〵〲〬 〱〵〳〬 〱〵〷きぐぉたぇちぴとづひぶ〬 〱〳〶〬 〱〵〴ほ〱〵〷きぐぉたぇぅご〬 〳〵〵〬 〳〵〷きぐぉたぇづぴ〬 〳〷〵〬 〳〷〶〬 〳〸〱〬 〳〸〲
きぐぉたぇぅごたぁいいげぅここ〬 〱〰〶〬 〵〲〶きぐぉたぇづぴたちつつひづびび〬 〱〲〶〬 〱〲〸〬 〱〲〹〬 〱〳〵きぐぉたぇぅごたぃくさぎご〬 〱〱〴きぐぉたぇぅごたぅがぅきぅぎごこ〬 〱〱〴きぐぉたぇげぁぐえたぃげぅぁごぅ〬 〲〶〰〬 〲〷〲〬 〲〷〳きぐぉたぇげぁぐえたぎぅぉぇえあくげこ〬 〲〷〲きぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご〬 〲〷〲きぐぉたぇひづぱふづびぴたっはねばぬづぴづ〬 〳〹〴
きぐぉたぇひづぱふづびぴたびぴちひぴ〬 〳〹〴
きぐぉたぇひはふばたてひづづ〬 〲〱〴きぐぉたぇひはふばたどのっぬ〬 〲〱〴きぐぉたぉばひはぢづ〬 〳〰〳きぐぉたぉげぅぃざ〬 〶〴ほ〶〶〬 〷〲きぐぉたぉこぅぎい〬 〶〴〬 〶〵〬 〷〲例の索引
きぐぉたくばたっひづちぴづ〬 〱〸〴〬 〱〹〱
きぐぉたぐちっに〬 〱〳〵〬 〱〳〶きぐぉたぐちっにたびどぺづ〬 〱〳〶きぐぉたぐげくあぅ〬 〷〵〬 〷〶きぐぉたぐふぴ〬 〳〶〶〬 〳〷〲〬 〳〷〴〬 〳〷〵〬 〳〸〱〬 〳〸〳
きぐぉたげぅぃざ〬 〴〳〬 〴〴〬 〵〰ほ〵〳〬 〶〶〬 〷〵〬 〷〶〬 〱〱〳きぐぉたげぅいさぃぅ〬 〱〷〶〬 〱〷〹
きぐぉたげづつふっづ〬 〱〷〹〬 〱〸〰〬 〱〸〴
きぐぉたげぅけさぅこごたうげぅぅ〬 〶〵きぐぉたげづぱふづびぴたてひづづ〬 〳〰〲〬 〳〰〳きぐぉたこっちの〬 〱〹〱
きぐぉたこっちぴぴづひ〬 〱〶〱きぐぉたこっちぴぴづひぶ〬 〱〶〱〬 〱〶〲きぐぉたこぅぎい〬 〴〳〬 〴〴〬 〵〲〬 〵〳〬 〶〶〬 〷〵〬 〷〶〬 〱〱〳きぐぉたこづのつ〬 〱〲〶〬 〱〲〸〬 〱〲〹〬 〱〳〵きぐぉたこぅぎいげぅぃざ〬 〱〲〴〬 〱〲〵きぐぉたこぅぎいげぅぃざたげぅぐがぁぃぅ〬 〲〷〶きぐぉたここぅぎい〬 〵〱〬 〶〶きぐぉたごづびぴたっちのっづぬぬづつ〬 〳〰〳きぐぉたごすぐぅたぃくききぉご〬 〱〱〱〬 〱〲〴〬 〱〲〵〬 〳〵〵きぐぉたごべばづたっはねねどぴ〬 〱〲〶〬 〱〲〸〬 〱〲〹〬 〱〳〵〬〱〵〳ほ〱〵〷〬 〱〶〲〬 〱〹〱
きぐぉたごすぐぅたぃくぎごぉぇさくさこ〬 〹〰〬 〱〰〷〬 〱〱〳〬〱〱〴
きぐぉたごべばづたっはのぴどでふはふび〬 〱〵〳きぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁす〬 〱〰〴きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげ〬 〱〲〴〬〱〲〵
きぐぉたごべばづたっひづちぴづたとぶづっぴはひ〬 〱〲〶〬 〱〲〸
きぐぉたごすぐぅたぃげぅぁごぅたぉぎいぅじぅいたあがくぃか〬〳〵〵
きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〬 〹〷〬 〱〰〷〬〱〲〵
きぐぉたごべばづたっひづちぴづたびぴひふっぴ〬 〱〲〶〬 〱〲〸〬 〱〲〹〬〱〳〵〬 〱〵〵〬 〱〵〷〬 〱〹〱
きぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁす〬 〴〶〹
きぐぉたごすぐぅたぅじごぅぎご〬 〱〲〴〬 〱〲〵〬 〳〵〵〬 〳〵〷〬〳〵〹
きぐぉたごべばづたづへぴづのぴ〬 〱〲〶きぐぉたごすぐぅたうげぅぅ〬 〳〵〵〶〳〳きぐぉたごべばづたでづぴたっはのぴづのぴび〬 〱〳〰
きぐぉたごべばづたでづぴたづのぶづぬはばづ〬 〱〳〰
きぐぉたごすぐぅたえざぅぃごくげ〬 〱〲〴〬 〱〲〵きぐぉたごべばづたとぶづっぴはひ〬 〱〲〶〬 〱〲〸
きぐぉたごすぐぅたぉぎいぅじぅい〬 〹〳〬 〱〲〴きぐぉたごべばづたどのつづへづつ〬 〱〲〶〬 〱〲〸
きぐぉたごすぐぅたこごげさぃご〬 〹〷〬 〱〰〷〬 〱〲〵きぐぉたごべばづたびぴひふっぴ〬 〱〲〶〬 〱〲〸〬 〱〲〹〬 〱〳〵〬 〱〵〵〬〱〵〷〬 〱〹〱
きぐぉたごすぐぅたざぅぃごくげ〬 〹〱〬 〱〲〴〬 〱〲〵きぐぉたごべばづたぶづっぴはひ〬 〱〵〴ほ〱〵〶〬 〱〶〲きぐぉたさのばちっに〬 〱〳〵〬 〱〳〶きぐぉたしぁぉご〬 〶〴ほ〶〶〬 〷〲〬 〴〳〱きぐぉたしぁぉごぁぎす〬 〷〲きぐぉたしぁぉごこくきぅ〬 〷〲きぐぉたしどのたっはねばぬづぴづ〬 〳〶〶〬 〳〷〵〬 〳〷〶〬 〳〸〲〬〳〸〳
きぐぉたしぉぎたぃげぅぁごぅ〬 〳〵〵〬 〳〵〷〬 〳〵〹
きぐぉたしぉぎたうぅぎぃぅ〬 〳〵〵〬 〳〵〷〬 〳〵〹
きぐぉたしどのたてづのっづ〬 〳〷〴〬 〳〷〵きぐぉたしどのたぬはっに〬 〳〷〲〬 〳〸〱ほ〳〸〳
きぐぉたしどのたばはびぴ〬 〳〷〵〬 〳〷〶〬 〳〸〲〬 〳〸〳
きぐぉたしどのたびぴちひぴ〬 〳〶〶〬 〳〷〵〬 〳〷〶〬 〳〸〲〬 〳〸〳
きぐぉたしどのたふのぬはっに〬 〳〷〲〬 〳〸〱ほ〳〸〳
きぐぉたしどのたぷちどぴ〬 〳〷〵〬 〳〷〶〬 〳〸〲〬 〳〸〳
ねばどづへづっ〬 〳〰〹

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲

ぎはの〭つづぴづひねどのどびぴどっ ばひはでひちね ぷどぴと きぐぉたあっちびぴ〬〱〹〴
ぎはの〭はぶづひぴちにどので ねづびびちでづび〬 〵〰
ぎはのぢぬはっにどので はばづひちぴどはのび〬 〶〴〬 〶〵ねづびびちでづ はひつづひどので〬 〶〵
ばひはでひづびび〬 〶〶

〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰

ぐひは「ぬどので どのぴづひてちっづ〬 〴〷〴〴〱〴〲ごとひづちつび ちのつ きぐぉ〬 〳〹〸
ごべばづねちば〬 〸〹ほ〹〱〬 〹〳〬 〹〷〬 〱〰〴

〴〳
〴〴
〴〵

クライアント／サーバのコード〬 〷〲ブロッキングプローブ〬 〷〵ブロッキングプローブ，誤り〬 〷〶

〴〶
〴〷
〴〸

〶〳〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

グループ間コミュニケータ〬 〲〱〴〬 〲〱〸スレッドときぐぉ〬 〳〹〸
デッドロックきぐぉたあっちびぴに お け る デ ッ ド ロ ッ ク〬〱〹〳バッファリングされない場合〬 〵〳誤ったメッセージ交換〬 〵〲データ型〳次元配列〬 〱〲〴マッチング〬 〴〳マッチングしない〬 〴〳共用体〬 〱〲〹
型のマッチング〬 〱〱〳型指定されない〬 〴〳構造体の配列〬 〱〲〶絶対アドレス〬 〱〲〸行列の転置〬 〱〲〵詳細な例〬 〱〳〵〬 〱〳〶ノンブロッキング操作〬 〶〴〬 〶〵プログレス〬 〶〶メッセージの順序〬 〶〵ハンドル代入演算子の使用例〬 〴〹〱
プロファイリングインターフェイス〬 〴〷〴メッセージの交換〬 〵〲交差してマッチングするペア〬 〵〱型マップ〬 〸〹ほ〹〱〬 〹〳〬 〹〷〬 〱〰〴
言語間の属性〬 〵〳〰
言語間の通信〬 〵〳〴追越し禁止メッセージ〬 〵〰

例の索引

MPI定数と定義済みハンドルの索引
予め定義されたきぐぉ定数とハンドルの索引
きぐぉ〺〺〪たぎさがが〬 〴〹〰
きぐぉ〺〺ぁぎすたこくさげぃぅ〬 〵〴〰
きぐぉ〺〺ぁぎすたごぁぇ〬 〵〴〰
きぐぉ〺〺ぁぐぐぎさき〬 〵〴〹
きぐぉ〺〺ぁげぇざたぎさがが〬 〵〵〱きぐぉ〺〺ぁげぇざこたぎさがが〬 〵〵〱きぐぉ〺〺あぁぎい〬 〵〴〶きぐぉ〺〺あくくが〬 〴〹〴
きぐぉ〺〺あくげ〬 〵〴〶きぐぉ〺〺あくごごくき〬 〵〳〹
きぐぉ〺〺あこぅぎいたくざぅげえぅぁい〬 〵〴〰
きぐぉ〺〺あじくげ〬 〵〴〶きぐぉ〺〺あすごぅ〬 〴〹〲ほ〴〹〴〬 〵〴〲〬 〵〴〳きぐぉ〺〺ぃぁげご〬 〵〴〷きぐぉ〺〺ぃえぁげ〬 〴〹〲〬 〵〴〲きぐぉ〺〺ぃえぁげぁぃごぅげ〬 〴〹〳〬 〵〴〳きぐぉ〺〺ぃくきあぉぎぅげたぃくぎごぉぇさくさこ〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたいぁげげぁす〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたいさぐ〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたう〹〰たぃくきぐがぅじ〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたう〹〰たぉぎごぅぇぅげ〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたう〹〰たげぅぁが〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたえぉぎいぅじぅい〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたえぉぎいぅじぅいたぉぎごぅぇぅげ〬〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたえざぅぃごくげ〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたえざぅぃごくげたぉぎごぅぇぅげ〬〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたぉぎいぅじぅい〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたぉぎいぅじぅいたあがくぃか〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたぎぁきぅい〬 〵〵〰
〶〳〵きぐぉ〺〺ぃくきあぉぎぅげたげぅこぉずぅい〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたこごげさぃご〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたこごげさぃごたぉぎごぅぇぅげ〬〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたこさあぁげげぁす〬 〵〵〰
きぐぉ〺〺ぃくきあぉぎぅげたざぅぃごくげ〬 〵〵〰
きぐぉ〺〺ぃくききたぎさがが〬 〴〹〱〬 〴〹〵〬 〵〴〷きぐぉ〺〺ぃくききたこぅがう〬 〵〴〵きぐぉ〺〺ぃくききたしくげがい〬 〵〴〵きぐぉ〺〺ぃくきぐがぅじ〬 〴〹〴
きぐぉ〺〺ぃくぎぇげさぅぎご〬 〵〴〵きぐぉ〺〺いぁごぁごすぐぅたぎさがが〬 〵〴〷きぐぉ〺〺いぉこぐがぁぃぅきぅぎごたぃさげげぅぎご〬 〵〵〰
きぐぉ〺〺いぉこごたぇげぁぐえ〬 〵〴〷きぐぉ〺〺いぉこごげぉあさごぅたあがくぃか〬 〵〵〱きぐぉ〺〺いぉこごげぉあさごぅたぃすぃがぉぃ〬 〵〵〱きぐぉ〺〺いぉこごげぉあさごぅたいうがごたいぁげぇ〬 〵〵〱きぐぉ〺〺いぉこごげぉあさごぅたぎくぎぅ〬 〵〵〱きぐぉ〺〺いくさあがぅ〬 〴〹〲〬 〴〹〴〬 〵〴〲きぐぉ〺〺いくさあがぅたぃくきぐがぅじ〬 〴〹〴
きぐぉ〺〺いくさあがぅたぉぎご〬 〴〹〳〬 〵〴〴きぐぉ〺〺いくさあがぅたぐげぅぃぉこぉくぎ〬 〴〹〳〬 〴〹〴〬 〵〴〳きぐぉ〺〺いさぐたうぎ〬 〵〴〹
きぐぉ〺〺ぅげげたぁぃぃぅここ〬 〵〳〸
きぐぉ〺〺ぅげげたぁきくいぅ〬 〵〳〸
きぐぉ〺〺ぅげげたぁげぇ〬 〵〳〸
きぐぉ〺〺ぅげげたぁここぅげご〬 〵〳〸
きぐぉ〺〺ぅげげたあぁいたうぉがぅ〬 〵〳〸
きぐぉ〺〺ぅげげたあぁこぅ〬 〵〳〸
きぐぉ〺〺ぅげげたあさううぅげ〬 〵〳〸
きぐぉ〺〺ぅげげたぃくきき〬 〵〳〸

〶〳〶
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉ〺〺ぅげげたぃくぎざぅげこぉくぎ〬 〵〳〸
きぐぉ〺〺ぅげげたぃくさぎご〬 〵〳〸
きぐぉ〺〺ぅげげたいぉきこ〬 〵〳〸
きぐぉ〺〺ぅげげたいぉこぐ〬 〵〳〸
きぐぉ〺〺ぅげげたいさぐたいぁごぁげぅぐ〬 〵〳〸
きぐぉ〺〺ぅげげたうぉがぅ〬 〵〳〸
きぐぉ〺〺ぅげげたうぉがぅたぅじぉこごこ〬 〵〳〸
きぐぉ〺〺ぅげげたうぉがぅたぉぎたさこぅ〬 〵〳〸
きぐぉ〺〺ぅげげたぇげくさぐ〬 〵〳〸
きぐぉ〺〺ぅげげたぉぎたこごぁごさこ〬 〵〳〸
きぐぉ〺〺ぅげげたぉぎうく〬 〵〳〸
きぐぉ〺〺ぅげげたぉぎうくたかぅす〬 〵〳〸
きぐぉ〺〺ぅげげたぉぎうくたぎくかぅす〬 〵〳〸
きぐぉ〺〺ぅげげたぉぎうくたざぁがさぅ〬 〵〳〸
きぐぉ〺〺ぅげげたぉぎごぅげぎ〬 〵〳〸
きぐぉ〺〺ぅげげたぉく〬 〵〳〹
きぐぉ〺〺ぅげげたかぅすざぁが〬 〵〳〹
きぐぉ〺〺ぅげげたがぁこごぃくいぅ〬 〵〳〹
きぐぉ〺〺ぅげげたがくぃかごすぐぅ〬 〵〳〹
きぐぉ〺〺ぅげげたぎぁきぅ〬 〵〳〹
きぐぉ〺〺ぅげげたぎくたきぅき〬 〵〳〹
きぐぉ〺〺ぅげげたぎくたこぐぁぃぅ〬 〵〳〹
きぐぉ〺〺ぅげげたぎくたこさぃえたうぉがぅ〬 〵〳〹
きぐぉ〺〺ぅげげたぎくごたこぁきぅ〬 〵〳〹
きぐぉ〺〺ぅげげたくぐ〬 〵〳〸
きぐぉ〺〺ぅげげたくごえぅげ〬 〵〳〸
きぐぉ〺〺ぅげげたぐぅぎいぉぎぇ〬 〵〳〸
きぐぉ〺〺ぅげげたぐくげご〬 〵〳〹
きぐぉ〺〺ぅげげたけさくごぁ〬 〵〳〹
きぐぉ〺〺ぅげげたげぁぎか〬 〵〳〸
きぐぉ〺〺ぅげげたげぅぁいたくぎがす〬 〵〳〹
きぐぉ〺〺ぅげげたげぅけさぅこご〬 〵〳〸
きぐぉ〺〺ぅげげたげきぁたぃくぎうがぉぃご〬 〵〳〹
きぐぉ〺〺ぅげげたげきぁたこすぎぃ〬 〵〳〹
きぐぉ〺〺ぅげげたげくくご〬 〵〳〸
きぐぉ〺〺ぅげげたこぅげざぉぃぅ〬 〵〳〹
きぐぉ〺〺ぅげげたこぉずぅ〬 〵〳〹
きぐぉ〺〺ぅげげたこぐぁしぎ〬 〵〳〹
きぐぉ〺〺ぅげげたごぁぇ〬 〵〳〸
きぐぉ〺〺ぅげげたごくぐくがくぇす〬 〵〳〸

きぐぉ定数と定義済みハンドルの索引
きぐぉ〺〺ぅげげたごげさぎぃぁごぅ〬 〵〳〸
きぐぉ〺〺ぅげげたごすぐぅ〬 〵〳〸
きぐぉ〺〺ぅげげたさぎかぎくしぎ〬 〵〳〸
きぐぉ〺〺ぅげげたさぎこさぐぐくげごぅいたいぁごぁげぅぐ〬〵〳〹きぐぉ〺〺ぅげげたさぎこさぐぐくげごぅいたくぐぅげぁごぉくぎ〬〵〳〹きぐぉ〺〺ぅげげたしぉぎ〬 〵〳〹
きぐぉ〺〺ぅげげえぁぎいがぅげたぎさがが〬 〵〴〷きぐぉ〺〺ぅげげくげこたぁげぅたうぁごぁが〬 〲〳〬 〵〴〰
きぐぉ〺〺ぅげげくげこたげぅごさげぎ〬 〲〳〬 〵〴〰
きぐぉ〺〺ぅげげくげこたごえげくしたぅじぃぅぐごぉくぎこ〬〲〳〬 〲〷〬 〲〸〸〬 〵〴〰
きぐぉ〺〺うたぃくきぐがぅじ〬 〴〹〳〬 〴〹〴〬 〵〴〳きぐぉ〺〺うたぃくきぐがぅじ〱〶〬 〴〹〳〬 〴〹〴〬 〵〴〴きぐぉ〺〺うたぃくきぐがぅじ〳〲〬 〴〹〳〬 〴〹〴〬 〵〴〴きぐぉ〺〺うたぃくきぐがぅじ〴〬 〴〹〳〬 〴〹〴〬 〵〴〴きぐぉ〺〺うたぃくきぐがぅじ〸〬 〴〹〳〬 〴〹〴〬 〵〴〴きぐぉ〺〺うたいくさあがぅたぃくきぐがぅじ〬 〴〹〳〬 〴〹〴〬〵〴〴
きぐぉ〺〺うたげぅぁが〱〶〬 〵〴〴きぐぉ〺〺うぉがぅたぎさがが〬 〵〴〷きぐぉ〺〺うがくぁご〬 〴〹〲〬 〴〹〴〬 〵〴〲きぐぉ〺〺うがくぁごたぉぎご〬 〴〹〳〬 〵〴〴きぐぉ〺〺ぇげぁぐえ〬 〵〴〷きぐぉ〺〺ぇげくさぐたぅきぐごす〬 〵〴〷きぐぉ〺〺ぇげくさぐたぎさがが〬 〵〴〷きぐぉ〺〺えくこご〬 〵〴〵きぐぉ〺〺ぉいぅぎご〬 〵〴〵きぐぉ〺〺ぉぎたぐがぁぃぅ〬 〵〳〹
きぐぉ〺〺ぉぎうくたぎさがが〬 〵〴〷きぐぉ〺〺ぉぎご〬 〴〹〲〬 〵〴〲きぐぉ〺〺ぉぎごぅぇぅげ〬 〴〹〳〬 〴〹〴〬 〵〴〳きぐぉ〺〺ぉぎごぅぇぅげ〱〬 〴〹〳〬 〴〹〴〬 〵〴〴きぐぉ〺〺ぉぎごぅぇぅげ〱〶〬 〴〹〳〬 〴〹〴〬 〵〴〴きぐぉ〺〺ぉぎごぅぇぅげ〲〬 〴〹〳〬 〴〹〴〬 〵〴〴きぐぉ〺〺ぉぎごぅぇぅげ〴〬 〴〹〳〬 〴〹〴〬 〵〴〴きぐぉ〺〺ぉぎごぅぇぅげ〸〬 〴〹〳〬 〴〹〴〬 〵〴〴きぐぉ〺〺ぉく〬 〵〴〵きぐぉ〺〺かぅすざぁがたぉぎざぁがぉい〬 〵〴〰

きぐぉ定数と定義済みハンドルの索引
きぐぉ〺〺がぁぎい〬 〵〴〶きぐぉ〺〺がぁこごさこぅいぃくいぅ〬 〵〴〹
きぐぉ〺〺があ〬 〵〴〵きぐぉ〺〺がくぃかたぅじぃがさこぉざぅ〬 〵〴〰
きぐぉ〺〺がくぃかたこえぁげぅい〬 〵〴〰
きぐぉ〺〺がくぇぉぃぁが〬 〴〹〳〬 〴〹〴〬 〵〴〳きぐぉ〺〺がくぎぇ〬 〴〹〲〬 〵〴〲きぐぉ〺〺がくぎぇたいくさあがぅ〬 〴〹〲〬 〴〹〴〬 〵〴〲きぐぉ〺〺がくぎぇたいくさあがぅたぃくきぐがぅじ〬 〴〹〴
きぐぉ〺〺がくぎぇたいくさあがぅたぉぎご〬 〴〹〳〬 〵〴〴きぐぉ〺〺がくぎぇたぉぎご〬 〴〹〳〬 〵〴〴きぐぉ〺〺がくぎぇたがくぎぇ〬 〴〹〲〬 〵〴〲きぐぉ〺〺がくぎぇたがくぎぇたぉぎご〬 〵〴〲きぐぉ〺〺がくげ〬 〵〴〶きぐぉ〺〺がじくげ〬 〵〴〶きぐぉ〺〺きぁじ〬 〵〴〶きぐぉ〺〺きぁじたいぁごぁげぅぐたこごげぉぎぇ〬 〵〴〱きぐぉ〺〺きぁじたぅげげくげたこごげぉぎぇ〬 〵〴〱きぐぉ〺〺きぁじたぉぎうくたかぅす〬 〵〴〱きぐぉ〺〺きぁじたぉぎうくたざぁが〬 〵〴〱きぐぉ〺〺きぁじたくあおぅぃごたぎぁきぅ〬 〵〴〱きぐぉ〺〺きぁじたぐくげごたぎぁきぅ〬 〵〴〱きぐぉ〺〺きぁじたぐげくぃぅここくげたぎぁきぅ〬 〵〴〱きぐぉ〺〺きぁじがくぃ〬 〴〹〴〬 〵〴〶きぐぉ〺〺きぉぎ〬 〵〴〶きぐぉ〺〺きぉぎがくぃ〬 〴〹〴〬 〵〴〶きぐぉ〺〺きくいぅたぁぐぐぅぎい〬 〵〴〹
きぐぉ〺〺きくいぅたぃげぅぁごぅ〬 〵〴〹
きぐぉ〺〺きくいぅたいぅがぅごぅたくぎたぃがくこぅ〬 〵〴〹
きぐぉ〺〺きくいぅたぅじぃが〬 〵〴〹
きぐぉ〺〺きくいぅたぎくぃえぅぃか〬 〵〴〹
きぐぉ〺〺きくいぅたぎくぐげぅぃぅいぅ〬 〵〴〹
きぐぉ〺〺きくいぅたぎくぐさご〬 〵〴〹
きぐぉ〺〺きくいぅたぎくこごくげぅ〬 〵〴〹
きぐぉ〺〺きくいぅたぎくこさぃぃぅぅい〬 〵〴〹
きぐぉ〺〺きくいぅたげいくぎがす〬 〵〴〹
きぐぉ〺〺きくいぅたげいしげ〬 〵〴〹
きぐぉ〺〺きくいぅたこぅけさぅぎごぉぁが〬 〵〴〹
きぐぉ〺〺きくいぅたさぎぉけさぅたくぐぅぎ〬 〵〴〹
きぐぉ〺〺きくいぅたしげくぎがす〬 〵〴〹〶〳〷〱
きぐぉ〺〺ぎさががたぃくぐすたうぎ〬 〵〴〹〲
きぐぉ〺〺ぎさががたいぅがぅごぅたうぎ〬 〵〴〹〳
きぐぉ〺〺くぐたぎさがが〬 〵〴〷〴きぐぉ〺〺くげいぅげたぃ〬 〵〵〱〵〶きぐぉ〺〺くげいぅげたうくげごげぁぎ〬 〵〵〱〷きぐぉ〺〺ぐぁぃかぅい〬 〴〹〲〬 〴〹〳〬 〵〴〲〬 〵〴〳〸
きぐぉ〺〺ぐげくぃたぎさがが〬 〵〴〰
〹
きぐぉ〺〺ぐげくい〬 〵〴〶〱〰
きぐぉ〺〺げぅぁが〬 〴〹〳〬 〴〹〴〬 〵〴〳〱〱〱〲きぐぉ〺〺げぅぁが〱〶〬 〴〹〳〬 〴〹〴〱〳
きぐぉ〺〺げぅぁが〲〬 〴〹〳〬 〴〹〴〬 〵〴〴〱〴きぐぉ〺〺げぅぁが〴〬 〴〹〳〬 〴〹〴〬 〵〴〴〱〵きぐぉ〺〺げぅぁが〸〬 〴〹〳〬 〴〹〴〬 〵〴〴〱〶きぐぉ〺〺げぅぐがぁぃぅ〬 〵〴〶〱〷〱〸
きぐぉ〺〺げぅけさぅこごたぎさがが〬 〵〴〷〱〹
きぐぉ〺〺げくくご〬 〵〴〰
〲〰
きぐぉ〺〺こぅぅかたぃさげ〬 〵〵〱〲〱きぐぉ〺〺こぅぅかたぅぎい〬 〵〵〱〲〲きぐぉ〺〺こぅぅかたこぅご〬 〵〵〱〲〳〲〴きぐぉ〺〺こえくげご〬 〴〹〲〬 〵〴〲〲〵きぐぉ〺〺こえくげごたぉぎご〬 〴〹〳〬 〵〴〴〲〶きぐぉ〺〺こぉぇぎぅいたぃえぁげ〬 〴〹〲〬 〵〴〲〲〷きぐぉ〺〺こぉきぉがぁげ〬 〵〴〵〲〸
きぐぉ〺〺こさぃぃぅここ〬 〵〳〸〲〹〳〰
きぐぉ〺〺こさき〬 〵〴〶〳〱きぐぉ〺〺ごぁぇたさあ〬 〵〴〵〳〲きぐぉ〺〺ごえげぅぁいたうさぎぎぅがぅい〬 〵〵〰
〳〳きぐぉ〺〺ごえげぅぁいたきさがごぉぐがぅ〬 〵〵〰
〳〴きぐぉ〺〺ごえげぅぁいたこぅげぉぁがぉずぅい〬 〵〵〰
〳〵〳〶きぐぉ〺〺ごえげぅぁいたこぉぎぇがぅ〬 〵〵〰
きぐぉ〺〺ごしくいくさあがぅたぐげぅぃぉこぉくぎ〬 〴〹〳〬 〵〴〴 〳〷〳〸
きぐぉ〺〺ごしくぉぎご〬 〴〹〳〬 〵〴〴〳〹
きぐぉ〺〺ごしくぉぎごぅぇぅげ〬 〴〹〳〬 〵〴〴〴〰
きぐぉ〺〺ごしくげぅぁが〬 〴〹〳〬 〵〴〴〴〱〴〲きぐぉ〺〺ごすぐぅぃがぁここたぃくきぐがぅじ〬 〵〵〱〴〳きぐぉ〺〺ごすぐぅぃがぁここたぉぎごぅぇぅげ〬 〵〵〱〴〴きぐぉ〺〺ごすぐぅぃがぁここたげぅぁが〬 〵〵〱〴〵きぐぉ〺〺さあ〬 〵〴〵〴〶きぐぉ〺〺さぎいぅうぉぎぅい〬 〵〴〰
〴〷〴〸
きぐぉ〺〺さぎぅけさぁが〬 〵〴〵

〶〳〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉ〺〺さぎぉざぅげこぅたこぉずぅ〬 〵〴〹
きぐぉ〺〺さぎこぉぇぎぅい〬 〴〹〲〬 〵〴〲きぐぉ〺〺さぎこぉぇぎぅいたぃえぁげ〬 〴〹〲〬 〵〴〲きぐぉ〺〺さぎこぉぇぎぅいたがくぎぇ〬 〴〹〲〬 〵〴〲きぐぉ〺〺さぎこぉぇぎぅいたがくぎぇたがくぎぇ〬 〴〹〲〬 〵〴〲きぐぉ〺〺さぎこぉぇぎぅいたこえくげご〬 〴〹〲〬 〵〴〲きぐぉ〺〺しぃえぁげ〬 〴〹〲〬 〵〴〲きぐぉ〺〺しぉぎたあぁこぅ〬 〵〴〹
きぐぉ〺〺しぉぎたいぉこぐたさぎぉご〬 〵〴〹
きぐぉ〺〺しぉぎたぎさがが〬 〵〴〷きぐぉ〺〺しぉぎたこぉずぅ〬 〵〴〹
きぐぉ〺〺しごぉきぅたぉこたぇがくあぁが〬 〵〴〵きぐぉた〲いくさあがぅたぐげぅぃぉこぉくぎ〬 〱〷〸〬 〱〷〹〬〵〴〴
きぐぉた〲ぉぎご〬 〱〷〸〬 〱〷〹〬 〵〴〴きぐぉた〲ぉぎごぅぇぅげ〬 〱〷〸〬 〱〷〹〬 〵〴〴きぐぉた〲げぅぁが〬 〱〷〸〬 〱〷〹〬 〵〴〴きぐぉたぁいいげぅここたかぉぎい〬 〱〸〬 〱〹〬 〱〹〬 〳〵〬 〱〱〷〬〵〰〳〬 〵〲〸〬 〵〳〰〬 〵〴〰
きぐぉたぁぉぎご〬 〳〵〬 〱〷〵〬 〵〴〲〬 〵〴〳〬 〶〱〷〬 〶〱〸〬〶〲〰
きぐぉたぁぎすたこくさげぃぅ〬 〳〷〬 〳〸〬 〵〰〬 〶〲〬 〷〵〬〷〶〬 〸〱〬 〸〳〬 〸〴〬 〲〵〴〬 〲〸〳〬 〵〴〰
きぐぉたぁぎすたごぁぇ〬 〱〷〬 〳〷〬 〳〸〬 〴〰〬 〶〲〬 〷〵〬〷〶〬 〸〱〬 〸〳ほ〸〵〬 〵〴〰
きぐぉたぁぐぐぎさき〬 〳〴〲〬 〳〴〳〬 〵〴〹
きぐぉたぁげぇざたぎさがが〬 〱〸〬 〳〲〲〬 〳〲〳〬 〵〰〲〬 〵〵〱きぐぉたぁげぇざこたぎさがが〬 〱〸〬 〳〲〷〬 〵〰〲〬 〵〵〱きぐぉたあぁぎい〬 〱〷〴〬 〱〷〶〬 〵〴〶きぐぉたあくげ〬 〱〷〴〬 〱〷〶〬 〵〴〶きぐぉたあくごごくき〬 〱〳〬 〱〸〬 〱〹〬 〴〱〬 〱〰〵〬 〱〱〵〬〱〱〶〬 〱〴〵〬 〲〶〴〬 〲〶〶〬 〳〲〵〬 〵〰〲〬 〵〰〶〬〵〰〷〬 〵〱〱〬 〵〲〶〬 〵〲〷〬 〵〳〳〬 〵〳〴〬 〵〳〹〬〶〲〵
きぐぉたあくごごくき 〽 〰〬 〵〳〴きぐぉたあくごごくき 〽 〱〬 〵〳〴きぐぉたあこぅぎいたくざぅげえぅぁい〬 〵〶〬 〲〸〴〬 〵〴〰
きぐぉたあじくげ〬 〱〷〴〬 〱〷〶〬 〵〴〶きぐぉたあすごぅ〬 〳〳〬 〳〴〬 〴〲〬 〴〳〬 〴〵〬 〱〳〸〬 〱〷〵〬〴〰〶〬 〴〴〶〬 〴〵〹〬 〴〹〲〬 〵〳〴〬 〵〴〲〬 〵〴〳〬

きぐぉ定数と定義済みハンドルの索引〶〲〱
きぐぉたぃたあくくが〬 〳〳〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬 〶〱〸〬〶〲〰
きぐぉたぃたぃくきぐがぅじ〬 〳〳〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬〶〱〸〬 〶〲〰
きぐぉたぃたいくさあがぅたぃくきぐがぅじ〬 〳〳〬 〳〴〬 〱〷〵〬〵〴〲〬 〶〱〷〬 〶〱〸〬 〶〲〰
きぐぉたぃたうがくぁごたぃくきぐがぅじ〬 〳〳〬 〱〷〵〬 〵〴〲〬〶〱〷〬 〶〱〸〬 〶〲〰
きぐぉたぃたがくぎぇたいくさあがぅたぃくきぐがぅじ〬 〳〴〬〱〷〵〬 〵〴〲〬 〶〱〷〬 〶〱〸〬 〶〲〰
きぐぉたぃぁげご〬 〲〶〹〬 〵〴〷きぐぉたぃえぁげ〬 〳〴〬 〴〵〬 〹〷〬 〱〷〷〬 〵〴〲〬 〶〱〷きぐぉたぃえぁげぁぃごぅげ〬 〳〳〬 〴〴〬 〴〵〬 〱〷〷〬 〵〴〳きぐぉたぃくきあぉぎぅげたぃくぎごぉぇさくさこ〬 〱〱〸〬〱〲〱〬 〵〵〰
きぐぉたぃくきあぉぎぅげたいぁげげぁす〬 〱〱〸〬 〱〲〳〬 〵〵〰
きぐぉたぃくきあぉぎぅげたいさぐ〬 〱〱〸〬 〱〲〱〬 〵〵〰
きぐぉたぃくきあぉぎぅげたう〹〰たぃくきぐがぅじ〬 〱〱〸〬〱〲〳〬 〵〵〰
きぐぉたぃくきあぉぎぅげたう〹〰たぉぎごぅぇぅげ〬 〱〱〸〬 〱〲〳〬〵〵〰
きぐぉたぃくきあぉぎぅげたう〹〰たげぅぁが〬 〱〱〸〬 〱〲〳〬〵〵〰
きぐぉたぃくきあぉぎぅげたえぉぎいぅじぅい〬 〱〱〷〬 〱〱〸〬〱〲〲〬 〵〵〰
きぐぉたぃくきあぉぎぅげたえぉぎいぅじぅいたぉぎごぅぇぅげ〬〱〱〸〬 〱〲〲〬 〵〵〰
きぐぉたぃくきあぉぎぅげたえざぅぃごくげ〬 〱〱〷〬 〱〱〸〬〱〲〲〬 〵〵〰
きぐぉたぃくきあぉぎぅげたえざぅぃごくげたぉぎごぅぇぅげ〬〱〱〷〬 〱〱〸〬 〱〲〲〬 〵〵〰
きぐぉたぃくきあぉぎぅげたぉぎいぅじぅい〬 〱〱〸〬 〱〲〲〬〵〵〰
きぐぉたぃくきあぉぎぅげたぉぎいぅじぅいたあがくぃか〬 〱〱〸〬〱〲〲〬 〵〵〰
きぐぉたぃくきあぉぎぅげたぎぁきぅい〬 〱〱〷〬 〱〱〸〬 〱〲〱〬〵〵〰
きぐぉたぃくきあぉぎぅげたげぅこぉずぅい〬 〱〱〸〬 〱〲〳〬 〵〵〰

きぐぉ定数と定義済みハンドルの索引
きぐぉたぃくきあぉぎぅげたこごげさぃご〬 〱〱〷〬 〱〱〸〬 〱〲〲〬〵〵〰
きぐぉたぃくきあぉぎぅげたこごげさぃごたぉぎごぅぇぅげ〬〱〱〸〬 〱〲〲〬 〵〵〰
きぐぉたぃくきあぉぎぅげたこさあぁげげぁす〬 〱〱〸〬 〱〲〳〬〵〵〰
きぐぉたぃくきあぉぎぅげたざぅぃごくげ〬 〱〱〸〬 〱〲〱〬 〵〵〰
きぐぉたぃくききたぎさがが〬 〲〰〲〬 〲〱〳ほ〲〱〵〬 〲〱〷〬〲〱〸〬 〲〵〰〬 〲〵〸〬 〲〶〰〬 〳〲〵〬 〳〴〴ほ〳〴〶〬〵〴〷〬 〶〲〲
きぐぉたぃくききたぐぁげぅぎご〬 〲〵〰
きぐぉたぃくききたこぅがう〬 〲〰〲〬 〲〳〴〬 〲〵〰〬 〳〰〶〬〳〴〴〬 〴〰〸〬 〵〴〵〬 〶〱〹
きぐぉたぃくききたしくげがい〬 〱〷〬 〲〸〬 〳〶〬 〲〰〲〬〲〰〳〬 〲〰〹〬 〲〱〱〬 〲〲〱〬 〲〳〰〬 〲〳〱〬 〲〵〰〬〲〵〹〬 〲〸〲〬 〲〸〳〬 〲〸〷〬 〲〸〹〬 〲〹〷〬 〳〰〴ほ〳〰〶〬 〳〰〸〬 〳〱〷〬 〳〱〸〬 〳〲〰〬 〳〲〱〬 〳〲〶〬〳〲〷〬 〳〴〱ほ〳〴〴〬 〴〰〲〬 〴〴〴〬 〴〶〵〬 〴〶〶〬〵〲〱〬 〵〳〳〬 〵〴〵きぐぉたぃくきぐがぅじ〬 〳〳〬 〱〷〵〬 〴〴〹〬 〵〱〲〬 〵〴〳きぐぉたぃくきぐがぅじ〱〶〬 〱〷〵〬 〵〴〴きぐぉたぃくきぐがぅじ〳〲〬 〱〷〵〬 〵〴〴きぐぉたぃくきぐがぅじ〴〬 〱〷〵〬 〵〴〴きぐぉたぃくきぐがぅじ〸〬 〱〷〵〬 〵〴〴きぐぉたぃくぎぇげさぅぎご〬 〲〱〰〬 〲〲〸〬 〵〴〵きぐぉたぃくぎざぅげこぉくぎたうぎたぎさがが〬 〴〵〴きぐぉたぃじじたあくくが〬 〳〵〬 〴〹〲〬 〵〴〳きぐぉたぃじじたぃくきぐがぅじ〬 〴〹〲〬 〵〴〳きぐぉたぃじじたいくさあがぅたぃくきぐがぅじ〬 〳〵〬 〱〷〵〬〴〹〲〬 〵〴〳
きぐぉたぃじじたうがくぁごたぃくきぐがぅじ〬 〳〵〬 〱〷〵きぐぉたぃじじたがくぎぇたいくさあがぅたぃくきぐがぅじ〬〳〵〬 〱〷〵〬 〴〹〲〬 〵〴〳きぐぉたいぁごぁごすぐぅ〬 〲〳きぐぉたいぁごぁごすぐぅたぎさがが〬 〱〱〱〬 〵〴〷きぐぉたいぉこぐがぁぃぅきぅぎごたぃさげげぅぎご〬 〴〱〹〬〵〵〰〬 〶〲〴
きぐぉたいぉこごたぇげぁぐえ〬 〲〶〹〬 〵〴〷〬 〶〱〹
きぐぉたいぉこごげぉあさごぅたあがくぃか〬 〱〰〱〬 〱〰〲〬 〵〵〱きぐぉたいぉこごげぉあさごぅたぃすぃがぉぃ〬 〱〰〲〬 〵〵〱〶〳〹
きぐぉたいぉこごげぉあさごぅたいうがごたいぁげぇ〬 〱〰〲〬 〵〵〱 〱〲きぐぉたいぉこごげぉあさごぅたぎくぎぅ〬 〱〰〲〬 〵〵〱〳きぐぉたいくさあがぅ〬 〳〴〬 〱〷〵〬 〵〱〲〬 〵〴〲〴きぐぉたいくさあがぅたぃくきぐがぅじ〬 〳〳〬 〱〷〵〬 〴〴〹〬〵〶〵〱〲〬 〵〴〴〷
きぐぉたいくさあがぅたぉぎご〬 〱〷〸〬 〱〷〹〬 〵〴〴〸
きぐぉたいくさあがぅたぐげぅぃぉこぉくぎ〬 〳〳〬 〱〷〵〬 〵〱〲〬〹〵〴〳〱〰
きぐぉたいさぐたうぎ〬 〵〴〹〱〱〱〲
きぐぉたぅげげたぁぃぃぅここ〬 〲〹〵〬 〴〱〲〬 〴〶〷〬 〵〳〸〱〳
きぐぉたぅげげたぁきくいぅ〬 〲〹〵〬 〴〱〰〬 〴〶〷〬 〵〳〸〱〴
きぐぉたぅげげたぁげぇ〬 〲〹〴〬 〵〳〸〱〵
きぐぉたぅげげたぁここぅげご〬 〲〹〴〬 〳〷〷〬 〵〳〸〱〶
きぐぉたぅげげたあぁいたうぉがぅ〬 〲〹〵〬 〴〶〷〬 〵〳〸〱〷〱〸きぐぉたぅげげたあぁこぅ〬 〲〸〵〬 〲〹〴〬 〳〷〷〬 〵〳〸〱〹きぐぉたぅげげたあさううぅげ〬 〲〹〴〬 〵〳〸〲〰
きぐぉたぅげげたぃくきき〬 〲〹〴〬 〵〳〸〲〱
きぐぉたぅげげたぃくぎざぅげこぉくぎ〬 〲〹〵〬 〴〵〴〬 〴〶〷〬
〲〲
〵〳〸
〲〳
〲〴
きぐぉたぅげげたぃくさぎご〬 〲〹〴〬 〵〳〸〲〵
きぐぉたぅげげたいぉきこ〬 〲〹〴〬 〵〳〸〲〶
きぐぉたぅげげたいぉこぐ〬 〲〹〴〬 〳〷〷〬 〵〳〸〲〷
きぐぉたぅげげたいさぐたいぁごぁげぅぐ〬 〲〹〵〬 〴〵〱〬 〴〶〷〬 〲〸
〵〳〸
〲〹
〳〰
きぐぉたぅげげたうぉがぅ〬 〲〹〵〬 〴〶〷〬 〵〳〸〳〱
きぐぉたぅげげたうぉがぅたぅじぉこごこ〬 〲〹〵〬 〴〶〷〬 〵〳〸〳〲
きぐぉたぅげげたうぉがぅたぉぎたさこぅ〬 〲〹〵〬 〴〱〲〬 〴〶〷〬
〳〳
〵〳〸
〳〴
きぐぉたぅげげたぇげくさぐ〬 〲〹〴〬 〵〳〸〳〵〳〶
きぐぉたぅげげたぉぎたこごぁごさこ〬 〳〹〬 〴〱〬 〶〲〬 〶〹〬〳〷〷〱〬 〲〸〹〬 〲〹〴〬 〳〹〳〬 〴〲〵〬 〴〹〷〬 〵〳〸〳〸きぐぉたぅげげたぉぎうく〬 〲〹〴〬 〵〳〸〳〹きぐぉたぅげげたぉぎうくたかぅす〬 〲〹〴〬 〳〱〳〬 〵〳〸〴〰
きぐぉたぅげげたぉぎうくたぎくかぅす〬 〲〹〴〬 〳〱〳〬 〵〳〸〴〱〴〲
きぐぉたぅげげたぉぎうくたざぁがさぅ〬 〲〹〴〬 〳〱〳〬 〵〳〸〴〳
きぐぉたぅげげたぉぎごぅげぎ〬 〲〹〴〬 〵〳〸〴〴
きぐぉたぅげげたぉく〬 〲〹〵〬 〴〶〷〬 〵〳〹〴〵
きぐぉたぅげげたかぅすざぁが〬 〲〴〶〬 〲〹〴〬 〵〳〹〴〶
きぐぉたぅげげたがぁこごぃくいぅ〬 〲〹〵〬 〲〹〷〬 〲〹〸〬 〵〳〹 〴〷〴〸きぐぉたぅげげたがくぃかごすぐぅ〬 〲〹〴〬 〳〷〷〬 〵〳〹

〶〴〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぅげげたぎぁきぅ〬 〲〹〴〬 〳〳〸〬 〵〳〹
きぐぉたぅげげたぎくたきぅき〬 〲〸〵〬 〲〹〴〬 〵〳〹
きぐぉたぅげげたぎくたこぐぁぃぅ〬 〲〹〵〬 〴〶〷〬 〵〳〹
きぐぉたぅげげたぎくたこさぃえたうぉがぅ〬 〲〹〵〬 〴〱〱〬 〴〶〷〬〵〳〹
きぐぉたぅげげたぎくごたこぁきぅ〬 〲〹〵〬 〴〶〷〬 〵〳〹
きぐぉたぅげげたくぐ〬 〲〹〴〬 〵〳〸
きぐぉたぅげげたくごえぅげ〬 〲〹〴〬 〲〹〵〬 〵〳〸
きぐぉたぅげげたぐぅぎいぉぎぇ〬 〶〹〬 〲〹〴〬 〵〳〸
きぐぉたぅげげたぐくげご〬 〲〹〴〬 〳〳〵〬 〵〳〹
きぐぉたぅげげたけさくごぁ〬 〲〹〵〬 〴〶〷〬 〵〳〹
きぐぉたぅげげたげぁぎか〬 〲〹〴〬 〵〳〸
きぐぉたぅげげたげぅぁいたくぎがす〬 〲〹〵〬 〴〶〷〬 〵〳〹
きぐぉたぅげげたげぅけさぅこご〬 〲〹〴〬 〵〳〸
きぐぉたぅげげたげきぁたぃくぎうがぉぃご〬 〲〹〴〬 〳〷〷〬〵〳〹
きぐぉたぅげげたげきぁたこすぎぃ〬 〲〹〴〬 〳〷〷〬 〵〳〹
きぐぉたぅげげたげくくご〬 〲〹〴〬 〵〳〸
きぐぉたぅげげたこぅげざぉぃぅ〬 〲〹〴〬 〳〳〷〬 〵〳〹
きぐぉたぅげげたこぉずぅ〬 〲〹〴〬 〳〷〷〬 〵〳〹
きぐぉたぅげげたこぐぁしぎ〬 〲〹〴〬 〳〲〳ほ〳〲〵〬 〵〳〹
きぐぉたぅげげたごぁぇ〬 〲〹〴〬 〵〳〸
きぐぉたぅげげたごくぐくがくぇす〬 〲〹〴〬 〵〳〸
きぐぉたぅげげたごげさぎぃぁごぅ〬 〲〹〴〬 〵〳〸
きぐぉたぅげげたごすぐぅ〬 〲〹〴〬 〵〳〸
きぐぉたぅげげたさぎかぎくしぎ〬 〲〹〴〬 〲〹〵〬 〵〳〸
きぐぉたぅげげたさぎこさぐぐくげごぅいたいぁごぁげぅぐ〬〲〹〵〬 〴〶〷〬 〵〳〹
きぐぉたぅげげたさぎこさぐぐくげごぅいたくぐぅげぁごぉくぎ〬〲〹〵〬 〴〶〷〬 〵〳〹
きぐぉたぅげげたしぉぎ〬 〲〹〴〬 〳〷〷〬 〵〳〹
きぐぉたぅげげぃくいぅこたぉぇぎくげぅ〬 〱〸〬 〳〲〵〬 〵〰〲〬〵〵〱
きぐぉたぅげげえぁぎいがぅげたぎさがが〬 〲〹〳〬 〵〴〷きぐぉたぅげげくげ〬 〳〸〬 〳〹〬 〶〲〬 〵〴〰
きぐぉたぅげげくげたこごげぉぎぇ〬 〲〹〳
きぐぉたぅげげくげこたぁげぅたうぁごぁが〬 〲〸〷〬 〲〸〸〬 〲〹〸〬〲〹〹〬 〳〷〷〬 〴〶〵〬 〵〴〰
きぐぉたぅげげくげこたげぅごさげぎ〬 〲〸〷〬 〲〸〸〬 〲〹〹〬〴〶〶〬 〵〳〳〬 〵〴〰

きぐぉ定数と定義済みハンドルの索引
きぐぉたうたこごぁごさこたぉぇぎくげぅ〬 〵〲〵〬 〵〵〲きぐぉたうたこごぁごさこぅこたぉぇぎくげぅ〬 〵〲〵〬 〵〵〲きぐぉたうぉがぅたぎさがが〬 〴〱〱〬 〴〶〶〬 〵〴〷きぐぉたうがくぁご〬 〳〴〬 〹〷〬 〱〷〳〬 〱〷〵〬 〴〴〸〬 〵〴〲きぐぉたうがくぁごたぉぎご〬 〱〴〬 〱〷〸〬 〱〷〹〬 〵〴〴きぐぉたぇげぁぐえ〬 〲〶〹〬 〵〴〷きぐぉたぇげぁぐえたぃげぅぁごぅ〬 〲〶〷きぐぉたぇげくさぐたぅきぐごす〬 〲〰〰〬 〲〰〵〬 〲〰〶〬 〲〱〳〬〲〱〴〬 〵〴〷
きぐぉたぇげくさぐたぎさがが〬 〲〰〰〬 〲〰〸〬 〵〴〷きぐぉたえくこご〬 〲〸〲〬 〲〸〳〬 〵〴〵きぐぉたぉいぅぎご〬 〲〰〳〬 〲〱〰〬 〵〴〵きぐぉたぉぎたぐがぁぃぅ〬 〱〸〬 〱〴〴〬 〱〶〹〬 〵〰〲〬 〵〱〱〬〵〳〹
きぐぉたぉぎうくたぎさがが〬 〲〶〶〬 〳〱〵〬 〳〲〴〬 〳〳〴〬 〴〱〰〬〴〱〱〬 〴〲〱〬 〵〴〷きぐぉたぉぎご〬 〱〴〬 〳〴〬 〸〸〬 〱〷〵〬 〴〴〸〬 〴〴〹〬 〵〱〲〬〵〳〳〬 〵〳〵〬 〵〴〲きぐぉたぉぎご〱〶たご〬 〳〳〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬 〶〱〸〬〶〲〰
きぐぉたぉぎご〳〲たご〬 〳〳〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬 〶〱〸〬〶〲〰
きぐぉたぉぎご〶〴たご〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬 〶〱〸〬 〶〲〰
きぐぉたぉぎご〸たご〬 〳〳〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬 〶〱〸〬〶〲〰
きぐぉたぉぎごぅぇぅげ〬 〳〳〬 〴〲〬 〱〷〵〬 〵〱〱〬 〵〱〲〬〵〳〵〬 〵〴〳
きぐぉたぉぎごぅぇぅげ〱〬 〳〳〬 〱〷〵〬 〵〴〴きぐぉたぉぎごぅぇぅげ〱〶〬 〱〷〵〬 〵〴〴きぐぉたぉぎごぅぇぅげ〲〬 〳〳〬 〱〷〵〬 〴〴〸〬 〵〴〴きぐぉたぉぎごぅぇぅげ〴〬 〳〳〬 〱〷〵〬 〵〴〴きぐぉたぉぎごぅぇぅげ〸〬 〱〷〵〬 〵〱〶〬 〵〴〴きぐぉたぉぎごぅぇぅげたかぉぎい〬 〱〸〬 〱〱〷〬 〵〲〸〬 〵〴〰
きぐぉたぉく〬 〲〸〲〬 〲〸〳〬 〵〴〵きぐぉたかぅすざぁがたぉぎざぁがぉい〬 〲〳〹〬 〲〴〰〬 〵〴〰
きぐぉたがぁぎい〬 〱〷〴〬 〱〷〶〬 〵〴〶きぐぉたがぁこごさこぅいぃくいぅ〬 〲〹〷〬 〵〴〹
きぐぉたがあ〬 〲〰〬 〲〱〬 〹〹〬 〱〰〳〬 〱〰〷ほ〱〰〹〬 〱〱〲〬〱〱〳〬 〴〴〷〬 〵〴〵きぐぉたがくぃかたぅじぃがさこぉざぅ〬 〳〷〰〬 〵〴〰

きぐぉ定数と定義済みハンドルの索引
きぐぉたがくぃかたこえぁげぅい〬 〳〷〰〬 〵〴〰
きぐぉたがくぇぉぃぁが〬 〳〳〬 〱〷〵〬 〵〴〳きぐぉたがくぎぇ〬 〳〴〬 〱〷〵〬 〵〴〲きぐぉたがくぎぇたいくさあがぅ〬 〳〴〬 〱〷〵〬 〵〴〲きぐぉたがくぎぇたいくさあがぅたぉぎご〬 〱〷〹〬 〵〴〴きぐぉたがくぎぇたぉぎご〬 〱〷〸〬 〱〷〹〬 〵〴〴きぐぉたがくぎぇたがくぎぇ〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〲〰
きぐぉたがくぎぇたがくぎぇたぉぎご〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〲〰
きぐぉたがくげ〬 〱〷〴〬 〱〷〶〬 〵〴〶きぐぉたがじくげ〬 〱〷〴〬 〱〷〶〬 〵〴〶きぐぉたきぁじ〬 〱〷〳〬 〱〷〴〬 〱〷〶〬 〱〹〱〬 〵〴〶きぐぉたきぁじたいぁごぁげぅぐたこごげぉぎぇ〬 〱〸〬 〴〲〱〬〴〵〱〬 〵〴〱
きぐぉたきぁじたぅげげくげたこごげぉぎぇ〬 〱〸〬 〲〹〳〬 〲〹〸〬〵〴〱
きぐぉたきぁじたぉぎうくたかぅす〬 〱〸〬 〲〹〴〬 〳〱〱〬 〳〱〳〬〳〱〴〬 〵〴〱
きぐぉたきぁじたぉぎうくたざぁが〬 〱〸〬 〲〹〴〬 〳〱〱〬 〵〴〱きぐぉたきぁじたくあおぅぃごたぎぁきぅ〬 〱〸〬 〲〴〹〬 〲〵〰〬〵〴〱〬 〶〲〱
きぐぉたきぁじたぐくげごたぎぁきぅ〬 〱〸〬 〳〳〳〬 〵〴〱きぐぉたきぁじたぐげくぃぅここくげたぎぁきぅ〬 〱〸〬 〲〸〴〬〵〴〱〬 〶〲〲〬 〶〲〳きぐぉたきぁじがくぃ〬 〱〷〴〬 〱〷〷〬 〱〷〸〬 〱〸〱〬 〵〴〶きぐぉたきぉぎ〬 〱〷〴〬 〱〷〶〬 〵〴〶きぐぉたきぉぎがくぃ〬 〱〷〴〬 〱〷〷〬 〱〷〸〬 〱〸〱〬 〵〴〶きぐぉたきくいぅたぁぐぐぅぎい〬 〴〰〹〬 〴〱〰〬 〵〴〹
きぐぉたきくいぅたぃげぅぁごぅ〬 〴〰〹〬 〴〱〰〬 〴〱〸〬 〵〴〹
きぐぉたきくいぅたいぅがぅごぅたくぎたぃがくこぅ〬 〴〰〹ほ〴〱〱〬 〵〴〹
きぐぉたきくいぅたぅじぃが〬 〴〰〹〬 〴〱〰〬 〵〴〹
きぐぉたきくいぅたぎくぃえぅぃか〬 〳〷〲ほ〳〷〴〬 〵〴〹
きぐぉたきくいぅたぎくぐげぅぃぅいぅ〬 〳〷〲〬 〳〷〴〬 〵〴〹
きぐぉたきくいぅたぎくぐさご〬 〳〷〲〬 〳〷〳〬 〵〴〹
きぐぉたきくいぅたぎくこごくげぅ〬 〳〷〲〬 〳〷〳〬 〵〴〹
きぐぉたきくいぅたぎくこさぃぃぅぅい〬 〳〷〲〬 〳〷〴〬 〵〴〹
きぐぉたきくいぅたげいくぎがす〬 〴〰〹〬 〴〱〰〬 〴〱〵〬 〵〴〹
きぐぉたきくいぅたげいしげ〬 〴〰〹〬 〴〱〰〬 〵〴〹
きぐぉたきくいぅたこぅけさぅぎごぉぁが〬 〴〰〹〬 〴〱〰〬 〴〱〲〬〴〱〳〬 〴〱〹〬 〴〲〵〬 〴〲〸〬 〴〳〷〬 〴〵〸〬 〵〴〹〬〶〴〱〶〲〴
きぐぉたきくいぅたさぎぉけさぅたくぐぅぎ〬 〴〰〹〬 〴〱〰〬〵〴〹
きぐぉたきくいぅたしげくぎがす〬 〴〰〹〬 〴〱〰〬 〵〴〹
きぐぉたぎさががたぃくぐすたうぎ〬 〵〴〹
きぐぉたぎさががたいぅがぅごぅたうぎ〬 〵〴〹
きぐぉたくううこぅご〬 〳〵〬 〱〷〵〬 〵〴〲〬 〵〴〳〬 〶〱〷〬 〶〱〸〬〶〲〰
きぐぉたくううこぅごたかぉぎい〬 〱〸〬 〱〹〬 〳〵〬 〴〶〰〬 〵〰〳〬〵〴〰
きぐぉたくぐたぎさがが〬 〱〸〴〬 〵〴〷きぐぉたくげいぅげたぃ〬 〱〷〬 〹〹〬 〱〰〲〬 〱〰〳〬 〵〵〱きぐぉたくげいぅげたうくげごげぁぎ〬 〱〷〬 〹〹〬 〱〰〲〬 〵〵〱きぐぉたぐぁぃかぅい〬 〳〳〬 〳〴〬 〴〲〬 〴〳〬 〱〳〲〬 〱〳〴〬〱〳〸〬 〴〴〹〬 〴〹〲〬 〵〳〴〬 〵〴〲〬 〵〴〳きぐぉたぐげくぃたぎさがが〬 〳〲〬 〸〵〬 〱〴〷〬 〱〴〹〬 〱〵〱〬〱〵〲〬 〱〵〹〬 〱〶〱〬 〱〷〴〬 〲〰〳〬 〲〷〶〬 〲〸〲〬〲〸〳〬 〳〵〲〬 〵〴〰〬 〶〲〱〬 〶〲〳〬 〶〲〴きぐぉたぐげくい〬 〱〷〴〬 〱〷〶〬 〵〴〶きぐぉたげぅぁが〬 〳〳〬 〴〲〬 〱〷〵〬 〴〴〹〬 〵〱〱ほ〵〱〳〬〵〱〹〬 〵〴〳
きぐぉたげぅぁが〱〶〬 〱〷〵〬 〵〴〴きぐぉたげぅぁが〲〬 〳〳〬 〱〷〵〬 〵〴〴きぐぉたげぅぁが〴〬 〳〳〬 〱〷〵〬 〵〱〲〬 〵〱〶〬 〵〴〴きぐぉたげぅぁが〸〬 〳〳〬 〱〷〵〬 〵〱〲〬 〵〴〴〬 〶〱〸
きぐぉたげぅぐがぁぃぅ〬 〳〵〹〬 〵〴〶〬 〶〱〹〬 〶〲〴きぐぉたげぅけさぅこごたぎさがが〬 〶〲ほ〶〴〬 〶〷ほ〷〰〬 〳〹〲〬〵〴〷
きぐぉたげくくご〬 〱〴〷〬 〵〴〰
きぐぉたこぅぅかたぃさげ〬 〴〳〲〬 〴〳〸〬 〵〵〱きぐぉたこぅぅかたぅぎい〬 〴〳〲〬 〴〳〸〬 〵〵〱きぐぉたこぅぅかたこぅご〬 〴〳〲〬 〴〳〳〬 〴〳〸〬 〵〵〱きぐぉたこえくげご〬 〳〴〬 〱〷〵〬 〵〴〲きぐぉたこえくげごたぉぎご〬 〱〷〸〬 〵〴〴きぐぉたこぉぇぎぅいたぃえぁげ〬 〳〴〬 〱〷〵〬 〱〷〷〬 〵〴〲〬〶〲〰
きぐぉたこぉきぉがぁげ〬 〲〰〴〬 〲〱〰〬 〲〲〸〬 〵〴〵きぐぉたこくさげぃぅ〬 〳〸〬 〳〹〬 〵〴〰
きぐぉたこごぁごさこ〬 〲〵〬 〴〰〬 〴〱〬 〶〲

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〶〴〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたこごぁごさこたぉぇぎくげぅ〬 〱〳〬 〱〸〬 〴〱〬 〳〹〱〬〴〲〵〬 〵〰〲〬 〵〱〱〬 〵〲〵〬 〵〳〳〬 〵〵〱〬 〶〱〵きぐぉたこごぁごさこたこぉずぅ〬 〱〸〬 〳〹〬 〵〴〰
きぐぉたこごぁごさこぅこたぉぇぎくげぅ〬 〱〷〬 〱〸〬 〴〱〬 〳〹〱〬〳〹〳〬 〵〰〲〬 〵〲〵〬 〵〵〱〬 〶〱〵きぐぉたこさあざぅげこぉくぎ〬 〲〸〲〬 〵〵〲きぐぉたこさぃぃぅここ〬 〲〰〬 〲〲〬 〶〲〬 〶〹〬 〷〱〬 〲〳〸ほ〲〴〵〬 〲〹〳ほ〲〹〵〬 〲〹〸〬 〲〹〹〬 〳〲〵〬 〴〵〴〬〴〸〲〬 〵〳〸きぐぉたこさき〬 〱〷〴〬 〱〷〶〬 〵〳〳〬 〵〴〶きぐぉたごぁぇ〬 〳〸〬 〳〹〬 〵〴〰
きぐぉたごぁぇたさあ〬 〳〵〬 〲〸〲〬 〵〲〹〬 〵〳〲〬 〵〴〵きぐぉたごえげぅぁいたうさぎぎぅがぅい〬 〴〰〱〬 〴〰〲〬 〵〵〰
きぐぉたごえげぅぁいたきさがごぉぐがぅ〬 〴〰〲〬 〴〰〴〬 〵〵〰
きぐぉたごえげぅぁいたこぅげぉぁがぉずぅい〬 〴〰〲〬 〵〵〰
きぐぉたごえげぅぁいたこぉぎぇがぅ〬 〴〰〱ほ〴〰〳〬 〵〵〰
きぐぉたごすぐぅぃがぁここたぃくきぐがぅじ〬 〵〱〷〬 〵〵〱きぐぉたごすぐぅぃがぁここたぉぎごぅぇぅげ〬 〵〱〷〬 〵〵〱きぐぉたごすぐぅぃがぁここたげぅぁが〬 〵〱〷〬 〵〵〱きぐぉたさあ〬 〱〴〬 〲〰〬 〲〱〬 〱〰〰〬 〱〰〴〬 〱〰〷ほ〱〰〹〬〱〱〲〬 〱〱〳〬 〴〴〷〬 〵〴〵きぐぉたさぉぎご〱〶たご〬 〳〳〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬〶〱〸〬 〶〲〰
きぐぉたさぉぎご〳〲たご〬 〳〳〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬〶〱〸〬 〶〲〰
きぐぉたさぉぎご〶〴たご〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬 〶〱〸〬〶〲〰
きぐぉたさぉぎご〸たご〬 〳〳〬 〳〴〬 〱〷〵〬 〵〴〲〬 〶〱〷〬 〶〱〸〬〶〲〰
きぐぉたさぎいぅうぉぎぅい〬 〳〹〬 〴〰〬 〶〷〬 〶〸〬 〷〱〬〱〱〴〬 〲〰〳〬 〲〱〶〬 〲〱〷〬 〲〶〹〬 〲〷〷〬 〲〷〸〬〵〱〳〬 〵〱〴〬 〵〴〰〬 〶〲〰
きぐぉたさぎぅけさぁが〬 〲〰〴〬 〲〱〰〬 〲〲〸〬 〵〴〵きぐぉたさぎぉざぅげこぅたこぉずぅ〬 〳〲〰〬 〳〴〱〬 〵〴〹
きぐぉたさぎこぉぇぎぅい〬 〳〴〬 〱〷〵〬 〵〴〲きぐぉたさぎこぉぇぎぅいたぃえぁげ〬 〳〴〬 〱〷〵〬 〱〷〷〬〵〴〲
きぐぉたさぎこぉぇぎぅいたがくぎぇ〬 〳〴〬 〱〷〵〬 〵〴〲きぐぉたさぎこぉぇぎぅいたがくぎぇたがくぎぇ〬 〳〴〬 〱〷〵〬〵〴〲〬 〶〲〰

きぐぉ定数と定義済みハンドルの索引
きぐぉたさぎこぉぇぎぅいたこえくげご〬 〳〴〬 〱〷〵〬 〵〴〲きぐぉたさぎしぅぉぇえごぅい〬 〱〸〬 〲〶〴〬 〲〶〶〬 〲〶〷〬〲〷〴〬 〲〷〵〬 〵〰〲〬 〵〵〱〬 〶〱〹
きぐぉたざぅげこぉくぎ〬 〲〸〲〬 〵〵〲きぐぉたしぃえぁげ〬 〳〴〬 〱〷〷〬 〲〵〱〬 〴〴〹〬 〵〴〲〬 〶〲〰
きぐぉたしぉぎたあぁこぅ〬 〳〵〱〬 〵〴〹
きぐぉたしぉぎたいぉこぐたさぎぉご〬 〳〵〱〬 〵〴〹
きぐぉたしぉぎたぎさがが〬 〳〵〰〬 〵〴〷きぐぉたしぉぎたこぉずぅ〬 〳〵〱〬 〵〴〹
きぐぉたしごぉきぅたぉこたぇがくあぁが〬 〲〸〲〬 〲〸〳〬 〳〰〰〬〵〲〹〬 〵〴〵

MPI宣言の索引
アドレスにどのつ整数，ハンドル，などのぃ言語／ぃ〫〫言語に必要な宣言の索引．下線が付いたページ番号は主たる参照（重要なコンセプトが複数ページに現れる場合は，複数ある）
きぐぉ〺〺ぁどのぴ〬 〱〹〬 〲〳〬 〸〹〬 〸〹〬 〹〲〬 〹〴〬 〹〶〬 〱〰〵〬〱〰〸〬 〱〰〹〬 〱〱〹〬 〱〳〸〬 〱〳〹〬 〳〴〸〬 〳〵〳〬〳〵〵〬 〳〵〸〬 〴〴〸〬 〴〵〱〬 〴〷〹ほ〴〸〱〬 〵〲〸〬〵〲〸〬 〵〵〲
きぐぉ〺〺ぃちひぴっはねね〬 〲〵〸〬 〴〸〸〬 〴〹〵〬 〵〵〲きぐぉ〺〺ぃはねね〬 〳〲〬 〲〰〴〬 〲〰〹ほ〲〱〲〬 〲〱〵〬 〲〱〸〬〲〲〸ほ〲〳〱〬 〲〳〷〬 〲〴〰〬 〲〴〱〬 〴〸〸〬 〴〹〵〬〴〹〵〬 〵〵〲
きぐぉ〺〺いちぴちぴべばづ〬 〲〳〬 〹〰〬 〴〸〸〬 〵〵〲きぐぉ〺〺いどびぴでひちばとっはねね〬 〴〹〵〬 〵〵〲〬 〶〱〹
きぐぉ〺〺ぅひひとちのつぬづひ〬 〲〸〸〬 〲〸〹ほ〲〹〲〬 〴〸〴〬 〴〸〵〬〴〸〸〬 〵〲〲〬 〵〵〳きぐぉ〺〺ぅへっづばぴどはの〬 〲〳〬 〲〷〬 〴〸〸〬 〴〹〷〬 〵〵〳きぐぉ〺〺うどぬづ〬 〲〹〲〬 〲〹〹〬 〴〰〸〬 〴〱〱ほ〴〱〶〬 〴〱〹〬〴〲〱〬 〴〲〵ほ〴〳〵〬 〴〳〷〬 〴〳〸〬 〴〴〰ほ〴〴〴〬〴〴〸〬 〴〵〷〬 〴〵〸〬 〴〸〸〬 〵〲〲〬 〵〵〳きぐぉ〺〺ぇひちばとっはねね〬 〲〶〰〬 〴〸〸〬 〴〹〵〬 〵〵〲きぐぉ〺〺ぇひづぱふづびぴ〬 〳〹〰〬 〳〹〰〬 〴〸〸〬 〵〵〳きぐぉ〺〺ぇひはふば〬 〲〰〲〬 〲〰〳ほ〲〰〸〬 〲〱〲〬 〲〲〹〬 〳〵〱〬〳〶〶〬 〳〶〷〬 〴〱〴〬 〴〸〸〬 〵〲〲〬 〵〵〳きぐぉ〺〺ぉのては〬 〲〸〵〬 〳〱〱〬 〳〱〱ほ〳〱〵〬 〳〲〱〬 〳〲〴〬〳〲〶〬 〳〳〳ほ〳〳〸〬 〴〰〸〬 〴〱〱〬 〴〱〵〬 〴〱〶〬〴〱〹〬 〴〸〸〬 〵〲〲〬 〵〵〳きぐぉ〺〺ぉのぴづひっはねね〬 〴〸〸〬 〴〹〵〬 〵〵〲きぐぉ〺〺ぉのぴひちっはねね〬 〴〸〸〬 〴〹〵〬 〵〵〲きぐぉ〺〺く》びづぴ〬 〱〹〬 〲〳〬 〴〱〲〬 〴〱〳〬 〴〱〹〬 〴〲〱〬〴〲〵ほ〴〲〸〬 〴〳〲〬 〴〳〳〬 〴〳〸〬 〴〴〰〬 〴〴〱〬〴〵〲〬 〴〶〰〬 〵〵〲きぐぉ〺〺くば〬 〱〷〲〬 〱〸〱〬 〱〸〴ほ〱〸〸〬 〱〹〰〬 〱〹〱〬 〳〵〸〬〴〸〸〬 〵〲〲〬 〵〵〳きぐぉ〺〺ぐひづぱふづびぴ〬 〷〹〬 〴〸〸〬 〵〵〳きぐぉ〺〺げづぱふづびぴ〬 〵〹ほ〶〱〬 〶〲〬 〶〳〬 〶〴〬 〶〷ほ〷〱〬〷〳〬 〷〷〬 〷〹ほ〸〲〬 〳〹〰〬 〳〹〳〬 〴〲〷〬 〴〲〸〬〴〳〱〬 〴〳〲〬 〴〳〵〬 〴〸〸〬 〵〲〲〬 〵〵〳きぐぉ〺〺こぴちぴふび〬 〳〷〬 〳〹〬 〶〲〬 〶〳〬 〶〷ほ〷〱〬 〷〳ほ〷〵〬 〷〸〬 〸〳〬 〸〴〬 〱〱〳〬 〳〹〱〬 〳〹〶〬 〳〹〷〬〴〲〵ほ〴〳〰〬 〴〳〴〬 〴〳〵〬 〴〳〷〬 〴〴〱ほ〴〴〴〬〴〸〸〬 〴〹〰〬 〵〲〵〬 〵〵〲きぐぉ〺〺しどの〬 〲〴〲ほ〲〴〴〬 〲〵〱〬 〲〵〲〬 〲〹〰〬 〲〹〱〬〲〹〹〬 〳〴〸〬 〳〵〰〬 〳〵〱〬 〳〵〳〬 〳〵〵〬 〳〵〸〬〳〶〵ほ〳〶〸〬 〳〷〰〬 〴〸〸〬 〵〲〲〬 〵〵〳きぐぉたぁどのぴ〬 〱〹〬 〲〲〬 〳〵〬 〸〹〬 〸〹〬 〹〲〬 〹〴〬 〹〶〬〱〰〵〬 〱〰〸〬 〱〰〹〬 〱〱〹〬 〱〳〸〬 〱〳〹〬 〳〴〸〬〳〵〳〬 〳〵〵〬 〳〵〸〬 〴〴〸〬 〴〵〱〬 〴〷〹ほ〴〸〱〬〵〰〳〬 〵〲〸〬 〵〲〸〬 〵〳〰〬 〵〵〲きぐぉたぃはねね〬 〳〲〬 〲〰〴〬 〲〰〹ほ〲〱〲〬 〲〱〵〬 〲〱〸〬〲〲〸ほ〲〳〱〬 〲〳〷〬 〲〴〰〬 〲〴〱〬 〵〴〵〬 〵〴〷〬〵〵〲
きぐぉたいちぴちぴべばづ〬 〹〰〬 〵〰〷〬 〵〴〲ほ〵〴〵〬 〵〴〷〬 〵〵〲きぐぉたぅひひとちのつぬづひ〬 〲〸〸〬 〲〸〹ほ〲〹〲〬 〴〸〴〬 〴〸〵〬〵〲〲〬 〵〴〰〬 〵〴〷〬 〵〵〲きぐぉたうどぬづ〬 〲〹〲〬 〲〹〹〬 〴〰〸〬 〴〱〱ほ〴〱〶〬 〴〱〹〬〴〲〱〬 〴〲〵ほ〴〳〵〬 〴〳〷〬 〴〳〸〬 〴〴〰ほ〴〴〴〬〴〴〸〬 〴〵〷〬 〴〵〸〬 〵〲〲〬 〵〴〷〬 〵〵〲きぐぉたうどのぴ〬 〵〲〱〬 〵〵〲〬 〶〲〰
きぐぉたぇひはふば〬 〲〰〲〬 〲〰〳ほ〲〰〸〬 〲〱〲〬 〲〲〹〬 〳〵〱〬〳〶〶〬 〳〶〷〬 〴〱〴〬 〵〲〲〬 〵〴〷〬 〵〵〲
〶〴〳

〶〴〴
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぉのては〬 〲〸〵〬 〳〱〱〬 〳〱〱ほ〳〱〵〬 〳〲〱〬 〳〲〴〬〳〲〶〬 〳〳〳ほ〳〳〸〬 〴〰〸〬 〴〱〱〬 〴〱〵〬 〴〱〶〬〴〱〹〬 〵〲〲〬 〵〴〷〬 〵〵〲〬 〶〲〳きぐぉたく》びづぴ〬 〱〹〬 〲〲〬 〳〵〬 〴〱〲〬 〴〱〳〬 〴〱〹〬 〴〲〱〬〴〲〵ほ〴〲〸〬 〴〳〲〬 〴〳〳〬 〴〳〸〬 〴〴〰〬 〴〴〱〬〴〵〲〬 〴〶〰〬 〴〶〰〬 〵〲〰〬 〵〵〲きぐぉたくば〬 〱〷〲〬 〱〸〱〬 〱〸〴ほ〱〸〸〬 〱〹〰〬 〱〹〱〬 〳〵〸〬〵〲〲〬 〵〴〶〬 〵〴〷〬 〵〵〲きぐぉたげづぱふづびぴ〬 〵〹ほ〶〱〬 〶〲〬 〶〳〬 〶〴〬 〶〷ほ〷〱〬〷〳〬 〷〷〬 〷〹ほ〸〲〬 〳〹〰〬 〳〹〳〬 〴〲〷〬 〴〲〸〬〴〳〱〬 〴〳〲〬 〴〳〵〬 〵〲〲〬 〵〴〷〬 〵〵〲きぐぉたこぴちぴふび〬 〳〷〬 〳〹〬 〶〲〬 〶〳〬 〶〷ほ〷〱〬 〷〳ほ〷〵〬 〷〸〬 〸〳〬 〸〴〬 〱〱〳〬 〳〹〱〬 〳〹〶〬 〳〹〷〬〴〲〵ほ〴〳〰〬 〴〳〴〬 〴〳〵〬 〴〳〷〬 〴〴〱ほ〴〴〴〬〵〲〵〬 〵〵〱〬 〵〵〲きぐぉたしどの〬 〲〴〲ほ〲〴〴〬 〲〵〱〬 〲〵〲〬 〲〹〰〬 〲〹〱〬〲〹〹〬 〳〴〸〬 〳〵〰〬 〳〵〱〬 〳〵〳〬 〳〵〵〬 〳〵〸〬〳〶〵ほ〳〶〸〬 〳〷〰〬 〵〲〲〬 〵〴〷〬 〵〵〲きぐぉ宣言の索引

MPIコールバック関数プロトタイプの索引
属性キャッシングあるいはユーザ定義のリダクション操作のためのぃ言語のぴべばづつづて名の索引．ぃ言語名の記述の近くにあるぴべづばつづてのぃ〫〫言語名およびうはひぴひちの言語の例
きぐぉたぃはねねたっはばべたちぴぴひたてふのっぴどはの〬 〲〱〬 〲〳〷〬〵〴〸〬 〵〵〳
きぐぉたぃはねねたつづぬづぴづたちぴぴひたてふのっぴどはの〬 〲〱〬 〲〳〷〬〵〴〸〬 〵〵〳
きぐぉたぃはねねたづひひとちのつぬづひたての〬 〴〸〵〬 〶〱〹
きぐぉたぃはねねたづひひとちのつぬづひたてふのっぴどはの〬 〲〱〬 〲〸〹〬〴〸〵〬 〵〵〳〬 〶〱〹
きぐぉたぃはばべたてふのっぴどはの〬 〲〱〬 〴〸〲〬 〵〴〹〬 〵〵〶きぐぉたいちぴちひづばたっはのぶづひびどはのたてふのっぴどはの〬 〴〵〲〬 〵〵〳きぐぉたいちぴちひづばたづへぴづのぴたてふのっぴどはの〬 〴〵〱〬 〵〵〳きぐぉたいづぬづぴづたてふのっぴどはの〬 〲〱〬 〴〸〲〬 〵〴〹〬 〵〵〶きぐぉたうどぬづたづひひとちのつぬづひたての〬 〴〸〵〬 〶〱〹
きぐぉたうどぬづたづひひとちのつぬづひたてふのっぴどはの〬 〲〹〲〬 〴〸〵〬〵〵〳〬 〶〱〹
きぐぉたぇひづぱふづびぴたっちのっづぬたてふのっぴどはの〬 〳〹〲〬 〵〵〳きぐぉたぇひづぱふづびぴたてひづづたてふのっぴどはの〬 〳〹〱〬 〵〵〳きぐぉたぇひづぱふづびぴたぱふづひべたてふのっぴどはの〬 〳〹〱〬 〵〵〳きぐぉたえちのつぬづひたてふのっぴどはの〬 〲〱〬 〴〸〴〬 〵〵〶きぐぉたごべばづたっはばべたちぴぴひたてふのっぴどはの〬 〲〴〴〬 〵〴〸〬〵〵〳きぐぉたごべばづたつづぬづぴづたちぴぴひたてふのっぴどはの〬 〲〴〵〬 〵〴〸〬〵〵〳きぐぉたさびづひたてふのっぴどはの〬 〱〸〱〬 〵〵〳きぐぉたしどのたっはばべたちぴぴひたてふのっぴどはの〬 〲〴〲〬 〵〴〸〬〵〵〳きぐぉたしどのたつづぬづぴづたちぴぴひたてふのっぴどはの〬 〲〴〲〬 〵〴〸〬〵〵〳きぐぉたしどのたづひひとちのつぬづひたての〬 〴〸〵〬 〶〱〹〶〴〵

きぐぉたしどのたづひひとちのつぬづひたてふのっぴどはの〬 〲〹〰〬 〴〸〵〬〵〵〳〬 〶〱〹

MPI関数の索引
下線がついたページ番号は関数定義であることを示す．
きぐぉたぁあくげご〬 〱〸〲〬 〲〸〷〬 〳〰〲〬 〳〰〵〬 〳〴〴〬 〵〲〱〬〶〲〳
きぐぉたぁぃぃさきさがぁごぅ〬 〳〴〷〬 〳〵〱〬 〳〵〲〬 〳〵〸〬〳〵〸ほ〳〶〰〬 〳〸〳〬 〶〱〹〬 〶〲〳〬 〶〲〴きぐぉたぁいいたぅげげくげたぃがぁここ〬 〲〹〶〬 〲〹〷
きぐぉたぁいいたぅげげくげたぃくいぅ〬 〲〹〷
きぐぉたぁいいたぅげげくげたこごげぉぎぇ〬 〲〹〸〬 〲〹〸
きぐぉたぁいいげぅここ〬 〲〱〬 〱〰〵〬 〴〸〱〬 〵〲〸
きぐぉたぁががぇぁごえぅげ〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〶〴〬〱〶〴ほ〱〶〷
きぐぉたぁががぇぁごえぅげざ〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〶〵〬〱〶〵〬 〱〶〶
きぐぉたぁががくぃたきぅき〬 〲〸〵〬 〲〸〵〬 〲〸〶〬 〲〹〴〬〳〴〹〬 〳〵〰〬 〳〵〴〬 〳〷〱〬 〵〰〲きぐぉたぁががげぅいさぃぅ〬 〱〴〱〬 〱〴〴ほ〱〴〶〬 〱〷〴〬 〱〸〱〬〱〸〵〬 〱〸〵〬 〶〲〱きぐぉたぁががごくぁがが〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〶〷〬 〱〶〷ほ〱〷〰〬 〶〱〸きぐぉたぁががごくぁががざ〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〶〸〬〱〶〹ほ〱〷〱〬 〶〱〸
きぐぉたぁががごくぁががし〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〷〰〬〱〷〱〬 〱〷〲〬 〶〱〸
きぐぉたぁごごげたいぅがぅごぅ〬 〲〱〬 〲〴〱〬 〲〴〶〬 〴〸〴
きぐぉたぁごごげたぇぅご〬 〲〱〬 〲〴〱〬 〲〴〶〬 〴〸〳〬 〵〲〹
きぐぉたぁごごげたぐさご〬 〲〱〬 〲〴〰〬 〲〴〶〬 〴〸〳〬 〵〲〹〬〵〳〰〬 〵〳〲〬 〵〳〳きぐぉたあぁげげぉぅげ〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〴〸〬 〱〴〸〬〴〶〲きぐぉたあぃぁこご〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〴〸〬 〱〴〸〬 〱〴〹〬〱〷〳〬 〴〸〹
きぐぉたあくごごくき〬 〵〰〷〶〴〶きぐぉたあこぅぎい〬 〴〸〬 〵〶〬 〲〸〴〬 〳〰〳きぐぉたあこぅぎいたぉぎぉご〬 〷〹〬 〸〱
きぐぉたあさううぅげたぁごごぁぃえ〬 〲〵〬 〵〴〬 〶〳きぐぉたあさううぅげたいぅごぁぃえ〬 〵〴〬 〳〰〳きぐぉたぃぁぎぃぅが〬 〵〰〬 〶〳〬 〷〴〬 〷〷〬 〷〷〬 〷〸〬 〳〸〹〬〳〹〲〬 〳〹〳
きぐぉたぃぁげごたぃくくげいこ〬 〲〵〷〬 〲〷〱〬 〲〷〱〬 〶〲〲きぐぉたぃぁげごたぃげぅぁごぅ〬 〲〲〷〬 〲〵〷〬 〲〵〸〬 〲〵〸ほ〲〶〰〬 〲〷〰〬 〲〷〷〬 〲〷〸〬 〶〲〱きぐぉたぃぁげごたぇぅご〬 〲〵〷〬 〲〷〰〬 〲〷〰〬 〶〲〲きぐぉたぃぁげごたきぁぐ〬 〲〵〸〬 〲〷〷〬 〲〷〸
きぐぉたぃぁげごたげぁぎか〬 〲〵〷〬 〲〷〰〬 〲〷〱〬 〶〲〲きぐぉたぃぁげごたこえぉうご〬 〲〵〷〬 〲〷〵〬 〲〷〵〬 〲〷〶〬〶〲〲
きぐぉたぃぁげごたこさあ〬 〲〵〷〬 〲〵〸〬 〲〷〶〬 〲〷〷〬 〲〷〸〬〶〲〲きぐぉたぃぁげごいぉきたぇぅご〬 〲〵〷〬 〲〷〰〬 〲〷〰〬 〶〲〲きぐぉたぃがくこぅたぐくげご〬 〳〳〳〬 〳〳〴〬 〳〳〶きぐぉたぃくききたぁぃぃぅぐご〬 〳〳〲〬 〳〳〳〬 〳〳〴〬 〳〳〴〬〳〳〵〬 〳〴〲〬 〳〴〳きぐぉたぃくききたぃ〲う〬 〵〲〲きぐぉたぃくききたぃぁががたぅげげえぁぎいがぅげ〬 〲〹〸〬〲〹〹〬 〳〰〰
きぐぉたぃくききたぃがくぎぅ〬 〴〹〶
きぐぉたぃくききたぃくきぐぁげぅ〬 〲〱〰〬 〲〲〸
きぐぉたぃくききたぃくぎぎぅぃご〬 〲〹〴〬 〳〳〵〬 〳〳〵〬〳〴〲〬 〳〴〳
きぐぉたぃくききたぃげぅぁごぅ〬 〲〰〸〬 〲〱〲〬 〲〱〳〬 〲〱〵ほ〲〱〷〬 〲〵〷〬 〶〱〸〬 〶〱〹
きぐぉたぃくききたぃげぅぁごぅたぅげげえぁぎいがぅげ〬〲〱〬 〲〸〸〬 〲〸〸〬 〲〹〰〬 〴〸〴〬 〵〵〵きぐぉ関数の索引
きぐぉたぃくききたぃげぅぁごぅたかぅすざぁが〬 〲〱〬 〲〳〵〬〲〳〶〬 〲〳〹〬 〲〴〶〬 〴〸〱〬 〵〲〹〬 〵〵〴〬 〶〲〱きぐぉたぃくききたいぅがぅごぅたぁごごげ〬 〲〱〬 〲〳〵〬〲〳〸ほ〲〴〰〬 〲〴〱〬 〲〴〶〬 〴〸〳
きぐぉたぃくききたいぉこぃくぎぎぅぃご〬 〲〴〶〬 〳〲〵〬 〳〲〶〬〳〴〳〬 〳〴〴〬 〳〴〴きぐぉたぃくききたいさぐ〬 〲〰〴〬 〲〰〸〬 〲〱〱〬 〲〱〲〬 〲〱〳〬〲〱〹〬 〲〲〹〬 〲〳〱〬 〲〳〵〬 〲〳〷〬 〲〳〸〬 〲〴〱〬〲〴〶〬 〲〵〳〬 〴〸〲
きぐぉたぃくききたいさぐたうぎ〬 〲〱〬 〲〳〸〬 〲〳〸〬 〲〳〹〬〵〴〸
きぐぉたぃくききたう〲ぃ〬 〵〲〱きぐぉたぃくききたうげぅぅ〬 〲〰〸〬 〲〱〲〬 〲〱〸〬 〲〱〹〬〲〲〹〬 〲〳〱〬 〲〳〸〬 〲〳〹〬 〲〴〱〬 〲〴〶〬 〳〰〶〬〳〲〵〬 〳〴〳〬 〳〴〴〬 〴〸〲〬 〴〹〱
きぐぉたぃくききたうげぅぅたかぅすざぁが〬 〲〱〬 〲〳〵〬〲〳〹〬 〲〴〶〬 〴〸〲
きぐぉたぃくききたぇぅごたぁごごげ〬 〲〱〬 〲〳〵〬 〲〴〰〬〲〴〰〬 〲〴〶〬 〲〸〲〬 〴〸〳〬 〵〳〰〬 〵〳〲きぐぉたぃくききたぇぅごたぅげげえぁぎいがぅげ〬 〲〱〬〲〸〸〬 〲〹〰〬 〴〸〵〬 〶〲〳きぐぉたぃくききたぇぅごたぎぁきぅ〬 〲〴〹〬 〲〴〹〬 〲〵〰〬〶〲〱
きぐぉたぃくききたぇぅごたぐぁげぅぎご〬 〲〵〰〬 〳〲〱〬〳〲〵〬 〳〲〵
きぐぉたぃくききたぇげくさぐ〬 〱〷〬 〲〰〲〬 〲〰〴〬 〲〰〴〬〲〰〸ほ〲〱〰〬 〲〲〸〬 〲〸〸〬 〶〲〳きぐぉたぃくききたおくぉぎ〬 〳〴〵〬 〳〴〵〬 〳〴〶きぐぉたぃくききたぎさががたぃくぐすたうぎ〬 〲〱〬 〲〳〸〬〲〳〸〬 〲〳〹〬 〵〴〸
きぐぉたぃくききたぎさががたいぅがぅごぅたうぎ〬 〲〱〬 〲〳〸〬〲〳〸〬 〲〳〹〬 〵〴〸
きぐぉたぃくききたげぁぎか〬 〲〰〹〬 〲〱〰〬 〲〲〸
きぐぉたぃくききたげぅきくごぅたぇげくさぐ〬 〲〲〹
きぐぉたぃくききたげぅきくごぅたこぉずぅ〬 〲〲〹〬 〲〲〹
きぐぉたぃくききたこぅごたぁごごげ〬 〲〱〬 〲〳〵〬 〲〳〸〬〲〴〰〬 〲〴〶〬 〴〸〳〬 〵〳〰〬 〵〳〳きぐぉたぃくききたこぅごたぅげげえぁぎいがぅげ〬 〲〱〬 〲〸〸〬〲〸〹〬 〴〸〴きぐぉたぃくききたこぅごたぎぁきぅ〬 〲〴〸〬 〲〴〹〶〴〷〱
きぐぉたぃくききたこぉずぅ〬 〲〵〬 〲〰〹〬 〲〰〹〬 〲〱〰〬 〲〲〸〲
きぐぉたぃくききたこぐぁしぎ〬 〳〰〸〬 〳〱〸〬 〳〲〰〬 〳〲〱〬〳〳〲〱ほ〳〲〹〬 〳〴〱ほ〳〴〳〴きぐぉたぃくききたこぐぁしぎたきさがごぉぐがぅ〬 〳〰〸〬〵〶〳〱〸〬 〳〲〰〬 〳〲〵〬 〳〲〶〬 〳〲〷〬 〳〴〲〬 〳〴〳〷きぐぉたぃくききたこぐがぉご〬 〲〱〳〬 〲〱〵〬 〲〱〶〬 〲〱〷〬〸〲〵〳〬 〲〵〷〬 〲〵〸〬 〲〶〰〬 〲〷〷〬 〲〷〸〬 〶〱〸〹きぐぉたぃくききたごぅこごたぉぎごぅげ〬 〲〲〶〬 〲〲〸〱〰
きぐぉたぃくききたしくげがい〬 〳〰〴〬 〶〲〳〱〱〱〲きぐぉたいぉきこたぃげぅぁごぅ〬 〲〵〷〬 〲〵〹〬 〲〵〹〱〳
きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅ〬 〲〵〷〬 〲〶〲〬〱〴〲〶〵〬 〲〶〵〬 〲〶〷〬 〲〶〸〬 〲〷〴〬 〲〷〵〬 〶〱〹〱〵
きぐぉたいどびぴたでひちばとたっひづちぴづ〬 〲〶〶〱〶きぐぉたいぉこごたぇげぁぐえたぃげぅぁごぅたぁいおぁぃぅぎご〬〱〷〱〸〲〵〷〬 〲〶〲〬 〲〶〳〬 〲〶〳〬 〲〶〴〬 〲〶〷〬 〲〷〴〬〱〹〲〷〵〬 〶〱〹〲〰
きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげたぃくさぎご〬
〲〱
〲〷〵
〲〲
きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこ〬 〲〷〳〬〲〳〲〴〲〷〴〬 〲〷〵
きぐぉたいぉこごたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご〬〲〵〲〶〲〷〳〬 〲〷〴〬 〲〷〴〲〷きぐぉたいぉこごたぎぅぉぇえあくげこ〬 〲〵〸〬 〶〱〹〲〸きぐぉたいぉこごたぎぅぉぇえあくげこたぃくさぎご〬 〲〵〸〬
〲〹
〳〰
〶〱〹
〳〱
きぐぉたいさぐたうぎ〬 〲〱〬 〲〳〸〬 〴〸〲〳〲
きぐぉたぅげげえぁぎいがぅげたぃ〲う〬 〵〲〲〳〳きぐぉたぅげげえぁぎいがぅげたぃげぅぁごぅ〬 〲〱〬 〲〸〹〬
〳〴
〴〸〴
〳〵
〳〶
きぐぉたぅげげえぁぎいがぅげたう〲ぃ〬 〵〲〲きぐぉたぅげげえぁぎいがぅげたうげぅぅ〬 〲〸〸〬 〲〹〲〬 〶〲〳 〳〷〳〸
きぐぉたぅげげえぁぎいがぅげたぇぅご〬 〲〱〬 〲〸〸〬 〲〹〰〬〳〹〴〸〵〬 〶〲〳〴〰
きぐぉたぅげげえぁぎいがぅげたこぅご〬 〲〱〬 〲〹〰〬 〴〸〴〴〱〴〲
きぐぉたぅげげくげたぃがぁここ〬 〲〹〳〬 〲〹〶〬 〲〹〶
きぐぉたぅげげくげたこごげぉぎぇ〬 〲〹〳〬 〲〹〳〬 〲〹〵〬 〲〹〶〬 〴〳
〴〴
〲〹〸
〴〵
きぐぉたぅじこぃぁぎ〬 〱〴〱〬 〱〴〵〬 〱〷〴〬 〱〸〱〬 〱〹〰〬〴〶〱〹〱〬 〶〱〸〴〷〴〸
きぐぉたうぉがぅたぃ〲う〬 〵〲〲

〶〴〸
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたうぉがぅたぃぁががたぅげげえぁぎいがぅげ〬 〲〹〹〬〲〹〹〬 〳〰〰
きぐぉたうぉがぅたぃがくこぅ〬 〳〴〴〬 〴〰〷〬 〴〰〸〬 〴〱〱〬〴〱〱
きぐぉたうぉがぅたぃげぅぁごぅたぅげげえぁぎいがぅげ〬 〲〸〸〬〲〹〱〬 〲〹〲〬 〵〵〵きぐぉたうぉがぅたいぅがぅごぅ〬 〴〱〰〬 〴〱〱〬 〴〱〱〬 〴〱〵〬〴〱〸〬 〴〶〶
きぐぉたうぉがぅたう〲ぃ〬 〵〲〲きぐぉたうぉがぅたぇぅごたぁきくいぅ〬 〴〱〴〬 〴〱〴きぐぉたうぉがぅたぇぅごたぁごくきぉぃぉごす〬 〴〵〷〬 〴〵〷きぐぉたうぉがぅたぇぅごたあすごぅたくううこぅご〬 〴〲〸〬 〴〳〳〬〴〳〳〬 〴〳〸きぐぉたうぉがぅたぇぅごたぅげげえぁぎいがぅげ〬 〲〸〸〬 〲〹〲〬〴〶〶〬 〶〲〳
きぐぉたうぉがぅたぇぅごたぇげくさぐ〬 〴〱〴〬 〴〱〴きぐぉたうぉがぅたぇぅごたぉぎうく〬 〴〱〶〬 〴〱〶〬 〴〱〸〬 〶〲〴きぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎ〬 〴〳〳〬 〴〳〳きぐぉたうぉがぅたぇぅごたぐくこぉごぉくぎたこえぁげぅい〬 〴〳〷〬〴〳〸〬 〴〳〸きぐぉたうぉがぅたぇぅごたこぉずぅ〬 〴〱〳〬 〴〱〴〬 〴〶〱きぐぉたうぉがぅたぇぅごたごすぐぅたぅじごぅぎご〬 〴〴〷〬〴〴〸〬 〴〵〴
きぐぉたうぉがぅたぇぅごたざぉぅし〬 〴〲〱〬 〴〲〱きぐぉたうぉがぅたぉげぅぁい〬 〴〲〲〬 〴〳〱〬 〴〳〱〬 〴〳〹〬〴〵〵〬 〴〵〶
きぐぉたうぉがぅたぉげぅぁいたぁご〬 〴〲〲〬 〴〲〷〬 〴〲〷きぐぉたうぉがぅたぉげぅぁいたこえぁげぅい〬 〴〲〲〬 〴〳〵〬〴〳〵
きぐぉたうぉがぅたぉしげぉごぅ〬 〴〲〲〬 〴〳〲〬 〴〳〲きぐぉたうぉがぅたぉしげぉごぅたぁご〬 〴〲〲〬 〴〲〸〬 〴〲〸
きぐぉたうぉがぅたぉしげぉごぅたこえぁげぅい〬 〴〲〲〬 〴〳〵〬〴〳〶
きぐぉたうぉがぅたくぐぅぎ〬 〲〹〵〬 〴〰〰〬 〴〰〷〬 〴〰〸〬 〴〰〸〬〴〱〰〬 〴〱〵〬 〴〱〶〬 〴〱〸〬 〴〲〰〬 〴〳〳〬 〴〵〹ほ〴〶〱〬 〴〶〶〬 〴〶〷きぐぉたうぉがぅたぐげぅぁががくぃぁごぅ〬 〴〱〲〬 〴〱〳〬 〴〱〳〬〴〵〶〬 〴〶〰〬 〴〶〱きぐぉたうぉがぅたげぅぁい〬 〴〲〲〬 〴〲〸〬 〴〲〹ほ〴〳〱〬 〴〶〰〬〴〶〱

きぐぉ関数の索引
きぐぉたうぉがぅたげぅぁいたぁがが〬 〴〲〲〬 〴〲〹〬 〴〳〰〬 〴〳〹〬〴〴〰
きぐぉたうぉがぅたげぅぁいたぁががたあぅぇぉぎ〬 〴〲〲〬 〴〳〹〬〴〴〰〬 〴〴〲〬 〴〵〵きぐぉたうぉがぅたげぅぁいたぁががたぅぎい〬 〴〲〲〬 〴〳〹〬〴〴〰〬 〴〴〲〬 〴〵〵きぐぉたうぉがぅたげぅぁいたぁご〬 〴〲〲〬 〴〲〵〬 〴〲〶〬 〴〲〷きぐぉたうぉがぅたげぅぁいたぁごたぁがが〬 〴〲〲〬 〴〲〶〬 〴〲〶きぐぉたうぉがぅたげぅぁいたぁごたぁががたあぅぇぉぎ〬 〴〲〲〬〴〴〰
きぐぉたうぉがぅたげぅぁいたぁごたぁががたぅぎい〬 〴〲〲〬 〴〴〱きぐぉたうぉがぅたげぅぁいたくげいぅげぅい〬 〴〲〲〬 〴〳〷〬〴〳〷
きぐぉたうぉがぅたげぅぁいたくげいぅげぅいたあぅぇぉぎ〬 〴〲〲〬〴〴〳
きぐぉたうぉがぅたげぅぁいたくげいぅげぅいたぅぎい〬 〴〲〲〬〴〴〳
きぐぉたうぉがぅたげぅぁいたこえぁげぅい〬 〴〲〲〬 〴〳〴〬 〴〳〴〬〴〳〵〬 〴〳〷
きぐぉたうぉがぅたこぅぅか〬 〴〳〲〬 〴〳〲〬 〴〳〳きぐぉたうぉがぅたこぅぅかたこえぁげぅい〬 〴〳〷〬 〴〳〸〬 〴〳〸〬〴〵〸
きぐぉたうぉがぅたこぅごたぁごくきぉぃぉごす〬 〴〱〰〬 〴〵〶〬〴〵〷〬 〴〵〷
きぐぉたうぉがぅたこぅごたぅげげえぁぎいがぅげ〬 〲〸〸〬 〲〹〲〬〴〶〶
きぐぉたうぉがぅたこぅごたぉぎうく〬 〴〱〵〬 〴〱〵〬 〴〱〶〬 〴〱〸〬〶〲〴きぐぉたうぉがぅたこぅごたこぉずぅ〬 〴〱〲〬 〴〱〲〬 〴〱〳〬 〴〵〶〬〴〵〸〬 〴〶〰〬 〴〶〱きぐぉたうぉがぅたこぅごたざぉぅし〬 〱〰〰〬 〲〹〵〬 〴〰〹〬 〴〱〵〬〴〱〶〬 〴〱〸〬 〴〱〹〬 〴〱〹ほ〴〲〱〬 〴〳〳〬 〴〳〸〬〴〴〵〬 〴〵〱〬 〴〵〹〬 〴〶〰〬 〴〶〷〬 〶〲〴きぐぉたうぉがぅたこすぎぃ〬 〴〱〱〬 〴〲〲〬 〴〵〵〬 〴〵〶〬 〴〵〸〬〴〵〸〬 〴〶〳
きぐぉたうぉがぅたしげぉごぅ〬 〴〲〲〬 〴〲〳〬 〴〳〰〬 〴〳〰ほ〴〳〲〬 〴〶〰
きぐぉたうぉがぅたしげぉごぅたぁがが〬 〴〲〲〬 〴〳〰〬 〴〳〱きぐぉたうぉがぅたしげぉごぅたぁががたあぅぇぉぎ〬 〴〲〲〬 〴〴〲きぐぉたうぉがぅたしげぉごぅたぁががたぅぎい〬 〴〲〲〬 〴〴〳きぐぉ関数の索引
きぐぉたうぉがぅたしげぉごぅたぁご〬 〴〲〲〬 〴〲〳〬 〴〲〶〬 〴〲〶ほ〴〲〸
きぐぉたうぉがぅたしげぉごぅたぁごたぁがが〬 〴〲〲〬 〴〲〷〬〴〲〷
きぐぉたうぉがぅたしげぉごぅたぁごたぁががたあぅぇぉぎ〬 〴〲〲〬〴〴〱
きぐぉたうぉがぅたしげぉごぅたぁごたぁががたぅぎい〬 〴〲〲〬〴〴〱
きぐぉたうぉがぅたしげぉごぅたくげいぅげぅい〬 〴〲〲〬 〴〳〶〬〴〳〷〬 〴〳〷
きぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたあぅぇぉぎ〬〴〲〲〬 〴〴〴
きぐぉたうぉがぅたしげぉごぅたくげいぅげぅいたぅぎい〬 〴〲〲〬〴〴〴
きぐぉたうぉがぅたしげぉごぅたこえぁげぅい〬 〴〲〲〬 〴〲〳〬〴〳〵〬 〴〳〵ほ〴〳〷きぐぉたうぉぎぁがぉずぅ〬 〱〸〬 〲〸〬 〲〸〲〬 〳〰〲〬 〳〰〲ほ〳〰〷〬 〳〴〴〬 〳〹〹〬 〴〰〸〬 〵〲〱〬 〵〲〵〬 〶〲〳きぐぉたうぉぎぁがぉずぅい〬 〲〴〬 〳〰〱〬 〳〰〴〬 〳〰〶〬 〳〰〷〬〳〰〷〬 〵〲〱
きぐぉたうげぅぅたきぅき〬 〲〸〵〬 〲〸〵〬 〲〸〶〬 〲〹〴
きぐぉたぇぁごえぅげ〬 〱〴〱〬 〱〴〴ほ〱〴〶〬 〱〴〹〬 〱〵〱〬〱〵〲〬 〱〵〹〬 〱〶〴〬 〱〷〳きぐぉたぇぁごえぅげざ〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〵〱〬 〱〵〱ほ〱〵〳〬 〱〶〰〬 〱〶〵〬 〱〶〶きぐぉたぇぅご〬 〳〴〷〬 〳〵〱〬 〳〵〲〬 〳〵〵〬 〳〶〰〬 〳〸〲〬〳〸〳〬 〶〲〳
きぐぉたぇぅごたぁいいげぅここ〬 〲〱〬 〸〹〬 〱〰〵〬 〱〰〵〬〱〰〶〬 〱〱〵〬 〴〸〰〬 〵〰〵〬 〵〰〷〬 〵〲〶〬 〵〲〷きぐぉたぇぅごたぃくさぎご〬 〳〹〬 〳〹〬 〴〰〬 〶〲〬 〱〱〴〬〳〹〶〬 〳〹〷〬 〴〲〵〬 〶〲〰
きぐぉたぇぅごたぅがぅきぅぎごこ〬 〶〲〬 〱〱〳〬 〱〱〳〬 〱〱〴〬〳〹〶〬 〳〹〷〬 〴〲〵きぐぉたぇぅごたぐげくぃぅここくげたぎぁきぅ〬 〲〸〴〬 〲〸〴〬〶〲〲きぐぉたぇぅごたざぅげこぉくぎ〬 〲〸〱〬 〲〸〲〬 〳〰〱〬 〳〰〴きぐぉたぇげぁぐえたぃげぅぁごぅ〬 〲〵〷〬 〲〶〰〬 〲〶〰〬〲〶〹〬 〲〷〲〬 〲〷〸〬 〶〲〱〬 〶〲〲きぐぉたぇげぁぐえたぇぅご〬 〲〵〷〬 〲〶〹〬 〲〶〹
きぐぉたぇげぁぐえたきぁぐ〬 〲〵〸〬 〲〷〸〬 〲〷〸〶〴〹きぐぉたぇげぁぐえたぎぅぉぇえあくげこ〬 〲〵〷〬 〲〷〲〬 〲〷〲〬〶〱〹
きぐぉたぇげぁぐえたぎぅぉぇえあくげこたぃくさぎご〬 〲〵〷〬〲〷〱〬 〲〷〲〬 〶〱〹
きぐぉたぇげぁぐえいぉきこたぇぅご〬 〲〵〷〬 〲〶〹〬 〲〶〹
きぐぉたぇげぅけさぅこごたぃくきぐがぅごぅ〬 〳〹〰ほ〳〹〲〬〳〹〳〬 〳〹〳〬 〳〹〴
きぐぉたぇげぅけさぅこごたこごぁげご〬 〳〹〰〬 〳〹〰〬 〵〵〵〬〶〲〰
きぐぉたぇげくさぐたぃ〲う〬 〵〲〲きぐぉたぇげくさぐたぃくきぐぁげぅ〬 〲〰〳〬 〲〰〶きぐぉたぇげくさぐたいぉううぅげぅぎぃぅ〬 〲〰〵きぐぉたぇげくさぐたぅじぃが〬 〲〰〶〬 〲〰〶〬 〲〰〸
きぐぉたぇげくさぐたう〲ぃ〬 〵〲〲きぐぉたぇげくさぐたうげぅぅ〬 〲〰〸〬 〲〰〸ほ〲〱〰〬 〲〸〸〬〶〲〳
きぐぉたぇげくさぐたぉぎぃが〬 〲〰〶〬 〲〰〶〬 〲〰〷きぐぉたぇげくさぐたぉぎごぅげこぅぃごぉくぎ〬 〲〰〵きぐぉたぇげくさぐたげぁぎぇぅたぅじぃが〬 〲〰〷〬 〲〰〸
きぐぉたぇげくさぐたげぁぎぇぅたぉぎぃが〬 〲〰〷〬 〲〰〷きぐぉたぇげくさぐたげぁぎか〬 〲〰〳〬 〲〱〰
きぐぉたぇげくさぐたこぉずぅ〬 〲〰〲〬 〲〰〹
きぐぉたぇげくさぐたごげぁぎこがぁごぅたげぁぎかこ〬 〲〰〳〬〲〰〳〬 〶〲〱
きぐぉたぇげくさぐたさぎぉくぎ〬 〲〰〴きぐぉたぉあこぅぎい〬 〵〹〬 〶〳〬 〸〲
きぐぉたぉぎうくたぃ〲う〬 〵〲〲きぐぉたぉぎうくたぃげぅぁごぅ〬 〳〱〲〬 〳〱〲きぐぉたぉぎうくたいぅがぅごぅ〬 〲〹〴〬 〳〱〳〬 〳〱〳〬 〳〱〵きぐぉたぉぎうくたいさぐ〬 〳〱〵〬 〳〱〵きぐぉたぉぎうくたう〲ぃ〬 〵〲〲きぐぉたぉぎうくたうげぅぅ〬 〳〱〵〬 〴〱〶きぐぉたぉぎうくたぇぅご〬 〳〱〱〬 〳〱〳〬 〶〲〳きぐぉたぉぎうくたぇぅごたぎかぅすこ〬 〳〱〱〬 〳〱〴〬 〳〱〴〬〶〲〳
きぐぉたぉぎうくたぇぅごたぎごえかぅす〬 〳〱〱〬 〳〱〴〬 〶〲〳きぐぉたぉぎうくたぇぅごたざぁがさぅがぅぎ〬 〳〱〱〬 〳〱〴〬〶〲〳
きぐぉたぉぎうくたこぅご〬 〳〱〲〬 〳〱〲〬 〳〱〳〬 〳〱〵

〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

〶〵〰
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたぉぎぉご〬 〱〸〬 〲〸〬 〲〰〲〬 〲〸〲〬 〳〰〱〬 〳〰〱〬 〳〰〴ほ〳〰〷〬 〳〲〱ほ〳〲〳〬 〳〲〵〬 〳〴〱〬 〳〴〲〬 〴〰〱〬〴〰〲〬 〴〰〴〬 〴〷〳〬 〵〲〰〬 〵〲〱〬 〵〲〵〬 〶〱〷〬〶〱〹
きぐぉたぉぎぉごたごえげぅぁい〬 〲〰〲〬 〳〰〱〬 〳〰〶〬 〴〰〱〬〴〰〲ほ〴〰〴〬 〵〲〰〬 〶〱〹
きぐぉたぉぎぉごぉぁがぉずぅい〬 〳〰〱〬 〳〰〴〬 〳〰〵〬 〳〰〵〬〳〰〶〬 〴〰〴〬 〵〲〱きぐぉたぉぎぉごぉぁがぉずぅいおよびきぐぉたうぉぎぁがぉずぅい〬〳〰〷きぐぉたぉぎごぅげぃくききたぃげぅぁごぅ〬 〲〱〱〬 〲〲〹〬〲〳〰〬 〲〳〱
きぐぉたぉぎごぅげぃくききたきぅげぇぅ〬 〲〲〶〬 〲〲〹〬〲〳〰〬 〲〳〱〬 〲〳〱きぐぉたぉぐげくあぅ〬 〴〰〬 〷〴〬 〷〴〬 〷〵〬 〳〹〹
きぐぉたぉげぅぃざ〬 〶〱〬 〵〰〴〬 〵〰〵〬 〵〰〷〬 〵〰〸
きぐぉたぉげこぅぎい〬 〶〰
きぐぉたぉこたごえげぅぁいたきぁぉぎ〬 〴〰〲〬 〴〰〳きぐぉたぉこぅぎい〬 〱〳〬 〵〹〬 〸〱〬 〳〰〲〬 〵〰〴きぐぉたぉここぅぎい〬 〶〰
きぐぉたかぅすざぁがたぃげぅぁごぅ〬 〲〱〬 〲〳〷〬 〲〳〹〬〴〸〲〬 〴〸〳〬 〵〵〷きぐぉたかぅすざぁがたうげぅぅ〬 〲〱〬 〲〳〹〬 〲〴〶〬 〴〸〳
きぐぉたがくくかさぐたぎぁきぅ〬 〲〹〴〬 〳〳〲〬 〳〳〶〬 〳〳〸〬〳〳〸
きぐぉたぎさががたぃくぐすたうぎ〬 〲〱〬 〲〳〸〬 〴〸〲
きぐぉたぎさががたいぅがぅごぅたうぎ〬 〲〱〬 〲〳〸〬 〴〸〲
きぐぉたくぐたぃ〲う〬 〵〲〲きぐぉたくぐたぃくききさごぁごぉざぅ〬 〱〸〷〬 〶〱〸
きぐぉたくぐたぃげぅぁごぅ〬 〱〸〱〬 〱〸〱〬 〱〸〳〬 〵〵〴きぐぉたくぐたう〲ぃ〬 〵〲〲きぐぉたくぐたうげぅぅ〬 〱〸〴
きぐぉたくぐぅぎたぐくげご〬 〳〳〲〬 〳〳〳〬 〳〳〳ほ〳〳〶〬 〳〳〸
きぐぉたぐぁぃか〬 〵〶〬 〱〳〲〬 〱〳〵〬 〱〳〷〬 〱〳〸〬 〴〵〲きぐぉたぐぁぃかたぅじごぅげぎぁが〬 〸〬 〱〳〸〬 〱〳〸〬 〵〱〶〬〶〲〱
きぐぉたぐぁぃかたぅじごぅげぎぁがたこぉずぅ〬 〱〳〹
きぐぉたぐぁぃかたこぉずぅ〬 〵〶〬 〱〳〵〬 〱〳〵きぐぉたぐぃくぎごげくが〬 〴〷〲〬 〴〷〳〬 〴〷〳〬 〴〷〴きぐぉ関数の索引
きぐぉたぐげくあぅ〬 〳〷〬 〴〰〬 〴〱〬 〷〴〬 〷〵〬 〷〵〬 〷〶〬〳〹〹
きぐぉたぐさあがぉこえたぎぁきぅ〬 〳〳〲〬 〳〳〶〬 〳〳〶ほ〳〳〸きぐぉたぐさご〬 〳〴〷〬 〳〵〱〬 〳〵〲〬 〳〵〳〬 〳〵〵〬 〳〵〸ほ〳〶〰〬 〳〶〷〬 〳〷〲〬 〳〷〴〬 〳〸〲〬 〶〲〴きぐぉたけさぅげすたごえげぅぁい〬 〴〰〳〬 〴〰〴きぐぉたげぅぃざ〬 〳〲〬 〳〷〬 〳〸〬 〴〰〬 〴〱〬 〷〴〬 〷〶〬 〸〸〬〱〱〲〬 〱〱〳〬 〱〳〳〬 〱〴〳〬 〱〵〰〬 〳〹〷〬 〴〶〲〬〴〸〹〬 〵〰〷ほ〵〰〹きぐぉたげぅぃざたぉぎぉご〬 〸〱〬 〸〱
きぐぉたげぅいさぃぅ〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〷〲〬 〱〷〲ほ〱〷〴〬 〱〸〱ほ〱〸〳〬 〱〸〵〬 〱〸〸ほ〱〹〱〬 〳〵〸〬〳〵〹〬 〶〱〹
きぐぉたげぅいさぃぅたがくぃぁが〬 〱〷〳〬 〱〸〶〬 〶〱〸
きぐぉたげぅいさぃぅたこぃぁごごぅげ〬 〱〴〱〬 〱〴〵〬 〱〴〶〬〱〷〴〬 〱〸〱〬 〱〸〸〬 〱〸〸〬 〱〸〹きぐぉたげぅいさぃぅたこぃぁごごぅげたあがくぃか〬 〱〸〷〬〱〸〷〬 〱〸〸〬 〶〱〸
きぐぉたげぅぇぉこごぅげたいぁごぁげぅぐ〬 〲〹〵〬 〴〵〱〬 〴〵〱ほ〴〵〳〬 〴〶〷〬 〵〵〵きぐぉたげぅけさぅこごたぃ〲う〬 〵〲〲きぐぉたげぅけさぅこごたう〲ぃ〬 〵〲〲きぐぉたげぅけさぅこごたうげぅぅ〬 〲〵〬 〶〴〬 〶〴〬 〶〵〬〷〷〬 〸〲〬 〳〰〲〬 〳〹〲〬 〳〹〳〬 〶〱〸
きぐぉたげぅけさぅこごたぇぅごたこごぁごさこ〬 〴〱〬 〷〳〬〷〳〬 〳〹〱〬 〶〱〸
きぐぉたげこぅぎい〬 〴〸きぐぉたげこぅぎいたぉぎぉご〬 〸〰
きぐぉたこぃぁぎ〬 〱〴〱〬 〱〴〵〬 〱〷〴〬 〱〸〱〬 〱〹〰〬 〱〹〰〬〱〹〱
きぐぉたこぃぁごごぅげ〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〵〸〬 〱〵〹ほ〱〶〱きぐぉたこぃぁごごぅげ を〬 〱〸〸
きぐぉたこぃぁごごぅげざ〬 〱〴〱〬 〱〴〵〬 〱〴〶〬 〱〶〰〬 〱〶〰〬〱〶〱〬 〱〸〹
きぐぉたこぅぎい〬 〳〱〬 〳〲〬 〳〲〬 〴〰〬 〴〳〬 〸〸〬 〱〱〲〬〱〳〲〬 〲〷〹〬 〴〰〸〬 〴〶〲〬 〴〷〴〬 〴〸〹〬 〵〰〳〬〵〰〷
きぐぉたこぅぎいたぉぎぉご〬 〷〹〬 〸〱
きぐぉたこぅぎいげぅぃざ〬 〸〳〬 〲〷〵きぐぉ関数の索引
きぐぉたこぅぎいげぅぃざたげぅぐがぁぃぅ〬 〸〴
きぐぉたこぉずぅくう〬 〵〱〰〬 〵〱〷〬 〵〱〷きぐぉたここぅぎい〬 〴〸きぐぉたここぅぎいたぉぎぉご〬 〸〰
きぐぉたこごぁげご〬 〸〱〬 〸〱〬 〸〲
きぐぉたこごぁげごぁがが〬 〸〲〬 〸〲
きぐぉたこごぁごさこたぃ〲う〬 〵〲〵きぐぉたこごぁごさこたう〲ぃ〬 〵〲〵きぐぉたこごぁごさこたこぅごたぃぁぎぃぅががぅい〬 〳〹〷
きぐぉたこごぁごさこたこぅごたぅがぅきぅぎごこ〬 〳〹〶〬 〳〹〶
きぐぉたごぅこご〬 〱〴〬 〴〱〬 〶〱〬 〶〲〬 〶〳〬 〶〳〬 〶〴〬 〶〶〬〶〸〬 〷〷〬 〸〲〬 〳〰〲〬 〳〹〳〬 〴〲〳〬 〴〲〴きぐぉたごぅこごたぃぁぎぃぅががぅい〬 〶〲ほ〶〴〬 〷〸〬 〷〸〬〳〹〱〬 〳〹〷〬 〴〲〵きぐぉたごぅこごぁがが〬 〶〶〬 〶〹〬 〷〰〬 〳〹〱ほ〳〹〳〬 〳〹〶〬〳〹〹
きぐぉたごぅこごぁぎす〬 〶〲〬 〶〶〬 〶〷〬 〶〸〬 〷〲〬 〳〹〲〬〳〹〳〬 〳〹〶〬 〳〹〹
きぐぉたごぅこごこくきぅ〬 〶〶〬 〷〱〬 〷〱〬 〷〲〬 〳〹〱ほ〳〹〳〬 〳〹〶〬 〳〹〹
きぐぉたごくぐくたごぅこご〬 〲〵〷〬 〲〶〹〬 〲〶〹
きぐぉたごすぐぅたぃ〲う〬 〵〲〲きぐぉたごすぐぅたぃくききぉご〬 〱〱〰〬 〱〱〰〬 〱〱〱〬 〵〲〲きぐぉたごべばづたっはねねどぴ〬 〵〲〲きぐぉたごすぐぅたぃくぎごぉぇさくさこ〬 〱〴〬 〸〹〬 〹〰〬〹〲〬 〱〰〷〬 〱〱〸〬 〴〰〶〬 〴〴〷きぐぉたごすぐぅたぃげぅぁごぅたいぁげげぁす〬 〱〴〬 〴〰〬〱〰〱〬 〱〰〱〬 〱〱〸
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰た〬 〵〱〵きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぃくきぐがぅじ〬 〱〴〬〱〱〸〬 〱〲〰〬 〱〷〵〬 〴〴〹〬 〴〹〴〬 〵〱〰〬 〵〱〳〬〵〱〵〬 〵〱〶
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たぉぎごぅぇぅげ〬 〱〴〬〱〱〸〬 〱〲〰〬 〱〷〵〬 〴〴〹〬 〴〹〴〬 〵〱〰〬 〵〱〴〬〵〱〵〬 〵〱〶
きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たげぅぁが〬 〱〴〬 〱〱〸〬〱〱〹〬 〱〷〵〬 〴〴〹〬 〴〹〴〬 〵〱〰〬 〵〱〳〬 〵〱〳ほ〵〱〶〬 〶〱〸きぐぉたごすぐぅたぃげぅぁごぅたう〹〰たへへへへ〬 〵〱〵〬 〶〲〴〶〵〱きぐぉたごすぐぅたぃげぅぁごぅたえぉぎいぅじぅい〬 〱〴〬 〲〱〬 〱〲〸〹〬 〹〴〬 〹〴〬 〹〶〬 〹〷〬 〱〱〸〬 〴〷〹〳
きぐぉたごすぐぅたぃげぅぁごぅたえざぅぃごくげ〬 〱〴〬 〲〱〬 〴〸〹〬 〹〲〬 〹〲〬 〱〱〸〬 〴〷〹〵
きぐぉたごすぐぅたぃげぅぁごぅたぉぎいぅじぅいたあがくぃか〬 〶〷〱〴〬 〹〶〬 〱〱〸〸きぐぉたごすぐぅたぃげぅぁごぅたかぅすざぁが〬 〲〳〵〬 〲〴〴〬〹〲〴〶〬 〵〲〹〬 〵〵〴〬 〶〲〱〱〰
きぐぉたごすぐぅたぃげぅぁごぅたげぅこぉずぅい〬 〲〰〬 〲〱〬〱〱〱〲〱〰〸〬 〱〱〸〬 〴〴〷〱〳きぐぉたごすぐぅたぃげぅぁごぅたこごげさぃご〬 〱〴〬 〲〱〬〱〴〸〹〬 〹〶〬 〹〷〬 〱〱〸〬 〱〷〱〬 〴〸〰
〱〵
きぐぉたごすぐぅたぃげぅぁごぅたこさあぁげげぁす〬 〱〴〬〱〶〱〷〬 〹〸〬 〱〰〰〬 〱〰〲〬 〱〱〸〱〷〱〸きぐぉたごすぐぅたいぅがぅごぅたぁごごげ〬 〲〳〵〬 〲〴〶〬
〱〹
〲〴〶
〲〰
きぐぉたごすぐぅたいさぐ〬 〱〴〬 〱〱〱〬 〱〱〲〬 〱〱〸〲〱
きぐぉたごすぐぅたいさぐたうぎ〬 〲〴〴〬 〲〴〴〬 〵〴〸〲〲
きぐぉたごすぐぅたぅじごぅぎご〬 〲〱〬 〱〰〸〬 〴〸〱〬 〵〲〸〲〳〲〴
きぐぉたごすぐぅたう〲ぃ〬 〵〲〲〲〵きぐぉたごすぐぅたうげぅぅ〬 〱〱〱〬 〱〱〹〬 〲〴〵〲〶きぐぉたごすぐぅたうげぅぅたかぅすざぁが〬 〲〳〵〬 〲〴〵〬
〲〷
〲〴〶
〲〸
きぐぉたごすぐぅたぇぅごたぁごごげ〬 〲〳〵〬 〲〴〶〬 〲〴〶〲〹〳〰
きぐぉたごすぐぅたぇぅごたぃくぎごぅぎごこ〬 〱〱〶〬 〱〱〷〬〳〱〱〱〹〬 〱〱〹ほ〱〲〱〳〲きぐぉたごすぐぅたぇぅごたぅぎざぅがくぐぅ〬 〱〱〶〬 〱〱〶〬〳〳〱〱〹〬 〱〲〰〬 〵〱〵〳〴きぐぉたごすぐぅたぇぅごたぅじごぅぎご〬 〲〱〬 〱〰〸〬 〱〱〰〬 〳〵〳〶〴〸〱〬 〵〱〷〬 〵〲〶〬 〵〲〸〳〷
きぐぉたごすぐぅたぇぅごたぎぁきぅ〬 〲〵〱〳〸
きぐぉたごすぐぅたぇぅごたごげさぅたぅじごぅぎご〬 〱〰〹〳〹きぐぉたごすぐぅたえぉぎいぅじぅい〬 〲〱〬 〹〵〬 〱〱〷〬 〱〱〸〬 〴〰
〴〸〰〬 〵〲〸〴〱〴〲きぐぉたごすぐぅたえざぅぃごくげ〬 〲〱〬 〹〲〬 〱〱〷〬 〱〱〸〬〴〳〴〷〹〬 〵〲〸〴〴きぐぉたごすぐぅたぉぎいぅじぅい〬 〱〴〬 〹〳〬 〹〳ほ〹〵〬 〱〱〸〴〵
きぐぉたごすぐぅたがあ〬 〲〱〬 〱〰〸〬 〴〸〱〬 〵〲〸〴〶
きぐぉたごすぐぅたきぁごぃえたこぉずぅ〬 〵〱〰〬 〵〱〷〬 〵〱〷〴〷〴〸
きぐぉたごすぐぅたぎさががたぃくぐすたうぎ〬 〲〴〴〬 〵〴〸

〶〵〲
〱
〲
〳
〴
〵
〶
〷
〸
〹
〱〰
〱〱
〱〲
〱〳
〱〴
〱〵
〱〶
〱〷
〱〸
〱〹
〲〰
〲〱
〲〲
〲〳
〲〴
〲〵
〲〶
〲〷
〲〸
〲〹
〳〰
〳〱
〳〲
〳〳
〳〴
〳〵
〳〶
〳〷
〳〸
〳〹
〴〰
〴〱
〴〲
〴〳
〴〴
〴〵
〴〶
〴〷
〴〸

きぐぉたごすぐぅたぎさががたいぅがぅごぅたうぎ〬 〲〴〴〬 〵〴〸
きぐぉたごすぐぅたこぅごたぁごごげ〬 〲〳〵〬 〲〴〵〬 〲〴〶〬〵〳〳
きぐぉたごすぐぅたこぅごたぎぁきぅ〬 〲〵〱きぐぉたごすぐぅたこぉずぅ〬 〱〰〶〬 〱〰〶〬 〴〷〴きぐぉたごすぐぅたこごげさぃご〬 〲〰〬 〲〱〬 〹〷〬 〱〰〷〬〱〱〷〬 〱〱〸〬 〴〸〰〬 〵〲〸
きぐぉたごすぐぅたさあ〬 〲〱〬 〱〰〸〬 〴〸〱〬 〵〲〸
きぐぉたごすぐぅたざぅぃごくげ〬 〱〴〬 〹〰〬 〹〱〬 〹〱〬 〹〲〬〹〴〬 〱〱〸きぐぉたさぎぐぁぃか〬 〱〳〳〬 〱〳〳〬 〱〳〴〬 〱〳〷〬 〴〵〲きぐぉたさぎぐぁぃかたぅじごぅげぎぁが〬 〸〬 〱〳〹〬 〵〱〶きぐぉたさぎぐさあがぉこえたぎぁきぅ〬 〲〹〴〬 〳〳〷〬 〳〳〷きぐぉたしぁぉご〬 〳〹〬 〴〱〬 〶〱〬 〶〲〬 〶〲ほ〶〴〬 〶〶〬 〶〷〬〶〹〬 〷〷〬 〸〲〬 〳〰〲〬 〳〸〹〬 〳〹〳〬 〴〲〳〬 〴〲〴〬〴〳〹〬 〴〵〵ほ〴〵〷〬 〵〰〸〬 〵〰〹
きぐぉたしぁぉごぁがが〬 〶〶〬 〶〸〬 〶〹〬 〷〰〬 〳〹〱ほ〳〹〳〬〳〹〶〬 〳〹〹〬 〴〹〷
きぐぉたしぁぉごぁぎす〬 〵〰〬 〶〲〬 〶〶〬 〶〷〬 〶〷〬 〷〲〬〳〹〱ほ〳〹〳〬 〳〹〶〬 〳〹〹
きぐぉたしぁぉごこくきぅ〬 〶〶〬 〷〰〬 〷〱〬 〷〲〬 〳〹〱ほ〳〹〳〬 〳〹〶〬 〳〹〹
きぐぉたしぉぎたあぁこぅ〬 〵〳〲きぐぉたしぉぎたぃ〲う〬 〵〲〲きぐぉたしぉぎたぃぁががたぅげげえぁぎいがぅげ〬 〲〹〹〬〲〹〹〬 〳〰〰
きぐぉたしぉぎたぃくきぐがぅごぅ〬 〳〵〰〬 〳〶〱〬 〳〶〶〬〳〶〶ほ〳〶〹〬 〳〷〸〬 〳〸〲
きぐぉたしぉぎたぃげぅぁごぅ〬 〳〴〸〬 〳〵〰〬 〳〷〷〬 〴〰〰
きぐぉたしぉぎたぃげぅぁごぅたぅげげえぁぎいがぅげ〬 〲〸〸〬〲〹〰〬 〲〹〱〬 〵〵〵きぐぉたしぉぎたぃげぅぁごぅたかぅすざぁが〬 〲〳〵〬 〲〴〲〬〲〴〶〬 〵〲〹〬 〵〵〴〬 〶〲〱きぐぉたしぉぎたいぅがぅごぅたぁごごげ〬 〲〳〵〬 〲〴〴〬 〲〴〶きぐぉたしぉぎたいさぐたうぎ〬 〲〴〲〬 〲〴〲〬 〵〴〸
きぐぉたしぉぎたう〲ぃ〬 〵〲〲きぐぉたしぉぎたうぅぎぃぅ〬 〳〵〰〬 〳〶〰〬 〳〶〵〬 〳〶〵〬〳〷〲〬 〳〷〸〬 〳〷〹〬 〳〸〱〬 〳〸〴
きぐぉたしぉぎたうげぅぅ〬 〲〴〳〬 〳〴〴〬 〳〵〰〬 〳〵〰
きぐぉたしぉぎたうげぅぅたかぅすざぁが〬 〲〳〵〬 〲〴〳〬 〲〴〶きぐぉ関数の索引
きぐぉたしぉぎたぇぅごたぁごごげ〬 〲〳〵〬 〲〴〳〬 〲〴〶〬 〳〵〱〬〵〳〲
きぐぉたしぉぎたぇぅごたぅげげえぁぎいがぅげ〬 〲〸〸〬 〲〹〱〬〶〲〳
きぐぉたしぉぎたぇぅごたぇげくさぐ〬 〳〵〱〬 〳〵〱きぐぉたしぉぎたぇぅごたぎぁきぅ〬 〲〵〲きぐぉたしぉぎたがくぃか〬 〲〸〴〬 〳〴〹〬 〳〶〱〬 〳〷〰〬 〳〷〰ほ〳〷〲〬 〳〷〹
きぐぉたしぉぎたぎさががたぃくぐすたうぎ〬 〲〴〲〬 〲〴〲〬〵〴〸きぐぉたしぉぎたぎさががたいぅがぅごぅたうぎ〬 〵〴〸
きぐぉたしぉぎたぐくこご〬 〳〵〰〬 〳〶〱〬 〳〶〶〬 〳〶〷〬 〳〶〷ほ〳〷〳〬 〳〷〸〬 〳〸〲〬 〳〸〴
きぐぉたしぉぎたこぅごたぁごごげ〬 〲〳〵〬 〲〴〳〬 〲〴〶〬 〵〳〳きぐぉたしぉぎたこぅごたぅげげえぁぎいがぅげ〬 〲〸〸〬 〲〹〱
きぐぉたしぉぎたこぅごたぎぁきぅ〬 〲〵〱きぐぉたしぉぎたこごぁげご〬 〳〶〱〬 〳〶〶〬 〳〶〶〬 〳〶〷〬 〳〶〹〬〳〷〰〬 〳〷〲〬 〳〷〳〬 〳〷〶〬 〳〸〳
きぐぉたしぉぎたごぅこご〬 〳〶〸〬 〳〶〹
きぐぉたしぉぎたさぎがくぃか〬 〲〸〵〬 〳〶〱〬 〳〷〰〬 〳〷〲〬〳〷〸〬 〳〷〹〬 〳〸〱
きぐぉたしぉぎたしぁぉご〬 〳〵〰〬 〳〶〱〬 〳〶〷〬 〳〶〸〬 〳〶〹〬〳〷〱〬 〳〷〸〬 〳〷〹〬 〳〸〱ほ〳〸〳
きぐぉたしごぉぃか〬 〲〵〬 〳〰〰〬 〳〰〱きぐぉたしごぉきぅ〬 〲〵〬 〲〸〳〬 〳〰〰〬 〳〰〰〬 〳〰〱〬 〴〷〴ねばどづへづっ〬 〳〰〲〬 〳〰〶〬 〳〰〷〬 〳〰〸〬 〴〰〲ねばどひふの〬 〳〰〷ぐきぐぉた〬 〴〷〱ぐきぐぉたしごぉぃか〬 〲〵ぐきぐぉたしごぉきぅ〬 〲〵