2010-03-07 132 views
1

我使用CUDA VS向导创建VS项目,并尝试构建使用推力CUDA程序,测试程序是相当简单:Thrust(CUDA库)编译错误,如“'vectorize_from_shared_kernel__entry':不是'thrust :: detail :: device :: cuda'的成员”

// ignore headers 
int main(void) 
{ 
thrust::device_vector<double> X; 
X.resize(100); 
} 

我将有像一些编译错误: 1> C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample .cudafe1.stub.c(29):错误C2039:'vectorize_from_shared_kernel__entry':不是'thrust :: detail :: device :: cuda'的成员1> C:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜 1 \ Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29):错误C2039:'vectorize_from_shared_kernel__entry':不是成员'推力::详细::设备:: cuda' 1> C:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜1 \ Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29):error C2065:' vectorize_from_shared_kernel__entry”:未声明的标识符 1> C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29):错误C2062:类型 'INT' 意外 1> C^:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜1 \ Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29):error C2039:'vectorize_from_shared_kernel__entry':不是'thrust :: detail :: device: :cuda' 1> C:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜1 \ Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29):错误C2039:'vectorize_from_shared_kernel__entry':不是'推力:: detail:device :: cuda' 1> C:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜1 \ Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29):error C2065:'vectorize_from_ shared_kernel__entry':未声明的标识符 1> C:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜1 \ Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29):错误C2062:键入'int'意外 1> C :\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜1 \ Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36):错误C2143:语法错误:缺少';'在'<' 1> C:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜1 \ Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36):错误C2182:'__wrapper__device_stub_vectorize_from_shared_kernel':非法使用类型'void ' 1> C:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜1 \ Temp \ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36):错误C2988:无法识别的模板声明/定义 1> C:\ DOCUME〜 1 \ ADMINI〜1 \ LOCALS〜1 \ Temp \ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36):error C2059:syntax error:'<' 1> C:\ DOCUME〜1 \ ADMINI〜1 \ LOCALS〜 1 \ Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38):错误C2143:语法错误:缺少';'之前 '}' 1> C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38):致命错误C1506:不可恢复的块作用域错误

然而,如果我注释掉第二个语句“X.resize(100);”,它可以成功构建。 所以我猜推力设置,建立规则设置和CUDA设置是正确的。你知道为什么会出现这些编译错误吗?

我使用VS 2008,CUDA 2.3和Thrust 1.1。

回答

2

这是一个.cu文件(用nvcc编译)?推力码应放在.cu文件中。顺便说一句,我个人避免使用CUDA VS向导(部分原因是它不是由NVIDIA提供/支持的),并使用this other post中描述的策略。