数据表和并行计算 - 代码日志

数据表和并行计算

在这篇文章之后:multicore and data.table in R,我想知道在使用data.table时是否有一种使用所有内核的方法,通常可以并行计算组。似乎plyr允许这样的操作设计。
首先要检查的是data.table FAQ 3.1点2已经沉没了:

One memory allocation is made for the largest group only, then that
memory is reused for the other groups. There is very little garbage
to collect.

这是data.table分组很快的原因之一。但是这种方法并不适用于并行化。并行化意味着将数据复制到其他线程,而不是花费时间。但是,我的理解是,data.table分组通常比plyr更快。这取决于每个组的任务的计算时间,并且如果该计算时间可以容易地减少。移动数据往往占主导地位(当大型数据任务执行1或3次运行时)。

更多的时候,到目前为止,它实际上是在[.data.table]的j表达式中咬人的。例如,最近我们看到data.table分组的性能​​不佳,但是歹徒竟然是min(POSIXct)(Aggregating in R over 80K unique ID’s)。避免这种困扰超过50倍加速。

所以咒语是:Rprof,Rprof,Rprof。

此外,来自同一FAQ的第1点可能是重要的:

Only that column is grouped, the other 19 are ignored because
data.table inspects the j expression and realises it doesn’t use the
other columns.

所以,data.table根本就不符合拆分应用组合的范例。它的作用不同。拆分应用组合可以并行化,但实际上并不适用于大数据。

另请参阅data.table简介小插图中的脚注3:

We wonder how many people are deploying parallel techniques to code
that is vector scanning

这是试图说“确定,并行明显更快,但是使用高效的算法需要多长时间”。

但是,如果您使用Rprof进行概要分析,并且每个组的任务确实是计算密集型的,那么datatable-help上的3个帖子(包括“multicore”)可能有助于:

multicore posts on datatable-help

当然有很多任务在数据表中并行化是很好的,有一种方法可以做到这一点。但是还没有完成,因为通常其他因素都是咬人的,所以一直是低调的。如果您可以使用基准测试和Rprof结果来发布可重复的虚拟数据,这将有助于提高优先级。

http://stackoverflow.com/questions/14759905/data-table-and-parallel-computing

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:数据表和并行计算