Skip to content

patrickroberts/gpcpu

Repository files navigation

gpcpu

Asynchronous Parallel Programming for TypedArray

About

gpcpu enables user-friendly parallel programming in JavaScript by defining a forEach() function which executes a user-defined callback on multiple concurrent threads and returns a Promise that resolves when all the results have been copied to the TypedArray provided as input.

This significantly speeds up execution of sequential for loops over large typed arrays by delegating each block of execution to a concurrently running thread.

Support

gpcpu provides out-of-the-box support for both browsers and Node.js by selectively using Web Workers or Worker Threads depending on the runtime environment. It also ships with typings for use in TypeScript projects.

Install

npm (Recommended)

npm i gpcpu
<script src="https://unpkg.com/gpcpu"></script>

Usage

import { Manager } from 'gpcpu';

// uses the number of threads your hardware can run concurrently by default
const parallel = new Manager();
const fltArr = new Float64Array(100000000);

console.time('parallel');

parallel.forEach(fltArr, (subArr, localIndex, globalIndex) => {
  subArr[localIndex] = Math.sqrt(globalIndex);
}).then(() => {
  // ~557ms on Intel Core i7-7700K @ 4.20GHz using 8 threads
  console.timeEnd('parallel');
  // use fltArr here
});

Benchmark Comparison

const fltArr = new Float64Array(100000000);

console.time('sequential');

for (let i = 0; i < fltArr.length; ++i) {
  fltArr[i] = Math.sqrt(i);
}

// ~2564ms on Intel Core i7-7700K @ 4.20GHz
console.timeEnd('sequential');
// use fltArr here

Documentation

Available on Github Pages.