Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
euphoricwavism
PPTX, PDF
2,398 views
プロセスとスレッド Cpuの使い方の違い in python
並列処理をさせるためにプロセスモジュールとスレッドモジュールをそれぞれ使ってみたところCPUの使い方に違いがあったので、その理由を調べた話。
Software
◦
Read more
3
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 23
2
/ 23
3
/ 23
4
/ 23
5
/ 23
6
/ 23
7
/ 23
8
/ 23
9
/ 23
10
/ 23
11
/ 23
12
/ 23
13
/ 23
14
/ 23
15
/ 23
16
/ 23
17
/ 23
18
/ 23
19
/ 23
20
/ 23
21
/ 23
22
/ 23
23
/ 23
More Related Content
PPTX
GTFSの可視化
by
Kazuaki Sano
PDF
魅せるPowerPointビジネスプレゼン【実践編】
by
schoowebcampus
PPTX
Rはいいぞ!むしろなぜ使わないのか!!
by
Shushi Namba
PPTX
20161122_How to start Recruiting Engineers_mercari_ishiguro
by
Takaya Ishiguro
PDF
企業研究者の研究のすゝめ方
by
Atsushi_Ando
PDF
【人事向け勉強会(1.19)】Retty社 奥田様 ご登壇スライド
by
Poole Team
PPTX
ChatGPTをもっと使いたい.pptx
by
TokioMiyaoka
PPTX
クラウドファースト時代のAWS活用事例と今後の展望 - AWS Cloud Storage & DB Day 2014
by
Takayuki Enomoto
GTFSの可視化
by
Kazuaki Sano
魅せるPowerPointビジネスプレゼン【実践編】
by
schoowebcampus
Rはいいぞ!むしろなぜ使わないのか!!
by
Shushi Namba
20161122_How to start Recruiting Engineers_mercari_ishiguro
by
Takaya Ishiguro
企業研究者の研究のすゝめ方
by
Atsushi_Ando
【人事向け勉強会(1.19)】Retty社 奥田様 ご登壇スライド
by
Poole Team
ChatGPTをもっと使いたい.pptx
by
TokioMiyaoka
クラウドファースト時代のAWS活用事例と今後の展望 - AWS Cloud Storage & DB Day 2014
by
Takayuki Enomoto
What's hot
DOCX
RによるBox-Cox変換
by
wada, kazumi
PDF
漸近理論をスライド1枚で(フォローアッププログラムクラス講義07132016)
by
Hideo Hirose
PDF
Rの導入とRStudio事始め(改訂版)
by
Takashi Yamane
PDF
Tableau Map Hands-on Guide
by
Ryusuke Ashiya
PDF
岩波データサイエンス_Vol.5_勉強会資料02
by
goony0101
PDF
線形?非線形?
by
nishio
PDF
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
by
Koichi Hamada
PDF
いろんなバンディットアルゴリズムを理解しよう
by
Tomoki Yoshida
PDF
距離と分類の話
by
考司 小杉
PDF
EtherCATやPROFINETを OPC UAで接続してみた
by
ミソジ
PPTX
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
by
takehiko yoshida
PPTX
研究発表スライド作成の実際 序盤の作り方
by
Hisashi Ishihara
PDF
2 3.GLMの基礎
by
logics-of-blue
PDF
【企画書】gamba!(ガンバ):サムライインキュベート様向け_企画プレゼン資料
by
Find Job Startup
PDF
1 4.回帰分析と分散分析
by
logics-of-blue
PPTX
StanとRでベイズ統計モデリング読書会Ch.9
by
考司 小杉
KEY
ノンデザイナーのための配色理論
by
tsukasa obara
PDF
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
by
Koichi Hamada
PDF
effectsパッケージを用いた一般化線形モデルの可視化
by
Yu Tamura
PDF
論文のいろは
by
Shu Sakamoto
RによるBox-Cox変換
by
wada, kazumi
漸近理論をスライド1枚で(フォローアッププログラムクラス講義07132016)
by
Hideo Hirose
Rの導入とRStudio事始め(改訂版)
by
Takashi Yamane
Tableau Map Hands-on Guide
by
Ryusuke Ashiya
岩波データサイエンス_Vol.5_勉強会資料02
by
goony0101
線形?非線形?
by
nishio
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
by
Koichi Hamada
いろんなバンディットアルゴリズムを理解しよう
by
Tomoki Yoshida
距離と分類の話
by
考司 小杉
EtherCATやPROFINETを OPC UAで接続してみた
by
ミソジ
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
by
takehiko yoshida
研究発表スライド作成の実際 序盤の作り方
by
Hisashi Ishihara
2 3.GLMの基礎
by
logics-of-blue
【企画書】gamba!(ガンバ):サムライインキュベート様向け_企画プレゼン資料
by
Find Job Startup
1 4.回帰分析と分散分析
by
logics-of-blue
StanとRでベイズ統計モデリング読書会Ch.9
by
考司 小杉
ノンデザイナーのための配色理論
by
tsukasa obara
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
by
Koichi Hamada
effectsパッケージを用いた一般化線形モデルの可視化
by
Yu Tamura
論文のいろは
by
Shu Sakamoto
Editor's Notes
#2
P1:
#3
P2:Pythonを好きになって続けてきて、ようやく並列処理をしたいシチュエーションが出てきたのでそういったモジュールが用意されていないか探してみたところ、「theading」というモジュールがあったので使ってみることにしました。
#4
P3:しかし、実際使ってみると問題がありましたので、今日はその解決策と原因について話していきます。
#5
P4:まず、並列処理させたのに処理時間が短くなりませんでした。
#6
P5:並列処理に対する期待は、「遊んでいるCPUをなくして、できるだけCPUをぶん回して計算したい」、「結果、直列でやったら長時間かかる処理を並列させて短時間で終わらせたい」というものがあると思います。
#7
P6:そのため、スレッドモジュールを使ってCPUを使うような処理を並列に実施させてみました。期待通り遊んでいるCPUを使ってくれればスレッド数を増やしても処理時間はあまり変わらないはずです。
#8
P7:結果は、期待通りには動いてくれませんでした。処理時間は計算量に正比例し、 CPUの使用率は1コア分で高止まりしてしまいました。要するに直列に計算させた時と変わっていません。
#9
P8:そこで、スレッドではなくプロセスを使った目的達成しました。
#10
P9:Pythonには並列処理させるモジュールに「threading」の他に「 multiprocessing」というものがあります。ここの説明を読むと「マルチプロセッサマシンの性能を最大限に活用することができる」とあったので早速使ってみました。
#11
P10:結果、今度は期待通り動いてくれました。手持ちのPCは4コアありますので、4プロセス立ち上げたところまでCPUの使用率はほぼ比例して上がっていっています。3プロセス目、4プロセス目になると若干上がり方が減少していますが、これは、OSのプロセス等他のものも動作しているためと予想します。それに応じて処理時間も3プロセス目からは若干長くなりだしています。とはいえ、直列処理よりは処理時間が短くなっているため、並列処理としては成功と言えると判断します。
#12
P11:でも、なぜプロセスだとCPUを使ってくれて、スレッドでは使ってくれないのでしょうか。
#13
P12:調べてみるとPythonというインタプリタとしての仕様に原因があり、その根本はC言語にあることがわかりました。
#14
P13:まず、原因を探るべく、「multiprocessing」の紹介を読み直すと「グローバルインタプリタロックの問題を避ける工夫が行われている」といった気になる文章がありました。キーワードと簡易的な説明文を読んでもよく分からないので「グローバルインタプリタロック」についてもう少し調べてみることにしました。
#15
P14:前提として基本のPythonはC言語によって書かれています。Pythonはインタプリタ言語ですので、インタプリタがC言語で書かれていて、pyファイルに書いたPythonソースコードをインタプリタが字句解析や構文解析をして機械語に動的に翻訳してくれています。
#16
P15:そのインタプリタはもちろんC言語の様々なライブラリを使っているのですが、ライブラリの中にはスレッドセーフでないものもあります。標準ライブラリもスレッドセーフでないものがあるそうです。Pythonインタプリタではそういったライブラリも使用しています。
#17
P16:さて、スレッドセーフとはどういった状態でしょうか。ざっくり言ってしまえば、並列処理しても問題が発生しないことを指します。問題はいくつかありますが、特にデータの整合性が崩れないことを指すことが多いです。スレッドセーフでない、データの整合性がとれないことについてこの図で説明します。関数Aがグローバル変数Aを取得して処理した結果を再度グローバル変数に戻すとします。関数Bも同様な処理をしたとします。関数Aも関数Bも自身が処理している間にグローバル変数Aの値が書き換わってほしくない場合、本来であれば関数Aの後に関数Bが順に処理されて欲しいはずです。しかし、同時に処理が走ってしまった場合、一方が処理をしている間にグローバル変数Aの内容が変わってしまう可能性があります。このような問題が発生する場合をスレッドセーフでないと言います。
#18
P17:そうすると、インタプリタとして問題が発生しますので、上位レイヤのPythonレベルでも動作する上でなんらかの問題が発生する可能性がでてきますね。
#19
P18:そこで、GILという機構をインタプリタに実装して、インタプリタで処理をする場合、同時に動作できるのは一つの処理ということにしました。で、処理を細切れにして順繰り処理することであたかも並列処理をさせているように見せかけることにしました。これが「threading」モジュールによる実装になります。
#20
P19:では、なぜ「multiprocessing」モジュールを使うとそれが回避できるのでしょうか。これはスレッドとプロセスの特定の違いによります。
#21
P20:スレッドは一つのプロセス上で動きます。OSはプロセス単位でメモリ空間を与えるので、プロセス内にあるスレッドはメモリ空間を共有します。メモリ空間を共有するとはグローバル変数がそのメモリ空間に同居している処理同士で共有して使われることを指します。そのため、スレッドセーフに実装されていなければ、GILがそこをカバーする必要がでてきます。
#22
P21:しかし、プロセスに処理を切り出すことによってメモリ空間は共有されなくなるので、各プロセス内でスレッド処理を実装しない限りGILの影響を受けなくなります。従って、並列処理をさせても処理が細切れにならなくなり、CPUもそれぞれ利用することができるようになります。
#23
P22:まとめとして、インタプリタ型の言語を使う場合は、スレッドで目的の並列処理が可能か確認が必要ということがわかりました。また、目的によってはマルチプロセス化を考える必要があることもわかりました。
#24
P23:このプレゼンのために作成したソースコードは以下にアップしていますので、試してみてください。ツッコミ歓迎です。 https://github.com/Euphoricwavism/cpu_test_for_process_and_thread
Download