Geo-CNN中tf_sampling.sh文件解读
Geo-CNN中tf_sampling.sh文件解读
如果有说不对的,还请指正。
Geo-CNN作者再这里面添加了一些新的Ops.
下面是我修改过的一个文件(tf_sampling.sh):
看到这个,我觉得应该先来点文件后缀的介绍:
接下来一步步理解:先看一下Geo-CNN源码文件好了:
- nvcc指令
-
nvcc指令可以看一下这篇博客
-
-o选项:-o <file>
输出编译后的结果到指定的文件file中。windows下默认编译输出a.exe,而linux则默认是a.out。-o不仅可以指定输出的可执行文件,还可以指定中间文件的输出。nvcc tf_sampling_g.cu -o tf_sampling_g.cu.o
将tf_sampling_g.cu预处理、汇编、编译并链接形成目标件tf_sampling_g.cu.o -
-c
只进行 预处理, 编译,汇编操作,生成.o (.obj)文件,不进行链接。生成的是二进制文件 -
-O2是其中的一个-O选项,取英文单词Optimize(意为:优化)的第一个字母O
- 编译器选项-O有的优化选项有4个级别-O,O1,-O2,-O3 ;-O0表示没有优化,-O1为缺省值,-O3优化级别最高。
- 用法:# gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
-
-x none filename
让gcc根据文件名后缀,自动识别文件类型。
-
-x cu
让编译器根据文件名后缀.cu,自动识别cu文件类型。
-
-Xcompiler
官方网站的解释是:直接向编译器/预处理器指定选项,是编译工具内部选项。
-
fPIC
Linux共享对象之编译参数fPIC
我觉得可以看一下下面两篇博客:
Linux共享对象之编译参数fPIC - 烛秋 - 博客园
-fpic 与-fPIC的区别_C/C++_冰冻三尺非一日之寒-****博客
看完第一句,再来看看下面的:
- g++当成c++语言编译器用就是了。(严格不能这么讲,这里只是为了讲一下g++是个什么东西)
- g++指令:这里我看了gcc和g++的指令再linux下的区别,这个博主写得通俗易懂,点赞。
-
-std=<语言标准> 如:-std=c++11 ,使用C++11标准
g++ -std=c++11
是linux g++开启C++11支持的意思。
还可以是其他的,比如g++ -std=c++14是C++14等。关于它们之间的区别,可以参考这篇博客。
-
g++ -std=c++11 tf_sampling.cpp
假如后面没有跟着其他选项,就是将tf_sampling.cpp预处理、汇编、编译并链接形成可执行文件a.exe。这里未指定输出文件,默认输出为a.out。
-
-shared
上面的命令行中-shared表明产生共享库,而-fPIC则表明使用地址无关代码。PIC:Position Independent Code.
Linux下编译共享库时,必须加上-fPIC参数,否则在链接时会有错误提示.
接下来说到路径了:
9. ’-I(大写i)
'编译程序按照-I指定的路进去搜索头文件。-I /usr/local/lib/python2.7/dist-packages/tensorflow/include
在tf的include下搜索头文件。
10. -L(大写l)
编译程序按照-L指定的路进去寻找库文件,一般的在-L的后面可以一次用-l指定多个库文件。-L /usr/local/cuda-8.0/lib64/
表示到/usr/local/cuda-8.0/lib64/目录下找库文件。
其他参数,我觉得可以看一下两篇博客,我觉得不错:
nvcc编译器参数_Python_fb_help的专栏-****博客
tools:gcc&g++&gdb_c/c++_maze的专栏-****博客