Visual studio 2013中的c++和Cuda速度

C++ and Cuda speed in Visual studio 2013

本文关键字:Cuda 速度 c++ 中的 studio 2013 Visual      更新时间:2023-10-16

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

两个版本都按预期运行。CPU版本耗时约1500秒,GPU版本耗时约500秒。

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

然后我尝试在Empty c++项目和cuda项目中分别运行相同的c++代码(没有cuda),发现结果一致。cu版本需要600秒,cpp版本需要1500秒。

为什么会发生这种情况?这是来自不同的编译器或不同的初始环境VS项目?

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

通常,产生的性能差异非常小,在我的经验中高达10%左右。因此,这里报告的非常显著的性能差异要么是上述场景的极端异常值,要么(在我看来更有可能)是编译中的其他差异。

例如,不同的编译器选项,例如不同的优化级别,可以作为CUDA编译与独立编译的一部分传递给主机编译器。如果您在MSVS中启用了显示主机编译器调用细节的编译过程的详细日志,那么情况就会变得很明显。