PowerPoint プレゼンテーション

Similar documents
本文ALL.indd

Microsoft PowerPoint ppt [互換モード]

マルチコア時代の並列プログラミング

Insert your Title here

DRAM SRAM SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DRAM 4 C Wikipedia 1.8 SRAM DRAM DRAM SRAM DRAM SRAM (256M 1G bit) (32 64M bit)

Microsoft PowerPoint - OS04.pptx

RX600 & RX200シリーズ アプリケーションノート RX用仮想EEPROM

スライド 1

スレッド

ためのオーバーヘッドが課題となりつつある しかしこのオーバーヘッドに関する数値はほとんど公開されていない この論文ではこの cache coherency の時間を Linux カーネルで提供されている atomic_inc 関数を用いて測定する方法を新たに考案し 実測プログラムを作成した 実測はプ

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

スライド 1

~~~~~~~~~~~~~~~~~~ wait Call CPU time 1, latch: library cache 7, latch: library cache lock 4, job scheduler co

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

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

スレッド

POSIXスレッド

スライド 1

Microsoft PowerPoint - ARCICD07FukumotoSlides.pptx

VXPRO R1400® ご提案資料

講義計画 1. コンピュータの歴史 1 2. コンピュータの歴史 2 3. コンピュータの歴史 3 4. 論理回路と記憶, 計算 : レジスタとALU 5. 主記憶装置とALU, レジスタの制御 6. 命令セットアーキテクチャ 7. 演習問題 8. パイプライン処理 9. メモリ階層 : キャッシュ

スライド 1

Presentation title (on one or two lines)

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - 11Web.pptx

Microsoft PowerPoint - OpenMP入門.pptx

Java の ConcurrentHashMap における同期化 バッドケースとその対処法 2013 年 9 月湊隆行 1. はじめに表 1.1 に示すように Java の Collections Framework には 3 つの世代があります バージョン 1.0 から存在するレガシー API バ

スライド 1

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

4.1 % 7.5 %

コンピュータの仕組み(1)ハードウェア

スライド 1

cpu2007lectureno2.ppt

memo

26 FPGA FPGA (Field Programmable Gate Array) ASIC (Application Specific Integrated Circuit) FPGA FPGA FPGA FPGA Linux FreeDOS skewed way L1

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

2015_collabo_04

429

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ

大容量情報検索論

スライド 1

C#の基本2 ~プログラムの制御構造~

GR-SAKURA-SAのサンプルソフト説明

Ver.1 1/17/2003 2

JS2-14 マルチコアCPU時代の Javaプログラミング

WE WESB WENB WESNB 428

PowerPoint プレゼンテーション

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1



ex05_2012.pptx

Microsoft Word - keisankigairon.ch doc

Microsoft Word - Win-Outlook.docx


本日の範囲 ファイルとその中身 コンピュータにおける情報の表現 ファイルとフォルダ コンピュータの仕組み 通信 ネットワーク, インターネット 情報の符号化, その限界 コマンドライン プログラムの仕組み 通信の符号化, その限界 暗号 簡単なプログラムの作成 実行 Excel で計算 データの可視

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments


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

The 3 key challenges in programming for MC

PowerPoint プレゼンテーション

Microsoft PowerPoint - No7note.ppt

はじめに

コンピュータ工学Ⅰ

スライド 1

main.dvi

program7app.ppt

計算機アーキテクチャ特論 後半第2回 アウトオブオーダー実行 Out-of-Order Execution

SystemC言語概論

計算機アーキテクチャ

コンピュータ工学Ⅰ

Microsoft PowerPoint - OS07.pptx

03-01 Senyouki.pdf

システムLSIとアーキテクチャ技術  (part II:オンチップ並列            アーキテクチャ)

NUMAの構成

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

スライド 1

Microsoft PowerPoint - kougi9.ppt

自己紹介 湯浅陽一 1999 年より Linux kernel 開発に参加 MIPS アーキテクチャのいくつかの CPU へ Linux kernel を移植

04-process_thread_2.ppt


Microsoft PowerPoint ppt

昨年度までの研究紹介 および 研究計画

出 アーキテクチャ 誰が 出 装置を制御するのか 1

Microsoft PowerPoint mm2

Prog1_10th

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

