有没有办法加速矩阵图?

时间:2014-01-21 09:43:54

标签: multithreading r optimization parallel-processing multiprocessing

与其祖父母ggpairs()一样,

scatterplotMatrix()随着对数的增长而非常缓慢。这还算公平;成对的排列数量是有因素的。

不公平的是,我必须看着我的机器上的其他核心处于空闲状态,而一个核心在100%负载下晃动。

有没有办法并行化大矩阵图?

以下是一些基准测试的示例数据。

num.vars <- 100
num.rows <- 50000
require(GGally)
require(data.table)

tmp <- data.table(replicate(num.vars, runif(num.rows)),
                  class = as.factor(sample(0:1,size=num.rows, replace=TRUE)))

system.time({

    tmp.plot <- ggpairs(data=tmp, diag=list(continuous="density"), columns=1:num.vars,
                        colour="class", axisLabels="show")
    print(tmp.plot)})

有趣的是,除了print()语句之外,我的初始基准测试速度可以达到(上述时间为21分钟)。添加后,print语句会导致我的计算机上出现段错误。 (现在很难说,因为R会话被操作系统简单杀死了。)

问题是在内存中,还是这个可以并行化的东西? (至少情节生成部分似乎可以并行化。)

1 个答案:

答案 0 :(得分:4)

绘制ggpairs图是单线程的,因为GGally:::print.ggpairs内的大部分工作都发生在两个for循环内(第50行左右,取决于你如何计算行数):

for (rowPos in 1:numCol) {
    for (columnPos in 1:numCol) {

可以通过调用具有plyr::l_ply参数的.parallel(或类似)来替换它们。我不知道图形设备是否可以应对几个核心试图同时在它们上绘制东西。我的直觉是,使并行绘图工作稳健可能并非易事,但它也可能是一个有趣的项目。