我正在尝试将 std::bind2nd 与推力一起使用。我有使用主机指针编译的代码,但不是使用设备指针编译的。我认为它们是相同的,应该在这两种情况下都有效。
// this compiles fine
thrust::host_vector<unsigned int> h_vec(nwords);
thrust::host_vector<unsigned int> h_map(nwords);
thrust::host_vector<unsigned int> h_out1(nwords);
thrust::copy_if(h_vec.begin(), h_vec.end(), h_map.begin(), h_out1.begin(),
std::bind2nd(thrust::equal_to<int>(),1));
// this compilation fails with the error below
thrust::device_vector<unsigned int> d_map(nwords);
thrust::device_vector<unsigned int> d_vec(nwords);
thrust::device_vector<unsigned int> d_out1(nwords);
thrust::copy_if(d_vec.begin(), d_vec.end(), d_map.begin(), d_out1.begin(),
std::bind2nd(thrust::equal_to<int>(),1));
当我尝试使用 bind2nd 调用第二个 copy_if 时,出现以下错误:
/opt/cuda/include/thrust/detail/internal_functional.h(99): warning: calling a
__host__ function from a __host__ __device__ function is not allowed
是否有另一种方法可以将适配器用于推力中的二进制函数?我在网络上的示例中看到有人使用“thrust::bind2nd”,但我在我们的任何头文件中都找不到。