Multithreading 有没有加速矩阵图的方法?

Multithreading 有没有加速矩阵图的方法?,multithreading,r,optimization,parallel-processing,multiprocessing,Multithreading,R,Optimization,Parallel Processing,Multiprocessing,ggpairs()。这是公平的;成对排列的数量按阶乘增长 不公平的是,我不得不看着我机器上的其他核心闲置,而其中一个以100%的负载转动 有没有办法并行化大型矩阵图 下面是一些用于基准测试的示例数据 num.vars <- 100 num.rows <- 50000 require(GGally) require(data.table) tmp <- data.table(replicate(num.vars, runif(num.rows)),

ggpairs()。这是公平的;成对排列的数量按阶乘增长

不公平的是,我不得不看着我机器上的其他核心闲置,而其中一个以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)})

num.varsDrawing
ggpairs
plots是单线程的,因为
GGally::print.ggpairs
中的大部分工作发生在两个for循环中(第50行附近的某个地方,取决于您如何计算行):


可以用调用具有
.parallel
参数的
plyr::l_ply
(或类似)来替换这些。我不知道这些图形设备是否能处理好几个试图同时在上面绘制东西的内核。我的直觉是,让并行绘图稳健地工作可能不是一件小事,但它也可能是一个有趣的项目。

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


可以用调用具有
.parallel
参数的
plyr::l_ply
(或类似)来替换这些。我不知道这些图形设备是否能处理好几个试图同时在上面绘制东西的内核。我的直觉是,让并行绘图有力地工作可能不是一件小事,但它也可能是一个有趣的项目。

您是否考虑过生成的绘图是否合理?此外,您不应该像这样使用
复制
(这是引擎盖下的一个R循环)。使用类似于
矩阵(runif(num.vars*num.rows),ncol=num.vars)
打印
会导致实际打印(即,评估/渲染图形对象),否则这不会在网格图形的函数中完成。哎哟!没错,复制不应该在基准中。我专门添加了
print
语句来分解工作,但我问的方式是否不清楚?(如果适当缩放,结果图是合理的;)尽管对于这种事情使用一个简单的分块函数会很好——我有一个地方需要重写。)当然,并行化可能会有所帮助,但是如果你想要一个严重的改进,它可能是一个更好的方法,可以更智能地工作,而不是更努力。我不能给你答案,但也许可以成为灵感的来源。也许是六边形装箱绘图工具之一,只是为了减少绘图项目的数量<代码>ggplot2::stat_binhex
。您可以使用bigvis软件包
库(devtools)中的工具来聚合或简化数据;安装github(“bigvis”)
。与MATLAB思想类似的策略。您是否考虑过结果图是否合理?此外,您不应该像这样使用
复制
(这是引擎盖下的一个R循环)。使用类似于
矩阵(runif(num.vars*num.rows),ncol=num.vars)
打印
会导致实际打印(即,评估/渲染图形对象),否则这不会在网格图形的函数中完成。哎哟!没错,复制不应该在基准中。我专门添加了
print
语句来分解工作,但我问的方式是否不清楚?(如果适当缩放,结果图是合理的;)尽管对于这种事情使用一个简单的分块函数会很好——我有一个地方需要重写。)当然,并行化可能会有所帮助,但是如果你想要一个严重的改进,它可能是一个更好的方法,可以更智能地工作,而不是更努力。我不能给你答案,但也许可以成为灵感的来源。也许是六边形装箱绘图工具之一,只是为了减少绘图项目的数量<代码>ggplot2::stat_binhex
。您可以使用bigvis软件包
库(devtools)中的工具来聚合或简化数据;安装github(“bigvis”)
。与MATLAB思想类似的策略。好吧,一个简单的想法是使用并行
foreach
,至少看看会发生什么,我猜。@TrevorAlexander是的,
.parallel
参数对
plyr
函数调用
foreach
,一个简单的想法是使用并行
foreach
,至少看看会发生什么,我想。@trevor是的,
.parallel
参数到
plyr
函数调用
foreach
for (rowPos in 1:numCol) {
    for (columnPos in 1:numCol) {