问题标签 [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 回答
114 浏览

rcpp - Rcpp 中的嵌套命名空间

我有一个工作 R 包,包括必要的 R/Cpp 工作。我的问题更多是使用嵌套命名空间时的“良好实践”。

目前,我的包裹有;1) 成本函数,2) 优化函数,3) 调用优化函数的并行工作者。目前,worker 是在包含导出(到 R)cpp 函数的 .cpp 文件中定义的。优化函数有一个命名空间和头文件,成本函数有它们自己的头文件/命名空间文件。所有优化函数都调用成本函数,因此它们包含“成本函数”标头并使用“成本函数”命名空间。

由于并行运行并调用工作人员的 .cpp 文件大约为 700 行,我正在考虑将工作人员移动到单独的命名空间和头文件。这些包括“优化”标头并使用“优化”命名空间。

这让我开始思考,我真的需要 3 个嵌套的命名空间吗?最好不要有 3 个命名空间,每个命名空间有 2-4 个函数。此外,这些函数被/将始终按 parallel_worker/optimize_function/cost_function 的顺序调用,每个函数都位于不同的命名空间/标头中。

0 投票
1 回答
80 浏览

r - Rcpp::Function in parellel for section

我正在尝试并行化个人的循环计算适应度值。对于整个算法,我使用的是 Rcpp,但适应度函数是从 R 传递的。

所以我正在尝试做这样的事情:

where FitnessFunctionisRcpp::Function和 computeFitness 只是类函数,本质上是将计算值分配给成员变量。

但这会崩溃,因为据我所知,R 是单线程的,我不能在并行部分中使用任何底层 R 实例。

那么有什么方法可以转换Rcpp::Functionstd::function, functor 或类似的东西吗?有没有其他方法可以将函数从 R 传递到 Rcpp,这将允许我并行计算这个适应度值?

整个工作是为 CRAN 创建飞蛾搜索算法的并行优化包。

c++ 中基本相同的代码std::function效果很好。Rcpp 代码可以在没有并行的情况下正常工作。

0 投票
2 回答
306 浏览

r - 在 Rcpp 中对矩阵的所有列或所有行进行快速选择的多线程最快方法 - OpenMP、RcppParallel 或 RcppThread

我正在使用此 Rcpp 代码对向量进行快速选择,即在 O(n) 时间内从向量中获取第 k 个最大元素(我将其保存为qselect.cpp):

我将其用作计算所需百分位数的快速方法。例如

[这可能看起来已经很快,但我需要在我的应用程序中执行数百万次]

现在我想修改这个 Rcpp 函数,以便它对 R 矩阵的所有列或所有行执行多线程快速选择,并将结果作为向量返回。由于我是 Rcpp 的新手,我想要一些建议,但关于哪个框架可能是最快的并且最容易编码(它必须很容易跨平台工作,我需要对 nr 进行良好的控制要使用的线程数)。使用OpenMPRcppParallel还是RcppThread?甚至更好 - 如果有人可以展示一种快速而优雅的方式来做到这一点?

0 投票
2 回答
98 浏览

r - 命名空间中的并行工作者

此示例是此较早帖子的后续示例。我正在尝试将 Parallel Worker 移动到它自己的 cpp 文件并在头文件中声明它。

在公共工作者中调用“mypackage”函数

两个错误如下:1)变量类型'ExampleInternal::PARALLEL_WORKER'是一个抽象类

