並列計算

Similar documents
Microsoft PowerPoint - erlang-parallel100216

TopSE並行システム はじめに

NUMAの構成

POSIXスレッド

CSPの紹介

Insert your Title here

Microsoft PowerPoint - OpenMP入門.pptx

計算機アーキテクチャ

Microsoft PowerPoint - SWoPP2010_Shirahata

POSIXプログラミング Pthreads編

本文ALL.indd

PowerPoint プレゼンテーション

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

スライド 1

(Microsoft PowerPoint - \221g\202\335\215\236\202\335\203\\\203t\203g\203E\203F\203A\215H\212w No03\201i\224z\225z\227p\201j.pptx)

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

about MPI

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

04-process_thread_2.ppt

PowerPoint プレゼンテーション

NUMAの構成

Microsoft Word - openmp-txt.doc

cmpsys15w07_os.ppt

並列計算導入.pptx

スライド 1

コンピュータ工学Ⅰ

Developer Camp

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

スライド 1

スライド 1

Microsoft PowerPoint - OS04.pptx

コンピュータ工学Ⅰ

製品開発の現場では 各種のセンサーや測定環境を利用したデータ解析が行われ シミュレーションや動作検証等に役立てられています しかし 日々収集されるデータ量は増加し 解析も複雑化しており データ解析の負荷は徐々に重くなっています 例えば自動車の車両計測データを解析する場合 取得したデータをそのまま解析

Microsoft PowerPoint - Lec ppt [互換モード]

VelilogHDL 回路を「言語」で記述する

スレッド

Microsoft PowerPoint ppt [互換モード]

Microsoft PowerPoint - OS07.pptx

スパコンに通じる並列プログラミングの基礎

2015_collabo_04

PowerPoint プレゼンテーション

スパコンに通じる並列プログラミングの基礎

PowerPoint プレゼンテーション

TFTP serverの実装

Microsoft PowerPoint - prog03.ppt

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

2015 TRON Symposium セッション 組込み機器のための機能安全対応 TRON Safe Kernel TRON Safe Kernel の紹介 2015/12/10 株式会社日立超 LSIシステムズ製品ソリューション設計部トロンフォーラム TRON Safe Kernel WG 幹事

05-scheduling.ppt

Microsoft PowerPoint - 高速化WS富山.pptx

スパコンに通じる並列プログラミングの基礎

Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc

OpenFOAM 勉強会 C++ プログラム相談 のご案内 オープン CAE シンポジウム 2012 金田誠 (OpenFOAM 勉強会 for 関東 ) 1

N08

スレッド

Microsoft PowerPoint - os ppt [互換モード]

Microsoft PowerPoint - 11Web.pptx

メソッドのまとめ

<4C696E A B835E A CC8A D20838A B835E B838982CC8EC08CB

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

コードのチューニング

Microsoft PowerPoint - GPUシンポジウム _d公開版.ppt [互換モード]

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

プレポスト【解説】

PowerPoint プレゼンテーション

Microsoft PowerPoint - compsys2-06.ppt

AquesTalk プログラミングガイド