429

N08

Slide 1

Processingをはじめよう

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

26

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

Express5800/320Fc-MR

Microsoft Word - 3new.doc

Microsoft PowerPoint - ICD2011TakadaSlides.pptx


ex04_2012.ppt

Transcription:

高性能計算基盤 第 7 回 CA1003: 主記憶共有型システム http://arch.naist.jp/htdocs-arch3/ppt/ca1003/ca1003j.pdf Copyright 2019 奈良先端大中島康彦 1

2

3

4 マルチスレッディングとマルチコア

5

6

7

主記憶空間の数が 複数 か 1 つ か 8 ただしプログラムは容易

9 1 つの主記憶空間を共有する場合

10 マルチスレッドによる並列処理

キャッシュコヒーレンス制御の必要性 データは共有メモリに配置 なるべくキャッシュを利用すればプロセッサは高速動作可能 矛盾が生じないためにどうすればよいか CPU1 がアドレス A に X を格納 同時に CPU2 が Y を格納 X Y CPU1 と CPU2 が常時相互監視すればよいしかし 同時実行の効果が出ない CPU 数が増えると指数関数的に手間が増える 11

キャッシュコヒーレンス制御とは 要するに メモリ内容を更新したら 他のキャッシュを無効化すればよい ライトバックキャッシュでのライトインバリデートプロトコル (MSI プロトコルの場合 ) 1) 有効なデータが載っていないライン 無効状態 (Invalid) 2) 複数プロセッサが共有の可能性があるライン 共有状態 (Shared) 3) あるプロセッサが修正した可能性があるライン 修正状態 (Modified) 12

13 MSI プロトコル

14

15

An Example (looks like Intel MIC) CORE#0 CORE#58 CORE#59 Th#0 Int Th#1 Th#2 Float I1$ 32KB/8way Th#3 4threads/core Fmul 4/1 Fadd 4/1 Fdiv 20/20 Fsqrt 20/20 Miss:15cycle Th#0 Int Th#1 Th#2 Float I1$ 32KB/8way Th#3 Th#0 Int Th#1 Th#2 Float I1$ 32KB/8way Th#3 O1$ 32KB/8way inclusive Miss:15cycle O1$ 32KB/8way inclusive O1$ 32KB/8way inclusive L2$ 512KB/8way MOESI Miss->otherL2:15cycle Miss->Memory:200cycle L2$ 512KB/8way MOESI L2$ 512KB/8way MOESI L2RQ L2CC L2RQ L2CC L2RQ L2CC L2DIR #0 L2DIR #1 L2DIR #2 L2DIR #3 L2DIR #4 L2DIR #5 L2DIR L2DIR #62 L2DIR #63 2013/11/11 16 MMCC MMCC MMCC MMCC MainMem MainMem MainMem MainMem #0 #1 #2 #3

Sim_core.c Th#0 Th#1 Th#2 Th#3 I1$ is shared among thread and provides 1 instr./cycle (not 4 instr./cycle) Int Float I1$ 32KB/8way D1$ 32KB/8way inclusive L2$ 512KB/8way MOESI D1$ and L2$ have Valid, Dirty, Shared bits/line V0 invalid -> miss D0,S0 load hit, store miss(update L2dir) D1,S0 load hit, store hit D1,S1 load hit, store miss(invalidate other$) D0,S1 load hit, store miss(invalidate other$) L2RQ L2CC L1$ miss Select L1$ LRU- way to replace & extract line Writeback to L2$ (inclusive never miss) Request L2$ for load/store L2$ miss Select L2$ LRU-way to replace & extract line Req L2dir Writeback to MM Request L2dir to get line L2CC MMCC Wait for Ack L1$ fill Get line for L2$ Ack 2013/11/11 17

