Movatterモバイル変換


[0]ホーム

URL:


Mitsutoshi Aoe, profile picture
Uploaded byMitsutoshi Aoe
1,394 views

GHC 6.12.1 マルチコア対応ランタイムシステムについて

2009年Haskell忘年会前哨戦

Embed presentation

Downloaded 15 times
GHC 6.12.1マルチコア対応ランタイムシステム      について             id:maoe
id:maoe青江光敏http://d.hatena.ne.jp/maoe/http://github.com/maoe  Keepalived.confの文法チェッカHaskell歴は4年
id:maoe青江光敏http://d.hatena.ne.jp/maoe/http://github.com/maoe  Keepalived.confの文法チェッカHaskell歴は4年  興味を持ったきっかけは、2005年のLLDNでsakai  さんの発表が全く意味不明だったこと
内容はプログラミングモデルの話はすっ飛ばしてGHC 6.12.1の並列ランタイム性能改善の元となったと思われる論文”Runtime Support for Multicore Haskell”から5分では時間がない(つっこまれると答えられない)ので要点を絞って GHCのスレッドモデル 並列ランタイムの仕組み 最適化の試みを少しだけ
GHCのスレッドモデル                                                 とても軽いa `par` b                                         スパーク                                                 (sparks)                                                     軽い                                                HaskellスレッドforkIO a                                                 (OSスレッドの                                                100x以上軽い)                                                  CPU数と./a.out                                          同数程度の  +RTS -N                                       重いOSスレッド                                                  (worker                                                  threads)            CPU #0   CPU #1   CPU #2   CPU #3
並列ランタイムの仕組み       Haskell                     HEC #2               HEC #3         HEC #4     Execution     Context #1       (HEC)●   An ownership field   ●   An ownership field   ...            ...●   An message queue     ●   An message queue●   A run queue              ...●   An allocation area●   GC remembered    set●   A spark pool●   A worker pool        CPU #0                     CPU #1               CPU #2         CPU #3
並列ランタイムの仕組み       Haskell     Execution                         Haskell Execution Context (HEC)     Context #1       (HEC)               CPUごとに一つ作られる●   An ownership field       +RTS -Nで指定する数だけ作られる●   An message queue●   A run queue                           worker threadがHaskell threadを実●   An allocation area     行するのに必要なデータを持っている●   GC remembered    set                    “Capability”とか”virtual    A spark pool                           processor”とも呼ばれる●●   A worker pool        CPU #0
並列ランタイムの仕組み       Haskell                         Haskellスレッドの実体はThread State Object     Execution     Context #1          (TSO)というヒープに割り当てられたデータ構造       (HEC)                           15 words + sizeof stack + αで小さい●   An ownership field                           run queueに入っているのをHECが順次round-●   An message queue●   A run queue                           robinで実行していく●   An allocation area   parで作られるsparkはspark poolに入る●   GC remembered    set                    システムの負荷が高くないときに、GCを生き延    A spark pool                           びた一部のsparkのみspark threadが作られ並列●    A worker pool                           評価される●                           つまり必ず並列評価されるわけではない        CPU #0
並列ランタイムの仕組み       Haskell     Execution           HECのライフサイクル     Context #1       (HEC)              message queueのメッセージを処理●   An ownership field    run queueのスレッドを走らせる●   An message queue●   A run queue           spark poolにsparkが入っていれば●   An allocation area                          spark threadを起動し実行●   GC remembered    set                          HEC内でなくglobalな、black hole●   A spark pool●   A worker pool         poolをpollingして、いずれかのスレッ                          ドが実行できるようになったら実行        CPU #0
最適化の例HEC間のspark poolの共有をpushモデルから、work stealingqueueというロックフリーなデータ構造を使うようにした並列GCの改善 並列コピー式GCでimmutableなオブジェクトを扱うときは同期処理をしな いように変更した remembered setをHECごとに用意して局所性を高めた ここでもwork stealing queueを使うことでGCのロードバランスをやめ、 局所性を高めたControl.Parallel.Strategiesを使うときに起こるメモリリーク問題を解消したThreadScopeが活躍したみたい どのタイミングでどのHECが頑張っていたのか一目瞭然
まとめというより所感純粋関数型は簡単に並列化できるとは言うものの実際に効率的なプログラムにするのは大変 ラインタイムをこつこつと計測して、こつこつと チューニング GCなどに他の言語でも利用されている技術を適用 Strategy周りはもう少し勉強が必要速度向上と環境整備でHaskellの並列プログラミングが一般的になっていくといいな
参考文献Runtime Support for Multicore Haskell  (たぶん)GHC 6.12.1に取り込まれた改良に関する論文Multicore Haskell Now! ACM Reflections  par/pseqを使った並列プログラミングに始まり、並行プロ  グラミング、STM、データ並列までマルチコアを活用する  ための仕組みを一通り解説  サンプルコードが豊富GHC Commentary  ちょっと情報が古いかもしれないけど参考になる
GHC 6.12.1マルチコア対応ランタイムシステム      について             id:maoe                   1
id:maoe青江光敏http://d.hatena.ne.jp/maoe/http://github.com/maoe  Keepalived.confの文法チェッカHaskell歴は4年                              2
id:maoe青江光敏http://d.hatena.ne.jp/maoe/http://github.com/maoe  Keepalived.confの文法チェッカHaskell歴は4年  興味を持ったきっかけは、2005年のLLDNでsakai  さんの発表が全く意味不明だったこと                                 3
内容はプログラミングモデルの話はすっ飛ばしてGHC 6.12.1の並列ランタイム性能改善の元となったと思われる論文”Runtime Support for Multicore Haskell”から5分では時間がない(つっこまれると答えられない)ので要点を絞って GHCのスレッドモデル 並列ランタイムの仕組み 最適化の試みを少しだけ                                            4
GHCのスレッドモデル                                                 とても軽いa `par` b                                        スパーク                                                 (sparks)                                                     軽い                                                HaskellスレッドforkIO a                                                 (OSスレッドの                                                100x以上軽い)                                                  CPU数と./a.out                                          同数程度の  +RTS -N                                       重いOSスレッド                                                  (worker                                                  threads)            CPU #0   CPU #1   CPU #2   CPU #3                                                        5
並列ランタイムの仕組み       Haskell                     HEC #2               HEC #3         HEC #4     Execution     Context #1       (HEC)●   An ownership field   ●   An ownership field   ...            ...●   An message queue     ●   An message queue●   A run queue              ...●   An allocation area●   GC remembered    set●   A spark pool●   A worker pool        CPU #0                     CPU #1               CPU #2         CPU #3                                                                                6
並列ランタイムの仕組み            Haskell          Execution                              Haskell Execution Context (HEC)          Context #1            (HEC)               CPUごとに一つ作られる     ●   An ownership field       +RTS -Nで指定する数だけ作られる         An message queue                                worker threadがHaskell threadを実     ●     ●   A run queue     ●   An allocation area     行するのに必要なデータを持っている     ●   GC remembered         set                    “Capability”とか”virtual         A spark pool                                processor”とも呼ばれる     ●     ●   A worker pool             CPU #0                                                                 7- ownership fieldは、どのworker threadがcapabilityを   持っているか(実行中か)- message queueは、他のHECからの要求を受け取るた   めのキュー。たとえば”スレッドTを起こして!”という   ような具合- run queueは実行準備ができているスレッドのキュー- allocation areaは、HEC固有のアロケーション領域。   ヒープは一つを共有するけど、固有のもあるらしい。- GC remembered setsは?- spark poolはa `par` bとするときのaのサンクが入る- worker poolはスペアのworker threadとforeign call用   のプール
並列ランタイムの仕組み       Haskell     Execution                         Haskellスレッドの実体はThread State Object     Context #1          (TSO)というヒープに割り当てられたデータ構造       (HEC)                           15 words + sizeof stack + αで小さい●   An ownership field                           run queueに入っているのをHECが順次round-●   An message queue●   A run queue                           robinで実行していく●   An allocation area   parで作られるsparkはspark poolに入る●   GC remembered    set                    システムの負荷が高くないときに、GCを生き延    A spark pool                           びた一部のsparkのみspark threadが作られ並列●    A worker pool                           評価される●                           つまり必ず並列評価されるわけではない        CPU #0                                                              8
並列ランタイムの仕組み       Haskell     Execution           HECのライフサイクル     Context #1       (HEC)              message queueのメッセージを処理●   An ownership field    run queueのスレッドを走らせる●   An message queue●   A run queue           spark poolにsparkが入っていれば●   An allocation area                          spark threadを起動し実行●   GC remembered    set                          HEC内でなくglobalな、black hole●   A spark pool●   A worker pool         poolをpollingして、いずれかのスレッ                          ドが実行できるようになったら実行        CPU #0                                                      9
最適化の例HEC間のspark poolの共有をpushモデルから、work stealingqueueというロックフリーなデータ構造を使うようにした並列GCの改善 並列コピー式GCでimmutableなオブジェクトを扱うときは同期処理をしな いように変更した remembered setをHECごとに用意して局所性を高めた ここでもwork stealing queueを使うことでGCのロードバランスをやめ、 局所性を高めたControl.Parallel.Strategiesを使うときに起こるメモリリーク問題を解消したThreadScopeが活躍したみたい どのタイミングでどのHECが頑張っていたのか一目瞭然                                               10
まとめというより所感純粋関数型は簡単に並列化できるとは言うものの実際に効率的なプログラムにするのは大変 ラインタイムをこつこつと計測して、こつこつと チューニング GCなどに他の言語でも利用されている技術を適用 Strategy周りはもう少し勉強が必要速度向上と環境整備でHaskellの並列プログラミングが一般的になっていくといいな                           11
参考文献Runtime Support for Multicore Haskell  (たぶん)GHC 6.12.1に取り込まれた改良に関する論文Multicore Haskell Now! ACM Reflections  par/pseqを使った並列プログラミングに始まり、並行プロ  グラミング、STM、データ並列までマルチコアを活用する  ための仕組みを一通り解説  サンプルコードが豊富GHC Commentary  ちょっと情報が古いかもしれないけど参考になる                                         12

Recommended

PPTX
Perlと出会い、Perlを作る
 
PDF
Kyoto Tycoon Guide in Japanese
PDF
続・SECDマシン
 
PDF
"Programming Hive" Reading #1
PDF
SECDマシン 実装と動きとその他もろもろについて
 
PDF
V6 unix in okinawa
PDF
JVM-Reading-ConcurrentMarkSweep
PDF
Richard high performance fuzzing ja
PDF
BLS署名の実装とその応用
PDF
CPUの同時実行機能
PDF
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
PDF
Spectre/Meltdownとその派生
PDF
Cpu cache arch
PPTX
Javaで簡単にgpgpu aparapi
PDF
痛い目にあってわかる HAクラスタのありがたさ
PPTX
nftables: the Next Generation Firewall in Linux
PDF
Linux packet-forwarding
PDF
Hydrogen → Helium での Linux kernel の違い
KEY
Intel 82599 10GbE Controllerで遊ぼう
PDF
Rust-DPDK
PPT
Glibc malloc internal
ODP
MPSoCのPLの性能について
PDF
試して覚えるPacemaker入門 『リソース設定編』
PDF
Cephのベンチマークをしました
PDF
Fxxking gc.c
PDF
Code jp2015 cpuの話
PDF
Kernel vm-2014-05-25
PDF
V6 unix vol.2 in okinawa
PDF
これから Haskell を書くにあたって
PDF
関数プログラミング入門

