如何在Thrust在GPU上使用的仿函数中使用boost.compute函数?

时间:2019-05-02 14:55:02

标签: c++ boost gpgpu thrust boost-compute

我正在尝试在推力算法中使用boost.math提供的特殊功能。

基本上,我想做一个转换

  thrust::device_vector<double> in(1000);
  thrust::device_vector<double> out(1000);

  thrust::transform(in.begin(), in.end(), out.begin(), myfunctor());

其中myfunctor()

给出
#include <boost/math/special_functions/ellint_1.hpp>
.
.
.
struct myfunctor {
  __host__ __device__
  double operator()(double k) {
    return boost::math::ellint_1(sqrt(k));
  }
};

在函子中调用warning: calling a __host__ function from a __host__ __device__ function is not allowed的那一行,我一直得到ellint_1

我是在做错什么还是boost.math不适合GPGPU使用(因为我读过的书,我肯定以为是)?

1 个答案:

答案 0 :(得分:0)

__device__限定函数内调用的任何函数也必须是__device__限定函数。而且boost::math::ellint_1()没有这样的限定词。

请参阅CUDA编程指南B.1。 -函数执行空间说明符 https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#function-declaration-specifiers

boost :: math与boost :: compute无关,后者专注于类似STL的通用算法和容器。