我试图并行化循环计算个人的健身价值。对于这整个算法,我使用的是Rcpp,但是从R传递了适应度函数。
所以我想尝试做这样的事情:
#pragma omp parallel for
for (int i = 0; i < population.size(); i++)
{
population[i].computeFitness(FitnessFunction);
}
其中FitnessFunction
是Rcpp::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代码在没有并行的情况下工作正常。