Parallel javascript (River Trail)并不是一个函数
Parallel javascript (River Trail) combine is not a function
我正在尝试英特尔的River Trail项目。我安装了Firefox扩展(FFv19.02)。我还为Windows安装了openCL。所有的API方法似乎都在工作(map, reduce, scan, scatter, flatten, partition),除了"combine"方法:
var par_A = new ParallelArray([3,3], function(i,j) {return j});
console.log( par_A.combine(function(i) {return this.get(i) + 1} ) );
我得到:
TypeError: par_A.combine is not a function
你知道是什么问题吗?
更新:
所以上面的例子没有意义,因为你不能用一个组合来迭代一个2D数组。为了简化,让我们举一个1D的例子:
var par_A = new ParallelArray([1,2,3,4,5]);
console.log( par_A.combine(function(i) {return this.get(i) + 1} ) );
如下所述,有两个API方法,一个是由Intel提出的,另一个是ECMAscript草案。ECMAscript草案中没有'combine'方法,但是将索引作为第二个参数传递给'map'。与上述等价的是:
var par_A = new ParallelArray([1,2,3.4.5]);
console.log( par_A.map(function(v, i) {return this.get(i) + 1} ) );
实际上有两个api:
- River Trail API, GitHub原型文档
- ECMAScript提案中描述的并行JavaScript API
两者略有不同,其中一个区别是ECMAScript提案不再使用combine方法,而是使用一种提供相同功能的map。另一个区别是GitHub原型使用索引向量,而提案版本使用多个标量索引。对于原型,您的示例将写成
var par_A = new ParallelArray([3,3], function(iv) {return iv[1]});
par_A.combine(2, function(i) {return this.get(i) + 1} );
在提案版本中,您需要写
var par_A = new ParallelArray([3,3], function(i,j) {return j});
par_A.map(2, function(e, i) { return this.get(i) + 1; });
遗憾的是,多维地图还没有在Firefox中实现。你可以在Mozilla的bug tracker上关注bug 862897,了解这方面的进展。
尽管我们认为提案中的API总体上是更好的设计,但由于技术原因,我们无法在原型中实现该API。因此,我们决定保持其API的稳定,而不是中途发展原型。
有一件重要的事情需要注意:Firefox的web控制台似乎总是使用内置版本的ParallelArray,而不是特定网站使用的那个。因此,如果你想玩GitHub原型,你最好使用我们GitHub网站上的交互式shell。
我最终滚动了我自己的组合方法:
ParallelArray.prototype.combine_par = function ( fn) {
var arr = this;
var len = this.length;
var indexes = [];
//array to store the indexes [0,1,2...]
for (var i=0;i<len;i++) {
indexes.push(i);
}
indexes = new ParallelArray(indexes);
return indexes.map(function(val) {
//use fn.call to keep 'this' in context
return fn.call(arr,val);
});
}
你可以调用'combine_par',如combine:
var par_A = new ParallelArray([3,3,3,3]);
//returns < 0,1,2,3 >
console.log( par_A.combine_par(function(i) {return i} ) );
PS:我在firefox中尝试了本地的ParallelArray,并自己构建扩展,但在这两种情况下都没有"组合"方法
更新:由于某种原因,我不能在combine_par回调函数中使用this.get(index)
。所以我用this[i]
代替
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