【发布时间】:2022-01-05 13:49:47
【问题描述】:
我是 R 的初学者。我有一个任务,我需要执行类似于 for 循环的任务,但需要进行大量观察,在本例中为 500k 次。
for (number in 1:500000){
sqrt(number)}
问题是我需要对很多主题进行循环。 所以整个脚本看起来像这样:
for (subject in 1:400){
for (number in 1:500000){
sqrt(number)}
}
我想在我的多个核心 (16) 上并行化这个过程。 我发现在大多数教程中,他们会这样做:
library(foreach)
library(doParallel)
registerDoParallel(16)
然后他们继续使用以下方法简单地更改语法:
foreach (subject=1:400) %dopar% {
for (number in 1:500000){
sqrt(number)}
}
对我来说,将所有这些一起使用意味着我将在我的一个处理器上执行范围为 1:500000 的每个 for 循环。因此,这意味着,例如,如果我在 1:500000 循环中的一次迭代的时间复杂度为一小时,我将在一小时内进行 16 次迭代,因为我的每个处理器都会并行进行一次迭代。
在实践中,我通过跟踪经过时间的时间进行检查,似乎我的并行过程实际上比顺序过程慢得多。有什么我做错了吗?有没有一种简单的方法(对初学者友好)只告诉我的机器在我的机器的一个内核上并行执行每个 1:500000 迭代?
【问题讨论】:
标签: r for-loop parallel-processing