同时将 r 与 foreach 和 mclapply 并行

2024-02-06

我正在实现一个并行处理系统,该系统最终将部署在集群上,但我无法弄清楚并行处理的各种方法如何交互。

我需要使用 for 循环来运行一大段代码,其中包含几个大的矩阵运算列表。为了加快速度,我想使用 foreach() 并行化 for 循环,并使用 mclapply 并行化列表操作。

示例伪代码:

cl<-makeCluster(2)
registerDoParallel(cl)

outputs <- foreach(k = 1:2, .packages = "various packages") {

    l_output1 <- mclapply(l_input1, function, mc.cores = 2)
    l_output2 <- mclapply(l_input2, function, mc.cores = 2)
    return = mapply(cbind, l_output1, l_output2, SIMPLIFY=FALSE)
}

这似乎有效。我的问题是:

1)这是一个合理的方法吗?他们似乎在我的小规模测试中一起工作,但感觉有点笨拙。

2)在任何给定时间它将使用多少个核心/处理器?当我将其升级为集群时,我需要了解可以将其推送多少(foreach 仅循环 7 次,但 mclapply 列表最多可达 70 个左右的大矩阵)。它似乎创建了 6 个“核心”(大概是 foreach 2 个,每个 mclapply 2 个)。


我认为这是集群上非常合理的方法,因为它允许您使用多个节点,同时仍然使用更高效的节点mclapply跨各个节点的核心。它还允许您对工作人员进行一些后处理(调用cbind在这种情况下)这可以显着提高性能。

在一台机器上,您的示例将创建总共 10 个附加进程:两个由makeCluster每个调用mclapply两次 (2 + 2(2 + 2))。然而,一次只有四个应该使用大量的 CPU 时间。您可以通过重组调用的函数将其减少到八个进程mclapply这样你只需要打电话mclapply一旦进入 foreach 循环,这可能会更有效。

在多台计算机上,您将创建相同数量的进程,但每个节点一次只有两个进程会使用大量 CPU 时间。由于它们分布在多台机器上,因此应该可以很好地扩展。

意识到mclapply如果您使用 MPI 集群,可能效果不佳。 MPI 不喜欢您分叉进程,因为mclapply做。它可能只是发出一些严厉的警告,但我也看到了其他问题 https://stackoverflow.com/a/19844099/2109128,所以我建议使用 PSOCK 集群,它使用 ssh 在远程节点上启动工作程序,而不是使用 MPI。


Update

看来调用有问题mclapply来自由“parallel”和“snow”包创建的集群工作人员。欲了解更多信息,请参阅我的对问题报告的答复 https://stackoverflow.com/a/35509767/2109128.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同时将 r 与 foreach 和 mclapply 并行 的相关文章