More Related Content

PPTX
Perlと出会い、Perlを作る
 
PDF
Kyoto Tycoon Guide in Japanese
PDF
続・SECDマシン
 
PDF
"Programming Hive" Reading #1
PDF
SECDマシン 実装と動きとその他もろもろについて
 
PDF
V6 unix in okinawa
PDF
JVM-Reading-ConcurrentMarkSweep
PDF
Richard high performance fuzzing ja
Perlと出会い、Perlを作る
 
Kyoto Tycoon Guide in Japanese
続・SECDマシン
 
"Programming Hive" Reading #1
SECDマシン 実装と動きとその他もろもろについて
 
V6 unix in okinawa
JVM-Reading-ConcurrentMarkSweep
Richard high performance fuzzing ja

What's hot

PDF
BLS署名の実装とその応用
PDF
CPUの同時実行機能
PDF
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
PDF
Spectre/Meltdownとその派生
PDF
Cpu cache arch
PPTX
Javaで簡単にgpgpu aparapi
PDF
痛い目にあってわかる HAクラスタのありがたさ
PPTX
nftables: the Next Generation Firewall in Linux
PDF
Linux packet-forwarding
PDF
Hydrogen → Helium での Linux kernel の違い
KEY
Intel 82599 10GbE Controllerで遊ぼう
PDF
Rust-DPDK
PPT
Glibc malloc internal
ODP
MPSoCのPLの性能について
PDF
試して覚えるPacemaker入門 『リソース設定編』
PDF
Cephのベンチマークをしました
PDF
Fxxking gc.c
PDF
Code jp2015 cpuの話
PDF
Kernel vm-2014-05-25
PDF
V6 unix vol.2 in okinawa
BLS署名の実装とその応用
CPUの同時実行機能
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
Spectre/Meltdownとその派生
Cpu cache arch
Javaで簡単にgpgpu aparapi
痛い目にあってわかる HAクラスタのありがたさ
nftables: the Next Generation Firewall in Linux
Linux packet-forwarding
Hydrogen → Helium での Linux kernel の違い
Intel 82599 10GbE Controllerで遊ぼう
Rust-DPDK
Glibc malloc internal
MPSoCのPLの性能について
試して覚えるPacemaker入門 『リソース設定編』
Cephのベンチマークをしました
Fxxking gc.c
Code jp2015 cpuの話
Kernel vm-2014-05-25
V6 unix vol.2 in okinawa

