thread+SIMD命令でnumpyを超えることができるか?(3)の続き
gitのソースはこちら
commit 767abec77627718084310bc3c9a6ba91c5d1686a
変更点
とりあえず、numpy.dotの2次元配列x1次元配列のみに限定的に対応。
v1 : 2次元配列
v2 : 1次元配列
とすると、
v3 = mylib.dot(v1,v2)
のように使用します。
out=には未対応。後日対応します。
結果
実行してみた結果が下記のファイルです。
mydottest.ipynb
jupyter notebook超便利。。。
でかすぎる配列を生成してなんども実行させると、MacOSが不安定になったりします。
配列の大きさによってnumpyより早かったり遅かったりいろいろです。
時間的な都合もあり、まともに試せたのは、16384x16384の2次元配列と、長さ16384の1次元配列の場合のみです。
実行時間 | float64 | float32 | complex128 | complex64 |
---|---|---|---|---|
numpy | 86.3ms±505µs | 48.3ms±7.14ms | 172ms±685µs | 86.3ms±505µs |
mylib | 85.9ms±8.04ms | 39.1ms±395µs | 162ms±4.92ms | 92.9ms±14.1ms |
残念ながらcomplex64はむしろ遅くなってしまいました。
うまく場合分けをして、計算順序を工夫すれば、もう少し速くなりそう。
最適化は後にして、次は2次元x2次元のnumpy.dotに対抗する予定です。
環境の情報
numpy 1.16.1
Python 3.7.2
clang++
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin18.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
機種名: MacBook Pro
機種ID: MacBookPro13,2
プロセッサ名: Intel Core i5
プロセッサ速度: 2.9 GHz
プロセッサの個数: 1
コアの総数: 2
二次キャッシュ(コア単位): 256 KB
三次キャッシュ: 4 MB
メモリ: 16 GB