WebGL seems underutilized and sorting asynchronously is really handy.
npm install gpu-sort
import * as gpu from "gpu-sort";
let numbers = new Float64Array([5, 4, 3, 2, 1, 0]);
// sort in place
gpu.sort(numbers);
// sort in place asynchronously
gpu.sortAsync(numbers).then(() => console.log("sorted!"));
import * as gpu from "gpu-sort";
// For NodeJS an emulation library must be provided as it doesn't support WebGL
gpu.setWebGLContext(require("gl")(1, 1));
// sort using webgl emulated context
gpu.sort(foo);
- Only TypedArrays are supported.
- When sorting 8bit and 16bit numbers GPU acceleration is disabled (as it seems rather pointless).
- The maximum number of elements that can be sorted is constrained by the max texture width squared. For example
4096 ^ 2 = 16,777,216 (32bit)
or4096 ^ 2 / 2 = 8,388,608 (64bit)
. This can be increased in the future by up to 8 times by multiplexing the data across multiple framebuffers.