在我不可重现的示例中:2)错误:Parallel_worker.cpp 文件中的“ExampleInternal::PARALLEL_WORKER{”行上的预期不合格 ID。

现在代码如下所示:

ExampleInternal.h

Parallel_Worker.cpp

Parallel_func.cpp

0 投票
1 回答
46 浏览

rcpp - 将函数指针添加到 Parallel Worker

以Parallel Worker in namespace为例,我想在 Parallel Worker 中使用函数指针。

下面的代码会产生如下错误:“无法初始化类型为 (**) 且返回值为 (*) 的新值”

ExampleInternal.h

myfuncA.cpp

myfuncB.cpp

Parallel_worker.cpp

Parallel_func.cpp

在 mac 上,您可能还需要一个 makevars 来指定 c++11:

0 投票
1 回答
176 浏览

lambda - 如何在 C++ 仿函数中传递 lambda 函数?

我是 Rccp 和 Rccpparallel 的新手,我很难弄清楚我在哪里犯了错误。所以我想创建一个在矩阵中并行执行功率元素的函数。我正在关注 rcppParallel 示例。

在一个核心上,代码可以编译并且工作正常,但是当我尝试将 n 传递给下面的仿函数时,出现以下错误。

如果我在下面的函子中交换 n ,它可以编译并正常工作。我错过了什么?代码:

lambdaPower.cpp

非常感谢。

0 投票
0 回答
86 浏览

r - 将 RMatrix::Column 转换为 NumericVector

你如何将一个RMatrix::Column转换成一个NumericVectorin RcppParallel

例如

错误:没有匹配函数调用'as' NumericVector b(Rcpp::as(a0));

0 投票
1 回答
133 浏览

r - RcppParallel 结果随多线程变化

我是 Rcpp 和 RcppParallel 的新手。我正在尝试使用 RcppParallel 来优化我的 R 代码,现在我正在制作一些玩具代码来研究它们。现在我做了一个 RcppParallel 代码,结果和我想的不一样。每当我尝试该功能时,结果都会发生变化。

这是我的代码

这是 Rcpp 代码

当线程数为 4 时,结果如下所示:

而当我使用单线程时,我得到了结果:

谢谢你。

0 投票
0 回答
268 浏览

r - 使用 RcppParallel 中止 R 会话

我正在尝试使用 Rcpp 和 RcppParallel 构建一个实现 Dijkstra 算法的 R 包。你可以在这里看到我的作品。现在我想添加一个新功能并且出现了一个奇怪的行为。当我通过 sourceCpp 函数编译这个函数并尝试它时,它运行良好,但是当我用这个函数重建包时,当我调用该函数时,R 几乎立即崩溃。当我通过 Rstudio(清理和重建)构建包时,我没有错误。
该算法是双向的 Dijkstra,因此它使用两个图(正向和反向)和来自 STL 的两个优先级队列。图只是成对向量的向量。

这是代码(对不起,我不知道如何简化它):

我知道输入应该是 RVector 或 RMatrix,但不幸的是,有向图不能以这种形式简化而不会降低效率。std::vectors 在内存中是连续的,对吗?

我注意到,如果我删除一个 if 语句(例如所有向后搜索),它就会起作用。

如果您想查看包中实现的其他功能,可以查看我的 github 存储库。所有其他功能都运行良好。
这是 Makevars 文件:

Makevars.win 文件:

和说明文件:

那么我做错了什么?
为什么该函数与 sourceCpp 函数一起使用而不是在包中?

编辑:根据@thc,我的实现不是线程安全的,所以有没有办法以安全的方式重写这个算法?知道优先级队列在这里是强制性的。

任何帮助表示赞赏!

0 投票
1 回答
81 浏览

r - 使用 Rcpp 不能更快地获取 all()

由于我对 Rcpp 有点陌生,所以我可能在这里遗漏了一个技巧。

让我们创建两个矩阵:

我现在想要完成以下工作:

然后我为 all() 创建了一个 Rcpp 版本,希望提高速度,定义为:

使用 all_C 检查速度,它被证明更慢:

麻烦的是,all_C() 比 all() 慢,所以我怀疑 Test2() 的缓慢速度需要更好的 all_C 调用以及在上面的示例中避免应用的方法。

我尝试使用这个答案在 Rcpp 中重写应用程序,但是使用这个 Rcpp 应用程序函数会使它变得更慢。

关于如何使用 Rcpp 提高 Test1() 速度的任何想法?