Inspired by NumPy, the NumPower library was created to provide the foundation for efficient scientific computing in PHP, as well as leverage the machine learning tools and libraries that already exist and can benefit from it.
This C extension developed for PHP can be used to considerably speed up mathematical operations on large datasets and facilitate the manipulation, creation and operation of N-dimensional tensors. NumPower was designed from the ground up to utilize AVX2 and the GPU to further improve performance. With the use of contiguous single precision arrays, slices, buffer sharing and a specific GC engine, NumPower aims to manage memory more efficiently than a matrix in PHP arrays- Website: https://numpower.org
- Documentation: https://numpower.org/docs/intro
- API: https://numpower.org/api/intro
- Docker: https://hub.docker.com/r/numpower/numpower
- PHP 8.x
- LAPACKE
- OpenBLAS
- Optional: Intel MKL
- Optional (GPU): CUBLAS, CUDA Build Toolkit and cuDNN
- Optional (Image): PHP-GD
$ phpize
$ ./configure
$ make install
$ phpize
$ ./configure --with-cuda
$ make install-cuda
The composer package provides a stubs file to facilitate autocomplete in the IDE. To install, simply run the command below in your environment with composer installed:
$ composer require numpower/numpower
The composer package will follow the same versioning as the extension.
If you have an NVIDIA graphics card with CUDA support, you can use your graphics card to perform operations. To do this, just copy your array to the GPU memory.
use \NDArray as nd;
$x = nd::ones([10, 10]);
$y = nd::ones([10, 10]);
$x_gpu = $x->gpu(); // Copy $x from RAM to VRAM
$y_gpu = $y->gpu(); // Copy $y from RAM to VRAM
$r = nd::matmul($x_gpu, $y_gpu); // Matmul is performed using CUDA
Both GPU and CPU memory management are done automatically by NumPower, so the memory of both devices will be automatically freed by the garbage collector. You can also bring arrays back from VRAM into RAM:
$x_cpu = $x->cpu();
You must explicitly copy the arrays you want to use in your devices. Cross-array operations (like adding) will raise an exception if the arrays used are on different devices.