6章行列とベクトルの計算
本章を読めば以下の問いに答えられるようになる
- ベクトルの計算のボトルネックは何か?
- CPUが計算を実行する効率を調べるツールは何か?
numpy
を用いるとPythonだけを使って書くよりも数値計算の効率がよい理由は何か?- キャッシュミスとページフォールトとは何か?
- コード上のメモリ確保を追跡する方法は?
コンピュータで解決しようとする問題がなんであろうと、どこかでベクトルの計算が絡むものです。ベクトルの計算は、コンピュータの動作上、また、シリコンのレベルまで考慮してプログラムの実行スピードを上げるためには不可欠です。コンピュータが知っていることは数値演算だけなので、複数の計算を一度に実行する方法を知れば、プログラムを高速化するのに役立ちます。
本章では、比較的簡単な数学の問題として拡散方程式の解法に焦点を当て、CPUのレベルで何が起こっているのかを理解することで、ベクトル計算の複雑な問題を解き明かします。PythonのコードによってCPUに与える影響が異なることを理解し、効率よく精査する方法を知ることで、他の諸問題も理解できるようになります。
それでは、まず扱う問題を紹介し、Pythonだけを使って簡単に解いて見せます。メモリの問題を指摘しPythonだけでその問題を解決したあとで、numpy
を導入しコードが高速になるしくみと理由を示します。次に、アルゴリズムを少し変更して、numpy
で問題を解決できるようにコードを書き換えます。numpy
の持つ汎用性の一部を除去することによって、さらに高速化できることを示します。最後に、一連の作業を支援する外部モジュールを導入し、プロファイリングせずに最適化することの危険性についても述べます。
6.1 問題の説明 ...
Get ハイパフォーマンスPython now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.