rindow/rindow-matlib-ffi

PHP上的FFI数学矩阵库

1.0.2 2024-04-25 14:59 UTC

This package is auto-updated.

Last update: 2024-08-25 15:42:35 UTC


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);