All files linear_algebra_gl.ts

86.04% Statements 37/43
100% Branches 2/2
100% Functions 1/1
86.04% Lines 37/43

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 441x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 27x 27x 27x 27x 27x 27x 27x 27x             27x 27x 27x 27x 27x 27x 27x 27x 27x 27x 27x 27x  
/**
 * @fileOverview
 * optimizes linear algebra functions with gpu
 */
 
import { GPU } from 'gpu.js';
 
 
 
 
 
/**
 *
 * @param matrixA
 * @param matrixB
 * @returns
 */
export function matrixMultiply(matrixA: number[][], matrixB: number[][]) {
  const matrixARow = matrixA.length;
  const matrixACol = matrixA[0].length;
  const matrixBCol = matrixB[0].length;
 
  const gpu = new GPU();
  const matrixMultiplyGPU = gpu
    .createKernel(function (a: number[][], b: number[][], matrixACol: number) {
      let sum = 0;

      for (let i = 0; i < matrixACol; i++) {
        sum += a[this.thread.y][i] * b[i][this.thread.x];
      }
      return sum;
    })
    .setOutput([matrixBCol, matrixARow]);
 
  let multiplication = matrixMultiplyGPU(
    matrixA,
    matrixB,
    matrixACol
  ) as number[][];
  multiplication = multiplication.map((row) => [...row]);
 
  return multiplication;
}