2015年11月12日

ベンチマーク3 π

mathに定義されているグローバル変数 pi へのアクセス速度について、ベンチマークを計測します。


math.pi へのアクセス方法として以下の3パターン用意し、それぞれの処理速度を比較します。

  1. フルパスで math.pi
  2. from math import piとインポート
  3. いったんローカル変数 pi にコピー

ベンチマークのソースコードです。
from benchmarker import Benchmarker
import math

with Benchmarker(1000000, cycle=3, extra=1) as bench:

    @bench("math.pi")
    def _(bm):
        for _ in bm:
            2.0 * math.pi

    @bench("import pi")
    def _(bm):
        from math import pi
        for _ in bm:
            2.0 * pi

    @bench("local")
    def _(bm):
        pi = math.pi
        for _ in bm:
            2.0 * pi
計測結果です。
## benchmarker:         release 4.0.1 (for python)
## python version:      3.4.0
## python compiler:     MSC v.1600 32 bit (Intel)
## python platform:     Windows-8-6.2.9200
...

## Ranking      real
local         0.2657  (100.0) ********************
import pi     0.2703  ( 98.3) ********************
math.pi       0.4347  ( 61.1) ************

計測結果は、local と import pi はほぼ等速(localの方が遅い回もありました)、math.pi は低速、となりました。

いわゆる数学アルゴリズムでは math.pi へのアクセスが多くなる場合があります。math.pi とフルパスで書くのは、速度的には若干不利となるようです。
また、ドットを含むパスを書くと遅くなるというのは、math.pi に限らず全ての変数に言えることです。

0 件のコメント:

コメントを投稿