繁体   English   中英

Visual Studio 2013中的C ++和Cuda速度

[英]C++ and Cuda speed in Visual studio 2013

我在VS 2013上运行数据挖掘算法。已经实现了基于CPU的版本(带有.cpp文件)和基于GPU的版本(带有cuda 7.5 .cu文件)。

两个版本均按预期运行。 基于CPU的版本大约需要1500秒,而GPU版本需要500秒。

然后,我将这两个文件组合成单个.cu文件,并用一个标志控制运行哪个版本,然后我发现.cu文件中的CPU版本变得更快,而所有其他参数和代码保持不变,只花了大约600秒。

然后,我尝试分别在Empty C ++项目和CUDA项目中运行相同的C ++代码段(不带CUDA),并发现结果一致。 cu版本需要600秒,而cpp版本需要1500秒。

为什么会这样? 这是来自不同的编译器还是VS项目的不同初始环境?

nvcc传递给主机编译器的主机代码通常不是程序员编写的.cu文件的主机部分的.cu副本。 相反, nvcc会对代码进行解析和预处理,并将语义上相同的代码发送给主机编译器(查看作为nvcc编译轨迹一部分而生成的中间文件将揭示细节)。 由于主机编译器代码生成中的伪像,与.cpp文件中的独立版本相比,当将其合并到.cu文件中时,这可能导致主机代码运行得更快或更慢。

通常,由此产生的性能差异很小,以我的经验而言,最高可达10%。 因此,此处报告的非常明显的性能差异是上述情况的极端异常,或者(在我看来,更可能是)编译中存在其他差异。

例如,可以将不同的编译器选项(例如,不同的优化级别)作为CUDA编译与独立编译的一部分传递给主机编译器。 如果您在MSVS中启用了详细的编译过程日志,以显示主机编译器调用的详细信息,那么事实是否如此应该很明显。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM