rindow/rindow-math-matrix-matlibffi

Rindow Math Matrix的Matlib驱动程序,支持FFI

1.0.2 2024-04-29 06:46 UTC

This package is auto-updated.

Last update: 2024-08-29 07:32:10 UTC


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环境中运行良好且快速。