Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
オペレーティングシステム
加藤 真平
東京大学 大学院情報理工学系研究科
2018/7/2 1第12回 オペレーティングシステム
1.PFLab(加藤研)のウェブサイトからダウンロードできます。⇒http://www.pf.is.s.u-tokyo.ac.jp/ja/classes/
2.紙資料も配布します。
2018/7/2 2
講義概要
• 受講生に求める基礎知識– C言語の理解
– コンピュータアーキテクチャの基礎の理解• メモリ管理、割り込み、CPUモード
• 参考図書– Silberschatz, Galvin, and Gagne, Operating System Concepts 8th
Edition, Wiley
• 成績– 試験の点数で決定
– 試験は持ち込み不可
– 授業に出席していた人で試験の結果が悪い人は追試験あり• 出席をとるが出席点はなし
第12回 オペレーティングシステム
講義スケジュール(予定)
2018/7/2 第12回 オペレーティングシステム 3
1. OSの概要(4/9)
2. プロセス管理(4/16)
3. プロセス間交信&スレッド(4/23)
4. プロセス同期(5/7)
5. プロセス同期(5/14)
6. CPUスケジューリング(5/21)
7. CPUスケジューリング(5/28)
8. メモリ管理(6/4)
9. メモリ管理(6/11)
10. I/Oシステム&ファイルシステム(6/18)
11. ファイルシステム(6/25)
12. プロテクション&セキュリティ (7/2)
13. バッチシステム&分散システム&まとめ(7/9)
14. 試験(7/23)
論文も読んでみましょう。
ACM SOSP
USENIX OSDI
USENIX ATC
USENIX NSDI
ACM ASPLOS
2018/7/2 4
プロテクション
• プロテクション問題とは?
• プロテクションドメイン
• Access Matrix
• Capability-Based Systems
第12回 オペレーティングシステム
2018/7/2 5
プロテクション問題とは
• OSはデバイス、プログラム、データ、プロセスなど様々なものから構成
– ここでは,これらをオブジェクトと呼ぶ
• 各オブジェクトはユニークな名前を持ち、決められた操作を介して参照されるべき
• プロテクション問題
– プロセスに与えられた権限の範囲内で、オブジェクトが決められた操作に従って参照されるようにすること
第12回 オペレーティングシステム
2018/7/2 6
Domain 構造
• アクセス権=
– アクセス権はあるオブジェクトに対するすべての有効な操作の部分集合
• Domain
– プロセスのアクセス権の集合
第12回 オペレーティングシステム
2018/7/2 7
UNIXにおけるDomain の実装
• CPU資源に関する2つのドメイン:– User
– Supervisor
• ユーザに関するドメイン:– Domain = user-id
– Loginしたときのuser-id
– ファイルシステム経由でドメインの変更が可能
• 各ファイルにはドメイン (setuid bit)が存在
• ファイルが実行されるとき、そのファイルのsetuid bitがonになっていると、そのファイルのownerドメインでプロセスが実行
– owner, group, othersに対して
• read, write, execute, lookup
第12回 オペレーティングシステム
2018/7/2 8
Unix系• アクセスモード
– read, write, executeを3bitsで表現
• 3カテゴリ
RWX
a) owner access 7 1 1 1RWX
b) group access 6 1 1 0
RWX
c) public access 1 0 0 1
• 上記9bits以外にもう3bits– sticky bits, set uid, set gid
– 詳しくは、man chmod
• グループを作成
– /etc/group
• ファイルのグループ名を変更
– chgrp Group-name game
owner group public
chmod 761 game
第12回 オペレーティングシステム
2018/7/2 9
MulticsにおけるDomain の実装
• Di と Djを任意のドメインとする
• If j < i Di Dj
– Djのほうがより多くの権利を保持
• Multicsはセグメントによるメモリ管理
• 各セグメントはリング番号を保持
• セグメントにはread, write, execution bitsが存在
• セグメントが実行されるとき、そのセグメントが持つリング番号上で実行
• 実行プロセスは、そのリング番号よりも小さいリング番号を持つセグメントをアクセス不可能
• domainの変更はgates経由
第12回 オペレーティングシステム
2018/7/2 10
Access Matrix
• プロテクションを行列として表現(access matrix)
• 行は domainsを表現
• 列は objectsを表現
• Access(i, j)はDomaini で実行されているプロセスが Objectjを参照することができる操作の集合
第12回 オペレーティングシステム
2018/7/2 11
Access Matrix
• Domain Di が、オブジェクトOjに対してある操作 “op”を実行しようとするとき、 “op”はaccess matrix上に存在する必要あり
• 動的にプロテクションを変更する方法
– Access rightsを追加削除する操作を導入
– 以下のような特別なaccess rightsを導入:
• owner of Oi• copy op from Oi to Oj• control – Di can modify Dj access rights
• transfer – switch from domain Di to Dj
第12回 オペレーティングシステム
2018/7/2 12
Access Matrix with Domains as Objects
第12回 オペレーティングシステム
2018/7/2 13
Access Matrix with Copy Rights
• 右の図で、*がついているのがcopy
right
• D2ドメインは、F2のread operationを他のドメインに対してもコピーが可能
• (b)において、D2ドメインはD3ドメインに対してread rightをコピー
• 3種類考えられる
– Copy rightも含めてコピー
– Copy rightは含めないでコピー
– Copy側は削除(transfer)
第12回 オペレーティングシステム
2018/7/2 14
Access Matrix With Owner Rights
• Ownerは何でもできる!
第12回 オペレーティングシステム
2018/7/2 15
Access Matrix with Control
• 以下の例で、D2はD4のaccess rightsを変更が可能
第12回 オペレーティングシステム
2018/7/2 16
Access Matrix
• Access matrix はポリシとメカニズムの分離が可能
– Mechanism
• OSは、access-matrix+rulesを提供
• OSは、 access-matrix+rulesに従ってアクセス制御
– Policy
• どのオブジェクトを誰に対してどういうアクセス方法を許すか、といったポリシをユーザが決定
第12回 オペレーティングシステム
2018/7/2 17
Access Matrixの実現方法
• Access Control List =列方向
– オブジェクト側で定義
– F3オブジェクトの持つAccess Control List
Domain 1 = Read
Domain 2 = Execute
Domain 3 = Read, Write
• Capability List=行方向
– ドメイン側で定義する
– D1ドメインの場合
– F1– Read
– F3 – Read
第12回 オペレーティングシステム
2018/7/2 18
Access Rightsの取り消し• Access Control List –アクセスコントロールリストからアクセス権を削除
– Simple
– Immediate
• Capability List – capabilityは分散されているので、access rightsを取り消すためには、対象となるcapablityを探す必要あり
– Reacquisition
• Capabilityが有効な時間を設け、capabilityが消失したら再度取得
– Back-pointers
• オブジェクト側でcapabilityへのリストを保持
– Indirection
• Global表のエントリを指すようにして、修正はエントリに対し実行
– Keys
• オブジェクト側でキーを持ち、そのキーをcapabilityに関連付け
• ドメインがオブジェクトをアクセスする時、capabilityに関連付けられているキーとオブジェクト側のキーのマッチングを取得
• Access rightsの取り消しは、オブジェクト側のキーを変更することで可能
第12回 オペレーティングシステム
2018/7/2 19
Capability-Based Systems
• Hydra– システムはアクセス権の集合の意味を解釈
– ユーザプログラムでのみ通用するユーザ定義のアクセス権を解釈し,それらのプロテクションをシステム側で提供
–
• Cambridge CAP System
– Data capability • 標準入出力やオブジェクトに紐づくストレージセグメントの管理
– Software capability • プロテクトされたプロシージャを通したサブシステムの解釈
第12回 オペレーティングシステム
2018/7/2 20
Capability-Based Systems
• Hydra
– Fixed set of access rights known to and interpreted by the system.
– Interpretation of user-defined rights performed solely by user's program; system provides access protection for use of these rights.
• Cambridge CAP System
– Data capability - provides standard read, write, execute of individual storage segments associated with object.
– Software capability -interpretation left to the subsystem, through its protected procedures.
第12回 オペレーティングシステム
Batch System• ユーザはあらかじめ実行手順をファイルに書き、それををシステムに提出
(submit)
• Submitされたファイルは待ち行列に登録
– 飲食店に入店するときに、人数を登録して待つこと、さらに、オーダをするときに、オーダ票に欲しい食べ物を書いて定員に渡すのと同じようなもの
#PBS –l nodes=4
#PBS –l walltime=00:10:00
…
mpirun –np 32 ./a.out
….
待ち行列
待ち行列の中の4nodesは、4ノードを要求しているジョブという意味
4
nodes
4
nodes
8
nodes
ユーザグループA用ジョブキュー
4
nodes
ユーザグループB用ジョブキュー
4
nodes
ユーザグループC用ジョブキュー
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
2018/7/2 第12回 オペレーティングシステム 21
Batch System• システムは、待ち行列からファイルを取り出して実行
– (この実行単位=ジョブ)
• 待ち行列ジョブキュー
• ジョブキューは複数
– 東大の場合、ユーザグループごとにジョブキューを設定
#PBS –l nodes=4
#PBS –l walltime=00:10:00
…
mpirun –np 32 ./a.out
….
待ち行列
待ち行列の中の4nodesは、4ノードを要求しているジョブという意味
4
nodes
4
nodes
8
nodes
ユーザグループA用ジョブキュー
4
nodes
ユーザグループB用ジョブキュー
4
nodes
ユーザグループC用ジョブキュー
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
2018/7/2 第12回 オペレーティングシステム 22
Batch System• システムは、これらジョブキューからジョブを取り出し、空いているノードにジョブを割り当て
• ジョブキューからの取り出し,割り当てはスケジューリングポリシで決まる
– 各ジョブの実行時間が異なることにより、待ち行列にジョブが入っていて、かつ、ノードが空いていてもジョブを割り当てられないことがあるが,これは飲食店において、8人のグループが待っていても、8人が同じテーブルに座れないために待たされるのと同じ現象
#PBS –l nodes=4
#PBS –l walltime=00:10:00
…
mpirun –np 32 ./a.out
….
待ち行列
待ち行列の中の4nodesは、4ノードを要求しているジョブという意味。
4
nodes
4
nodes
8
nodes
ユーザグループA用ジョブキュー
4
nodes
ユーザグループB用ジョブキュー
4
nodes
ユーザグループC用ジョブキュー
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
2018/7/2 第12回 オペレーティングシステム 23
バッチシステムにおけるスケジューリング
• バッチジョブスケジューリング– コンピュータシステム上で同時にいくつのジョブをどのように(どのノード上で)実行させるかを決定
• Fair Share Scheduling– Userあるいはgroup単位でCPU時間の占有率を予め設定しておき、それに従ってスケジューリング
2018/7/2 第12回 オペレーティングシステム 24
バッチシステムにおけるスケジューリング
• Fair Share Scheduling例
– 緑、黄、ピンク、青の4ユーザを平等にジョブの実行を割り当てたいと仮定
– 緑、黄、ピンク、緑、青の順番でジョブ投入
2018/7/2 第12回 オペレーティングシステム 25
ジョブキュー
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
4
nodes
4
nodes
4
nod4s
4
nodes
4
nodes
ジョブキュー
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
バッチシステムにおけるスケジューリング
• Fair Share Scheduling例
– 緑、黄、ピンク、青の4ユーザを平等にジョブの実行を割り当てたいと仮定
– 緑、黄、ピンク、緑、青の順番でジョブ投入
2018/7/2 第12回 オペレーティングシステム 26
4
nodes
4
nodes
4
nod4s
4
nodes
4
nodes
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
ジョブキュー
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
バッチシステムにおけるスケジューリング
• Fair Share Scheduling例
– 緑、黄、ピンク、青の4ユーザを平等にジョブの実行を割り当てたいと仮定
– 緑、黄、ピンク、緑、青の順番でジョブ投入
– ここまでで、緑、黄、ピンクの3つのジョブが実行
2018/7/2 第12回 オペレーティングシステム 27
4
nod4s
4
nodes
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
ジョブキュー
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
バッチシステムにおけるスケジューリング
• Fair Share Scheduling例
– 緑、黄、ピンク、青の4ユーザを平等にジョブの実行を割り当てたいと仮定
– 緑、黄、ピンク、緑、青の順番でジョブ投入
– ここまでで、緑、黄、ピンクの3つのジョブ実行
– 緑、青の順番でジョブキューでジョブが待っているが、緑のユーザは既にジョブを一回実行しているので、青のジョブが優先
2018/7/2 第12回 オペレーティングシステム 28
4
nod4s
4
nodes
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
優先度付きFCFS (First Come First Service)で、ジョブの優先度が、それまでにユーザ(グループ)が投入したジョブの実行時間に応じて変更することにより実現される。
バッチシステムにおけるスケジューリング
• マルチジョブキュー
ジョブキュー毎に
– キューの優先度
– ジョブの利用可能資源量規定
• 最大CPU使用数、最大実行時間等
– 多重度既定
• 当該ジョブキューからいくつのジョブを同時に実行するか?
– ノード利用形態
• 排他利用,TSS利用
– スケジューリングポリシ既定
• FCFS,優先度付きFCFS
• backfilling
2018/7/2 第12回 オペレーティングシステム 29
4
nodes
4
nodes
8
nodes
8ノードジョブキュー
4
nodes
8ノードジョブキュー
4
nodes
8ノードジョブキュー
8
nodes
32ノード
24ノードジョブキュー
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
バッチシステムにおけるスケジューリング• 問題点
– 下図において、空きノード数は4ノードしかなく、8ノード必要とするジョブが待機中
– 4ノード必要とするジョブが投入された時に、このジョブは実行できるかもしれないが・・・
2018/7/2 第12回 オペレーティングシステム 30
ジョブキュー
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
NodeNode
8
nodes
4
nodes
NodeNode
NodeNode
NodeNode
NodeNode
4
nodes
NodeNode
NodeNode
バッチシステムにおけるスケジューリング• バックフィル(Backfillilng)
– 各ジョブの最大実行時間が決まっていて、いつジョブが実行終了するか分かっていると仮定
– 右図のように、ジョブがどのようにノードを使われるかを縦方向にノード、横方向時間軸にして表現すると、使われていないノードの時間帯が判別可能(これがバックフィルウィンドウ)
– バックフィルウィンドウに収まるジョブを割り当ててもfairnessには影響せず、CPU利用率も向上
2018/7/2 第12回 オペレーティングシステム 31
t
ノード
バックフィルウィンドウ
バッチシステムにおけるスケジューリング
• ジョブのノード割り当て問題
– バックフィル出来ない場合は、CPU使用率低下
– バックフィルウィンドウのトータルノード数以下のジョブが必ずしもバックフィルできるとは限らない
• ネットワークトポロジに依存
2018/7/2 第12回 オペレーティングシステム 32
並列アーキテクチャの分類(昔流分類)
• Flynnの分類
– 命令 (instruction)ストリームとデータストリームの扱い方の違いによって以下の4つに分類
– SISD (Single Instruction stream,
Single Data stream )
• 一般のCPU
– SIMD(Single Instruction stream,
Multiple Data stream)
• IntelのSSEなど
– MISD(Multiple Instruction stream,
Single Data stream)
• これは存在しない
– MIMD(Multiple Instruction
stream, Multiple Data stream)
• メモリの形態
– 共有メモリ型並列コンピュータ
• UMA/NUMA
– 分散メモリ型並列コンピュータ
• 演算の形態
– ベクトル
– スカラ
• SIMD演算命令
• HPC向けにはSIMD長が長くなってきている傾向
2018/7/2 33第12回 オペレーティングシステム
並列分散コンピュータ• クラスタ
– 本来単体で使われるコンピュータ群をネットワークで接続し、それらをシステムとして使用
– 並列業界では、特にコモディティ部品を使って作られたシステムをクラスタと呼び、超並列コンピュータと区別
• 超並列コンピュータ
– 千台以上の規模の計算機をネットワークで接続して並列コンピュータを実現するために開発されたコンピュータ
• グリッド
– インターネット上での仮想組織
– 組織ごとに管理ポリシーが異なるコンピュータ群上で並列分散処理する
– クラスタ・超並列コンピュータに比べて通信遅延は大きく、通信バンド幅は低下
– 開放的かつ動的資源
• クラウド & ビッグデータ
2018/7/2 34第12回 オペレーティングシステム
グリッドからクラウド(はやり言葉という意味で)
• At the Search Engine Strategies Conference earlier this month, Schmidt described
the “old” client/server computing business model, which he characterizes as
“largely invented by Oracle”:It was a direct sales force that would go in and sell
complicated software to enterprises that they would integrate and do important
business functions.
• Schmidt embraces “an emergent new model”:
• It starts with the premise that the data services and architecture should be on
servers. We call it cloud computing – they should be in a ‘cloud’ somewhere. And
that if you have the right kind of browser or the right kind of access, it doesn’t
matter whether you have a PC or a Mac or a mobile phone or a BlackBerry or
what have you – or new devices still to be developed – you can get access to the
cloud…
Google CEO Eric Schmidt
出典:http://blogs.zdnet.com/micro-markets/?p=369 2006年8月23日
2018/7/2 35第12回 オペレーティングシステム
• “Big Data” is a catch phrase that has been bubbling up from the high performance computing niche of the IT market.
Increasingly suppliers of processing virtualization and storage virtualization software have begun to flog “Big Data” in
their presentations. What, exactly, does this phrase mean?
• If one sits through the presentations from ten suppliers of technology, fifteen or so different definitions are likely to come
forward. Each definition, of course, tends to support the need for that supplier’s products and services. Imagine that.
• In simplest terms, the phrase refers to the tools, processes and procedures allowing an organization to create, manipulate,
and manage very large data sets and storage facilities. Does this mean terabytes, petabytes or even larger collections of
data? The answer offered by these suppliers is “yes.” They would go on to say, “you need our product to manage and make
best use of that mass of data.” Just thinking about the problems created by the maintenance of huge, dynamic sets of data
gives me a headache.
• An example often cited is how much weather data is collected on a daily basis by the U.S. National Oceanic and
Atmospheric Administration (NOAA) to aide in climate, ecosystem, weather and commercial research. Add that to the
masses of data collected by the U.S. National Aeronautics and Space Administration (NASA) for its research and the
numbers get pretty big. The commercial sector has its poster children as well. Energy companies have amassed huge
amounts of geophysical data. Pharmaceutical companies routinely munch their way through enormous amounts of drug
testing data. What about the data your organization maintains in all of its datacenters, regional offices and on all of its user-
facing systems (desktops, laptops and handheld devices)?
• Large organizations increasingly face the need to maintain large amounts of structured and unstructured data to comply
with government regulations. Recent court cases have also lead them to keep large masses of documents, Email messages
and other forms of electronic communication that may be required if they face litigation.
• Like the term virtualization, big data is likely to be increasingly part of IT world. It would be a good idea for your
organization to consider the implications of the emergence of this catch phrase.
出典:http://www.zdnet.com/blog/virtualization/what-is-big-data/1708
2018/7/2 36第12回 オペレーティングシステム
グリッドからクラウド(はやり言葉という意味で)
Bigdata and Extreme-Scale Computing
2018/7/2 37
出展:Alok Chaudary talk at IESP Kobe
http://www.exascale.org/mediawiki/images/6/64/Talk-12-Choudhary.pdf
Simulations
第12回 オペレーティングシステム
分散システムとは?
• 複数の独立したコンピュータを単一システムとして見せるシステム
• 資源の共有:プリンタ、ストレージ、コンピュータ…
• セキュリティ
• 開放性(Openness)
– Interface Definition
– Flexibility
• 拡張性とスケーラビリティ
– 阻害要因
• Centralized Services
– 全てのユーザに対して一つのサーバ
• Centralized Data
– 一つのデータ
• Centralized Algorithms
– 完全情報に基づくアルゴリズム
• 透過性(Transparency)
– 次ページ
2018/7/2 38第12回 オペレーティングシステム
Transparency• Access
– 例えば、データ表現(endian)の違いを隠蔽
• Location
– 資源どこに存在するかを隠蔽
• Migration
– 資源が他の場所に移動(Migration)したかどうかを隠蔽
• Relocation
– 資源が使用中に他の場所に移動(Migration)したかどうかを隠蔽
2018/7/2 39第12回 オペレーティングシステム
Transparency• Replication
– 資源が複数のユーザから共有されている時に複製が作られているかどうかを隠蔽
• Concurrency
– 共有資源が複数のユーザから使われていることを隠蔽
• Failure
– 故障を隠蔽
• Persistence
– 資源(データ)がメモリ上かディスク上にあるかを隠蔽
2018/7/2 40第12回 オペレーティングシステム
並列分散システム構成法
• ハードウエアを管理しユーザに対してシングルシステムイメージを提供
• メッセージパッシング
• 分散共有メモリ
2018/7/2 41第12回 オペレーティングシステム
並列分散システム構成法
• リモートクライアントに対するサービスの提供
2018/7/2 42第12回 オペレーティングシステム
並列分散システム構成法
2018/7/2 43第12回 オペレーティングシステム
プログラミングモデルと通信• ストリーム通信
– 連続データ (音声、画像)の授受
– 例: TCP/IP
• メッセージ通信
– メッセージの授受
– 例
• MPI (Message Passing Interface)通信ライブラリ
• PVM (Parallel Virtual Machine)ライブラリ
• ソフトウェア分散共有メモリ
– 共有メモリをソフトウェアで実現
– 例
• Ivy, Mirage (OSレベルで実現)
• Munin, Midway (実行時ライブラリで実現)
• Linda (プログラミング言語で実現)
– PGAS (Partition Global Address Space)
• UPC, CAF(Co-array Fortran), Titanium,
Fortress, Chapel , X10.
• リモートプロシジャコール
– 遠隔手続き呼び出し
– 例: Sun RPC
• リモートメソッドインボケーション
– 遠隔オブジェクトメソッド呼び出し
– 例: JAVA RMI
2018/7/2 44第12回 オペレーティングシステム
Memory
共有メモリ型のマルチコア
L3 Cache
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
高々10個程度のCPUコアが、1つの共有メモリに、均一的にアクセスする。
1つのOSカーネルで済む 開発環境が整っている 並列化の性能が出やすい
ソフトウェア的視点
マルチコアからメニーコアへ
L2 CacheL1 L1 L1 L1 L1 L1 L1L1
Memory
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
Memory Memory
Memory Memory
マルチコアからメニーコアへ
バス型(SMP)
Intel Xeon:15コア×8ソケット(2014~)
AMD Opteron:16コア×4ソケット(2014~)
ネットワーク型(NoC)
Tilera TILE-GX:8×9コアのメッシュ(2013~)
10×10のメッシュをリリース予定
Intel Xeon Phi:8 x 9コアのメッシュ(2016~)
72コアの非対称メッシュ
CPUコアを複数並べる形のメニーコア(100±Xコア)
Many-Core
Accelerator
アクセラレータとしてのメニーコア
Host MemoryL3 Cache
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
I/Oバス
Host CPU
デバイスドライバが重要
Host MemoryL3 Cache
Core
L1
L2
Core
L1
L2
Core
L1
L2
Core
L1
L2
I/Oバス
Host CPUL2 Cache
L1 L1 L1 L1 L1 L1 L1L1
Device Memory
μC
μC
μC
μC
μC
BAR0
BAR1
BAR2
Contro
l Regis
ters
コマンド書き込み
DMA転送
Graphics Processing Unit (GPU)
L2 CacheL1 L1 L1 L1 L1 L1 L1
Device Memory
Host MemoryCPU
GPGPU
2008 2010
3000コア500コア
250コア
Tesla FermiKepler
Maxwell
C言語
C++Java
General-Purpose computation on Graphics Processing Units
Pascal
省電力化
20123000コア
20145000コア
車載向けGPGPU
ワンルーム1300m2
6000KW
ワンボックス1m2
2KW
ワンチップ1cm2
6W
1000倍
3000倍
100倍
300倍
2002年 2014年 2020年~
地球シミュレータ40TFLOPSを達成した当時世界最速のスパコン開発費用600億円
今日のGPU8個のGPUを並べると40TFLOPSを達成可能開発費用100万円+α
将来の組込みシステムスマートフォン程度のチップで地球シミュレータ相当の性能を達成可能?
GPGPU
8800 GTX9800 GTX
GTX 285GTX 480
GTX 580
GTX 680
GTX Titan
GTX Titan Black
GTX Titan X
X7350X7460 X7560
E7-8870E7-8890
0
1000
2000
3000
4000
5000
6000
7000
8000
2006 2008 2010 2012 2014 2016
GF
LO
PS
RELEASE YEAR
Single Precision Performance
NVIDIA GTX
Intel Xeon
0
5
10
15
20
25
30
2006 2008 2010 2012 2014 2016
GF
LO
PS
/WA
TT
RELEASE YEAR
Performance per Watt
NVIDIA GTX
Intel Xeon
General-Purpose computation on Graphics Processing Units
Trend on Performance and Power
GPU・メニーコアによる高速化の原理計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
時間
シングルコアの世界・コアの周波数を上げる
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++) {
.
.
.
}
}
繰り返し処理も逐次的にひたすら高速処理する
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
時間
シングルコアの世界・コアの周波数を上げる
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
時間
コア数
マルチコアの世界・コアを数個並べる・コアの周波数は上げない・プログラムを並列化する
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
計算ブロック
時間
コア数
GPU・メニーコアの世界・コアを数百から数千個並べる・コアの周波数は下げる・プログラムを並列化する
GPU・メニーコアによる高速化の原理
GPGPU Computing Stack
User Programs
CUDA HMPP OpenCLOpenGL
GPGPU Runtime Backend
Linux Kernel Device Driver
GPU
OS
Hardware
Runtime
ApplicationAPI
System Call
I/O
CPU CPU GPUCPUCPU
GPGPU Computing Model
CMD_HtoD CMD_HtoD CMD_LAUNCH CMD_DtoH
GPU
CodeInput
Data
Host Memory
GPU
CodeInput
Data
Device Memory
GPU
CodeInput
Data
Host Memory
GPU
CodeInput
Data
Device Memory
GPU
CodeInput
Data
Host Memory
GPU
Code
Device Memory
GPU
CodeInput
Data
Host Memory
Device Memory
GPU
CodeOutput
Data
Output
Data
copy
Input
Data
copy
Output
Data
copy
GPGPU Execution
Program 1
Program 2 GPU command
GPU driver
Blocked Blocked
CPU
GPU
time
time
DetailsCommand Buffer
Indirect Buffer (IB)
GPU Command
GPU Command
GPU Command
microcontroller
Processing Cores
Kernel Execution Unit OthersGPU
CPU
Codeaddress offsetbuffer size
24 bits 40 bits
Data
IB Packet Format
Unified Addressing Memory Space
Refer to
Page Table Page Table
& GART
Write commands
Read commands
Device
Memory
Host
Memory
MMIO
Space
(PCI)Control registers
CUDACompute Unified Device Architecture
Grid = (2, 2)
Block = (3, 3)
Thread
Grid/Thread/Blockという単位で計算を抽象化
CUDAでプログラムを書いている限りは様々なGPUで実行可能
CUDAのRuntime APIの関数名は 「cuda」で始まる
cudaMalloc()
グローバルメモリの確保
cudaMemcpy()
ホストとデバイスでのデータ転送に利用
cudaMemaset()
確保したグローバルメモリに値をセット
cudaFree()
グローバルメモリを解放
CUDA C関数 標準C関数
malloc()
memcpy()
memset()
free()
アプリケーション
CUDA ライブラリ
CUDA Runtime
CUDA Driver
CPU
GPU
Runtime API と Driver API
Driver API:
低レベルなAPIでプログラミングは難しいがGPUをより細かく制御可能
Runtime API:
Driver APIをベースとして実装されたより高度なAPI
パフォーマンスに顕著な差はない一部Driver API にしかない機能があるがRuntime APIと併用可能
CUDAプログラミング
CUDAはGPGPU計算のため、標準の C言語を拡張
dim3 宣言 : 3次元ベクトルの整数型の宣言
カーネル関数の実行
ビルトイン変数 :宣言なしに読み出しのみ可能
関数修飾子 : ホストとデバイスのどちらで実行する関数か指定
例 : dim3 a(2,4,8); → a.x=2; a.y=4; a.z=8;
メンバの値を省略した場合 1 が代入、 grid,block の次元指定で利用
例 : gpuexe(引数); → grid,blockのサイズでカーネル関数(gpuexe)を呼び出し
ホストからの呼び出し、パラメータにより grid × block のスレッドが生成
例 : dim3 gridDim,blockDim,blockIdx,thereadIdx;
グリッドサイズ、ブロックサイズの設定値がカーネル関数で読み出し可能
__global__ → デバイスで実行
__device__ → デバイスで実行(カーネル関数からのみ呼び出し可能)
__host__ → ホストで実行(ホストからのみ呼び出し可能)
CUDAプログラミング
行列乗算のCUDAプログラム例
void multiply(double *a, double *b, double *c, int n)
{
double product = 0.0;
int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
int i, idx;
for (i = 0; i < n; i++)
product += a[row * n + i] * b[i * n + col];
c[row * n + col] = product;
}
スレッド(Thread)とワープ(Warp)
1つのプログラムにおけるスレッド数の合計
= Block.x * Block.y * Block.z * Grid.x * Grid.y * Grid.z
= 数百万以上の可能性あり
複数のCUDAプログラムが同時実行されると切替が大変
プログラムの切替は32スレッドずつ(ワープ)に制限
スレッド(Thread)とワープ(Warp)
void multiply(double *a, double *b, double *c, int n)
{
double product = 0.0;
int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
int i, idx;
for (i = 0; i < n; i++)
product += a[row * n + i] * b[i * n + col];
c[row * n + col] = product;
}
ほとんどC言語と変わらないが複数のジョブが並列実行していることを意識してプログラミングする必要がある。
CUDAのプログラミング例
CUDAプロファイラの利活用
性能解析ツール&デバッグ環境の充実が課題!
優先度付きスケジューリング機構ルール1:GPUがビジー状態のときはコマンドを待機
ルール2:GPUがアイドル状態になったらコマンドをディスパッチ
高優先度タスク 低優先度タスク
GPUコマンド発行
GPUドライバ
GPUからの割込み
CPU
GPU
time
time
GPU上でも優先度制御
オーバヘッドすべてのコマンドをキューイングするとGPU上の実行と実行の間にオーバヘッドが発生する。
優先度付きスケジューリング機構ルール1:GPUがビジー状態のときは実行中の優先度だけ考慮してコマンドを待機
ルール2:GPUがアイドル状態になったらコマンドをディスパッチ
高優先度タスク 低優先度タスク
GPUコマンド発行
GPUドライバ
GPUからの割込み
CPU
GPU
time
time
オーバヘッド削減現在GPUで実行中のジョブ完了を待たずに次のコマンドを投入するとオーバヘッドは削減できる。
資源予約付きスケジューリング機構ルール1:Budgetがなくなったら強制的にコマンドを待機
ルール2:タスクごとにCapacity (C) とPeriod (P) を指定
CPU
GPU
Execution
Budget
C
C
P
time
time
time
Enforced
共有メモリ管理機構
Context 1Virtual Address Space
Context 2Virtual Address Space
Context 3Virtual Address Space
addr A
addr B
addr C
Physical Device Memory Space
addr S
GPUの共有メモリを利用
- cuShmGet()- cuShmAt()- cuShmDt()- cuShmCtl()
共有メモリ管理機構
Context 1
A[]xB[]=P[]
Context 2
C[]xD[]=Q[]
Context 3
P[]xQ[]=X[]
共有メモリなし
A[] B[] C[] D[]
Context 1 Context 2
Host
Memory
P[] Q[]
P[] Q[]
copy copy
Context 3
P[] Q[]
copycopy
X[]
共有メモリあり
A[] B[] C[] D[]
Context 1 Context 2
P[] Q[]
Device
Memory
Context 3
X[]
例題:データフロープログラミング
GPUプログラミングでは共有メモリによって遅延を大幅に削減可能!
データI/O管理
CPU
Main
Memory
Output
Device
Input
DeviceDevice
Memory
GPU
PCI
Mapped
Read Write
Processing
Cores
PCI base address registers (BARs) of GPU
BAR 0
BAR 1
BAR 2
BAR 3
…
Control RegistersI/O
Device
Driver
GPU
Device
Driver
I/O Ports
Physical I/O Address
Data Update
ランタイムスタック
pthread
OpenMP
MPICUDA
OpenCL
HMPP
OpenACC
ライブラリ
コンパイラ API
User Programs
CUDA HMPP OpenCL
Runtime Backend
Kernel Device DriverOS
Hardware
Runtime
ApplicationAPI
System Call
I/OCPU CPU GPUCPUCPU
ランタイムスタック
ホモジニアス向け(主にCPU向け)
pthread: 簡単に使えるAPIライブラリ
OpenMP: コンパイラのディレクティブを利用
MPI: PCクラスタでも利用可能なAPIライブラリ
ヘテロジニアス向け(主にGPU向け)
CUDA: GPU向け言語&APIライブラリ
HMPP: コンパイラのディレクティブを利用
OpenACC: コンパイラのディレクティブを利用
OpenCL: デバイス非依存の言語&APIライブラリ