Microsoft PowerPoint - compsys2-06.ppt

Similar documents
NUMAの構成

NUMAの構成

並列計算導入.pptx

プログラミング実習I

Microsoft PowerPoint - KHPCSS pptx

スライド 1

Microsoft PowerPoint - OpenMP入門.pptx

スライド 1

about MPI

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

memo

Microsoft PowerPoint - 計算機言語 第7回.ppt

ビッグデータ分析を高速化する 分散処理技術を開発 日本電気株式会社

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

Microsoft PowerPoint - OS07.pptx

計算機アーキテクチャ

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

02: 変数と標準入出力

Microsoft PowerPoint ppt

プログラミング基礎

OS

TopSE並行システム はじめに

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 講義:片方向通信.pptx

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並

gengo1-11

PowerPoint プレゼンテーション

1.overview

演習1: 演習準備

(Microsoft PowerPoint \215u\213`4\201i\221\272\210\344\201j.pptx)

Microsoft PowerPoint ppt

プログラミングI第10回

02: 変数と標準入出力

POSIXスレッド

Microsoft PowerPoint ppt

TFTP serverの実装

PowerPoint Presentation

Microsoft Word - VBA基礎(6).docx

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

01-introduction.ppt

memo

Microsoft PowerPoint - kougi7.ppt

Microsoft Word - 3new.doc

演算増幅器

Microsoft PowerPoint - ARCEMB08HayashiSlides.ppt [互換モード]

02: 変数と標準入出力

Microsoft Word - openmp-txt.doc

コードのチューニング

2006年10月5日(木)実施

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

第9回 配列(array)型の変数

Prog1_10th

Microsoft PowerPoint - 演習1:並列化と評価.pptx

コードのチューニング

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D>

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

プログラミング基礎I(再)

Gfarm/MPI-IOの 概要と使い方

02: 変数と標準入出力

memo

Microsoft PowerPoint - prog06.ppt

Microsoft PowerPoint - prog03.ppt

PowerPoint プレゼンテーション - 物理学情報処理演習

Insert your Title here

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

Prog1_12th

スライド 1

program7app.ppt

Microsoft Word - r0703.doc

PowerPoint プレゼンテーション

02: 変数と標準入出力

02: 変数と標準入出力

Microsoft PowerPoint _MPI-01.pptx

Microsoft PowerPoint - handout07.ppt [互換モード]

10-vm1.ppt

第1回 プログラミング演習3 センサーアプリケーション

02: 変数と標準入出力

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - No6note.ppt

Microsoft PowerPoint - 講義:コミュニケータ.pptx

02: 変数と標準入出力

テスト 1/5 ページ プレポスト OSIV/MSP JCL とユーティリティ 受講日程受講番号氏名 1 ジョブ制御文で指定する情報として間違っているものを選びなさい 1. 実行プログラム名 2. 入出力データセット名 3. コンピュータの機種名 4. 実行プログラムの処理順序 解答 2 ジョブ制御

Microsoft PowerPoint - OS09.pptx

Microsoft PowerPoint - OS08.pptx

Microsoft PowerPoint - 12.ppt [互換モード]

C#の基本

CプログラミングI

目次 研究目的 背景システム開発について実験および評価結論

openmp1_Yaguchi_version_170530

ポインタ変数

スライド 1

Operating System 仮想記憶

Microsoft PowerPoint - 演習2:MPI初歩.pptx

MMUなしプロセッサ用Linuxの共有ライブラリ機構

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

02: 変数と標準入出力

Transcription:

情報基盤センター天野浩文 前回のおさらい (1) 並列処理のやり方 何と何を並列に行うのか コントロール並列プログラミング 同時に実行できる多数の処理を, 多数のノードに分配して同時に処理させる しかし, 同時に実行できる多数の処理 を見つけるのは難しい データ並列プログラミング 大量のデータを多数の演算ノードに分配して, それらに同じ演算を同時に適用する コントロール並列よりも, 多数の演算ノードを利用しやすい 1 2 前回のおさらい (2) 並列に実行できる機械語コードを得る方法 逐次型プログラムの自動並列化 逐次型プログラミング言語で記述されたプログラムを, コンパイラの力で ( 自動的に ) 並列化する. 並列処理記述言語によるプログラム作成 逐次型プログラミング言語を並列処理記述用に機能拡張した言語で書かれたプログラムを, コンパイラが並列化する. 逐次型プログラムの書き換え 逐次型プログラミング言語で記述されたプログラムを, ( 人間が ) 並列処理用に書き換え, それに従ってコンパイラがプログラムを並列化する. 前回のおさらい (3) 逐次型プログラムの自動並列化の利点 プログラマがコントロール並列やデータ並列を意識する必要すらない. 既存のプログラムがそのまま並列化できる このような技術が本当に完成すれば理想的 並列計算機のアーキテクチャや OS に全く依存しないプログラム開発が可能 欠点 現在のコンパイラ技術では, 自動的に並列化できる部分は限られている. この部分は並列化しても正しい結果となる ということが, 機械的に判断できないことも多い. 自動並列化コンパイラは, 現在も重要な研究開発課題となっている. 3 4 1

前回のおさらい (4) 並列処理記述言語 既存の逐次型言語を拡張して, 並列処理の記述に適した言語を作る. 例 :HPF(High-Performance FORTRN) 全く新たな言語を作ることもあるが, あまり普及した例はない. 並列処理記述言語によるプログラム作成の長所 ターゲットとなる並列計算機のアーキテクチャや OS の機能を活用した並列処理が行いやすい. 短所 並列処理することを念頭においてプログラムを書かなければならない ( 逐次型プログラムよりは難しい ) 同じ言語を多種多様な並列計算機で利用できるようにするのは大変. 前回のおさらい (5) 逐次処理用に書かれたプログラムを人間が書き換える方法 間通信や同期のための特殊な手続き呼び出しを書き入れる. 例 :MPI 並列化可能な (=コンパイラに並列化させたい) 部分を示す特殊な構文で, コンパイラに対する指示を書き加える. 例 :OpenMP 逐次型プログラムの書き換えの長所 自動並列化よりは実行性能が期待できる. 新たな言語よりは, プログラマ 計算機メーカに普及させるのが容易. 短所 並列処理することを念頭においてプログラムを書かなければならない 逐次型プログラムよりも, 書くのがかなり難しい. 並列処理記述のための言語を用いる場合と比べても, 書く上でやや注意 ( 工夫 ) を要する部分がある. 5 6 前回のおさらい (6) MPI(Message Passing Interface) 並列に動作する間の通信や同期に必要な関数 ( 手続き ) をまとめたライブラリの仕様 ( 規格 ) 新しい言語ではない. プログラマは, 逐次型プログラムの中に, これらの関数の呼び出しを適切に埋め込む. しかし, もはや逐次型プログラムではなくなる. 分散メモリ型 型いずれの並列計算機でも利用できる. 現在のところ,C/C++ とFortranで使うことができる. それぞれの言語の文法はまったく変更されていないので, 既存のコンパイラでコンパイルできる. ただし, コンパイルして生成される機械語プログラムは並列実行用のものになる. MPI プログラムの概観 (C の場合 ) #include <stdio.h> #include "mpi.h" main(int argc, char* argv[]) { int my_rank; int p;... MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &p);... 並列に実行される部分 7 } MPI_Finalize(); 8 2

前回のおさらい (7) OpenMP 一種の プログラミングスタイル とでも呼ぶべきもの コンパイラに並列化の箇所および方法を指示するための特殊なコメント文 指示文の文法 コンパイルされたプログラムが実行されるときの環境を決定したりその情報を取得したりするしくみ 並列実行を補助するための特殊なサブルーチンや関数 OpenMPに対応した並列化機能を有するコンパイラが, 並列実行可能な機械語プログラムを生成する. 現在のところ, 型並列計算機でのみ利用可能. 現在のところ,C/C++ とFortranのみ. 並列実行補助用の特殊な関数やサブルーチンを使っていなければ, 並列化の機能を持たないコンパイラでも, 逐次型プログラムとしてコンパイルできる. 9 OpenMP プログラムの一例 (C の場合 ) #include <stdio.h> #include <omp.h> main(){ int i; double z[100], x[100], a, b; /* x, a, b の初期化など */ #pragma omp parallel for for (i = 0; i < 100; i++) { z[i] = a*x[i] + b; } /* z の出力など */ } この直後の for 文を複数のスレッドで並列に実行せよ という指示 100 回の繰り返しを, 環境変数 OMP_NUM_THREDS で指定された数のスレッドで分担して並列実行する. C では,pragma 文 ( コンパイラ指示文 ) で直後の文の並列化指示を書く. これらの指示を 解釈 できないコンパイラは, それを無視する. 10 具体的な並列処理の例 (1) 間通信 長さ N の一次元配列の総和や最大値を P 個の ( またはスレッド ) で計算する. 簡単のため,N は P で割り切れるものとする. 配列を P 個に分割し各が部分的な結果を計算する. その結果を代表のに集めてくる. 現在, 教科書で取り扱っている順序を大きく離れて迂回している. 前々回に 3 章の 3.1.1 とスレッド のところを扱った後, 前回は 7.1 並列化コンパイラと並列処理記述言語 に迂回した. 今回は 5. 間通信機構 と 3.2 メモリ を扱う. 11 12 3

具体的な並列処理の例 (2) P 個の ( またはスレッド ) が持つデータを 1 カ所に集めてくる操作は, さまざまな並列処理プログラムでしばしば現れる. いちいち,1 対 1 のやりとりを P 回繰り返すようにプログラムを記述するのは面倒. P 個の ( またはスレッド ) からデータを集めてくるが, その計算結果は, 代表だけではなく全体で共有したい, ということもある. 全体の総和 総積 最大値 最小値 ビット和 ビット積などの結果を得る操作も, さまざまな並列処理プログラムでしばしば現れる. 具体的な並列処理の例 (3) N N の行列の積を,P 個ので計算する. 入出力を代行 各の行ベクトル ( 個別 ) と列ベクトル ( 個別 ) を配布 行ベクトルの交換 13 14 具体的な並列処理の例 (4) N N の行列の積を,P 個ので計算する. 入出力を代行 各の行ベクトル ( 個別 ) と列ベクトル ( 共通 ) を配布 並列処理におけるデータの受け渡しの必要性 並列処理においては, どうしても他の ( スレッド ) とデータを受け渡さなければならないことがある. 例 (1)~(4) の実線矢印で記述したデータの受け渡しは, それぞれの問題を解くのに必須である. 次の行ベクトル ( 共通 ) を配布 15 16 4

並列処理に頻出するデータ受け渡しのパターン 1 対 1 ある単一の ( スレッド ) が持っているデータを, 別の単一の ( スレッド ) に渡す. この操作を必要な回数だけ繰り返せば以下のデータ受け渡しもすべて実現できる. 1 対 N ある単一の ( スレッド ) が持っている同じデータを, 他のすべての ( スレッド ) に渡す. N 対 1 他のすべての ( スレッド ) が持っているばらばらのデータを, ある単一の ( スレッド ) に集めてくる. 集めてくるだけでなく, 最大値等の計算も合わせて行うことが多い. N 対 N すべての ( スレッド ) が持っているデータを集めて計算した結果を, 全 ( スレッド ) が共有する. 並列処理におけるデータ受け渡しの実現法 スレッドどうしでデータを受け渡すには メモリ空間を共有しているので, 他のスレッドの変数に直接アクセスできる. 他のスレッドの変数をメモリ上の番地により直接参照できる. ただし, 書き込み時の排他制御は必要 どうしでデータを受け渡すには メモリ空間が共有されないので, 他ののデータに直接アクセスすることはできない. 前回の MPI の通信関数の説明を読み返してみると, 具体的なイメージをつか むのに役立つ. 17 18 スレッド間のデータ受け渡し スレッド 2 スレッド 1 スレッド 3 ポインタ等で直接参照できる ただし, 排他制御を行わないと結果の正当性は保証されない. のメモリ空間 プログラムコード ( 共通 ) データ ( 共通 ) スレッドデータ1 の ( データ共通 ) スレッド2のデータスレッド3のデータ スタック ( スレッドごと ) 間のデータの受け渡し (1) のメモリ空間 プログラムコード データ スタック 直接参照することは不可能 ポインタ等で直接参照できる のメモリ空間 プログラムコード データ スタック 19 20 5

間のデータの受け渡し (2) のメモリ空間 プログラムコード データ スタック 明示的にデータを転送するしくみが必要! 実際には, が直接アクセス可能なメモリ空間上にデータがコピーされればよい. 実際にデータが転送されるため, 通信 ということばがぴったり! のメモリ空間 プログラムコード データ スタック 21 間通信の実現法 どうしはメモリ空間を共有しない という原則を守る場合 間通信は, 異なるメモリ空間の間のデータのコピーとして実現しなければならない. ただし, データのコピーにはそれだけの処理時間がかかるので, 非常に高速な通信を行うのには不適. 間通信のためのデータのコピーを避けるためには のメモリ空間の一部または全部が重なっていてもよいことにする. コピーは不要になる. しかし, のメモリ空間の 保護 は難しくなったり, 不可能になったりする. このあたりから, 教科書の 間通信機構 の解説につながっていく. 22 コピーを行わない間通信 (1) を経由したデータ受け渡し 物理的ながある場合には特に有効 実記憶 仮想記憶を用いない 単一仮想記憶 仮想記憶空間の全体が共有される 多重仮想記憶 仮想記憶空間の一部が共有される 実記憶による間通信 仮想記憶機構がなく, 実メモリのすべてがどのにも見えている. ただし, 受け渡すべきデータはコピーしなくてすむ場所に配置すること. 全で共有するデータはコモンメモリに 演算ノード 1 演算ノード 2 実メモリ空間 コモンメモリ 実メモリ空間 C 23 共有されるメモリ 24 6

単一仮想記憶による間通信 仮想記憶はあるが, それを全で共有 仮想記憶空間の番地と実メモリ上の番地を対応付けるマッピング表を活用する. ただし, 受け渡すべきデータはコピーしなくてすむ場所に配置すること. 全で共有しなければならないデータはコモンメモリに C マッピング表 演算ノード 1 コモンメモリ C 演算ノード 2 25 多重仮想記憶による間通信 各の仮想記憶空間の一部が重なっている 単一仮想記憶の場合と同様に, 各のマッピング表を活用する. ただし, 受け渡すべきデータはコピーしなくてすむ場所に配置すること. 全で共有しなければならないデータはコモンメモリに C 演算ノード 1 C コモンメモリ 演算ノード2 各のマッピング表 26 メッセージ 間でデータを受け渡すもう一つの方法 送り手と受け手がそれぞれ固有の操作を行う 受け手 ( のID) を指定してメッセージを送る (SEND) 送り手 ( のID) を指定してメッセージを受け取る (RECEIVE) 通信 のイメージに近いプログラミング ただし, 本当にデータのコピーが必要かというと, 必ずしもそうではない. コピーを行わない間通信 (2) アドレス渡し法 間で共有されるメモリ空間がある場合, 送るべきメッセージをそこに置き, そのアドレス情報だけを受け手に通知すれば, 受け手は実際の通信データに直接アクセスできる. アドレス情報 アドレス情報の通知 アドレス情報 通信データ 27 28 7

コピーを行う間通信 メッセージ複写法 間でメモリ空間が共有できない場合には, 通信データを実際に転送 ( コピー ) するしか方法がない. その分だけ, 余計に時間がかかる. 通信データ 通信データのコピー 通信データ 実装には,OS に用意されているソケットなどを用いる. コピーの有無による間通信の比較 データ受け渡しの方法 およびアドレス渡し メッセージ複写 長所 送受信が非常に速い ( データのコピーが不要なので ) 送受信するデータのアクセス保護が強い ( 送信後, 受け手しか内容を変更することができない ) 短所 1 間で共有できるメモリ空間が必要 2 送受信するデータのアクセス保護が弱い ( 送信後も送り手が内容を変更できたりする ) 送受信に時間がかかる ( データのコピーが必要なので ) ソケットの詳細については, クライアント サーバシステム のところで扱う予定. 29 30 間通信のまとめ 間通信が必要となる場合 並列処理 ( 分散処理 ) においては, 処理を進める上で他の ( スレッド ) が保有するデータを必要とすることが多々ある. 間通信のパターン 1 対 1,1 対 N,N 対 1,N 対 N など. ( 標準的な ) とスレッドの通信の違い メモリ空間の共有の有無 間通信を効率化するための工夫 のメモリ空間の一部または全部を共有させる のメモリ空間を共有させられない場合は メッセージ複写法 31 分散 32 8

分散 (1) 分散メモリ型並列計算機, クラスタシステム, 広域分散システムでは, 全演算ノードが共有するメモリは存在しない. 各演算ノードで動作するがデータを共有したい場合には 通信機能によってデータをやりとりする必要がある. プログラミングが面倒 ローカルメモリにあるデータにアクセスする場合と, リモートメモリにあるデータにアクセスする場合とで, プログラムの書き方が大きく異なる. ハードウェア的なが存在しなくても, ソフトウェアでそれを実現できないか? 分散 (distributed shared memory) 仮想 (virtual shared memory) と呼ぶこともある. 33 分散 (2) プログラムから見た分散の 見え方 プログラミング言語の文法に, 他のプロセッサ上の変数の値を直接読んだり, それに直接代入したりできるような拡張機能を追加するもの 例 : 5 番のプロセッサの変数 x に代入する などという構文を新たに追加する. メモリ空間の一部分を 共有部分 として扱うもの 例 : 1001 番地から 2000 番地は共有, あるいは, この変数は共有 と決めておき, そこにデータを書くと, 他の全ノードに変更を反映させるようにする. 34 分散実現方式の分類 コンパイラ方式 コンパイル時に, リモートメモリへのアクセスを通信処理に書き換えて, 実行可能プログラムを生成する. プログラミング言語の文法を拡張するため : リモートアクセスをある程度意識することが必要. 新しいコンパイラが必要. 既存のアプリケーションプログラム (P) は再コンパイルが必要. 実行時方式 プログラムの実行時に分散へのアクセスがおきると, 例外 (exception) を発生させて制御をOSに移す. OSが, リモートメモリへのアクセスを代行する. 言語の拡張は不要 : 既存のPはそのまま使える. 実現する機構はやや複雑.OSの改造が必要. 35 リモートメモリの操作方式 (1) 複写方式 1 遠隔の演算ノードのメモリへのアクセスが発生する. 2 操作対象のメモリ域が複写されてくる. 3 複写されたメモリ域を操作する. 4 更新があれば, 更新内容を他の演算ノードに反映させる. 3 メモリ域 1 2 4 メモリ域 一時的にせよ, 同じデータが複数の場所にあることになるため, 一貫性を保つしかけが必要になる. 36 9

リモートメモリの操作方式 (2) 非複写方式 1 遠隔の演算ノードのメモリへのアクセスが発生する. 2 メモリ操作の内容を, そのメモリのある演算ノードに転送する. 3 転送された操作内容に基づいてメモリ操作を行う. 2 1 3 メモリ域 複写方式においてアクセスが競合する場合 以下のようなタイミングで演算ノードのメモリ域へのアクセスが発生すると 1 演算ノードで書き込み要求 2 演算ノードからへ複写 C 3 演算ノードで書き込み 3 6 4 演算ノードCで読み取り要求 2 5 5 演算ノードからCへ複写 6 演算ノードCで読み取り メモリ域 メモリ域 メモリ域 での書き込みがに反映されるタイミングによって 3 以降 5 以前 :Cは時系列通りの 正しい 内容を読める. 5 以降 :Cの読む内容は 正しくない. 正しさ, 言い換えると, 一貫性 (consistency) をどう定義するか? 並列計算機や広域分散システムでは,1~6がどのような順序で起き るか, わからない ( 制御できない ) こともある. ただし, 個々の演算ノード内部で起こる操作の順序関係はわかる. 37 38 メモリの一貫性制御方式 (1) 逐次 (sequential) コンシステンシ (SC) 一貫性の定義 並列プログラムの実行結果が, 単一ノード上で時分割実行されたときと同じであること. 各演算ノード内で起こる操作の順序を保存し, 同じデータに対する複数の操作が同時に起こることを許さない. 実現の方法 書き込みが起きたら, それが反映されるまで, 次の読み込みを許可しない. 書き込みが発生するたびに域の書き戻し処理を行い, それが終了するまでは, 同じメモリ域からの複写を禁止あるいは保留する. 問題点 大量のデータ転送が発生するので効率が悪い. メモリの一貫性制御方式 (2) 共有データに対するアクセスを排他的に行う場合は, 書き込みのたびに書き戻す必要はない. 共有データに対するアクセスの前には, 必ず, 排他的なアクセス権を獲得する (cquire). 操作 ( 何回連続してもよい ) が終了すると, アクセス権を解放する (Release). cquireとreleaseの間の操作は, 他の演算ノードと競合しない. リリースコンシステンシ (release consistency, RC) Release 時に1 回だけ書き戻し処理を行う. SCよりもデータ転送回数が削減される. 39 40 10

メモリの一貫性制御方式 (3) レイジーリリースコンシステンシ (lazy release consistency, LRC) Release 時ではなく, 次のcquire 時に書き戻しを行う. 域全部を書き戻すのでなく, 更新の前後の差分情報のみを記録しておき, 書き戻しの際には, 更新のあった箇所の差分情報のみ転送する. データ転送は削減できる. 差分情報を生成したり, それを適用する処理には大きな負荷がかかる. 差分情報を保持する分, よけいにメモリが必要になる. メモリの一貫性制御方式 (4) HLRC(home-based lazy release consistency) cquireとreleaseを用い, 差分情報を用いる点はLRCと同じ. 上の各ページに, それを管理する特定の演算ノード (home) を割り当てる. 差分情報はRelease 時にhomeに転送し,homeでは即時に反映させ, 最新の版を保持する. 他のノードは,cquire 時に,homeから最新の内容を取得する. 差分情報を保持する期間は短くなるので,LRCよりも使用するメモリは少なくてすむ. 差分情報の生成と適用にかかる負荷は同じ. 41 42 分散のまとめ ハードウェア的には存在しないを, ソフトウェア的に実現する方式 実現方式 コンパイラ方式と実行時方式 リモートメモリの操作方式 複写方式と非複写方式 複写方式においては, 一貫性制御が必要 SC, RC, LRC, HLRC 43 11