rindow / rindow-math-matrix-matlibffi
Rindow Math Matrix的Matlib驱动程序,支持FFI
Requires
- php: ^8.1
- ext-ffi: *
- interop-phpobjects/polite-math: ~1.0.7
- rindow/rindow-clblast-ffi: ~1.0.2
- rindow/rindow-math-buffer-ffi: ~1.0.2
- rindow/rindow-math-matrix: ~2.0.4
- rindow/rindow-matlib-ffi: ~1.0.1
- rindow/rindow-openblas-ffi: ~1.0.3
- rindow/rindow-opencl-ffi: ~1.0.2
Suggests
- rindow/rindow-math-plot: for OpenCL tunning
README
此包是Rindow-math-matrix的Matlib驱动程序。这些驱动程序作为适配器,用于驱动PHP FFI。每个PHP C库都需要单独下载和安装适合您环境PHP版本和操作系统版本的二进制文件。
Rindow Math Matrix是科学矩阵操作的基本包
- 强大的N维数组对象
- 复杂的(广播)函数
- 通过FFI集成C/C++的工具
- 有用的线性代数和随机数功能
请参阅Rindow数学项目网页上的文档。
Rindow Math Matrix的仓库在这里here。
要求
- PHP 8.1或PHP8.2或PHP8.3
- Rindow Math Matrix v2.0.0
- Rindow Matlib 1.0.0或更高版本
- OpenBLAS 0.3.20或更高版本
- OpenCL 1.1或更高版本
- CLBlast 1.5.2或更高版本
- Windows 10/11或Linux(Ubuntu 20.04或Debian 12或更高版本)
从每个项目的发布页面下载预构建的二进制文件
您可以在结合使用时执行非常快速的N维数组操作。从每个项目的发布页面下载预构建的二进制文件。
- 预构建的二进制文件
Windows的设置
下载二进制文件,解压缩,并将其复制到执行目录。
- rindow-matlib-X.X.X-win64.zip
- OpenBLAS-X.X.X-x64.zip
- CLBlast-X.X.X-windows-x64.zip
将FFI扩展添加到php.ini
C:\TMP> cd \path\to\php\directory C:\PHP> notepad php.ini extension=ffi
C:\TMP> PATH %PATH%;\path\to\binary\directories\bin C:\TMP> cd \your\progject\directory C:\PRJ> composer require rindow/rindow-math-matrix C:\PRJ> composer require rindow/rindow-math-matrix-matlibffi C:\PRJ> vendor/bin/rindow-math-matrix Service Level : Accelerated Buffer Factory : Rindow\Math\Buffer\FFI\BufferFactory BLAS Driver : Rindow\OpenBLAS\FFI\Blas(THREAD) LAPACK Driver : Rindow\OpenBLAS\FFI\Lapack Math Driver : Rindow\Matlib\FFI\Matlib(OPENMP) OpenCL Factory : Rindow\OpenCL\FFI\OpenCLFactory CLBlast Factory : Rindow\CLBlast\FFI\CLBlastFactory
如果您使用的是Windows标准驱动程序,OpenCL 1.2环境已设置。
如果您像下面那样添加-v选项,将在启动时显示驱动程序加载状态。这有助于故障排除。
C:\PRJ> vendor/bin/rindow-math-matrix -v
Linux的设置
使用apt命令安装每个库。
确保FFI扩展已启用。
$ php -m | grep FFI
FFI
下载预构建的二进制文件。
请使用apt命令安装。
$ sudo apt install ./rindow-matlib_X.X.X_amd64.deb
由于rindow-matlib目前使用OpenMP,因此请选择与OpenBLAS相同的OpenMP版本。
使用OpenBLAS的pthread版本可能会导致冲突,变得不稳定且速度较慢。在Windows上不会出现此问题。
$ sudo apt install libopenblas0-openmp liblapacke
如果您想使用GPU,请安装OpenCL环境。此外,还有以下驱动程序。
- mesa-opencl-icd
- beignet-opencl-icd
- intel-opencl-icd
- nvidia-opencl-icd-xxx
- pocl-opencl-icd
$ sudo apt install clinfo $ sudo apt install mesa-opencl-icd $ sudo mkdir -p /usr/local/usr/lib $ sudo ln -s /usr/lib/clc /usr/local/usr/lib/clc
然后,安装适用于OpenCL的快速矩阵计算库。如果您使用Ubuntu 22.04或Debian 12或更高版本,可以从发行版软件包中安装它。
$ sudo apt install libclblast1
如果您使用Ubuntu 20.04或Debian 11,您需要从GitHub下载clblast并制作deb文件。请从rindow-clblast-ffi发布页面下载CLBlast安装脚本。
$ wget https://github.com/rindow/rindow-clblast-ffi/releases/download/X.X.X/clblast-packdeb.zip $ unzip clblast-packdeb.zip $ sh clblast-packdeb.sh $ sudo apt install ./clblast_X.X.X_amd64.deb
然后,在您的项目目录中安装rindow-math-matrix。
$ composer require rindow/rindow-math-matrix $ composer require rindow/rindow-math-matrix-matlibffi $ vendor/bin/rindow-math-matrix Service Level : Accelerated Buffer Factory : Rindow\Math\Buffer\FFI\BufferFactory BLAS Driver : Rindow\OpenBLAS\FFI\Blas(OPENMP) LAPACK Driver : Rindow\OpenBLAS\FFI\Lapack Math Driver : Rindow\Matlib\FFI\Matlib(OPENMP) OpenCL Factory : Rindow\OpenCL\FFI\OpenCLFactory CLBlast Factory : Rindow\CLBlast\FFI\CLBlastFactory
如果您像下面那样添加-v选项,将在启动时显示驱动程序加载状态。这有助于故障排除。
$ vendor/bin/rindow-math-matrix -v
检查驱动状态
您可以通过运行以下示例来检查驱动设置。
<?php // status.php include_once __DIR__.'/vendor/autoload.php'; use Rindow\Math\Matrix\MatrixOperator; $mo = new MatrixOperator(); echo $mo->service()->info();
$ php status.php Service Level : Accelerated Buffer Factory : Rindow\Math\Buffer\FFI\BufferFactory BLAS Driver : Rindow\OpenBLAS\FFI\Blas(OPENMP) LAPACK Driver : Rindow\OpenBLAS\FFI\Lapack Math Driver : Rindow\Matlib\FFI\Matlib(OPENMP) OpenCL Factory : Rindow\OpenCL\FFI\OpenCLFactory CLBlast Factory : Rindow\CLBlast\FFI\CLBlastFactory
Linux的故障排除
由于rindow-matlib目前使用OpenMP,因此请选择与OpenBLAS相同的OpenMP版本。
使用OpenBLAS的pthread版本可能会导致冲突,变得不稳定且速度较慢。在Windows上不会出现此问题。
如果您已经安装了OpenBLAS的pthread版本,
$ 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”。
使用GPU加速
您可以在OpenCL中使用GPU加速。
注意
此OpenCL支持扩展在您的环境中表现更好,有助于加速您的笔记本电脑环境,无需NVIDIA。
在Ivy Bridge和AMD Bobcat架构APU上进行了测试。
在Windows环境中,集成GPU的使用比CPU更有效,并且运行得非常舒适。
然而,在Linux上,老式的AMD APU中使用的libclc在linux标准mesa-opencl-icd中非常不稳定且速度慢。如果您有可测试的硬件,请使用专有驱动程序进行测试。
另一方面,我使用Intel CPU的Ivy Bridge进行了测试。
现在它可以在Windows 10标准OpenCL驱动程序上进行各种调整后舒适地运行。然而,与CPU性能相比,老式的集成GPU并不很高,所以请正确使用。
并且在Ubuntu 20.04 + beignet-opencl-icd环境中运行良好且快速。