楼主: boss0577
2763 9

[问答] R并行效率的问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

30%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
5 点
热心指数
0 点
信用等级
0 点
经验
68 点
帖子
8
精华
0
在线时间
43 小时
注册时间
2013-4-11
最后登录
2023-1-29

楼主
boss0577 发表于 2017-2-22 12:34:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. temp <- matrix(rnorm(1000000), ncol = 100)
  2. ##单核运行
  3. system.time(foreach(x = 1:10000, .combine = 'c') %do% {sum(temp[x,])})
  4. library(foreach)
  5. library(doParallel)
  6. library(iterators)
  7. cl <- makeCluster(3)
  8. registerDoParallel(cl)
  9. ##多核运行
  10. system.time(foreach(x = 1:10000, .combine = 'c') %dopar% {sum(temp[x,])})
  11. ##多核分块
  12. system.time(foreach(x = iapply(temp,1), .combine = 'c') %dopar% {sum(x)})
  13. stopCluster(cl)
复制代码

提供三种运行模式,看上去提供了并行运算和分块处理机制,应该加快运行效率。但实际问题是三种的运行效率是依次下降的。
请教这里影响并行运算的主要因素是什么,该如何解决?
ps:第一种单核运行和多核运行个人觉得有可能还是由于资源分配耗用的时间,但是第三种模式至少在第二种的基础上减少了变量复制的时间,运行效率下降实在有些不能理解。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Temp TEM

沙发
飞天玄舞6 在职认证  发表于 2017-2-22 13:12:59
你再加大数据量试试

藤椅
boss0577 发表于 2017-2-22 14:00:02
飞天玄舞6 发表于 2017-2-22 13:12
你再加大数据量试试
  1. > temp <- matrix(rnorm(10000000), ncol = 100)
  2. > ##单核运行
  3. > system.time(foreach(x = 1:100000, .combine = 'c') %do% {sum(temp[x,])})
  4. 用户  系统  流逝
  5. 44.27  0.00 44.82
  6. > library(foreach)
  7. > library(doParallel)
  8. > library(iterators)
  9. > cl <- makeCluster(3)
  10. > registerDoParallel(cl)
  11. > ##多核运行
  12. > system.time(foreach(x = 1:100000, .combine = 'c') %dopar% {sum(temp[x,])})
  13. 用户  系统  流逝
  14. 59.00  6.38 67.10
  15. > ##多核分块
  16. > system.time(foreach(x = iapply(temp,1), .combine = 'c') %dopar% {sum(x)})
  17. 用户  系统  流逝
  18. 82.97  5.53 89.60
  19. > stopCluster(cl)
复制代码
提高一个量级,差距更大了。我觉得问题不在这边。

板凳
cheetahfly 在职认证  发表于 2017-2-22 18:32:21
《Parallel R》里面有系统的介绍,包括原理,可能的瓶颈,如和寻找瓶颈并可视化等等。
https://bbs.pinggu.org/thread-4134315-1-1.html
已有 2 人评分经验 热心指数 收起 理由
李会超 + 40 精彩帖子
ryoeng + 1 我很赞同,得学习

总评分: 经验 + 40  热心指数 + 1   查看全部评分

报纸
ryoeng 在职认证  发表于 2017-2-22 21:06:36
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

地板
cheetahfly 在职认证  发表于 2017-2-22 22:16:35
ryoeng 发表于 2017-2-22 21:06
又破费了,2014年就已买了,刚才又购买了重复书本。目前正要啃书:efficientR。
我也经常重复买书,说明只有仔细啃过,才是自己的,只是下载下来,并不是自己的。

7
jgchen1966 发表于 2017-2-24 19:02:17
在几个核中并行运行,先要化解任务,各核算完后,要进行结果合并操作。。这会消耗一些资源,象楼主这样的100000次简单的“sum(x)"任务,不值得并行。

8
jgchen1966 发表于 2017-2-24 19:06:51
在几个核中并行运行,先要化解任务,各核算完后,要进行结果合并操作。。这会消耗一些资源,象楼主这样的100000次简单的“sum(x)"任务,不值得并行。。只要,forear (.....)%.dopar%{任务}中的”任务“足够大而复杂,其运行的时间远远大于并行日常操作时间,才会提高并行效率,达到,若n个物理核,效率提高达n倍,的理想结果。。

9
boss0577 发表于 2017-3-1 18:55:37
jgchen1966 发表于 2017-2-24 19:06
在几个核中并行运行,先要化解任务,各核算完后,要进行结果合并操作。。这会消耗一些资源,象楼主这样的10 ...
嗯。这边当然是举个例子。这边想问的是分解任务中可能涉及到哪几个方面会影响最后的并行效率,以及为什么对大size的变量进行分块以后仍然降低了效率。

10
qiu435 发表于 2017-3-3 16:47:48
启动并行运算本身就消耗时间,数据量不是特别大的时候,速度反而变慢,这是正常的

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 19:00