Asynchronous Parallel Programming for TypedArray
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.
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.
npm (Recommended)
npm i gpcpu
<script src="https://unpkg.com/gpcpu"></script>
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
});
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
Available on Github Pages.