Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “成员”;已被宣布为;CUDA和Eigen的误差_C++_Visual Studio 2010_Cuda_Eigen_Nsight - Fatal编程技术网

C++ “成员”;已被宣布为;CUDA和Eigen的误差

C++ “成员”;已被宣布为;CUDA和Eigen的误差,c++,visual-studio-2010,cuda,eigen,nsight,C++,Visual Studio 2010,Cuda,Eigen,Nsight,我只是CUDA和Nsight的初学者,希望利用GPU在线性代数运算方面的出色性能(例如CUBLAS)。我有很多自定义代码都是在的帮助下编写的,有很多矩阵乘法运算,所以我想让我的代码保持不变,只需在GPU上执行这些运算 我已经用VisualStudioNsight创建了一个示例项目,它工作得很好,但是当我添加 #include <Eigen/Dense> #包括 对于该项目,我有以下错误 1>------ Build started: Project: MatrixPerfo

我只是CUDA和Nsight的初学者,希望利用GPU在线性代数运算方面的出色性能(例如CUBLAS)。我有很多自定义代码都是在的帮助下编写的,有很多矩阵乘法运算,所以我想让我的代码保持不变,只需在GPU上执行这些运算

我已经用VisualStudioNsight创建了一个示例项目,它工作得很好,但是当我添加

#include <Eigen/Dense>
#包括
对于该项目,我有以下错误

1>------ Build started: Project: MatrixPerformanceCompare, Configuration: Debug Win32 ------
1>  Compiling CUDA source file kernel.cu...
1>  
1>  C:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"  -Ic:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include"  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o Debug\kernel.cu.obj "C:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare\kernel.cu" 
1>c:\cuda\progs\vs\sampleproject\matrixperformancecompare\include\eigen\src/Core/Block.h(102): error : "operator=" has already been declared in the current scope
1>c:\cuda\progs\vs\sampleproject\matrixperformancecompare\include\eigen\src/Core/Ref.h(122): error : "operator=" has already been declared in the current scope
1>c:\cuda\progs\vs\sampleproject\matrixperformancecompare\include\eigen\src/Core/products/Parallelizer.h(20): warning : variable "m_maxThreads" was set but never used
1>c:\cuda\progs\vs\sampleproject\matrixperformancecompare\include\eigen\src/Geometry/RotationBase.h(76): error : function template "Eigen::operator*(const Eigen::EigenBase<OtherDerived> &, const Eigen::Quaternion<_Scalar, _Options> &)" has already been defined
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.5.targets(592,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"  -Ic:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include"  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o Debug\kernel.cu.obj "C:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare\kernel.cu"" exited with code 2.
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========
1>----构建已启动:项目:MatrixPerformanceCompare,配置:调试Win32------
1> 正在编译CUDA源文件kernel.cu。。。
1>  
1> C:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare>“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\bin\nvcc.exe”-gencode=arch=compute\u 10,代码=\“sm\u 10,compute\u 10\”--使用本地环境--cl版本2010-ccbin“C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin”-Ic:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare\include-I“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include“-I”C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include“-G--keep dir Debug-maxregcount=0--machine 32--compiler-cudart static-G-DWIN32-D_Debug-D_控制台-D_MBCS-Xcompiler“/EHsc/W3/nologo/Od/Zi/RTC1/MDd”-o Debug\kernel.cu.obj”C:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare\kernel.cu”
1> c:\cuda\progs\vs\sampleproject\matrixperformancecompare\include\eigen\src/Core/Block.h(102):错误:“operator=”已在当前范围内声明
1> c:\cuda\progs\vs\sampleproject\matrixperformancecompare\include\eigen\src/Core/Ref.h(122):错误:“operator=”已在当前范围内声明
1> c:\cuda\progs\vs\sampleproject\matrixperformancecompare\include\eigen\src/Core/products/Parallelizer.h(20):警告:已设置变量“m\u maxThreads”,但从未使用过
1> c:\cuda\progs\vs\sampleproject\matrixperformancecompare\include\eigen\src/Geometry/RotationBase.h(76):错误:函数模板“eigen::operator*(const-eigen::EigenBase&,const-eigen::Quaternion&)”已定义
1> C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.5.targets(592,9):错误MSB3721:命令“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\bin\nvcc.exe”-gencode=arch=compute\u 10,code=\“sm\u 10,compute\u 10\”--使用本地环境--cl版本2010-ccbin“C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin”-Ic:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare\include-I“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include“-I”C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include“-G--keep dir Debug-maxregcount=0--machine 32--compiler-cudart static-G-DWIN32-D_Debug-D_控制台-D_MBCS-Xcompiler“/EHsc/W3/nologo/Od/Zi/RTC1/MDd”-o Debug\kernel.cu.obj”C:\CUDA\Progs\VS\SampleProject\MatrixPerformanceCompare\kernel.cu”已退出,代码为2。
======生成:0成功,1失败,1为最新,0已跳过==========

我知道这是一个与DECURE警卫相关的错误,但是在特征中的那些似乎是可以的,在简单C++项目中,相同特征源的代码编译得很好。


你能帮助我吗?

< P> C++代码的CUDA前端解析器不能在所有情况下正确地解析极其复杂的主机模板定义。它的工作是查看
.cu
文件中的代码,并尝试将必须由GPU工具链编译的代码从应该传递到主机编译器的代码中分离出来。将Boost和QT头导入
.cu
文件时会失败。我敢打赌,特征模板也会导致同样的问题


我知道的唯一解决方案是重构代码,将依赖模板的主机代码分离到扩展名为
.cc
的不同文件中。CUDA前端从未在
.cc
文件中看到任何代码,因此问题消失。实际上,这种代码拆分并不是一个真正的问题,因为主机模板代码实际上无法在CUDA GPU代码中使用,最坏的情况下,您可能需要一个小包装函数或额外的抽象级别来保持GPU和主机代码分离。

谢谢,这就是解决方案!我刚刚将
source.cc
文件添加到我的项目中,并将Eigen代码移到了那里。同样在开始时,我将
main
函数保留在.cu文件中,它没有编译,但当我将
main
也移动到.cc文件时,它就像一个charmGod一样工作,这就是解决方案。我花了好几个小时在这上面!