Viewers also liked

PDF
これから Haskell を書くにあたって
PDF
関数プログラミング入門
PDF
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
PDF
FP習熟度レベルとFSharpxのIteratee
PPTX
純粋関数型アルゴリズム入門
PDF
Katagaitai CTF勉強会 #4 Crypto
 
PDF
磯野ー!関数型言語やろうぜー!
 
PDF
関数型言語とオブジェクト指向言語(序章)
PDF
F#で学ぶ関数プログラミング入門?
PDF
関数型軽い紹介
PDF
120901fp key
 
PDF
Yesod(at FPM2012)
PDF
JSer Class #1
PDF
Erlangを触ってみた
PPTX
Erlang
KEY
Template Haskell とか
PDF
第一回関数型言語勉強会 大阪
PPTX
関数型言語初心者の俺がF#触ってみた
PDF
データベース入門3
KEY
最近のHaskellマップ
これから Haskell を書くにあたって
関数プログラミング入門
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
FP習熟度レベルとFSharpxのIteratee
純粋関数型アルゴリズム入門
Katagaitai CTF勉強会 #4 Crypto
 
磯野ー!関数型言語やろうぜー!
 
関数型言語とオブジェクト指向言語(序章)
F#で学ぶ関数プログラミング入門?
関数型軽い紹介
120901fp key
 
Yesod(at FPM2012)
JSer Class #1
Erlangを触ってみた
Erlang
Template Haskell とか
第一回関数型言語勉強会 大阪
関数型言語初心者の俺がF#触ってみた
データベース入門3
最近のHaskellマップ

Similar to GHC 6.12.1 マルチコア対応ランタイムシステムについて

PDF
Project Loom - 限定継続と軽量スレッド -
PDF
HaskellではじめるCortex-M3組込みプログラミング
PDF
2011.09.18 v7から始めるunix まとめ
ODP
Boost9 session
PPTX
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
KEY
難しそうで難しくない少し難しいClojure並行処理
PDF
Fork/Join Framework。そしてLambdaへ。
PDF
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
PPTX
非同期処理の基礎
PDF
Node.js入門
PDF
できる!並列・並行プログラミング
PDF
マルチコア時代の並列プログラミング
PDF
CHP survey
PPTX
もしも… Javaでヘテロジニアスコアが使えたら…
PDF
20apr2012 kernelvm7-main
PDF
Dive into RTS - another side
PDF
生物データベース論(並列分散計算フレームワーク)
PDF
Unix architecture
PDF
GCをみればRTSが見えてくる、かも。。。
 
PDF
小二病でもGCやりたい
 
Project Loom - 限定継続と軽量スレッド -
HaskellではじめるCortex-M3組込みプログラミング
2011.09.18 v7から始めるunix まとめ
Boost9 session
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
難しそうで難しくない少し難しいClojure並行処理
Fork/Join Framework。そしてLambdaへ。
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
非同期処理の基礎
Node.js入門
できる!並列・並行プログラミング
マルチコア時代の並列プログラミング
CHP survey
もしも… Javaでヘテロジニアスコアが使えたら…
20apr2012 kernelvm7-main
Dive into RTS - another side
生物データベース論(並列分散計算フレームワーク)
Unix architecture
GCをみればRTSが見えてくる、かも。。。
 
小二病でもGCやりたい
 

GHC 6.12.1 マルチコア対応ランタイムシステムについて


[8]ページ先頭

©2009-2025 Movatter.jp