随机推荐

  • Windows Phone 8 中的设备方向

    我想在使用 PhotoCaptureDevice 选项拍摄快照时根据 Windows Phone 8 中的设备方向旋转图像 当设备方向为 LandscapeLeft Image to be rotated to 90 LandscapeRi
  • 有人能解释一下吗:0.2 + 0.1 = 0.30000000000000004? [复制]

    这个问题在这里已经有答案了 重复项 浮点数是如何存储的 什么时候重要 https stackoverflow com questions 56947 how is floating point stored when does it mat
  • 如何对 numpy 字符串数组的每个元素进行切片?

    Numpy 有一些非常有用的字符串操作 http docs scipy org doc numpy reference routines char html 它将常用的 Python 字符串操作向量化 与这些操作相比pandas str n
  • 来自带有列表的字典的 Pandas DataFrame

    我有一个 API 它以 Python 字典的形式返回一行数据 大多数键都有一个值 但有些键的值是列表 甚至是列表的列表或字典的列表 当我将字典放入 pd DataFrame 并尝试将其转换为 pandas DataFrame 时 它 会抛出
  • 使用 FPDF 使文本在单元格中换行?

    现在 当我使用带有文本的单元格时 它全部保留在一行上 我知道我可以使用写入功能 但我希望能够指定高度和宽度 这就是我现在所拥有的 但正如我所说 文本不会换行以保留在尺寸中 pdf gt Cell 200 40 reportSubtitle
  • 为什么我们在 Hibernate 中使用 @Embeddable

    有什么用 Embedded and Embeddable处于休眠状态 因为我在互联网上找到的每个示例都是在单个表中插入数据并使用两个不同的类来执行此操作 我的观点是 如果我使用单个表 那么我可以映射单个类内的所有列 那么为什么我应该使用不同
  • 关闭mysql连接重要吗?

    关闭mysql连接效率是否至关重要 或者在php文件运行后它会自动关闭吗 来自文档 http us php net function mysql connect 注意 脚本执行结束后 到服务器的链接将立即关闭 除非通过显式调用 mysql
  • Xcode 4.4 约束错误

    我正在使用 Xcode 4 4 并在界面生成器中创建视图 当我运行我的应用程序时 我始终收到以下约束错误 Unable to simultaneously satisfy constraints
  • Realm React-Native:从 JS(反应本机代码)和 android(java)访问相同的领域

    我有一个用例 我在 android 代码 本机 中接收一些数据 我想将此数据插入到由我的反应代码打开或创建的同一领域中 或者在同一个领域写作 我怎样才能实现这个目标 感谢所有的帮助 附 我知道我可以以某种方式制作一个本机模块并将数据发送回我
  • 如何使用 JMH 按顺序运行基准测试中的方法?

    在我的场景中 基准测试中的方法应该在一个线程中顺序运行并按顺序修改状态 例如 有一个List
  • 在 API 网关路径中引用授权者定义

    我在我的 cloudformation 模板中定义了一个自定义授权者 MyCustomAuthorizer Type AWS ApiGateway Authorizer Properties Name MyCustomAuthorizer
  • MongoDB 中的多语言属性

    我正在尝试在 MongoDB 中设计一个模式范例 它将支持文档中变量属性的多语言值 例如 我有一个产品目录 其中每个产品可能需要以各种语言存储其名称 标题或任何其他属性 同样的范例可能也适用于其他特定于区域设置的属性 例如价格 货币变化 我
  • jquery数组分组依据

    我有这样的数组 abcArr A 10 B 20 A 30 C 40 如何按 A B C 对值进行分组和求和 each abcArr function if this 0 this 0 this 1 this 1 I know this w
  • 如何考虑标签将多行合并为一行

    我有一个数据框 每一行都包含一个句子 我想将这些行合并在一起 以便每行包含每个作者的 4 个句子 我有类似这样的数据框 text author sent1 x sent2 x sent3 x sent1002 x sent1 y sent2
  • 如何从一个表中选择另一表中不存在的所有记录?

    表1 ID 名称 表2 ID 名称 Query SELECT name FROM table2 that are not in table1 already SELECT t1 name FROM table1 t1 LEFT JOIN t
  • 两个linux内核模块之间是否可以通过netlink进行通信?

    众所周知 netlink是用户 内核空间的通信机制 我想从我的内核模块与另一个内核模块进行通信 另一个内核模块已经具有 netlink 接口 是否可以像我们在用户空间中那样从内核模块到 netlink 建立连接 简短回答 不 如果要在两个内
  • 证书颁发:来自 P7B 和 CRT 的 KEY 或 PFX

    我对证书很陌生 这是我第一次购买它 我生成了 CSR 文件 在 IIS 中 并使用 GoDaddy 网站购买了证书 他们给我发了两个文件 P7B 和 CRT 由于我将使用 Azure Web 角色的证书 因此我需要 PFX 如何仅使用 CS
  • 将 svn 存储库数据库格式从 1.6 降级到 1.5

    我确实遇到了一个不寻常的情况 因为我必须将 svn 存储库从 svn server 1 6 迁移到 svn server 1 5 问题是没有可用的降级工具 有人知道一些脚本或者有降级 svn 存储库的经验吗 Cheers Kevin 除了
  • 有没有办法预先缓存网页以便使用 Android WebView 查看?

    我读过有关 HTML5 缓存清单的内容 并且我看到 Android 确实支持使用缓存清单来缓存网站 我想使用缓存清单下载我的网站所需的所有资源以进行预加载 然后打开 WebView 并使用预缓存的资源显示远程网站 我想以某种方式预先缓存我的
  • 同时将 r 与 foreach 和 mclapply 并行

    我正在实现一个并行处理系统 该系统最终将部署在集群上 但我无法弄清楚并行处理的各种方法如何交互 我需要使用 for 循环来运行一大段代码 其中包含几个大的矩阵运算列表 为了加快速度 我想使用 foreach 并行化 for 循环 并使用 m