首页 文章

推力copy_if:不允许使用不完整类型

提问于
浏览
1

我正在尝试使用 thrust::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());
}

我收到错误消息开头:

/usr/local/cuda/include/thrust/system/detail/generic/memory.inl(40):错误:不允许不完整的类型

full errormsg here

如果我只使用 copy 而不是 copy_if ,代码编译得很好,所以除了谓词 is_positive() 之外我统治了所有内容 .

提前感谢您提供有关如何调试此类推力错误的任何帮助或一般提示 .

e: 我正在使用Cuda 7.5

1 回答

  • 3

    对我来说,看起来你只是有一个错字 . 这个:

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

    应该是这样的:

    thrust::copy_if(t_inputArray, t_inputArray + size, t_outputArray, is_positive());
    

    你已经将原始指针与适当的推力设备指针混合在一起,这会造成麻烦 .

相关问题