Skip to content

Latest commit

 

History

History
100 lines (69 loc) · 4.49 KB

File metadata and controls

100 lines (69 loc) · 4.49 KB

Tensor: Scientific Computing for PHP

PHP from Packagist Latest Stable Version Code Checks Downloads from Packagist GitHub

Tensor Ext is a PHP extension that brings high-performance Matrix and Vector computing to the PHP language. The high-level object-oriented API is written in Zephir and backed by highly-optimized native C kernels.

Features

  • Object-oriented API — Friendly Matrix and Vector APIs are fluent and expressive.
  • Low memory footprint — Tensor objects are backed by contiguous C buffers.
  • Native BLAS and LAPACK acceleration — Highly-optimized multi-threaded linear algebra kernels.
  • Universal element-wise functions — Element-wise operations are broadcasted and vectorized.
  • Dynamic kernel dispatching — Optimized kernels are dispatched based on CPU architecture.

Documentation

API documentation can be found in the docs folder in the project root.

Requirements

Installation

Make sure you have all the necessary build tools installed such as a C compiler and make tools. For example, on an Ubuntu linux system you can enter the following on the command line to install the necessary dependencies.

$ sudo apt-get install make gcc gfortran php-dev libopenblas-dev liblapacke-dev re2c build-essential

Install the Tensor extension via PIE:

$ pie install rubix/tensor_ext

Tips for MacOS

Install the build dependencies with Homebrew (alongside a PHP build, e.g. brew install php):

$ brew install gcc openblas lapack re2c make autoconf automake

Several of these are keg-only and not on the default build paths, so export the following before compiling:

export LDFLAGS="-L$(brew --prefix openblas)/lib -L$(brew --prefix lapack)/lib -L$(brew --prefix pcre2)/lib -L$(brew --prefix gcc)/lib/gcc/current"
export CPPFLAGS="-I$(brew --prefix openblas)/include -I$(brew --prefix lapack)/include -I$(brew --prefix pcre2)/include -I$(brew --prefix gcc)/include"
export PKG_CONFIG_PATH="$(brew --prefix openblas)/lib/pkgconfig:$(brew --prefix lapack)/lib/pkgconfig:$(brew --prefix pcre2)/lib/pkgconfig:$(brew --prefix gcc)/lib/pkgconfig"
export PATH="$(brew --prefix gcc)/bin:$PATH"
export FC=$(brew --prefix gcc)/bin/gfortran

Manually Compiling the Extension

Clone the repository locally using Git:

$ git clone https://github.com/RubixML/Tensor-Ext

Then, change into the ext directory from the project root and run the following commands from the terminal. See this guide for more information on compiling PHP extensions with PHPize.

$ cd ./ext
$ phpize
$ ./configure
$ make
$ sudo make install

Finally, add the following line to your php.ini configuration to install the extension.

extension=tensor.so

To confirm that the extension is loaded in PHP, you can run the following command.

php -m | grep tensor

Contributing

See CONTRIBUTING.md for guidelines.

License

The code is licensed MIT and the documentation is licensed CC BY-NC 4.0.