Sim_mreq.c L2RQ L2CC L2RQ L2CC L2RQ L2CC L2DIR #0 L2dir has V,D,S/line for each Core (hash is used in the real hardware) V0 Invalid, D0,S0 Exclusive, D0,S1 Shared D1,S0 Modified, D1,S1 Owned MMCC MMCC MMCC MMCC L2$ Invalidate Req: Others: Exclusive/Shared > Invalid Local: > Modified MM Writeback Req: Others: Exclusive/Shared > Invalid Local: > Invalid Read Req for load: Home: > Owned Others: no-change Local: > Shared If no HOME, data should be loaded from MM (Shared can be invalidated anytime) Read Req for store: Home: Copyback > Invalid Others: > Invalid Local: > Modified If no HOME, data should be loaded from MM (Shared can be invalidated anytime) L1$ miss Select L1$ LRU- way to replace & extract line 2013/11/11 18 Writeback to L2$ (inclusive never miss) Request L2$ for load/store L2$ miss Select L2$ LRU-way to replace & extract line Req L2dir Writeback to MM Request L2dir to get line L2CC MMCC Wait for Ack L1$ fill Get line for L2$ Ack

Sim_cluster.c MMCC MainMem #0 Simply gets the request from L2dir and sends ack to L2dir L1$ miss Select L1$ LRU- way to replace & extract line Writeback to L2$ (inclusive never miss) Request L2$ for load/store L2$ miss Select L2$ LRU-way to replace & extract line Req L2dir Writeback to MM Request L2dir to get line L2CC MMCC Wait for Ack L1$ fill Get line for L2$ Ack 2013/11/11 19

排他制御の必要性 複数スレッドが同一変数を更新 矛盾が生じないためにどうすればよいか スレッド 1 : A = A + 1; : 命令列 1 load A,r1 add r1,#1,r1 store A,r1 アドレス A 2 3 4 2 3 3 スレッド 2 : : A = A + 1; 命令列 2 load A,r2 add r2,#1,r2 : store A,r2 20 キャッシュコヒーレンス制御 は正しく動作しても 値は矛盾解決には 排他制御 が必要

排他制御とは Intel では cmpxchg reg, mem を使用 アトミック命令 %eax レジスタの値 = mem のロード値なら reg の値をストア %eax レジスタの値!= mem のロード値なら ロード値を reg に格納 Loop: スレッド1 mov #1,r0 mov #255,%eax lock cmpxchg r0, X brc r0!=255 load A,r1 add r1,#1,r1 store A,r1 mov #255,X アドレス X 255 255 255 1 1 1 1 255 Loop: スレッド2 mov #1,r0 mov #255,%eax lock cmpxchg r0, X brc r0!=255 load A,r1 add r1,#1,r1 store A,r1 mov #255,X クリティカルセクションと呼ぶ 21

排他制御とは ARM では ldrex および strex の組み合わせにより cmpxchg を実現 ldrex r0, X アドレス X をロックし r0 に読み出す -- この間 ロックが外される可能性有り -- strex r0, X アドレス X がロックされていれば r0 をストアする キャッシュの Modify 状態との相性が良く バスロック不要 cmpxchg (X, _old, _new) X の値 =_old の値なら _new を X にストア 22 cmpxchg: ldrex r3, X アドレスXをロード mov #0, r4 r4に0を代入 test r3, _old r3と _oldを比較 strexeq r4, _new, X 同じ場合 ロックOKならXに _newをストアしr4に0を代入失敗ならr4に1を代入 brc r4!=0 失敗ならやり直し return 成功なら復帰

演習問題 以下のスレッド (tid=0,1,,31) を 32 個同時実行する場合の速度差の原因は? #define SIZE 32768 double A[SIZE]; void *parallel(tid) int tid; { int j, k; for (k=0; k<size; k++) { for (j=0; j<size; j++) A[tid*8] += k; } } #define SIZE 32768 double A[SIZE]; void *parallel(tid) int tid; { int j, k; for (k=0; k<size; k++) { for (j=0; j<size; j++) A[tid] += k; } } 4.3 秒 108 秒 23

演習問題 以下の 2 つのスレッドを同時実行する場合の実行時間は? #define SIZE 32768 double A[SIZE]; void *parallel(tid) int tid; { int j, k; for (k=0; k<size; k++) { for (j=0; j<size; j++) A[i*8] += k; } } 8 バイト 8=64 バイト異なるキャッシュラインに対応 #define SIZE 32768 double A[SIZE]; void *parallel(tid) int tid; { int j, k; for (k=0; k<size; k++) { for (j=0; j<size; j++) A[i] += k; } } 同一キャッシュラインに対応 A[0] A[0] A[1] A[2] A[3] A[1] 24