TOPPERS 活用アイデア アプリケーション開発 コンテスト 部門 : 活用アイデア部門アプリケーション開発部門 作品のタイトル : Toppers_JSP と Scicos_lab / (Scilab でも可 ) による 組込みメカトロニクス制御シミュレーション 作成者 : 塩出武 ( シオデタ

スライド 1

kantan_C_1_iro3.indd

Microsoft PowerPoint - OS02.pptx

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

memo

修士論文

UNIX 初級講習会 (第一日目)

CPUスケジューリング

AICS 村井均 RIKEN AICS HPC Summer School /6/2013 1

PowerPoint Presentation

AquesTalk for WinCE プログラミングガイド

オペレーティングシステム 2014

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

並列・高速化を実現するための 高速化サービスの概要と事例紹介

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

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

Microsoft Word - 実験4_FPGA実験2_2015

OS

PowerPoint プレゼンテーション

Microsoft PowerPoint - 04_01_text_UML_03-Sequence-Com.ppt

< B8CDD8AB B83685D>

部内向けスキルアップ研修 「組込みOS自作入門」

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

Microsoft PowerPoint ppt

Javaの作成の前に

Microsoft Word - HOKUSAI_system_overview_ja.docx

C#の基本

Microsoft PowerPoint - sakurada3.pptx

Microsoft Word - VBA基礎(6).docx

VXPRO R1400® ご提案資料

メモリ管理

Transcription:

OS 系低レイヤな人のための Transputer とか CSP Occam Erlang 2011/MAY/22 ( 訂正版 2) たけおか 1

前置き 本筋とまったく関係ない 2

代表的な排他制御 / 同期のプリミティブ セマフォ (semaphore) セマフォが得られれば 資源の使用権を得られたと考える オランダ人の Dijkstra( ダイクストラ ) の発案 P/V (Wait/Signal) 命令が基本 Wait でセマフォを得る /Signal でセマフォを返す 腕木信号の用語 しかもオランダ語 1bit のバイナリ セマフォ カウンティング セマフォ ( カウンタが 0 でなければ資源を使用可能 ) mutex はセマフォの一種 モニタ (monitor) きわどい領域を一つの手続きにし そこに一人 ( または許された数 ) しか入れないように システムが制御 Java が採用 バリア (barrier), ランデブー (rendezvous) 全員がそろうまで待つ その他 交換変数 (Exchange) などもあるが あまり知られていない プリミティブ 待ちには spin lock などもある 3

より低位な排他制御 / 同期のプリミティブ test and set 命令 メモリの内容をアトミックに書き換え 書き換え前の状態をテストする セマフォを test and set 命令で実現する でも それがそのまま プロセスの待ちに使用できるか? Read modified write 命令である load-store アーキテクチャの RISC システムにそんなものはない CISC には 好んで付けられた LL/SC (Load and Link/Store Conditional) 命令 ( 近代的な ) キャッシュ メモリの機能 使用法 1) load link を行って古い値を得る 2) 権利が得られそうか? 得られなければ もっと違うレベルの待ちへ 3) 更新する値を作る 4) SC で新しい値を書き込む 5) SC の結果が失敗であれば 1 へ LL は キャッシュに CPU コアからのアクセスがあったことを記憶 SC の実行前に 他の CPU コアで LL アクセスがあれば SC が失敗する キャッシュ同士が LL アクセスがあったことを通信する 4

小規模マルチコア SMP,AMP SMP 対称型マルチ プロセッサ サーバなどで昔から一般的な並列計算機 キャッシュの一貫性 ( キャッシュ コヒーレンシ ) がある コア 演算ユニット コア 演算ユニット コア 演算ユニット AMP 非対称型マルチ プロセッサ キャッシュの一貫性が無い キャッシュを意識して コア間のデータのやりとりを行わねばならない コア 演算ユニット コア 演算ユニット コア 演算ユニット キャッシュ キャッシュ キャッシュ キャッシュ キャッシュ キャッシュ キャッシュはすべて独立 メイン メモリ キャッシュ同士が裏で通信する メイン メモリ 5

小規模マルチコア LL/SC LLは キャッシュにCPUコアからのアクセスがあったことを記憶 SCの実行前に 他の CPUコアでLLアクセスがあれば SCが失敗する キャッシュ同士が LLアクセスがあったことを通信する 1)LL コア 6)SCしたら 切れてるやんけっ!! 演算ユニット キャッシュ コア 演算ユニット 3) 別なCPUが LL キャッシュ コア 演算ユニット キャッシュ 2)LL したよ ブロードキャスト 5) ああ よそで LL された link 切ろう 4)LL したよ ブロードキャスト 6

この辺りから 本題 7

RPC RPC: Remote Procedure Call 遠隔手続き呼び出し 遠隔にある手続きを 同期的に呼び出す 遠隔の手続きは 仕事が終わると返り値をもどす 同期的 呼ばれた側の仕事が終わるまで 呼び出し側は止まる バグが出にくい 素朴な実装の場合 呼ばれる側の関数は 同時に複数入ってこないため 簡単で良い ( 再入可能性の検討など不要 ) 非同期的 呼ばれた側は 呼び出し側と無関係に仕事を進める 終了の通知方法は? 仕事の結果を置く場所は? 呼び出し側は正しくハンドリングするか 8

シーケンシャルなプロセスの集まり で仕事をする サーバは非決定的マージを行う P3 P2 戻り値 戻り値 要求 戻り値 要求キュー プロセス P1 受信待ちガード1 実行 1 ガード2 実行 2 シーケンシャルなプログラム ( プロセス ) の集まりで仕事をする 主に RPC を用いて 9

チャンネル通信 CSP (Communicating Sequential processes) Hoareが考えた チャンネルで通信する 普通のプログラム 排他制御の問題とか出ない RPCに近い CSPは戻り値も チャンネル通信で返さねばならないが デッドロックが起こりにくい デッドロック発生の検出が容易 committed choice( コミッティド チョイス ) 言語 Erlang 2008 年頃から 若者に流行中 チャンネル通信 & コミッティド チョイス パターンマッチングはProlog 風 つーか Unification Unification( 単一化 ) は パターンマッチングと変数の双方向代入 10

