Skip to content

PHP extension for efficient scientific computing and array manipulation with GPU support

License

Notifications You must be signed in to change notification settings

NumPower/numpower

Repository files navigation

NumPower

Typing SVG

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

Typing SVG

Documentation & Installation

Requirements

  • PHP 8.x
  • LAPACKE
  • OpenBLAS
  • Optional (GPU): CUBLAS, CUDA Build Toolkit
  • Optional (Image): PHP-GD

GPU Support

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.