R-使用RCPP时如何并行C 代码
r - How to parallelise C++ code when using Rcpp?
我有一个R脚本,该脚本通过sourceCpp("prog.cpp")
编译C 代码,然后调用从prog.cpp
导出的函数go
。然后,此C 代码会给R回到R和(很长一段时间后(,然后终于返回结果。
我认为我应该开始利用笔记本电脑有4个内核的事实。我想平行于事物。但是,在遇到意外问题之前,我可能会问什么是支持的,什么是不支持的?
可以通过几种方式处理任务:
- (如果可能的话,这是我想做的(在R中调用
clusterApply
。然后,clusterApplied
的函数将调用此C 函数,这意味着此函数将在4次并行称为4次。- 该C 函数的所有4个实例都可以彼此隔离吗?
- 特别是,
prog.cpp
使用的全局变量会在4个孤立的实例中或仅一个实例吗?(不要向我扔石头...我知道最好避免全球范围( - 当C 代码调用R函数时,我会遇到问题,然后从Cran中调用函数?
- 如果不是:在
clusterApply
内部调用sourceCpp("prog.cpp")
帮助吗?(与go
返回所需的长时间相比,汇编时间可以忽略不计(
- (从我阅读的内容中,这是行不通的,但无论如何,让我们询问这一点(:我可以只从R代码中调用
go
(就像我现在这样做一样(,并在内部创建4个线程C 代码?- 我注意到,即使任务在计算上很昂贵,也倾向于不执行此操作,这使我认为这样做可能不支持
- 尤其是,当螺纹C 代码回到R时,我会遇到问题吗?(如果这很重要,则C 代码调用的R函数将从Cran中调用包装的函数(
我搜索了谷歌,我知道存在像rcppparallal这样的东西。但是,引用其主页:
API限制
您在平行工人中编写的代码不应以任何方式调用R或RCPP API。
然后我想我不能使用rcppparallal>喜欢并行化它们;因为clusterApply
允许我。
使用clusterApply
时,实际上正在使用(在您的情况下(4个不同的R进程。因此,是的,C 功能,任何全局变量等都将是分开的。即使从C 回电也是安全的,因为每个C 功能都有自己的R进程可以与之通信。它进一步进一步:您应该通过clusterApply
调用sourceCpp
,因为否则不同的R进程将不具有首先调用的C 函数。替代方案是建造一个包裹。在C 中并行化(通过RCPPPARALALE,OPENMP或std::thread
(在您的情况下是不可能的,因为您想从C 回电。顺便说一句,如果可能的话,我会尽力摆脱这些呼叫。
虽然您的FIR方法原则上应起作用,但尚不清楚您将获得太多的性能增益,因为并行计算带有其自己的Cavetas集(内存消耗,通信开销...(
相关文章:
- 对于openMP来说,有什么建议可以将以下代码与openMP并行
- 并行和顺序运行代码时会产生不同的结果
- R-使用RCPP时如何并行C 代码
- 使用 OPENMP 并行化 C++ 代码
- 有人能帮我把这个C++代码并行化吗
- 在C 程序中并行化C代码模块
- 从并行线程在主 Maya 线程上执行代码
- 用于并行化代码的 TBB 教程/文档
- 令人尴尬的并行代码的性能较低
- 如何制作更高级别的并行代码/脚本
- 使用 Boost::测试并行代码
- OpenMP并行代码运行速度较慢
- Visual Studio中的Cuda并行代码生成
- 如何使用MPI混合串行和并行代码
- 标量代码和并行代码的不同行为
- 没有多线程的c++套接字不同步/并行代码
- 为依赖于先前值的矩阵运行并行代码
- OpenMP -在并行代码中运行并行代码
- 并行代码故障排除
- 使用 OpenMP 并行C++代码不会即兴发挥性能