这是一个比较具体的问题。我最近尝试了 gpu.js 库。该库使用WebGL并行计算来加速计算过程。我进行了一次快速测试:
var gpu = new GPU();
function product(v, u) {
return gpu.createKernel(function(X, Y) {
return X[this.thread.x] * Y[this.thread.x];
}).dimensions([v.length])(v, u);
}
var before = new Date().getTime();
console.log(product(numeric.random([100000]), numeric.random([100000])).length);
console.log('Parallel Time: ', (new Date().getTime()) - before);
before = new Date().getTime();
v = numeric.random([100000])
u = numeric.random([100000])
for(var i = 0; i < v.length; i++){
v[i] = v[i] * u[i];
}
console.log(v.length);
console.log('Procedural Time: ', (new Date().getTime()) - before);
并获得了以下输出:
script.js:11 100000
script.js:12 Parallel Time: 340
script.js:20 100000
script.js:21 Procedural Time: 15
并行时间比顺序时间慢了一个数量级,这是有什么原因吗?我在几台不同的GPU上尝试过,也尝试过一些类似的操作。我是做错了什么还是库的问题?有什么方法可以改进吗?
http://gpu.rocks/
上运行基准测试,你会得到显著的加速吗? - Jaromanda X