v1
- by doleron 3/8/202200
disable setup HTML
Setup HTML
<script src=https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.3.0/math.min.js></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"> </script>
disable setup JavaScript
Setup JavaScript
// proposed fast matrix multiplication
function proposed_multiply(a, b) {
    let aRows = a.length;
    let aCols = a[0].length;
    let bCols = b[0].length;
    let result = new Array(aRows); 
    for (let r = 0; r < aRows; ++r) {
        const row = new Array(bCols);
        result[r] = row;
        const ar = a[r];
        for (let c = 0; c < bCols; ++c) {
            let sum = 0.;     
            for (let i = 0; i < aCols; ++i) {
                sum += ar[i] * b[i][c];
            }
            row[c] = sum;  
        }
    }
    return result;
}

//schoolbook matrix multiplication
function schoolbook_multiply(m1, m2) {
    var result = [];
    for (var i = 0; i < m1.length; i++) {
        result[i] = [];
        for (var j = 0; j < m2[0].length; j++) {
            var sum = 0;
            for (var k = 0; k < m1[0].length; k++) {
                sum += m1[i][k] * m2[k][j];
            }
            result[i][j] = sum;
        }
    }
    return result;
}

// for generate bench data
function random_2d_array(width, height){
    let result = [];
    for (let i = 0 ; i < width; i++) {
        result[i] = [];
        for (let j = 0; j < height; j++) {
            result[i][j] = Math.random();
        }
    }
    return result;
}

// benchmark data

const size = 16

const A = random_2d_array(size , size);
const B = random_2d_array(size , size);

const A_matrix = math.matrix(A);
const B_matrix = math.matrix(B);

// set tensroflow backend to CPU
//tf.setBackend('cpu');

A_tensor = tf.tensor(A)
B_tensor = tf.tensor(B)
delete caserun single casemove downdrag and drop case


ready



const proposed_matrix = proposed_multiply(A, B);
delete caserun single casemove upmove downdrag and drop case


ready



const schoolbook_matrix = schoolbook_multiply(A, B);
delete caserun single casemove upmove downdrag and drop case


ready



const mathjs_matrix = math.multiply(A, B) 
delete caserun single casemove updrag and drop case


ready



const tensorflow_matrix = A_tensor.matMul(B_tensor).dataSync()
Test Case - click to add another test case
Teardown JS - click to add teardown JavaScript
Output (DOM) - click to monitor output (DOM) while test is running
RUN