ベンチマーク(BLASを使用したpython vs. c ++)と(numpy)
BLASとLAPACKの線形代数機能を多用するプログラムを書きたいと思います。パフォーマンスは問題なので、いくつかのベンチマークを行い、知りたいのですが、私が取ったアプローチが正当なものかどうかを確認します。 私は、いわば3人の競技者がいて、単純な行列と行列の乗算でそのパフォーマンスをテストしたいと考えています。出場者は次のとおりです。 Numpy、の機能のみを利用dot。 Python、共有オブジェクトを介してBLAS機能を呼び出します。 C ++、共有オブジェクトを介してBLAS機能を呼び出す。 シナリオ さまざまな次元の行列-行列乗算を実装しましたi。i5の増分で5〜500が実行され、matricies m1とはm2、このように設定されています。 m1 = numpy.random.rand(i,i).astype(numpy.float32) m2 = numpy.random.rand(i,i).astype(numpy.float32) 1. Numpy 使用されるコードは次のようになります。 tNumpy = timeit.Timer("numpy.dot(m1, m2)", "import numpy; from __main__ import m1, m2") rNumpy.append((i, tNumpy.repeat(20, 1))) 2. Python、共有オブジェクトを介してBLASを呼び出す 機能付き _blaslib = ctypes.cdll.LoadLibrary("libblas.so") def Mul(m1, m2, i, r): no_trans = c_char("n") n = c_int(i) one …