这只是我注意到的,并且好奇是否有原因。
在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情况下,您静态链接到cuda运行时库libcudart,该库将可执行文件大小增加了至少500K。
openCL可执行文件动态链接到libOpenCL.so,这意味着该库的大小不会影响该可执行文件的大小。
要获得近似的奇偶校验,请将您的cuda应用程序与其他开关链接:
--cudart shared
这将force dynamic linking to libcudart,并且CUDA可执行文件的大小将下降很多。
您还可以使用
ldd
观察链接差异。关于c++ - nvcc的可执行文件大于gcc/g++和OpenCL的可执行文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31040146/