强烈推荐accel-sort!用GPU排序性能提升70倍!

前有科技后进阶 2024-04-14 02:52:11

大家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

什么是 accel-sort

A high performance sorting library for Javascript. Get up to 70x speedup when sorting ints and floats

accel-sort 是一个高性能的 Javascript 排序库,对整数和浮点数进行排序时速度提升高达 70 倍。但是,启用 accel-sort 需要以下基础能力:

具有 CUDA 计算能力的 NVIDIA GPU(5.0 或更高版本)Node.js(版本 12.x 或更高版本)安装 CUDA 12.4 版本

目前 accel-sort 在 Github 通过 MIT 协议开源,是一个值得关注的前端开源项目。

如何使用 accel-sort

确保当前设备上安装了 nvcc,其是一个编译器驱动程序,通过调用所有必要的工具和编译器,例如: cudacc、g++、cl 等来工作,可以输出 C 代码(CPU 代码)。

要使用 accel-sort,只需运行下面命令即可快速安装:

npm install accel-sort

接着导入 AccelSort:

const AccelSort = require("accel-sort");

在 AccelSort 中,将指定的数组类型和大小传递给其专用函数。下面是 sortIntegers 排序整数:

let array = new Int32Array([3, 1, 2]);let buffer = Buffer.from(array.buffer);// 整数排序AccelSort.sortIntegers(buffer, array.length);

如果是排序浮点数,可以直接使用 sortFloat 方法:

let array = new Float32Array([5.8, -10.7, 1507.6563, 1.0001]);let buffer = Buffer.from(array.buffer);// 排序浮点数AccelSort.sortFloats(buffer, array.length);

通过查看 sortFloat 源码可以看到具体的实现逻辑:

// sortFloats 的实现void sortFloats(float *data, size_t size) { thrust::host_vector<float> host_vector(data, data + size); thrust::device_vector<float> device_vector = host_vector; thrust::sort(device_vector.begin(), device_vector.end()); thrust::copy(device_vector.begin(), device_vector.end(), host_vector.begin()); std::copy(host_vector.begin(), host_vector.end(), data);}参考资料

https://github.com/leoforney/accel_sort

https://github.com/leoforney/accel_sort/blob/master/library.cu

https://www.youtube.com/watch?app=desktop&v=EM3YC3dtMv8

https://kmcompsci.weebly.com/sorting-algorithms.html

0 阅读:4

前有科技后进阶

简介:感谢大家的关注