mirror of
https://github.com/gpujs/gpu.js.git
synced 2025-12-08 20:35:56 +00:00
73 lines
1.5 KiB
JavaScript
73 lines
1.5 KiB
JavaScript
const { GPU } = require('../src/index.js');
|
|
const Benchmark = require('benchmark');
|
|
|
|
const suite = new Benchmark.Suite();
|
|
|
|
const gpu = new GPU({ mode: 'gpu' });
|
|
const cpu = new GPU({ mode: 'cpu' });
|
|
|
|
const size = 1024;
|
|
const a = randomMatrix(size, size);
|
|
const b = randomMatrix(size, size);
|
|
function randomMatrix(width, height) {
|
|
const matrix = new Array(height);
|
|
for (let y = 0; y < height; y++) {
|
|
const row = matrix[y] = new Float32Array(width);
|
|
for (let x = 0; x < width; x++) {
|
|
row[x] = Math.random();
|
|
}
|
|
}
|
|
return matrix;
|
|
}
|
|
|
|
const gpuKernel = gpu
|
|
.createKernel(function(a, b) {
|
|
let sum = 0;
|
|
for (let i = 0; i < this.constants.size; i++) {
|
|
sum += a[this.thread.y][i] * b[i][this.thread.x];
|
|
}
|
|
return sum;
|
|
})
|
|
.setConstants({
|
|
size
|
|
})
|
|
.setPipeline(false)
|
|
.setPrecision('unsigned')
|
|
.setOutput([size, size]);
|
|
|
|
const cpuKernel = cpu
|
|
.createKernel(function(a, b) {
|
|
let sum = 0;
|
|
for (let i = 0; i < this.constants.size; i++) {
|
|
sum += a[this.thread.y][i] * b[i][this.thread.x];
|
|
}
|
|
return sum;
|
|
})
|
|
.setConstants({
|
|
size
|
|
})
|
|
.setOutput([size, size]);
|
|
|
|
// go ahead and build
|
|
gpuKernel(a, b);
|
|
cpuKernel(a, b);
|
|
|
|
// add tests
|
|
suite
|
|
.add('gpu', () => {
|
|
gpuKernel(a, b);
|
|
})
|
|
.add('cpu', () => {
|
|
cpuKernel(a, b);
|
|
})
|
|
// add listeners
|
|
.on('cycle', (event) => {
|
|
console.log(String(event.target));
|
|
})
|
|
.on('complete', function () {
|
|
gpu.destroy();
|
|
cpu.destroy();
|
|
console.log('Fastest is ' + this.filter('fastest').map('name'));
|
|
})
|
|
.run({ async: false });
|