- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 doMC 和 foreach 在其内核之间分配进程时,我在计算机中遇到了奇怪的行为。有人知道为什么使用单核比使用 2 核获得更好的性能吗?如您所见,在不注册任何内核(据说只使用 1 个内核)的情况下处理相同的代码会产生更多的时间效率处理。虽然 %do% 似乎比 %dopar% 性能更好,但注册 4 个内核中的 2 个会导致更耗时。
require(foreach)
require(doMC)
# 1-core
> system.time(m <- foreach(i=1:100) %dopar%
+ matrix(rnorm(1000*1000), ncol=5000) )
user system elapsed
9.285 1.895 11.083
> system.time(m <- foreach(i=1:100) %do%
+ matrix(rnorm(1000*1000), ncol=5000) )
user system elapsed
9.139 1.879 10.979
# 2-core
> registerDoMC(cores=2)
> system.time(m <- foreach(i=1:100) %dopar%
+ matrix(rnorm(1000*1000), ncol=5000) )
user system elapsed
3.322 3.737 132.027
> system.time(m <- foreach(i=1:100) %do%
+ matrix(rnorm(1000*1000), ncol=5000) )
user system elapsed
9.744 2.054 11.740
> registerDoMC(cores=4)
> system.time(m <- foreach(i=1:100) %dopar%
{ matrix(rnorm(1000*1000), ncol=5000) } )
user system elapsed
11.522 4.082 24.444
> system.time(m <- foreach(i=1:100) %dopar%
{ matrix(rnorm(1000*1000), ncol=5000) } )
user system elapsed
21.388 6.299 25.437
> system.time(m <- foreach(i=1:100) %dopar%
{ matrix(rnorm(1000*1000), ncol=5000) } )
user system elapsed
17.439 5.250 9.300
> system.time(m <- foreach(i=1:100) %dopar%
{ matrix(rnorm(1000*1000), ncol=5000) } )
user system elapsed
17.480 5.264 9.170
最佳答案
结果的组合占用了所有处理时间。这些是我机器上 cores=2
的时间如果没有返回结果的场景。它本质上是相同的代码,只有创建的矩阵被丢弃而不是被返回:
> system.time(m <- foreach(i=1:100) %do%
+ { matrix(rnorm(1000*1000), ncol=5000); NULL } )
user system elapsed
13.793 0.376 14.197
> system.time(m <- foreach(i=1:100) %dopar%
+ { matrix(rnorm(1000*1000), ncol=5000); NULL } )
user system elapsed
8.057 5.236 9.970
doMC
的文档:
The
doMC
package provides a parallel backend for theforeach
/%dopar%
function using the multicore functionality of theparallel
package.
parallel
使用
fork
产生 R 进程的相同副本的机制。从单独的进程收集结果是一项昂贵的任务,这就是您在时间测量中看到的。
关于r - R : %dopar% vs %do%. 中的并行化为什么使用单核可以获得更好的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194465/
据我了解: Programming to leverage multicores or multiple processors is called parallel programming. 但是如果
据我了解: Programming to leverage multicores or multiple processors is called parallel programming. 但是如果
我可以在单核 cpu 的机器上使用 OpenMP 吗?性能会有一些提升? 最佳答案 是的,你可以。您可以使用 OpenMP 指令注释代码并仍然按顺序运行应用程序。为此,您必须在没有 OpenMP 标志
有很多关于内存屏障的信息。大多数信息是指多核或多处理器架构。 Stackoverflow 上的某个地方还指出,单核处理器不需要内存屏障。 到目前为止,我找不到任何明确的解释,为什么单核 CPU 上不需
“如果您能感觉到计算机的操作每隔几毫秒就会自行切换数十项任务,您肯定会同意计算机似乎在同时执行这些任务,即使我们知道计算机是交错的各种任务的计算” M.Ben-Ari,并发编程原理,1982 年。 那
我知道自旋锁与自旋一起工作,存在不同的内核路径并且内核是抢占式的,那么为什么自旋锁在单处理器系统中不起作用? (例如,在 Linux 中) 最佳答案 如果我理解你的问题,你会问为什么自旋锁在单核机器上
在使用像 Erlang 和其他具有轻量级并发进程的语言之后,我发现很难理解它是如何转化为 Java 的。鉴于我使用单核机器,有没有办法执行多个并发 IO 绑定(bind)操作(http)? 我发现如下
在 Java 中,Volatile 和 synchronized 使得多线程可以协同工作,也可以相互理解。但是,如果你在单核系统上使用多线程,就意味着不是真正的多线程工作,操作系统只是从这个线程到另一
我已经构建了一个大型的 AngularJS 应用程序,到目前为止它运行良好。 当一些用户(使用具有一个 CPU 的非常老的计算机)提示应用程序非常慢时,我的问题就开始了。 我打开了任务管理器,我可以看
我已阅读并详细了解 Java volatile 和 synchronized 关键字在基于 SMP 架构的 CPU 中 cpu 级别的含义。 这里有一篇关于该主题的优秀论文: http://irl.c
我是一名优秀的程序员,十分优秀!