CSP, Occam, Erlang CSP をもとにした現実システムがある Occam プログラミング言語 最近の TCP コネクションごとに thread を貼り付けるのも近い考え Transputer Occam と同時に考えられたハードウェア CPU をトランジスタのごとく並べて使用 4~8 本のシリアル通信ハードウェアを持つ その CPU を 2 次元のメッシュ状に配置 1990 年前後に 4~16 並列ぐらいの浮動小数点演算の速い機械として流行 (C 言語でコーディング ) Inmos 社 ( 英 ) Transputer と Occam を実現して販売していた ST Micro 社に吸収された ST-10, ST-20 コアは Transputer 最近 Xmos 社として復活 Erlang Erlangを発明したのは エリクソン (ST Micro 社は関係ない 発表時は誤っていた ) 11

Transputer: 大規模並列指向 CPU MPP: Massively Parallel Processors 大規模並列プロセッサ 今 半導体企業は 組込み32bit CPU 程度の素のコアならば MPPがすぐにでも可能だと言っている 1チップに 百 ~ 数百個のCPUが載る 1980 年代末期に Transputer というものがあった イギリス Inmos 社 百個規模のコアを1ウェハに載せ 並列計算する プログラミング言語は Occam 後にCなど Tranputerは MIMD 指向 最近 Xmos 社として復活 12

Transputer: 大規模並列指向 CPU 1980 年代末期 Transputerというものがあった 二次元メッシュ通信 近傍の4つのCPUとシリアル通信 論理的なチャンネル通信を そのままハードウェアに持ち込んだ 13

Transputer: ハードウェアでマルチタスク管理 CPUがハードウェアで プロセスを管理 スケジューラをマイクロコードで実装 プロセス テーブルを CPU が管理 レジスタのダンプ / リストアも全自動 通信チャンネルを待つ データが来たら プロセスがアクティベートされる タイムアウトでプロセス スイッチ timeslice 命令がある 14

Transputer: ハードウェアでマルチタスク管理 CPUがハードウェアで プロセスを管理 スケジューラをマイクロコードで実装 プロセス管理構造体 15

Transputer: ハードウェアでマルチタスク管理 CPU がハードウェアで プロセスを管理 スケジューラをマイクロコードで実装 runp: run process endp: end process startp: start process stopp: stop process insertqueue: insert queue, run キューの先頭にプロセスを入れる 通信チャンネルを待つ altwt : alt wait, 複数のチャンネルを待ち どれかにデータが来たら プロセスがアクティベートされる タイムアウトなどでプロセス スイッチ timeslice: timeslice を起こす jump 命令でスケジューリングを起こす 16

Committed choice ガードを設けて ガードを超えたものが実行を開始す る CSP /Occam 通信もガード条件の一種 GHC: Guarded Horn Clause 上田さんが考えた AND 並列 Prolog の一種 Prolog の節のコミット バー! までをガードとする GHCではコミットバーは ガード記号 と呼ばれる チャンネル通信をしていると考えるべし 通常はバックトラックしない 受信と コマンド解析 & ディスパッチを同時に行う 17

ALT Occam のプログラム断片例 input1? packet output! packet input2? packet output! Packet この辺がガードと言える ALT が ComminttedChoice の指定プリミティブ 複数の候補のうち ガード ( 上記では受信 ) を満たした 先着の一つだけが選ばれ その実行部が実行される Occam のガードは通信しか書けない 18

Erlang エリクソンがハードウェア設計 / 検証のために作ったと言われている 変数を使用したチャンネル通信 ガードがあり ガードを超えた節が排他的に実行される パターンマッチングにユニフィケーションを使用 節のヘッドでのパターンマッチングは prolog のようだが 実行の意味は違う 型がない 関数呼び出し時に パターンマッチングする言語としては ML が有名だが ML は強い型の言語 テレコム アプリケーションを書いた実績あり 19

Erlang のプログラム例 rcv_messages() -> receive {foo, X} -> io:fwrite( foo~n"), ture; {bar, X} -> io:fwrite( bar~n"), ture; rcv_messages(). ここがガード ガードは -> の直前まで receive の受けの部分は 単純変数, 定数 タプルなどのパターンが書ける. 単純変数を書くと Occam などのチャンネルからの受信変数になる 20

チャンネル通信 (FIFO)/RPC を使おう 2010/APR/25 追記 チャンネル通信 (FIFO) や RPC チャンネル通信や RPC を実行するもの ( タスク ) の静的な依存関係だけでデッドロックの発生がわかる 複雑なシステムでも 容易にデッドロックの解析ができる そもそもデッドロックが起きるように書きにくい 形式的手法になじむ 要求キュー 要求キュー 要求キュー 駄目 ( デッドロック ) がすぐ判る この例では 三すくみ (RPCじゃないし 21)

