1

我使用 CUDA VS Wizard 创建了一个 VS 项目,并尝试使用 Thrust 构建一个 cuda 程序,测试程序非常简单:

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

我会得到一些编译错误,例如:

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”:不是“thrust::detail::device::cuda”的成员 1>C:\DOCUME~1\ADMINI~1\LOCALS~ 1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29):错误 C2065:'vectorize_from_shared_kernel__entry':未声明的标识符 1>C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample。 .stub.c(29) : error C2062: type 'int' unexpected 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):错误 C2059:语法错误:'<' 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\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38) 之前:致命错误 C1506:不可恢复的块范围错误 错误 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):错误 C2059:语法错误:'<' 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\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38) 之前:致命错误 C1506:不可恢复的块范围错误 错误 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):错误 C2059:语法错误:'<' 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\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38) 之前:致命错误 C1506:不可恢复的块范围错误 \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):错误 C2059:语法错误:'<' 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\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38) 之前:致命错误 C1506:不可恢复的块范围错误 \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):错误 C2059:语法错误:'<' 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\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38) 之前:致命错误 C1506:不可恢复的块范围错误 语法错误:'<' 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\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38) 之前:致命错误 C1506:不可恢复的块范围错误 语法错误:'<' 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\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38) 之前:致命错误 C1506:不可恢复的块范围错误

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

我正在使用 VS 2008、CUDA 2.3 和 Thrust 1.1。

4

1 回答 1

2

这是在 .cu 文件中吗(用 nvcc 编译)?推力代码应放在 .cu 文件中。

顺便说一句,我个人避免使用 CUDA VS 向导(部分原因是它不是由 NVIDIA 提供/支持的)并使用其他帖子中描述的策略。

于 2010-03-07T18:09:25.017 回答