nvcc的可执行文件大于gcc / g ++和OpenCL

时间:2015-06-25 02:18:07

标签: c++ cuda g++ opencl nvcc

这只是我注意到的事情,如果有理由的话,我很好奇。

使用Nvidia的nvcc编译器从Ubuntu 14.04上的cuda 7.0工具包编译一些标准的helloworld代码,得到以下大小的可执行文件:

liang@liang-EX58-UD3R:~/Documents/cuda-test$ nvcc cudahello.cu -o cudahello
liang@liang-EX58-UD3R:~/Documents/cuda-test$ ls -lah cudahello
-rwxrwxr-x 1 liang liang 508K Jun 25 12:08 cudahello

该程序只是一个简单的hello world程序,没有内核调用:

//cudahello.cu
#include <iostream>

int main(){
    std::cout << "helloworld\n";
    return 0;
}

另一方面,OpenCL更多是C ++可执行文件的预期大小:

liang@liang-EX58-UD3R:~/Documents/opencl-test$ g++ -Wall -std=c++11 oclhello.cpp -lOpenCL -o oclhello
liang@liang-EX58-UD3R:~/Documents/opencl-test$ ls -lah oclhello
-rwxrwxr-x 1 liang liang 8.9K Jun 25 12:08 oclhello

这也是一个简单的helloworld计划:

//oclhello.cpp
#include <CL/cl.h>
#include <iostream>

int main(){
    std::cout << "helloworld";
    return 0;
}

CUDA可执行文件是否有相当大的原因? 我发现即使在C / C ++程序中使用OpenCL函数,可执行文件也不会增长到CUDA可执行文件的大小。

1 个答案:

答案 0 :(得分:5)

主要区别在于,在您的CUDA案例中,您静态链接到libcudart,即cuda运行时库,它将可执行文件大小增加约500K。

openCL可执行文件动态地链接到libOpenCL.so,这意味着该库的大小不会影响可执行文件的大小。

要实现近似奇偶校验,请将您的cuda应用程序与附加开关链接:

--cudart shared

force dynamic linking to libcudart,而CUDA可执行文件的大小会下降很多。

您还可以使用ldd观察链接差异。