Умножение матриц PHP, ускорить
Есть необходимость произвести миллионы умножений матриц(вложенные циклы for) для обучения нейронной сети. Есть ли какая либо библиотека или какой то способ увеличить производительность этих вычислений?
на данный момент полный цикл расчета занимает чуть меньше часа. таких циклов нужно прокрутить десятки тысяч. Экспериментальным путем установил, что цикл for на 20% быстрее чем foreach. Буду признателен за любой совет, который поможет ускорить выполнение задачи.
Снова пробовал улучшить функцию производящую умножение для тестов взял вектор(4096 значений) и матрицу(4096 * 4096) все заполнено рандомными floatв пределах +-1 итого цикл должен произвести 16,7М вычислений. исходные вектор и матрица имеют вид:
[х1] [w11,w12,w13]
[х2] [w21,w22,w23]
[х3] [w31,w32,w33]
первая функция работает 2.45сек и делает такие вычисления:
y1 = x1*w11 + x2*w12 + x3*w13
y2 = x1*w21 + x2*w22 + x3*w23
y3 = x1*w31 + x2*w32 + x3*w33
вторая функция работает 11.5сек и делает такие вычисления:
y1 = x1*w11 + x1*w21 + x1*w31
y2 = x2*w11 + x2*w21 + x2*w31
y3 = x3*w11 + x3*w21 + x3*w31
function multiply1($vector,$matrix){//2.45 seconds
for ($y=0; $y < count($matrix[0]); $y++) {
$sum = 0;
$m = $matrix[$y];
for ($x=0; $x < count($vector); $x++) {
$sum += $vector[$x] * $m[$x];
}
$result_vector[$y] = $sum;
}
return $result_vector;
}
function multiply2($vector,$matrix){//11.5 seconds
for ($y=0; $y < count($matrix[0]); $y++) {
$sum = 0;
for ($x=0; $x < count($vector); $x++) {
$sum += $vector[$x] * $matrix[$x][$y];
}
$result_vector[$y] = $sum;
}
return $result_vector;
}
как можно оптимизировать вторую функцию?