rindow / rindow-matlib-ffi
PHP上的FFI数学矩阵库
1.0.2
2024-04-25 14:59 UTC
Requires
- php: ^8.1
- interop-phpobjects/polite-math: ~1.0.7
Requires (Dev)
- ext-ffi: *
- rindow/rindow-math-buffer-ffi: ^1.0
README
"rindow matlib在ffi上的接口"。
请参阅Rindow Mathematics网站上的关于rindow数学的文档。
您可以通过调用用C语言编写的快速计算库来加速矩阵计算处理。Rindow Matlib包含了许多机器学习中使用的矩阵运算函数。
要求
- PHP 8.1或PHP8.2或PHP8.3
- Rindow Matlib C库(Windows 10或Linux(Ubuntu 20.04或Debian 12)或更高版本)
如何设置
如何为Windows设置
下载预编译的二进制文件。
解压缩Windows文件并将rindowmatlib.dll复制到PATH中设置的目录。
C> copy rindowmatlib.dll C:\php C> PATH %PATH%;C:\php
使用composer设置。
C> mkdir \your\app\dir C> cd \your\app\dir C> composer require rindow/rindow-matlib-ffi
如何为Linux设置
下载预编译的二进制文件。
请使用apt命令安装。
$ sudo apt install ./rindow-matlib_X.X.X_amd64.deb
使用composer设置。
$ mkdir \your\app\dir $ cd \your\app\dir $ composer require rindow/rindow-matlib-ffi
Linux的故障排除
由于rindow-matlib目前使用OpenMP,请选择与OpenBLAS相同的OpenMP版本。
使用OpenBLAS的pthread版本可能会引起冲突并变得不稳定和缓慢。在Windows上不会出现此问题。
如果您已安装了OpenBLAS的pthread版本,
$ sudo apt install libopenblas0-openmp liblapacke $ sudo apt remove libopenblas0-pthread
但如果您无法删除它,您可以使用update-alternatives命令切换到它。
$ sudo update-alternatives --config libopenblas.so.0-x86_64-linux-gnu $ sudo update-alternatives --config liblapack.so.3-x86_64-linux-gnu
如果您真的想使用OpenBLAS的pthread版本,请切换到rindow-matlib的串行版本。
Windows上没有与OpenBLAS的操作模式冲突。
但是,如果您真的想使用OpenBLAS的pthread版本,请切换到rindow-matlib的串行版本。
$ sudo update-alternatives --config librindowmatlib.so There are 2 choices for the alternative librindowmatlib.so (providing /usr/lib/librindowmatlib.so). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/lib/rindowmatlib-openmp/librindowmatlib.so 95 auto mode 1 /usr/lib/rindowmatlib-openmp/librindowmatlib.so 95 manual mode 2 /usr/lib/rindowmatlib-serial/librindowmatlib.so 90 manual mode Press <enter> to keep the current choice[*], or type selection number: 2
选择"rindowmatlib-serial"。
如何使用
$ composer require rindow/rindow-matlib-ffi $ composer require rindow/rindow-math-buffer-ffi
<?php include __DIR__.'/vendor/autoload.php'; use Interop\Polite\Math\Matrix\NDArray; use Rindow\Matlib\FFI\MatlibFactory; use Rindow\Math\Buffer\FFI\BufferFactory; $factory = new MatlibFactory(); $math = $factory->Math(); $hostBufferFactory = new BufferFactory(); $NWITEMS = 64; $x = $hostBufferFactory->Buffer( $NWITEMS,NDArray::float32 ); for($i=0;$i<$NWITEMS;$i++) { $x[$i] = $i; } $n = count($x); $offsetX = 0; $incX = 1; $sum = $math->sum($n,$x,$offsetX,$incX); var_dump($sum);