Rcpp ::并行的功能部分

问题描述 投票:0回答:1

我试图并行化循环计算个人的健身价值。对于这整个算法,我使用的是Rcpp,但是从R传递了适应度函数。

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

#pragma omp parallel for
  for (int i = 0; i < population.size(); i++)
  {
    population[i].computeFitness(FitnessFunction);
  }

其中FitnessFunctionRcpp::Function,computeFitness只是类函数,主要是将计算值赋给成员变量。

void computeFitness(Rcpp::Function optFunction)
  {
    this->_fitness = Rcpp::as<double>(optFunction(this->_coords));
  }

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

那么有没有办法将Rcpp::Function转换为std::function,functor或类似的东西?有没有其他方法将函数从R传递给Rcpp,这将允许我并行计算这个适应值?

这整个工作是为CRAB创建Moth搜索算法的并行优化包。

基本上c ++与std::function相同的代码运行良好。 Rcpp代码在没有并行的情况下工作正常。

r rcpp rcppparallel
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.