问题标签 [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 投票
1 回答
279 浏览

c++ - 如何使用 RcppParallel 创建 Rcpp::CharacterMatrix 的线程安全包装?

我有一个任务,我需要处理一个大的字符串矩阵(数百万行,数百列)。每行操作都是独立的。因此,我想利用一些并行计算来提高整个项目的速度。

如果我myWorker为数字矩阵构建,如下所示,我能够编译代码而不会出错

但是,当我将输入矩阵和初始化设置为使用时 Rcpp::CharacterMatrix,会出现编译错误。

我试过的组合myWorker(const Rcpp::NumericMatrix input

指针是个坏主意。其他选项会导致上述常见错误。

这里提出了一个非常相似的问题 。

有没有一种简单的方法来包装一个字符矩阵Rcpp::NumericMatrixRcppParallel::RMatrix线程安全工作?

编辑

有关任务的更多详细信息:

imput矩阵由 ICD-9-CM 或 ICD-10-CM 代码组成,需要将其与代码集进行比较以确定分类。有数百万行、数百列和大约十几个分类。

纯 R 中的一个小例子是:

icd_codes可以并行评估对象的每一行。由于我有上述工作的单线程 C++ 版本,我希望使用 RcppParallel 来提高工作的整体速度,并且至关重要的是,以尽可能接近操作系统独立的方式这样做。我的工作组由 Windows、OSX 和 Linux 用户组成。

0 投票
2 回答
289 浏览

c++ - 工作程序中对自定义函数的未定义引用(C++ 和 RcppParallel)

我是 C++ 编程的新手,试图通过 R 来试验 Rcpp。我创建了一个函数来从字符串中生成所有可能的 k-mer。它以它的串行形式运行良好:

但是,当我尝试在并行实现中使用此函数时(使用 RcppParallel),代码如下:

它无法编译,给出:未定义的引用 p_cpp_kmer::cpp_kmer(std::string, int)'错误。

我知道这与声明/引用 cpp_kmer 有关,但我只是不知道在哪里/如何适当地这样做(由于我缺乏 C++ 知识)。

非常感谢您提前。

0 投票
0 回答
129 浏览

c++ - RcppParallel 和 C++。结果不一致

我一直在玩 RcppParallel 并编写了一个相当简单的示例来弄清楚事情是如何工作的。代码如下所示。

函数float pdf(double x, double sigma)计算均值为 0 和标准差为 sigma 的高斯分布的缩放版本。

Struct_1 是一个结构,它创建一个工作人员来执行一些计算。我填充了一个矩阵来找出为什么某些事情不能正常工作。

void Struct_check()执行计算。

该功能似乎有效,但时不时地无法按预期工作。我认为这与用于在函数 pdf 中执行计算的类型有关!

示例运行显示在代码下方。

我将不胜感激任何帮助!

从 Rstudio 内部运行。如果有问题,我正在运行 OS X El Capitan。

当评估-1.4482以生成以下行0.228941 0.338113 0.0591801 0.618557 0.591026 0.872861 0.152777 1.61666 时会发生错误

在 R 检查中我得到:

0 投票
0 回答
223 浏览

r - 是否可以将 RcppParallel 与 Eigen 的 SparseMatrix 一起使用?

我正在尝试移植一个函数,该函数使用 RcppEigen 将稀疏矩阵中的所有非零条目转换为与 RcppParallel 并行运行,但我无法让它工作。

即使用此来源:

这个输入:

调用 serial_test 有效:

但是 para_test 什么也没做,即使它运行良好:

是否可以将 RcppParallel 与 Eigen 的 SparseMatrix 类一起使用?

0 投票
1 回答
396 浏览

c++ - RcppParallel 并行化距离计算:segfault

我有一个矩阵,我想计算第i行和每隔一行之间的距离(比如说欧几里得)(即我想要成对距离矩阵的第i行)。

使用 Rcpp 的顺序方式是上面写的函数“row_dist”。然而我想使用的矩阵非常大,所以我想并行化它。但是后来我会遇到一个我不太明白为什么的段错误。要触发错误,您可以运行以下代码:

在此处输入图像描述

有人可以给我一些关于我做错了什么的提示吗?在此先感谢您的时间!

==================================================== ======================

编辑:

我需要计算的距离是动态时间扭曲距离。我如上所述实现了它。然而在运行时,它会给出一个“堆栈不平衡”的警告。并且运行几次后会出现段错误。我想知道现在有什么问题。

为了触发这个问题,我做了:

0 投票
1 回答
323 浏览

r - 如何在 RcppParallel 中选择 RMatrix 的行或列

我需要与RcppParallel::RMatrix. 以前我Rcpp只工作过。但现在RcppParallel我需要一份文件,比如Rcpp拥有的东西。

例如

IRcpp::NumericMatrix我们可以选择带有占位符“ _”的行或列,如下所示:

但我想知道如何做同样的事情RcppParallel::RMatrix

感谢您的帮助。

0 投票
0 回答
78 浏览

r - 我的 Rcpp 代码延迟显示打印的消息

我有一个 Rcpp 代码,其中有一条消息要打印为:

每100次迭代后“迭代次数为---”。为此,我使用了代码:

此代码的问题在于它延迟显示消息并在程序结束后显示所有消息。我该如何解决这个问题?

0 投票
1 回答
808 浏览

r - 两个形状之间的欧几里得距离矩阵性能

我遇到的问题是我必须计算形状之间的欧几里得距离矩阵,范围从 20,000 到 60,000 个点,这会产生 10-20GB 的数据量。我必须运行这些计算中的每一个数千次,因此 20GB x 7,000(每个计算都是不同的点云)。形状可以是 2D 或 3D。

已编辑(更新的问题)

  1. 有没有更有效的方法来计算前向和后向距离而不使用两个单独的嵌套循环?

    我知道我可以保存数据矩阵并计算每个方向的最小距离,但是大点云存在巨大的内存问题。

  2. 有没有办法加快这个计算和/或清理代码以减少时间?

具有讽刺意味的是,我只需要矩阵来计算一个非常简单的度量,但它需要整个矩阵才能找到那个度量(平均豪斯多夫距离)。

数据示例,其中每一列代表形状的一个维度,每一行是形状中的一个点:

此代码计算坐标之间的欧几里得距离:

输出:

编辑:包括hausdorff平均代码

编辑(Rcpp 解决方案):这是我在 Rcpp 中实现它的尝试,因此矩阵永远不会保存到内存中。现在工作但很慢。

编辑(RcppParallel 解决方案):绝对比串行 Rcpp 解决方案更快,当然也比 R 解决方案快。如果有人有关于如何改进我的 RcppParallel 代码以减少一些额外时间的提示,将不胜感激!

使用大小为 37,775 和 36,659 的大点云的基准测试:

0 投票
1 回答
241 浏览

r - RcppParallel RVector push_back 或类似的东西?

我正在使用 RcppParallel 来加快一些计算。但是,我在这个过程中内存不足,所以我想将结果保存在并行循环中,这些结果通过了一些相关性阈值。下面是一个玩具示例来说明我的观点:

R代码将是:

注释掉的代码是我想做的。

也就是说,我想初始化一个空向量,并仅附加通过某个阈值的 y 值以及相关的 x 值。

在我的实际使用中,我正在计算一个 MxN 矩阵,所以内存是一个问题。

解决这个问题的正确方法是什么?

0 投票
1 回答
664 浏览

openmp - Rcpp Parallel 或 openmp 用于 matrixvector 产品

我正在尝试对 Conjugate gradient 的朴素并行版本进行编程,所以我从简单的 Wikipedia 算法开始,我想通过适当的并行版本更改dot-productsMatrixVector产品,Rcppparallel 文档有dot-product使用 parallelReduce 的代码;我想我会在我的代码中使用那个版本,但我正在尝试进行MatrixVector乘法运算,但与 R 基础相比我没有取得好的结果(没有并行)

并行矩阵乘法的一些版本:使用 OpenMP、Rcppparallel、串行版本、带有犰狳的串行版本和基准

基准

我目前的最后一次试验是使用带有 Rcppparallel 的 parallefor,但我遇到了内存错误,我不知道问题出在哪里

我注意到的是,当我使用 htop 在终端中检查处理器的工作方式时,我在 htop 中看到当我使用 R-base 应用常规矩阵向量乘法时,即使用所有处理器,所以矩阵乘法是否并行默认?因为理论上,如果是串行版本,则只有一个处理器应该工作。

处理器使用情况

如果有人知道哪个是更好的路径,OpenMP 或 Rcppparallel,或者其他方式,这给了我比 R-base 的明显串行版本更好的性能。

目前共轭梯度的序列号

我不知道在 R 中使用 BLAS,感谢 Hong Ooi 和 tim18,所以使用 option(matprod="internal") 和 option(matprod="blas") 的新基准

选项(matprod="blas")