Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NumPyの計算が速い理由をGIL解放のメカニズム観点でちょっとだけ掘り下げてみた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kazuaki Higa
February 20, 2026
0
84
NumPyの計算が速い理由をGIL解放のメカニズム観点でちょっとだけ掘り下げてみた
Kazuaki Higa
February 20, 2026
Tweet
Share
More Decks by Kazuaki Higa
See All by Kazuaki Higa
denoとtypescriptの関係について改めて考えてみる
higak9
0
58
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Making Projects Easy
brettharned
120
6.6k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
120
Embracing the Ebb and Flow
colly
88
5k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
980
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
300
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
410
Designing for Performance
lara
611
70k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Transcript
NumPyの計算が速い理由をGIL解放の メカニズム観点でちょっとだけ 掘り下げてみた PyCon mini Shizuoka 2026 | Lightning Talk
Kazuaki Higa 2026.02.21
X:@higakazuaki9 • 比嘉 一晃(ひが かずあき) • 沖縄県出身 • 株式会社iimon エンジニア ◦
不動産DXのツールを提供 https://iimon.co.jp/ • 現在の担当業務の技術スタック ◦ vanilla-tsやReact、Django、AWS、 Google Cloud(Firebase)...etc • これまでの経験 ◦ Angular、React、Vue.js、Spring Boot、Django、Fast API、Ruby on Rails…etc • 性格 ◦ 人懐っこい、面倒くさがり、ねことビー ル好き(お酒の失敗は、、、色々ありま す) プロフィール
株式会社iimon
アジェンダ 1. イントロダクション 2. NumPyの概要 3. GIL(Global Interpreter Lock) 4.
NumPyによるGILの解放と処理フロー 5. まとめ
アジェンダ 1. イントロダクション 2. NumPyの概要 3. GIL(Global Interpreter Lock) 4.
NumPyによるGILの解放と処理フロー 5. まとめ
イントロダクション 「NumPyは計算が速い」 よく言われていることだし実際に使っていて速く感じるけど、なぜだろう 🤔 色々理由はあるだろうが・・・ ・・・ ・・・
イントロダクション よし、今回は GIL解放の観点で調べてみよう!
アジェンダ 1. イントロダクション 2. NumPyの概要 3. GIL(Global Interpreter Lock) 4.
NumPyによるGILの解放と処理フロー 5. まとめ
NumPyの概要 - 多次元配列(ndarray) を中心とした科学計算の基盤パッケージ - ベクトル化で無駄なループを排除&事前コンパイル済みの C言語コードで高速実行 - ブロードキャストにより異なる配列同士の計算でも簡潔かつ数学的に書ける -
機械学習やデータ分析、そのほか科学分野での複雑な計算処理など広く活用されている ざっくり一言でいうと・・・ 科学計算のための Pythonライブラリ
NumPyの概要 コード例) import numpy as np ← npで命名してimportすることが多い a1 =
[1, 2, 3] a2 = [4, 5, 6] result = np.dot(a1, a2) ← ベクトルの内積を計算する関数「 dot」 print(result) # 32 ← (1 × 4) + (2 × 5) + (3 × 6)
アジェンダ 1. イントロダクション 2. NumPyの概要 3. GIL(Global Interpreter Lock) 4.
NumPyによるGILの解放と処理フロー 5. 純粋なPythonコード vs NumPyの速度検証 6. まとめ
Global Interpreter Lockとは・・・ - CPython(標準のPython実装)が持つ排他ロックの仕組み - 一度にPythonバイトコードを実行するスレッドは 1つだけであることを保証 →複数スレッドからのメモリ(参照カウントなど)への同時書き込みを防ぎ、 インタプリタレベルでの安全性を確保できる
・・・ CPUバウンドなタスクにおいて遅くなることがある (複数のスレッドで処理の高速化をはかった時に制限が入ってしまうなど) GIL(Global Interpreter Lock)
アジェンダ 1. イントロダクション 2. NumPyの概要 3. GIL(Global Interpreter Lock) 4.
NumPyによるGILの解放と処理フロー 5. 純粋なPythonコード vs NumPyの速度検証 6. まとめ
NumPyによるGILの解放と処理フロー GIL解放のイメージ Thread 1: NumPy計算中... (GIL解放) Thread 2: 自由に実行!! NumPyがGILを解放
→ 他スレッドが動ける → 性能が劣化しない(ブロッカーが減る)
NumPyによるGILの解放と処理フロー 処理フロー 1. Python: NumPyの関数を呼び出す(np.dot(a, b)など) 2. NumPy C拡張に処理がディスパッチ 3.
GILを解放(マクロ: NPY_BEGIN_THREADS) 4. 純粋なC言語による計算(GILなし) 5. GILを再取得(マクロ: NPY_END_THREADS) 6. 結果をPythonに返す - NPY_BEGIN_THREADS:PythonのState(状態)を保存し、 GILを解放 - GIL解放中:Pythonオブジェクトには触れない。純 C/Fortranの数値計算のみ - NPY_END_THREADS:計算完了後、GILを再度取得して状態を復元&結果を Pythonに返す
NumPyによるGILの解放と処理フロー 内部処理の一部抜粋) https://github.com/numpy/numpy/blob/main/numpy/_core/src/umath/ufunc_object.c ・・・略・・・ if (!needs_api) { NPY_BEGIN_THREADS; ← 特定の条件を満たす場合、
GIL解放 } ・・・計算処理( C言語など)・・・ NPY_END_THREADS; ← 計算処理後にGILを取得してPython処理内の状態を復元 ・・・略・・・
アジェンダ 1. イントロダクション 2. NumPyの概要 3. GIL(Global Interpreter Lock) 4.
NumPyによるGILの解放と処理フロー 5. まとめ
まとめ NumPyが速い理由はC言語による処理だけではなかった!!! 内部的な処理の中にもパフォーマンスを考慮した様々な工夫がありました。 NumPyにはほかにもスレッドをサポートするマクロがあります! (スレッドだけにとどまらず、そのほかにも様々ありますが) 気になる方はぜひ覗いてみてください!
GIL関連: https://docs.python.org/ja/3/c-api/init.html NumPy 概要: https://numpy.org/doc/stable/user/whatisnumpy.html NumPy C-API: https://numpy.org/doc/stable/reference/c-api/ NumPy ソースコード(ufunc_object):
https://github.com/numpy/numpy/blob/main/numpy/_core/src/umath/ufunc_object.c 参考
ご清聴ありがとうございました!!