C++ CUDA推力::设备|类向量|错误
我是CUDA和推力图书馆的新手。我已经看了很多关于我的问题的例子和问题,但是,我无法转移解决方案 我有一个类C++ CUDA推力::设备|类向量|错误,c++,cuda,thrust,C++,Cuda,Thrust,我是CUDA和推力图书馆的新手。我已经看了很多关于我的问题的例子和问题,但是,我无法转移解决方案 我有一个类单元格,它应该包含一个树的向量(另一个类) 这是我的单元格.h #pragma once #include <thrust/host_vector.h> #include <thrust/device_vector.h> #include <thrust/generate.h> #include <thrust/reduce.h> #inc
单元格
,它应该包含一个树的向量
(另一个类)
这是我的单元格.h
#pragma once
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/reduce.h>
#include <thrust/functional.h>
#include "Tree.h"
class Cell {
int idx;
float xmid, ymid;
float dx, dy;
int nTrees;
thrust::host_vector<Tree> trees;
// thrust::device_vector<Tree> trees; <-- this is what I want
public:
Cell();
Cell(int, float, float, float, float, int);
void set(int, float, float, float, float, int);
void add(float, float, float);
void add(float);
void add();
virtual ~Cell();
void print();
void copyToDev();
};
这两个类都在扩展名为.cu
的文件中实现。在mymain.cu
中,我现在想初始化一个单元格C
。鉴于上面的代码,我能够编译代码(使用Visual Studio 2013,我以前从未使用过,因此这可能是我的另一个问题)。
但是,如果我没有弄错的话,使用host\u vector
我不会使用我的GPU。我想要的是使用device\u vector
但是如果我用device\u vector
而不是host\u vector
编译代码,我会得到以下错误
1>------ Build started: Project: WTM, Configuration: Debug Win32 ------
1> Cell.cu
1>c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\system\detail\error_category.inl(102): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 12.0\vc\include\string.h(168) : see declaration of 'strerror'
1>c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\system\cuda\detail\bulk\detail\pointer_traits.hpp(55): warning C4800: 'unsigned int' : forcing value to bool 'true' or 'false' (performance warning)
1>c:\users\thomas\documents\visual studio 2013\projects\wtm\wtm\cell.cu(40): warning C4018: '<' : signed/unsigned mismatch
1>c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\system\cuda\detail\for_each.inl(84): error C2027: use of undefined type 'thrust::detail::STATIC_ASSERTION_FAILURE<false>'
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\for_each.inl(71) : see reference to function template instantiation 'RandomAccessIterator thrust::system::cuda::detail::for_each_n<thrust::system::cuda::detail::tag,InputIterator,Size,UnaryFunction>(thrust::system::cuda::detail::execution_policy<thrust::system::cuda::detail::tag> &,RandomAccessIterator,Size,UnaryFunction)' being compiled
1> with
1> [
1> RandomAccessIterator=thrust::device_ptr<Tree>
1> , InputIterator=thrust::device_ptr<Tree>
1> , Size=int
1> , UnaryFunction=thrust::detail::allocator_traits_detail::gozer
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\allocator\destroy_range.inl(136) : see reference to function template instantiation 'InputIterator thrust::for_each_n<DerivedPolicy,Pointer,Size,thrust::detail::allocator_traits_detail::gozer>(const thrust::detail::execution_policy_base<DerivedPolicy> &,InputIterator,Size,UnaryFunction)' being compiled
1> with
1> [
1> InputIterator=thrust::device_ptr<Tree>
1> , DerivedPolicy=thrust::system::cuda::detail::tag
1> , Pointer=thrust::device_ptr<Tree>
1> , Size=int
1> , UnaryFunction=thrust::detail::allocator_traits_detail::gozer
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\allocator\destroy_range.inl(157) : see reference to function template instantiation 'void thrust::detail::allocator_traits_detail::destroy_range<Allocator,Pointer,Size>(Allocator &,Pointer,Size)' being compiled
1> with
1> [
1> Allocator=thrust::device_malloc_allocator<Tree>
1> , Pointer=thrust::device_ptr<Tree>
1> , Size=int
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\contiguous_storage.inl(256) : see reference to function template instantiation 'void thrust::detail::destroy_range<thrust::device_malloc_allocator<T>,Base,int>(Allocator &,Pointer,Size)' being compiled
1> with
1> [
1> T=Tree
1> , Base=thrust::device_ptr<Tree>
1> , Allocator=thrust::device_malloc_allocator<Tree>
1> , Pointer=thrust::device_ptr<Tree>
1> , Size=int
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\contiguous_storage.inl(255) : while compiling class template member function 'void thrust::detail::contiguous_storage<T,Alloc>::destroy(thrust::detail::normal_iterator<thrust::device_ptr<T>>,thrust::detail::normal_iterator<thrust::device_ptr<T>>)'
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\vector_base.inl(474) : see reference to function template instantiation 'void thrust::detail::contiguous_storage<T,Alloc>::destroy(thrust::detail::normal_iterator<thrust::device_ptr<T>>,thrust::detail::normal_iterator<thrust::device_ptr<T>>)' being compiled
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\vector_base.inl(44) : while compiling class template member function 'thrust::detail::vector_base<T,Alloc>::vector_base(void)'
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\device_vector.h(67) : see reference to function template instantiation 'thrust::detail::vector_base<T,Alloc>::vector_base(void)' being compiled
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\device_vector.h(54) : see reference to class template instantiation 'thrust::detail::vector_base<T,Alloc>' being compiled
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\users\thomas\documents\visual studio 2013\projects\wtm\wtm\cell.h(27) : see reference to class template instantiation 'thrust::device_vector<Tree,thrust::device_malloc_allocator<T>>' being compiled
1> with
1> [
1> T=Tree
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
减少到最小的部分。如果缺少进一步的信息,请告诉我。如果您查看具有
推力::系统::cuda::细节::定义的文件,如错误消息所示,您将发现以下注释():
确保你真的使用了nvcc
来编译你的程序,而不仅仅是试图在一个普通的c++
项目中包含推力,这个项目是用visual studio的cl
编译的。你是在创建一个Cell somewere的设备向量吗?你需要提供一个MCVE。您正在请求有关编译错误的帮助,但您甚至还没有显示导致错误的代码行。您能否在Visual Studio Nsight中详细说明如何执行此操作?事实证明,这就是问题所在。然而,我现在只能通过命令行在linux上编译它,而不能在VS中编译,因为我不知道如何配置VS以使用nvcc。
1>------ Build started: Project: WTM, Configuration: Debug Win32 ------
1> Cell.cu
1>c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\system\detail\error_category.inl(102): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 12.0\vc\include\string.h(168) : see declaration of 'strerror'
1>c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\system\cuda\detail\bulk\detail\pointer_traits.hpp(55): warning C4800: 'unsigned int' : forcing value to bool 'true' or 'false' (performance warning)
1>c:\users\thomas\documents\visual studio 2013\projects\wtm\wtm\cell.cu(40): warning C4018: '<' : signed/unsigned mismatch
1>c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\system\cuda\detail\for_each.inl(84): error C2027: use of undefined type 'thrust::detail::STATIC_ASSERTION_FAILURE<false>'
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\for_each.inl(71) : see reference to function template instantiation 'RandomAccessIterator thrust::system::cuda::detail::for_each_n<thrust::system::cuda::detail::tag,InputIterator,Size,UnaryFunction>(thrust::system::cuda::detail::execution_policy<thrust::system::cuda::detail::tag> &,RandomAccessIterator,Size,UnaryFunction)' being compiled
1> with
1> [
1> RandomAccessIterator=thrust::device_ptr<Tree>
1> , InputIterator=thrust::device_ptr<Tree>
1> , Size=int
1> , UnaryFunction=thrust::detail::allocator_traits_detail::gozer
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\allocator\destroy_range.inl(136) : see reference to function template instantiation 'InputIterator thrust::for_each_n<DerivedPolicy,Pointer,Size,thrust::detail::allocator_traits_detail::gozer>(const thrust::detail::execution_policy_base<DerivedPolicy> &,InputIterator,Size,UnaryFunction)' being compiled
1> with
1> [
1> InputIterator=thrust::device_ptr<Tree>
1> , DerivedPolicy=thrust::system::cuda::detail::tag
1> , Pointer=thrust::device_ptr<Tree>
1> , Size=int
1> , UnaryFunction=thrust::detail::allocator_traits_detail::gozer
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\allocator\destroy_range.inl(157) : see reference to function template instantiation 'void thrust::detail::allocator_traits_detail::destroy_range<Allocator,Pointer,Size>(Allocator &,Pointer,Size)' being compiled
1> with
1> [
1> Allocator=thrust::device_malloc_allocator<Tree>
1> , Pointer=thrust::device_ptr<Tree>
1> , Size=int
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\contiguous_storage.inl(256) : see reference to function template instantiation 'void thrust::detail::destroy_range<thrust::device_malloc_allocator<T>,Base,int>(Allocator &,Pointer,Size)' being compiled
1> with
1> [
1> T=Tree
1> , Base=thrust::device_ptr<Tree>
1> , Allocator=thrust::device_malloc_allocator<Tree>
1> , Pointer=thrust::device_ptr<Tree>
1> , Size=int
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\contiguous_storage.inl(255) : while compiling class template member function 'void thrust::detail::contiguous_storage<T,Alloc>::destroy(thrust::detail::normal_iterator<thrust::device_ptr<T>>,thrust::detail::normal_iterator<thrust::device_ptr<T>>)'
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\vector_base.inl(474) : see reference to function template instantiation 'void thrust::detail::contiguous_storage<T,Alloc>::destroy(thrust::detail::normal_iterator<thrust::device_ptr<T>>,thrust::detail::normal_iterator<thrust::device_ptr<T>>)' being compiled
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\detail\vector_base.inl(44) : while compiling class template member function 'thrust::detail::vector_base<T,Alloc>::vector_base(void)'
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\device_vector.h(67) : see reference to function template instantiation 'thrust::detail::vector_base<T,Alloc>::vector_base(void)' being compiled
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\program files\nvidia gpu computing toolkit\cuda\v7.0\include\thrust\device_vector.h(54) : see reference to class template instantiation 'thrust::detail::vector_base<T,Alloc>' being compiled
1> with
1> [
1> T=Tree
1> , Alloc=thrust::device_malloc_allocator<Tree>
1> ]
1> c:\users\thomas\documents\visual studio 2013\projects\wtm\wtm\cell.h(27) : see reference to class template instantiation 'thrust::device_vector<Tree,thrust::device_malloc_allocator<T>>' being compiled
1> with
1> [
1> T=Tree
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
#include "Cell.h"
int main(void)
{
Cell D(0, 0.5, 0.5, 1, 1);
D.print();
return 0;
}
// we're attempting to launch a kernel, assert we're compiling with nvcc
// ========================================================================
// X Note to the user: If you've found this line due to a compiler error, X
// X you need to compile your code using nvcc, rather than g++ or cl.exe X
// ========================================================================