使用nvcc的可执行程序比使用gcc/g++和OpenCL的可执行文件大

executables with nvcc are larger than with gcc/g++ and OpenCL

本文关键字:g++ OpenCL 可执行文件 可执行程序 nvcc 使用 gcc      更新时间:2023-10-16

这只是我注意到的事情,我很好奇是否有原因。

在Ubuntu 14.04上,使用Nvidia的nvcc编译器从其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

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

//cudahello.cu
#include <iostream>
int main(){
    std::cout << "helloworldn";
    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可执行文件的大小。

主要区别在于,在CUDA的情况下,您静态地链接到库库库库,库库库的可执行文件大小至少增加了约500K。

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

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

--cudart shared

这将强制动态链接到libcudart,并且CUDA可执行文件的大小将下降很多。

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