我正在尝试并行化个人的循环计算适应度值。对于整个算法,我使用的是 Rcpp,但适应度函数是从 R 传递的。
所以我正在尝试做这样的事情:
#pragma omp parallel for
for (int i = 0; i < population.size(); i++)
{
population[i].computeFitness(FitnessFunction);
}
where FitnessFunction
isRcpp::Function
和 computeFitness 只是类函数,本质上是将计算值分配给成员变量。
void computeFitness(Rcpp::Function optFunction)
{
this->_fitness = Rcpp::as<double>(optFunction(this->_coords));
}
但这会崩溃,因为据我所知,R 是单线程的,我不能在并行部分中使用任何底层 R 实例。
那么有什么方法可以转换Rcpp::Function
为std::function
, functor 或类似的东西吗?有没有其他方法可以将函数从 R 传递到 Rcpp,这将允许我并行计算这个适应度值?
整个工作是为 CRAN 创建飞蛾搜索算法的并行优化包。
c++ 中基本相同的代码std::function
效果很好。Rcpp 代码可以在没有并行的情况下正常工作。