CUDA nvcc慢主机代码

Posted

技术标签:

【中文标题】CUDA nvcc慢主机代码【英文标题】:CUDA nvcc slow host code 【发布时间】:2012-06-20 08:11:07 【问题描述】:

我在使用 nvcc 编译器时遇到问题。我发现使用 nvcc 4.2 编译的主机代码的运行速度比使用 g++ 4.4.6 编译的相同代码慢 5 倍。我正在使用 NVIDIA SDK Makefile 模板来编译发布配置中的代码。在这两种情况下,都使用了 -O2 优化。这怎么可能,因为 nvcc 应该将主机代码传递给主机编译器。有什么想法吗?

这是我的生成文件:

# Add source files here
EXECUTABLE  := App
verbose=1
# C/C++ source files (compiled with gcc / c++)
CCFILES     := \
    cmdl.cpp main.cpp
# Cuda source files (compiled with cudacc)
CUFILES_sm_30       := AppCuda.cu AppHost.cpp 

# Do not link with CUTIL
OMIT_CUTIL_LIB := 1

################################################################################
# Rules and targets
ROOTDIR=/home/snpsyn/NVIDIA_GPU_Computing_SDK/C/common
include $(ROOTDIR)/../common/common.mk

【问题讨论】:

您能告诉我们更多关于您的代码的信息吗?你在计算什么?以及如何? 用什么版本的nvcc? nvcc 是 4.2 版。我正在对主要部分是计算多变量概率分布(直方图)的数据进行一些分析。当使用 Microsoft cl 或 nvcc 编译时,应用程序的主机代码在 Windows 上运行良好。如果在 Ubuntu 上使用 g++ 编译它也可以正常运行,但是如果我在 Ubuntu 上使用 nvcc 编译它,它的速度会大大降低。我想象如果我只将主机代码传递给 nvcc 编译器(没有 gpu 内核),它将被传递给主机编译器(g++),它应该产生与只使用 g++ 相同的代码,但事实并非如此。 应用程序的计算密集部分在文件 AppCuda.cu 和 AppHost.cpp 中 没有足够的信息来提供答案。您是否进行了剖析以了解额外的时间究竟花在了哪里? 【参考方案1】:

用nvcc或g++编译c++代码应该没有区别(CUDA compiler driver)

但是尝试直接用 g++ 编译所有 c++ 代码。在您给出的示例中,AppHost.cpp 文件被传递给 nvcc 而不是 g++。

如果您能提供源代码和makefile,将会有很大帮助。

【讨论】:

以上是关于CUDA nvcc慢主机代码的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 是不是使用 nvcc 编译 cuda 代码?

为 CPU 编译 cuda 代码

CUDA - nvcc -G - 如果工作不正常

为啥 nvcc 无法使用 boost::spirit 编译 CUDA 文件?

CMake + CUDA + 可分离编译->“nvcc 不知道如何处理''”

nvcc 警告设备变量是主机变量 - 为啥?