使用 nvcc 的可执行文件比使用 gcc/g++ 和 OpenCL 的要大
executables with nvcc are larger than with gcc/g++ and OpenCL
这只是我注意到的事情,我很好奇是否有原因。
在 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
该程序只是一个简单的 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 可执行文件的大小。
主要区别在于,在您的 CUDA 案例中,您静态 linking 到 libcudart,cuda 运行时库,它至少向可执行文件添加 ~500K尺寸。
openCL 可执行文件动态 linked 到 libOpenCL.so,这意味着该库的大小不会影响可执行文件的大小。
要实现近似奇偶校验,link 您的 cuda 应用程序需要额外的开关:
--cudart shared
这将 force dynamic linking to libcudart,CUDA 可执行文件的大小将下降很多。
您还可以使用 ldd
观察 linking 差异。
这只是我注意到的事情,我很好奇是否有原因。
在 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
该程序只是一个简单的 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 可执行文件的大小。
主要区别在于,在您的 CUDA 案例中,您静态 linking 到 libcudart,cuda 运行时库,它至少向可执行文件添加 ~500K尺寸。
openCL 可执行文件动态 linked 到 libOpenCL.so,这意味着该库的大小不会影响可执行文件的大小。
要实现近似奇偶校验,link 您的 cuda 应用程序需要额外的开关:
--cudart shared
这将 force dynamic linking to libcudart,CUDA 可执行文件的大小将下降很多。
您还可以使用 ldd
观察 linking 差异。