Tensor: Scientific Computing for PHP
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.
- 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.
API documentation can be found in the docs folder in the project root.
- PHP 8.1 or above
- The PHP development package (source code and tooling)
- A C compiler such as GCC or Clang
- A Fortran compiler such as GFortran
- OpenBLAS development package
- LAPACKE C interface to LAPACK
- re2c 0.13.6 or later
- GNU make 3.81 or later
- autoconf 2.31 or later
- automake 1.14 or later
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-essentialInstall the Tensor extension via PIE:
$ pie install rubix/tensor_extInstall the build dependencies with Homebrew (alongside a PHP build, e.g. brew install php):
$ brew install gcc openblas lapack re2c make autoconf automakeSeveral 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/gfortranClone the repository locally using Git:
$ git clone https://github.com/RubixML/Tensor-ExtThen, 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 installFinally, 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 tensorSee CONTRIBUTING.md for guidelines.
The code is licensed MIT and the documentation is licensed CC BY-NC 4.0.