仓鼠对我的工作抱有很大的希望。 我使用JavaScript中的矩阵和向量。最近我偶然发现了JS多线程库 Hamsters 并阅读了GitHub的介绍。不幸的是,我无法让代码正常工作 - 通常我没有得到任何错误但是我错了或缺少结果 ....我一直得到正确的结果非常重要,否则我不得不放弃这种方法。我相信你可以帮我弄清楚什么是错的。请参阅下面的示例代码 Vanilla输出完全符合我的预期,但Hamsters实际上并没有返回任何结果,否则何时/如果是,我会得到错误的,例如0.05681.324987324.602或类似。
var vec = [0.19560742625827293, 0.5969056836197602, 0.7781011114598421, -1.4801188964351797e-16, 0];
try {
var i, dotprod = 0, cnt = vec.length;
for (i = 0; i < cnt; i+=1) {
dotprod += (vec[i] * vec[i]);
}
console.log("vanilla:" + dotprod);
var params = {'array': vec};
hamsters.run(params, function () {
var arr = params.array;
var dotprod = 0;
arr.forEach(function (item) {
dotprod += (item * item);
});
console.log("each-thread:" + dotprod);
rtn.data = dotprod;
}, function (output) {
console.log("threads:" + output);
}, hamsters.maxThreads, true, 'Float32');
} catch (err) {
console.log(err);
}
我也尝试过下面的代码,意识到'聚合'意味着每个线程将它的子数组附加到最终输出中......结果仍然不可靠甚至出错。我这次在矩阵上试过了。单线程Vanilla版本仍然完美无缺。
var matrix = [
[0.19560742625827293, 0.5969056836197602, 0.7781011114598421, -1.4801188964351797e-16, 0],
[0.19560742625827268, 0.5969056836197597, -0.7781011114598423, 0, -4.9920006143177403e-17],
[0.6420441782236752, -0.28992643646108446, -0.06100766058506449, 0, 0.7071067811865475],
[0.3705351281738152, 0.6896295583459146, 0.6221854956882503, 0, 9.114104478471581e-17]
];
var i;
for (i = 0; i < matrix.length; i += 1) {
try {
var j, dotprod = 0, matrix_row = matrix[i];
for (j = 0; j < matrix_row.length; j += 1) {
dotprod += (matrix_row[j] * matrix_row[j]);
}
console.log("Vanilla-output:" + dotprod);
var params = {'array': matrix_row};
hamsters.run(params, function () {
var arr = params.array;
var dotprod = [];
arr.forEach(function (item) {
dotprod.push(item * item);
});
//console.log("each-thread:" + dotprod);
rtn.data = dotprod;
}, function (results) {
var output = 0;
results.forEach(function (item) {
output += item;
});
console.log("Hamsters-output:" + output);
}, hamsters.maxThreads, true, 'Float32');
} catch (err) {
console.log(err);
}
}