Closed2
ハイパフォーマンスPython 学習メモ
1章 高性能なPythonを理解する
用語
- ベクトル化
- 複数のデータを同時にCPUに入力して一度に計算すること
- SIMD(Single Instraction Multiple Data)
- 単一命令・複数データ
- IPC
- 1サイクル当たりの実行回数
- ハイパースレッディング
- 仮想的に第二第三のCPUをOSに提供する
- 2スレッドの命令を1CPU上で並行して実行する
- アウトオブオーダー実行
- コンパイラが前後に依存しない処理をプログラム内から探し最適化する
- マルチコアアーキテクチャ
- 1つのプロセッサに論理的に複数コアを持つアーキテクチャ
- アムダ―ルの法則
- コアを複数立てても1コアの処理能力がボトルネックとなり、それ以上処理能力が上がらないこと
- GIL(Global Interpreter Lock)
- デフォルトのPythonの処理は、1つの命令を1つのコアで実行することになっている
- L1/L2キャッシュ
- CPUに入力するデータは必ずここを通る
- 超高速にR/Wできる
- 容量は数kB程度
- フロントサイドバス
プロファイリング
コードの遅い箇所を特定すること
最適化のために考慮すべきコンピュータの基本要素
- 演算装置
- 記憶装置
- 接続レイヤ
Pythonの設計思想(特徴)故に最適化の道は難しい?
- 低レイヤーの実装要素を抽象化
- メモリの確保・アクセス・解放など
- GIL
- ガベージコレクション
- 動的型付け言語
2ボトルネック発見のためのプロファイリング
プロファイリングで到達したい目標
- 必要十分なスピード
- 無駄のないリソース使用量
計測可能なリソース
- CPU時間
- メモリ使用量
- ネットワーク
- ディスク使用量
プロファイリングについて
第一目標
システムをテストして遅い箇所を特定すること
このスクラップは2022/06/28にクローズされました