RPC 指向の言語の排他制御 1 つのシーケンシャル プロセスに資源を持たせ そのプロセスのみが資源をアクセスする いわゆるサーバ サーバに資源を持たせれば 排他制御の問題は起こらない 何でもかんでも安全というわけではない 例えば サーバの中から別なサーバを呼び出すようなことをすると デッドロックが起きるかも知れない 広い意味で モニタを構成しているとも考えることができる メッセージ パッシングするオブジェクト指向風モニタ 22

リンク Transputer ST20-C1 Instruction Set Reference Manual http://www.datasheetcatalog.org/datasheet/sgsthomsonmicroelectronics/mxqxtvr. pdf ST20C2/C4 Core Instruction Set Reference Manual http://www.transputer.net/iset/pdf/st20core.pdf OCCAM ST20C2/C4 Core Instruction Set Reference Manual http://www.wotug.org/occam/documentation/oc21refman.pdf 23

マルチコア時代の 並列 24

小規模並列 小規模マルチコア + ソフトウェアのマルチスレッド MIMD 複数命令ストリーム複数データ ストリーム Multiple Instruction stream Multiple Data stream CPU コアの数に関わらず スレッドは作れる 単純な作業を 複数起動可能で無い限り 大きな並列度を引き出すことは 難しい CPU コア数が大きくなると コアを使いきれない 25

小規模 ~ 中規模並列 計算に規則性があると楽 GPU 計算 Intel AVX, ベクトル計算も並列計算 データ並列 SIMD 計算のデータ列が長い版 SIMD: 単一命令ストリームマルチ データ ストリーム Intel AVX はベクトル計算機構 = ベクトル スパコンと同じ GPU 計算 ベクトル計算はデータの配置が重要 コアを渡るデータの交換は 大規模計算のネック スパコンは コアや機械を渡るデータの交換が速い 26

大規模並列 半導体企業は MPP がすぐにでも可能だと言っている MPP: Massively Parallel Processors 大規模並列プロセッサ 1 チップに 百 ~ 数百個の CPU が載る 1980 年代末期に Transputer というものがあった イギリス Inmos 社 百個規模のコアを 1 ウェハに載せ 並列計算する プログラミング言語は Occam 後に C など 最近 Xmos 社として復活 Tranputer は MIMD 指向 27

大規模並列 大規模並列は 色んなソフトウェア ( スレッド ) を動かす方法では コアを使いきれない スパコンは 6 万 5 千 CPU 程度が普通 MPI などは 一様な同じソフトウェアで 駆動 ベクトル計算のデータを分割して 各コアにばらまいて計算している サーチエンジンなども 同じプログラムで データが異なっている Google で有名になった Map&Reduce も 1980 年代末期からある Connection Machine (1983 年 ~) でメジャーに 28

大規模並列 大規模並列は 色んなソフトウェア ( スレッド ) を動かす方法では コアを使いきれない 昔は SIMD 命令フェッチユニット 命令デコーダなどは システムに一つ スパコンは 6 万コア以上が普通 MPI などは 同じソフトウェアで 複数のデータを同時処理 SPMD Single Program Multiple Data stream ベクトル計算のデータを分割して 各コアにばらまいて計算している 29

並列向き言語について 30

関数型言語 並列計算向き言語 Erlang 非常に流行中 副作用が無い 他のスレッドと干渉が無い 並列向き 竹岡は時代錯誤と考える 今は コンパイル技術で 関数型言語と同じ性質が得られる コードの解析は 関数型言語で書かなくとも 行える Occamによく似たパラダイムで動く チャンネル通信 コミッティド チョイス チャンネル通信は たちがいい ホーアのCSP とオシャレ ( ぶった ) 若者に言われているが 大規模な並列度が出せるか??? 31

関数型言語 並列計算向き言語 Erlang と言われているが 大規模な並列度が出せるか??? 本当は SIMD, SPMDなものでないと コアを使いきれないのでは? MIMD, MPMD で 200 コア回せるの??? CSP, Erlang 系の言語は 入力を待っている方が多いの では??? 32

並列計算向き言語 SIMD, SPMDなものがいい (?) OpenMP Cソースにpragmaをつける なんとなく thread が生成され 並列実行され join する MPI クラスタ スパコンの定番 クラスタ計算機 : 同じ部屋 ( 高速接続 ) で 分散計算 (TSUBAME は 物理的に遠いサイトも接続 異色 ) 言語ではなく 通信 / 同期ライブラリ 言語は Fortran, C を使用 33