问题标签 [rparallel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1181 浏览

c++ - 使用 Rcpp 时如何并行化 C++ 代码?

我有一个 R 脚本,它通过编译 C++ 代码sourceCpp("prog.cpp"),然后调用goprog.cpp. 然后,这个 C++ 代码对 R 进行了多次调用,并且(经过相当长的一段时间后)最终返回结果。

我想我应该开始利用我的笔记本电脑有 4 个核心的事实。我想并行化事情。但是,在遇到意想不到的问题之前,我可以问一下什么是支持的,什么是不支持的?

可以通过以下几种方式完成该任务:

  • (如果可能,这就是我想做的)clusterApply在 R 中调用。clusterApplied然后将调用这个 C++ 函数的函数,这意味着这个函数将被并行调用 4 次。
    • 此 C++ 函数的所有 4 个实例是否会相互隔离?
    • 特别是,使用的全局变量会prog.cpp出现在 4 个独立实例中还是只有一个实例中?(不要向我扔石头……我知道最好避免使用全局变量)
    • 当 C++ 代码调用 R 函数时,我会遇到问题,然后从 CRAN 编译的包中调用函数吗?
    • 如果不是:呼叫sourceCpp("prog.cpp")内部clusterApply帮助?go(与返回所需的长时间相比,编译时间可以忽略不计)
  • (从我读到的内容来看,这是行不通的,但为了完整起见,我们还是问一下这个问题):我可以go只从 R 代码调用一次(就像我现在所做的那样)并在 C++ 代码中创建 4 个线程吗?
    • 我注意到来自 CRAN 的编译包往往不会这样做,即使这些任务的计算成本很高 - 这让我认为可能不支持这样做
    • 特别是,当线程 C++ 代码回调到 R 时,我会遇到问题吗?(如果这很重要,C++ 代码调用的 R 函数将调用 CRAN 编译包中的函数)

我用谷歌搜索,我知道存在 RcppParallel 这样的东西。但是,引用他们的主页

API 限制

您在并行工作者中编写的代码不应以任何方式调用 R 或 Rcpp API。

然后我想我不能使用 RcppParallel 因为,正如我所说,我的 C++ 代码多次调用 R (这些调用所花费的时间与 C++ 所花费的时间相当,所以我非常希望将它们并行化;这clusterApply将允许我.

0 投票
1 回答
481 浏览

r - parApply() 是否划分矩阵然后处理每个?

假设我有一个parApply()电话如下:

Wherenrow(my.mat)非常大,但myFun()计算速度非常快。请注意,核心数cl5。我想知道如何进行并行化。

my.mat分成5个子矩阵,然后每个子矩阵由一个线程处理,然后在所有线程完成后组合在一起?还是通过将元素my.mat一个一个地发送到每个线程来完成?

0 投票
0 回答
52 浏览

r - 从 Rscript 调用 mclapply

当调用使用 mclapply() 和Rscript myFuction.R --json=config.jsonmclapply 函数的函数时失败并显示消息

所有计划的核心在用户代码中遇到错误

但是,当我在 RStudio 中运行代码时,它运行良好。我在 RStudio AWS AMI 上开发并在 RStudio 中进行测试,并从 RStudio AWS 机器的终端执行 Rscript,并且 RStudio 和终端之间的环境是相同的。

有没有人知道在使用 Rscript 运行 mclapply 时我可能需要提供给 mclapply 的额外参数或我需要定义的其他环境参数?

我尝试更改所有 mclapply() 参数但没有成功

这是我的环境。

虽然这是一条“警告信息”,但 mclapply 退出

0 投票
1 回答
36 浏览

r - parSapplyLB 缺少参数

假设fun是一个有 3 个参数的函数(x, y, z)y或者z需要指定,但不能同时指定。

现在假设这个函数在另一个函数中被调用:

而不是使用sapply,现在我想实现一个并行后端:

此代码给出错误。有没有办法来解决这个问题?

更新:下面的代码按预期工作。但是有没有更简洁的方法呢?

0 投票
1 回答
33 浏览

r - R完全占用虚拟内存

我多次重写我的程序以不达到任何内存限制。它再次占用了完整的 VIRT,这对我来说没有任何意义。我不保存任何对象。每次完成计算后,我都会写入磁盘。

代码(简化)看起来像

bootstrap 函数只是对数据进行采样并将采样的数据保存到磁盘。

我不明白它现在如何累积到超过 60 GB 的 RAM。代码被高度简化,但恕我直言,没有其他可能有问题的地方。如果需要,我可以粘贴更多代码详细信息。

R即使我已经重写了将生成的对象存储在磁盘上的软件,如何设法连续吃掉我的内存?

0 投票
0 回答
323 浏览

r - R未来包 - 理解错误消息

我在 Linux (R 3.6.0) 上提交了如下两个工作。请参见下面的示例代码。

如果由于数据大小而导致作业花费超过 3 分钟,那么我将遇到错误。如果数据很小,那么我不会出错。我错过了什么吗?

sendMaster(try(eval(expr, env),silent = TRUE)) 中的错误:忽略 SIGPIPE 信号调用:source ... run.MulticoreFuture -> do.call -> -> sendMaster

其他参考:

我发现在不同的博客上已经讨论了类似的问题。听起来错误已在 R 3.6.0 中修复,但即使使用 R 3.6.0 我仍然得到它

https://r.789695.n4.nabble.com/error-in-parallel-sendMaster-td4760382.html

https://github.com/wch/r-source/commit/e08cffac1c5b9015a1625938d568b648eb1d8aee

我的 job1 和 job2 是独立的并将输出写入文件,因此我不需要将任何内容发送回主作业。有什么方法可以在工作中定义说没有必要将任何东西发回主要工作?

更新

如果我使用计划(多会话),我不会收到错误消息

会话和核心信息

0 投票
0 回答
172 浏览

r - R中Windows 10的并行包

我有这个数据集,我试图在 R 中解析。来自HMDB的数据和数据集名称是Serum Metabolites(以 xml 文件的格式)。xml 文件包含大约 25K 代谢物节点,每个我想解析到子节点

我有一个将 XML 文件解析为 R 中的列表对象的代码。由于 XML 文件非常大,并且每个代谢物都有大约 12 个我想要的子节点,因此解析文件需要很长时间。约 3 小时至 1,000 种代谢物。我正在尝试使用该软件包parallel,但收到并出错。

包裹:

功能:

现在创建环境:

并执行:

收到的错误:

基于这些链接,尝试实现并行:

  1. R中的并行处理
  2. 如何从函数中调用全局parLapply函数?
  3. R 并行错误:checkForRemoteErrors(val) 中的错误:2 个节点产生错误;第一个错误:无法打开连接

但找不到invalid connection 错误

我正在使用 Windows 10 最新的 R 版本 4.0.2(不确定信息是否足够)

任何提示或想法将不胜感激

0 投票
1 回答
145 浏览

r - 将 R 包函数导出到 R 包内的并行集群

我正在处理的 R 包中有一些函数(如function1)依赖于我的包中的辅助函数(如h_function1h_function2)。我正在并行化以function1在我的包中的另一个函数中重复调用。

目前,在我的包中,我正在使用代码

cl传入函数的并行包中的集群在哪里。然而,这假设助手功能h_function1h_function2从我的包加载到本地环境中,这对于某些用户可能不是真的。

有什么方法可以灵活地将函数导出到集群中?是否可以通过包名导出包的所有功能?

0 投票
0 回答
220 浏览

r - 在并行循环中将变量分配给全局环境

我正在做一些繁重的计算,我想通过在并行循环中执行它来加快速度。此外,我希望根据当前处理的数据名称将每个计算的结果分配给全局环境:

循环

在一个简单的 for 循环中,这将是以下内容,并且效果很好:

在这个函数中,我首先获取一些数据,对其进行循环,引用它(尽管不是必需的)以在函数调用中使用。实际上,这个函数名称也是动态的,这就是我这样做的原因。

前锋

现在,我想加快速度。我的第一个想法是使用该foreach软件包(带有doParallel后端):

将整个quote-call-eval 过程替换为简单地fun(data[i])解决了错误,但仍然没有分配任何内容。

未来

为了确保包没有问题foreach,我也尝试了future包(虽然我不熟悉它)。

强制future被评估 ( f <- future(...); value(f)) 触发与使用相同的错误foreachError in { : task 1 failed - "could not find function "fun""

概括

简而言之,我的问题是:

  1. 如何在并行循环中将变量分配给全局环境?
  2. 为什么函数查找失败?
0 投票
1 回答
163 浏览

r - 无法在 multidplyr 中调用 create_cluster

我能够加载所有软件包并且也能够看到可用的内核数量,但是我
在 create_cluster(4) 中出现错误:找不到函数“create_cluster”