Cython

サイソン

C との融合による Python の高速化

Cython の表紙
プログラミング
著者:
クルト・W.スミス / 中田秀基(スミス, クルト・W. / ナカダ, ヒデモト)
出版社:
オライリー・ジャパン
出版日:
2015年06月
ISBN:
9784873117270
在庫:
メーカー取り寄せ
5(1 件 / 楽天ブックス)
中級者向け
PythonCython高速化科学技術計算統計分析CC++Scipyパフォーマンス最適化コンパイラー

なぜ注目されているか

言及数
204位
総合406位 ↓ 4 ランクダウン 言及 16 件・うち記事 13 件を掲載
02320222023202420252026

書籍紹介

Python の表現力と C / C++の速さを備えた Cython を使って、高速なシステムを効率的に開発する手法を示す。科学技術計算や統計分析の分野では恒常的にある「Python を高速化したい」というニーズに応える一冊。SciPy の初期の開発とメンテナンスを行っていたことで知られる Enthought 社のコンサルタントである著者がていねいに解説。

技書の森解説

Python のコードが遅い箇所だけを、C の速さに近づけたい。そのための道具が Cython で、『Cython』 (Kurt W. Smith 著、中田 秀基 監訳、長尾 高弘 訳、オライリー・ジャパン、2015 年 6 月刊) はその使い方を基礎から並列処理まで解説した書籍です。副題は C との融合による Python の高速化で、原書は Cython です。版元の紹介文は、Cython を Python プログラムの実装を高速化するコンパイラーであると同時に、C や C++ で書かれたライブラリを Python から利用できるようにするブリッジとしての役割も果たすものと説明し、科学技術計算や統計分析の分野にある Python を高速化したいというニーズに応える一冊と位置づけています。書誌の紹介文によると、著者は SciPy の初期の開発とメンテナンスを行っていたことで知られる Enthought 社のコンサルタントです。

全 13 章の構成、型宣言の基本から C++ のラップと並列処理まで

目次ははじめにと全 13 章、索引で構成されます。1 章「Cython の基本」で Python と C と Cython を関数呼び出しのオーバーヘッドやループ処理の観点から比べ、2 章ではコンパイルと実行の方法として、distutils と cythonize、IPython の %%cython、pyximport、CMake や SCons や Make との組み合わせを扱います。3 章「Cython の深層」は cdef による静的型宣言、def と cdef と cpdef の 3 種類の関数、構造体や列挙型の宣言、ループの書き方を掘り下げ、4 章で多体問題のシミュレーションを題材に Python のコードを Cython へ変換します。5 章は拡張型、6 章は .pyx と .pxd のファイルと cimport 文によるコードの構成です。7 章と 8 章は C と C++ のライブラリのラップに充てられ、8 章では C++ の例外やテンプレート、スマートポインターによるメモリ管理まで項目に並びます。9 章でプロファイリングツール、10 章で NumPy と型付きメモリビュー、11 章でスペクトルノルムの計算を題材にした性能の測定と C による実装との比較を取り上げ、12 章はグローバルインタープリタロックと prange を使ったループの並列処理、13 章「世界の中の Cython」で Cython とほかのプロジェクトを取り上げて締めくくられます。実例の章が 4 章と 11 章の 2 か所に置かれ、文法を学んだあとに実際のコードで確かめる流れと読めます。

Python の遅さの正体と、Cython が効く場所

Python が数値計算のループで遅くなる主な理由は、変数の型が実行時まで決まらない動的型付けにあります。足し算 1 回にも、値の型を調べ、対応する処理を探し、結果を新しいオブジェクトとして作るという手順が挟まり、この積み重ねが内側のループで大きな差になります。Cython は Python に近い文法で書いたコードを C 言語 のコードへ変換し、それを コンパイラー で拡張モジュールにする仕組みで、cdef で変数や関数に C の型を宣言した部分では、こうした実行時の型の確認を省いた C のコードが生成されます。宣言しない部分は Python のオブジェクトとして動くため、全体を書き換えずに、プロファイリングで見つけた重い箇所だけに型を付けていくという段階的な進め方ができます。1 章に「頭を冷やそう」という節が置かれ、9 章がプロファイリングに充てられている構成は、速くなる場所を測ってから手を入れるという順序を重視していると読めます。もう 1 つの柱が既存のライブラリの利用で、C++ のクラスや例外まで Python から扱えるようにする 8 章は、計算の中核を C や C++ で持っている組織にとって、Python との接続を自前で書く手間を減らす選択肢になります。

2015 年刊の前提と、読む前に押さえておきたい知識

本書は 2015 年 6 月刊で、3 章には Python 2 と Python 3 間の橋渡しの節があり、2 章は distutils と cythonize を使う方法を標準的な方法として説明しています。Python の公式文書によると、2023 年 10 月 2 日に公開された Python 3.12 で distutils パッケージは標準ライブラリから削除され、引き続き必要な場合はサードパーティの Setuptools が提供するとされています。そのため 2 章のビルドの手順を Python 3.12 以降で試すときは、ビルドの道具の違いを自分で読み替える前提になります。一方で、静的型宣言の考え方、拡張型、ラップの書き方、型付きメモリビュー、グローバルインタープリタロックと並列処理の関係といった中心の題材は、ビルドの手順ほど環境の変化に左右されにくい部分です。読み進めるには Python の文法とクラスの扱いに慣れていることに加え、ポインターや構造体、ヒープとスタックといった C の基本の考え方を知っていると理解が速くなります。Python そのものを学び始める段階なら、Python 本の選び方 から入門書を先に選ぶほうが近道です。

NumPy を使った計算でも速さが足りない研究者や、C や C++ で書かれた計算ライブラリを Python から使えるようにしたい開発者にとって、本書は Cython の文法、ビルド、ラップ、並列処理までを 1 冊で通して確認できる資料です。2015 年時点の環境を前提にしていることを理解したうえで、高速化の考え方とラップの技法を体系的に身につけたい人に向いています。

言及した記事 (13 件)

この本に興味がある方におすすめ

関連する本

関連記事

関連用語

共有: