我使用CUDA VS Wizard创建了一个VS项目,我尝试使用Thrust构建一个cuda程序,测试程序非常简单:
// ignore headers
int main(void)
{
thrust::device_vector<double> X;
X.resize(100);
}
我会遇到一些编译错误,如:
1&GT; 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 GT; 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 GT; C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29) :错误C2065:'vectorize_from_shared_kernel__entry':未声明 识别码 1 GT; C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29) :错误C2062:输入'int'意外 1 GT; 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 GT; 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 GT; C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29) :错误C2065:'vectorize_from_shared_kernel__entry':未声明 识别码 1 GT; C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29) :错误C2062:输入'int'意外 1 GT; C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36) :错误C2143:语法错误:缺少';'在'&lt;'之前 1 GT; C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36) :错误C2182:'__ wrapper__device_stub_vectorize_from_shared_kernel': 非法使用'void'类型 1 GT; C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36) :错误C2988:无法识别的模板声明/定义 1 GT; C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36) :错误C2059:语法错误:'&lt;' 1 GT; C:\ DOCUME〜1 \ ADMINI〜1个\ LOCALS〜1个\温度/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38) :错误C2143:语法错误:缺少';'之前'}' 1 GT; 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。
答案 0 :(得分:2)
这是一个.cu文件(用nvcc编译)? Thrust代码应该放在.cu文件中。
顺便说一下,我个人避免使用CUDA VS向导(部分原因是NVIDIA不提供/支持)并使用this other post中描述的策略。