使用%dopar%和%do%获得不同的结果

蜜bad

我试图通过并行化多个内核%dopar%来加快for循环速度但是,我无法存储返回的值。这是一个可重现的小示例。

使用%dopar%

cl <- parallel::makeForkCluster(4)
doParallel::registerDoParallel(cl)
junk_parallel = seq(0,100000,1)
system.time(foreach(i=seq(0,10000,1))%dopar%{
  junk_parallel[i] = sqrt(i)})
stopCluster(cl)

输出:

user  system elapsed 
  2.536   0.148   2.690 
> junk_parallel[9]
[1] 8

使用%do%

cl <- parallel::makeForkCluster(4)
doParallel::registerDoParallel(cl)
junk_parallel = seq(0,100000,1)
system.time(foreach(i=seq(0,10000,1))%do%{
  junk_parallel[i] = sqrt(i)}) 
stopcluster(cl)

输出:

 user  system elapsed 
  2.172   0.004   2.174 
> junk_parallel[9]
[1] 3 

为什么%dopar%无法分配正确的值?何时使用%dopar%和%do%?

提前致谢,

c

并行循环中的计算在它自己的实例中。您正在尝试分配给foreach无法访问的全局变量。尝试这个:

cl <- parallel::makeForkCluster(4)
doParallel::registerDoParallel(cl)
junk_parallel <- foreach(i=seq(0,10000,1)) %dopar% {
  sqrt(i)}
stopCluster(cl)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用ggplot和基本绘图功能获得不同的结果

使用RDD和DataFrames获得不同的结果

使用Sparklyr和Dplyr时获得不同的结果

在Windows和Linux中使用R获得不同的结果

使用多线程在不同的运行中获得不同的结果

在Java和golang中使用AES时获得不同的结果(密文)

模板专业化-使用clang和gcc可获得不同的结果

使用randomForest()和插入符号的randomForest获得不同的结果(方法=“ rf”)

使用mongo和mongoClient从同一查询中获得不同的投影结果

在 T-SQL 和 LINQ (EF Core) 中使用相同的查询获得不同的结果

使用“ LEFT OUTER JOIN”和“ IN”获得不同的结果,我的逻辑哪里出问题了?

Flutter - 如何使用相同的未来获得不同的结果?

在 mysql 中使用更多条件获得不同的结果

使用多线程生产者-消费者在运行和删除模式下获得不同的结果

如何迭代对象以获得不同的结果?

改进聚合查询以获得不同的结果

反射-从HashMap获得不同的结果-LinkedHashMap

Keras与定种子获得不同的结果

Java AES加密获得不同的结果

每次从BeautifulSoup获得不同的结果

使用相同命令在不同文件夹中获得不同结果

使用不同库中的相同功能获得不同结果

为什么SVM使用不同的功能获得不同的结果?

如何以相同的方法使用不同的按钮以获得不同的结果?

Python Scrapy:使用不同的方法获取页面可获得不同的结果

Sklearn 在不同系统(机器)上使用相同的 random_state 获得不同的结果

MySQL获得不同时间段和组的结果

本机浏览器和Node.js中的JavaScript函数声明获得不同的结果

Charset.defaultCharset()在JDK1.7和JDK 1.6下获得不同的结果