Awesome
Numo::OpenBLAS
Numo::OpenBLAS downloads and builds OpenBLAS during installation and uses that as a background library for Numo::Linalg.
Installation
Building LAPACK included with OpenBLAS requires Fortran compiler.
macOS:
$ brew install gfortran
Ubuntu:
$ sudo apt-get install gfortran
Add this line to your application's Gemfile:
gem 'numo-openblas'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install numo-openblas
Note: Numo::OpenBLAS downloads and builds OpenBLAS during installation. In many cases, building OpenBLAS takes a lot of time. In addtion, the building OpenBLAS may fail on Apple M1 mac due to linker error:
ld: warning: object file (...) was built for newer macOS version (...) than being linked (...)
...
Undefined symbols for architecture arm64:
"___chkstk_darwin", referenced from:
_sgemv_ in libopenblas_vortexp-r0.3.19.a(sgemv.o)
_sger_ in libopenblas_vortexp-r0.3.19.a(sger.o)
_cblas_sgemv in libopenblas_vortexp-r0.3.19.a(cblas_sgemv.o)
_cblas_sger in libopenblas_vortexp-r0.3.19.a(cblas_sger.o)
_dgemv_ in libopenblas_vortexp-r0.3.19.a(dgemv.o)
_dger_ in libopenblas_vortexp-r0.3.19.a(dger.o)
_cblas_dgemv in libopenblas_vortexp-r0.3.19.a(cblas_dgemv.o)
...
ld: symbol(s) not found for architecture arm64
In that case, you can install it by giving MACOSX_DEPLOYMENT_TARGET
your mac version.
If you are using macOS Monterey, the installation command would be:
$ MACOSX_DEPLOYMENT_TARGET=12.0 gem install numo-openblas
Usage
Numo::OpenBLAS loads Numo::NArray and Numo::Linalg using OpenBLAS as a background library. You can use Numo::NArray and Numo::Linalg just by loading Numo::OpenBLAS.
require 'numo/openblas'
x = Numo::DFloat.new(5, 2).rand
c = x.transpose.dot(x)
eig_val, eig_vec = Numo::Linalg.eigh(c)
Moreover, some of the build options are defined by constants.
> Numo::OpenBLAS::OPENBLAS_VERSION
=> " OpenBLAS 0.3.10 "
> Numo::OpenBLAS::OPENBLAS_CHAR_CORENAME
=> "HASWELL"
> Numo::OpenBLAS::OPENBLAS_NUM_CORES
=> 8
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/yoshoku/numo-openblas. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the BSD-3-Clause License.