使用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
该程序只是一个简单的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
来观察链接差异。
相关文章:
- 使用std::vector的OpenCL矩阵乘法
- OpenCL 内核参数中的字符***?
- 在 NVIDIA GEFORCE GTX 1050 上下载适用于 Windows 10 的 openCL 1.2
- OpenCL 是否支持向量作为内核参数?
- 向量加法代码 OpenCL 返回 clCreateKernel 错误 -46
- 提高 OpenCL 的性能
- openCL 内核返回垃圾值,尽管没有错误
- OpenCL 内核计时测量 0 秒或导致 SIGABRT
- 0xc000007b Windows 上的 OpenCL 库的加载时间错误
- OpenCL 在 NVIDIA 和 Intel GPU 上启动内核时CL_INVALID_COMMAND_QUEUE
- OpenCL 代码卡在写入输出缓冲区上
- 将 C++ 库包含在 OpenCL 内核中?
- 如何在 OpenCL 中将小写转换为大写,反之亦然
- OpenCL 错误类在主机C++给出错误
- Zedboard zynq-7000 Opencl 浮点数从类型 'double*' 强制转换为类型 'double' 无效
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- 使用 NVIDIA GPU 在 Cygwin 中链接 OpenCL 库时遇到问题
- 在 OpenCL 库中找不到 cl::Error 类
- 在 OpenCL 内核中实现半精度浮点数据类型
- 在 Radeon 卡上并行执行多个 OpenCL 内核