2012-06-20 48 views
3

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

这是我的makefile:

# 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 
+2

请问您是否可以告诉我们关于您的代码的更多信息?你在计算什么?如何? – Pedro

+0

并与哪个版本的nvcc? – leftaroundabout

+0

nvcc是4.2版本。我正在对主要部分计算多变量概率分布(直方图)的数据进行一些分析。使用Microsoft cl或nvcc编译时,应用程序的主机代码在Windows上运行良好。如果在Ubuntu上使用g ++进行编译,它也可以正常运行,但是如果我在Ubuntu上使用nvcc进行编译,它会显着降低速度。我想如果我只将主机代码传递给nvcc编译器(没有gpu内核),它将被传递给主机编译器(g ++),它应该产生与使用g ++相同的代码,但事实并非如此。 – ECHO001

回答

1

应该有编译C++与NVCC或G代码没有区别++(CUDA compiler driver

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

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