numo-openblas

Numo::OpenBLAS downloads and builds OpenBLAS during installation and uses that as a background library for Numo::Linalg.


Keywords
data-science, machine-learning, numo, openblas, ruby
License
BSD-3-Clause
Install
gem install numo-openblas -v 0.4.6

Documentation

Numo::OpenBLAS

Build Status Gem Version BSD 3-Clause License

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.