我正在尝试使用推力::: copy_if 来压缩带有谓词的数组以检查正数:

头文件:file.h:

struct is_positive
{
  __host__ __device__
  bool operator()(const int x)
  {
    return (x >= 0);
  }
};

和file.cu
#include "../headers/file.h"
#include <thrust/device_ptr.h>
#include <thrust/device_vector.h>
#include <thrust/copy.h>


void compact(int* d_inputArray, int* d_outputArray, const int size)
{
  thrust::device_ptr<int> t_inputArray(d_inputArray);
  thrust::device_ptr<int> t_outputArray(d_outputArray);
  thrust::copy_if(t_inputArray, t_inputArray + size, d_outputArray, is_positive());
}

我收到以以下内容开头的错误消息:



full errormsg here

如果我只使用 copy 而不是 copy_if ,则代码可以正常编译,因此我排除了谓词 is_positive()之外的所有内容。

预先感谢您提供有关调试此类推力错误的任何帮助或常规提示。

e:我正在使用Cuda 7.5

最佳答案

在我看来,您只是有错字。这个:

thrust::copy_if(t_inputArray, t_inputArray + size, d_outputArray, is_positive());
                                                   ^

应该是这样的:
thrust::copy_if(t_inputArray, t_inputArray + size, t_outputArray, is_positive());

您将原始指针与正确的推力设备指针混合在一起,这会造成麻烦。

关于c++ - 推力copy_if:不允许输入不完整的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40611810/

10-10 15:55