Hamsters.js返回错误结果

时间:2016-10-26 06:31:12

标签: javascript

仓鼠对我的工作抱有很大的希望。 我使用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);
            }
        }

0 个答案:

没有答案