LoginSignup
1
1

More than 5 years have passed since last update.

thread+SIMD命令でnumpyを超えることができるか?(4)

Posted at

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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1