gpt4 book ai didi

cuda - 如何在 Thrust 中将 make_transform_iterator() 与counting_iterator<> 和execution_policy 一起使用?

转载 作者:行者123 更新时间:2023-12-02 05:52:27 28 4
gpt4 key购买 nike

我尝试使用 MSVS2012、CUDA5.5、Thrust 1.7 编译此代码:

#include <iostream>
#include <thrust/iterator/counting_iterator.h>
#include <thrust/iterator/transform_iterator.h>
#include <thrust/find.h>

#include <thrust/execution_policy.h>

struct is_odd {
__host__ __device__ bool operator()(uint64_t &x) {
return x & 1;
}
};

int main() {
thrust::counting_iterator<uint64_t> first(0);
thrust::counting_iterator<uint64_t> last = first + 100;

auto iter = thrust::find(thrust::device,
thrust::make_transform_iterator(first, is_odd()),
thrust::make_transform_iterator(last, is_odd()),
true);

int bbb; std::cin >> bbb;
return 0;
}

并得到一个错误:

Error 1 error : incomplete type is not allowed C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust\detail\type_traits.h 413 1 HostDevice

如果我使用主机/设备向量而不是计数迭代器那么一切都可以。怎么了?

最佳答案

我稍微改变了你的仿函数定义,从此:

struct is_odd {
__host__ __device__ bool operator()(uint64_t &x) {

对此:

struct is_odd : public thrust::unary_function<uint64_t, bool> {
__host__ __device__ bool operator()(const uint64_t &x) {

它为我编译了。

关于cuda - 如何在 Thrust 中将 make_transform_iterator() 与counting_iterator<> 和execution_policy 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21280239/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com