你是否曾經嘗試過運行復雜的計算,卻發現它須要花費很長時間,而且拖慢了你的進程?javascript
有不少方法能夠解決這個問題,例如使用web worker或後臺線程。GPU減輕了CPU的處理負荷,給了CPU更多的空間來處理其餘進程。同時,web worker仍然運行在CPU上,可是運行在不一樣的線程上。java
在該初學者指南中,咱們將演示如何使用GPU.js執行復雜的數學計算並提升JavaScript應用的性能。git
GPU.js是一個針對Web和Node.js構建的JavaScript加速庫,用於在圖形處理單元(GPGPU)上進行通用編程,它使你能夠將複雜且耗時的計算移交給GPU而不是CPU,以實現更快的計算和操做。還有一個備用選項:在系統上沒有GPU的狀況下,這些功能仍將在常規JavaScript引擎上運行。github
當你要執行復雜的計算時,實質上是將這種負擔轉移給系統的GPU而不是CPU,從而增長了處理速度和時間。web
高性能計算是使用GPU.js的主要優點之一。若是你想在瀏覽器中進行並行計算,而不瞭解WebGL,那麼GPU.js是一個適合你的庫。shell
爲何要使用GPU執行復雜的計算的緣由不勝枚舉,有太多的緣由沒法在一篇文章中探討。如下是使用GPU的一些最值得注意的好處。npm
若是你認爲你的處理器能夠勝任,你不須要GPU.js,看看下面這個GPU和CPU運行計算的結果。編程
如你所見,GPU比CPU快22.97倍。數組
考慮到這種速度水平,JavaScript生態系統彷彿獲得了一個能夠乘坐的火箭。GPU能夠幫助網站更快地加載,特別是必須在首頁上執行復雜計算的網站。你再也不須要擔憂使用後臺線程和加載器,由於GPU運行計算的速度是普通CPU的22.97倍。瀏覽器
gpu.createKernel
方法建立了一個從JavaScript函數移植過來的GPU加速內核。
與GPU並行運行內核函數會致使更快的計算速度——快1-15倍,這取決於你的硬件。
爲了展現如何使用GPU.js更快地計算複雜的計算,讓咱們快速啓動一個實際的演示。
安裝
sudo apt install mesa-common-dev libxi-dev // using Linux
npm
npm install gpu.js --save // OR yarn add gpu.js
在你的Node項目中要導入GPU.js。
import { GPU } from ('gpu.js') // OR const { GPU } = require('gpu.js') const gpu = new GPU();
在下面的示例中,計算是在GPU上並行完成的。
首先,生成大量數據。
const getArrayValues = () => { // 在此處建立2D arrary const values = [[], []] // 將值插入第一個數組 for (let y = 0; y < 600; y++){ values[0].push([]) values[1].push([]) // 將值插入第二個數組 for (let x = 0; x < 600; x++){ values\[0\][y].push(Math.random()) values\[1\][y].push(Math.random()) } } // 返回填充數組 return values }
建立內核(運行在GPU上的函數的另外一個詞)。
const gpu = new GPU(); // 使用 `createKernel()` 方法將數組相乘 const multiplyLargeValues = gpu.createKernel(function(a, b) { let sum = 0; for (let i = 0; i < 600; i++) { sum += a\[this.thread.y\][i] * b\[i\][this.thread.x]; } return sum; }).setOutput([600, 600])
使用矩陣做爲參數調用內核。
const largeArray = getArrayValues() const out = multiplyLargeValues(largeArray[0], largeArray[1])
輸出
console.log(out\[y\][x]) // 將元素記錄在數組的第x行和第y列 console.log(out\[10\][12]) // 記錄輸出數組第10行和第12列的元素
你能夠按照GitHub上指定的步驟運行基準測試。
npm install @gpujs/benchmark const benchmark = require('@gpujs/benchmark') const benchmarks = benchmark.benchmark(options);
options
對象包含能夠傳遞給基準的各類配置。
前往GPU.js官方網站查看完整的計算基準,這將幫助你瞭解使用GPU.js進行復雜計算能夠得到多少速度。
在本教程中,咱們詳細探討了GPU.js,分析了它的工做原理,並演示瞭如何進行並行計算。咱們還演示瞭如何在你的Node.js應用中設置GPU.js。