问题标签 [rcppparallel]

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 投票
0 回答
16 浏览

rcppparallel - RccpParallel 设置函数内部的线程数

我正在寻找一个 R 包,用户可以使用一些参数设置分配给 RcppParallel 的线程数。

我试着玩这个,但我似乎无法让它工作。它还提出了一些问题,即用户是否在运行时终止函数,是否setNumThreads停留在该n_threads值与默认值。

我试图小心不要消耗比用户预期更多的 CPU,因此理想情况下,该函数默认情况下只使用一个线程,并且只有在特别授权的情况下才使用更多(并且我试图在两种情况下使用相同的代码)。

任何想法将不胜感激!

0 投票
2 回答
43 浏览

r - 编译包时自动将 RcppParallel 必备项添加到 R 包的 NAMESPACE

RcppParallel在我自己的 R 包中使用。

我知道我需要添加Imports: RcppParallelDESCRIPTION文件和文件importFrom(RcppParallel, RcppParallelLibs)NAMESPACE

我目前编译我的 R 包的工作流程是:

  1. Rcpp::compileAttributes()
  2. devtools::document()
  3. 手动添加importFrom(RcppParallel, RcppParallelLibs)NAMESPACE文件
  4. devtools::install("MyPackage",quick = T,upgrade="never")

我的问题是我应该对我的 R 包进行哪些更改,以便我可以跳过手动步骤 3?我已经添加Imports: RcppParallelDESCRIPTION文件中,为什么在第 2 步之后importFrom(RcppParallel, RcppParallelLibs)没有显示在NAMESPACE文件中?

0 投票
0 回答
40 浏览

c++ - RcppParallel 不适用于使用 RcppArmadillo 的 Metropolis-Hastings 的用户定义函数

我对 Rcpp 比较陌生,最近学习了如何从 R 传输我的代码。但是,它仍然不够快,我正在尝试实现 RcppParallel,但运气不佳。基本上,我有一个 Gibbs 采样器通过 Metropolis-Hastings 更新一堆变量,因为我的大多数变量都没有封闭形式的后验。我终于能够让我的代码在没有错误的情况下运行,但不幸的是,我使用 RcppParallel 的代码与我的旧代码的速度相同,我不知道为什么。

为简化起见,假设我想更新一个变量 U,即 ap by r 矩阵。我有一个函数 logFC_U 来计算对数后验,然后有一个函数 MH_U 来执行 Metropolis-Hastings 步骤并返回 U 的更新列。

然后我有一个函数循环遍历 U 的所有元素,一次更新一个元素,并返回另一个矩阵,该矩阵基本上是两个彼此相邻堆叠的矩阵:第一个显示哪些元素已更新或未使用 1 和 0,接下来是更新后的 U 矩阵。

这是我尝试并行化的步骤。由于我需要使用 RcppArmadillo(我认为)来执行所有矩阵乘法,因此我使用在另一篇文章中找到的一种技术将输入转换为 arma::mat 和 arma::vec。我还尝试将输入保留为 NumericMatrix 和 NumericVector,然后在 MH_U 函数内将它们转换为 arma::mat 和 arma::vec,但出现错误,即没有匹配函数可调用“MH_U”,并且我无法解决这个问题。

有谁知道为什么我的原始函数 RegUpdateU 和并行化版本 ParallelUpdateU 的速度相同?

如果有人可以帮助我,我将不胜感激。我已经在这上面花了几个星期,但还没有弄清楚。现在,我的整个 Gibbs 采样器需要 90 多个小时才能运行的数据远不及我想用于解决问题的真实数据的大小。这是我在 stackoverflow 上的第一篇文章,所以如果我需要提供任何其他信息,请告诉我。谢谢!!!!!

0 投票
0 回答
74 浏览

r - .combine=rbind 的 RcppParallel 等效项

我想使用parallelReduceof并行化一个 for 循环,RcppParalleljoin对结果很困难,因为每次迭代的并行输出的维度是先验未知的。使用foreachR 中的包,这可以通过foreach使用来完成.combine=rbind

一个人怎么能达到同样的效果parallelReduce?关键问题是编写Split构造函数和join运算符,因为先验未知矩阵的哪一行与input矩阵的哪一行相关联output

在我的用例中, 的维度output是先验已知的,因此输出矩阵的预分配(或不带 的构造WorkerSplit没有问题。

outputC++ 中的串行实现不是问题,因为可以简单地携带一个计数器来计算已经填充了多少行矩阵。如何并行完成这对我来说并不明显。

编辑

由于 F. Privé 问:这是我尝试改编RcppParallel 文档中的代码的方法

然后,可以这样称呼它