Note that there are some explanatory texts on larger screens.

plurals
  1. POParallelization in R: %dopar% vs %do%. Why using a single core yields to better performance?
    primarykey
    data
    text
    <p>I'm experiencing a weird behaviour in my computer when distributing processes among its cores using doMC and foreach. Does someone knows why using single core I got better performance than using 2 cores? As you can see, processing the same code without register any core (which supposedly use only 1 core) yields to a much more time-efficiency processing. While %do% seems to perform better than %dopar%, registering 2 cores out of 4 yield to more time consuming. </p> <pre><code>require(foreach) require(doMC) # 1-core &gt; system.time(m &lt;- foreach(i=1:100) %dopar% + matrix(rnorm(1000*1000), ncol=5000) ) user system elapsed 9.285 1.895 11.083 &gt; system.time(m &lt;- foreach(i=1:100) %do% + matrix(rnorm(1000*1000), ncol=5000) ) user system elapsed 9.139 1.879 10.979 # 2-core &gt; registerDoMC(cores=2) &gt; system.time(m &lt;- foreach(i=1:100) %dopar% + matrix(rnorm(1000*1000), ncol=5000) ) user system elapsed 3.322 3.737 132.027 &gt; system.time(m &lt;- foreach(i=1:100) %do% + matrix(rnorm(1000*1000), ncol=5000) ) user system elapsed 9.744 2.054 11.740 </code></pre> <p>Using 4 cores in few trials yield to very different outcomes: </p> <pre><code>&gt; registerDoMC(cores=4) &gt; system.time(m &lt;- foreach(i=1:100) %dopar% { matrix(rnorm(1000*1000), ncol=5000) } ) user system elapsed 11.522 4.082 24.444 &gt; system.time(m &lt;- foreach(i=1:100) %dopar% { matrix(rnorm(1000*1000), ncol=5000) } ) user system elapsed 21.388 6.299 25.437 &gt; system.time(m &lt;- foreach(i=1:100) %dopar% { matrix(rnorm(1000*1000), ncol=5000) } ) user system elapsed 17.439 5.250 9.300 &gt; system.time(m &lt;- foreach(i=1:100) %dopar% { matrix(rnorm(1000*1000), ncol=5000) } ) user system elapsed 17.480 5.264 9.170 </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload