R 如何使用该设备进行并行打印?

R 如何使用该设备进行并行打印?,r,plot,concurrency,parallel-processing,parallelism-amdahl,R,Plot,Concurrency,Parallel Processing,Parallelism Amdahl,我想在一些国家运行CPU密集型绘图功能。因此,我尝试并行化我的代码,然而,到目前为止,我没有得到任何输出。我使用x11进行测试,使用pdf获得最终结果 正常代码如下所示 x11(width=7, height=7) # comment out for pdf output # pdf("plot.pdf") # un-comment for pdf output op <- par(mfrow=c(3, 3)) sapply(unique(dat$country),

我想在一些国家运行CPU密集型绘图功能。因此,我尝试并行化我的代码,然而,到目前为止,我没有得到任何输出。我使用x11进行测试,使用pdf获得最终结果

正常代码如下所示

x11(width=7, height=7)  # comment out for pdf output
# pdf("plot.pdf")  # un-comment for pdf output
op <- par(mfrow=c(3, 3))
sapply(unique(dat$country), function(x)
  with(dat[dat$country == x, ], 
       plot(year, value, type="l",                 # complicated plotting function
            main=x,                                #
            xlim=c(2014, 2019), ylim=0:1, col=2))  #
  )
par(op)
# dev.off()  # un-comment for pdf output
使用此输出:

这里是我并行化的尝试

library(parallel)
x11(width=7, height=7)  # comment out for pdf output
# pdf("plot.pdf")  # un-comment for pdf output
op <- par(mfrow=c(3, 3))
cl <- makeCluster(detectCores() - 1)
clusterExport(cl, c("dat"), envir=environment())
parSapply(cl, 1:length(unique(dat$country)), function(x, ...) {
  with(dat[dat$country == x, ], 
       plot(year, value, type="l",                 # complicated plotting function
            main=unique(dat$country)[x],           #
            xlim=c(2014, 2019), ylim=0:1, col=2))  #
  })
stopCluster(cl)
par(op)
# dev.off()  # un-comment for pdf output
代码运行,但输出似乎没有以某种方式发送到设备。我怎样才能解决这个问题

数据 问:我如何解决这个问题

序言: 虽然有流程组织,可能允许某些步骤以真正的[并行]方式开始、执行和终止,但还有更多的情况,根本无法以这种方式运行,它们甚至不应该明确要求一个步骤在另一个步骤完成后进行纯[串行]组织。一个公正的[并发的]流程组织可能会利用有限的可用资源内存I/O跨公正的3个内存通道、公正的6个CPU内核中的一个等。如果且仅当这些资源是空闲的,否则不会

然而,所有这些都是有代价的。。。有关中并行性的附加成本的详细信息

这就是说: 绘图肯定是一个纯[串行]过程。这里一步一步地适用。从打印机设备,通过打印机接口,甚至到打印机任务,PostScript或其他打印设备控制语言的事务解释-都是事务锁定的-不应同时打印两个文档,而是一个接一个,就像如果只用一支铅笔和一把尺子,你永远不会在同一张纸上同时得到两张图,是吗

选择? 如果与重新组织的处理附加成本流程相关的所有此类重新分解至少有理由不支付超过接收的费用,从而无法实现有效的加速,则可以提前并行准备所有数据
set.seed(42)
dat <- cbind.data.frame(expand.grid(country=replicate(9, paste(LETTERS[sample(seq(26), 2)], collapse="")),
                                    year=2014:2019),
                        value=runif(54))