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

thrust copy_if: incomplete type is not allowed

本文关键字:copy if 用不完 类型 不允许      更新时间:2023-10-16

我正在尝试使用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/地方/cuda/include/推力/系统/细节/一般/memory.inl (40):错误:不允许使用不完整的类型

完整的错误信息

如果我只是使用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());

您将原始指针与适当的推力设备指针混合在一起,这会导致问题。