Geo-CNN中tf_sampling.sh文件解读

Geo-CNN中tf_sampling.sh文件解读

如果有说不对的,还请指正。

Geo-CNN中tf_sampling.sh文件解读
Geo-CNN作者再这里面添加了一些新的Ops.
Geo-CNN中tf_sampling.sh文件解读
下面是我修改过的一个文件(tf_sampling.sh):
Geo-CNN中tf_sampling.sh文件解读
看到这个,我觉得应该先来点文件后缀的介绍:
Geo-CNN中tf_sampling.sh文件解读
接下来一步步理解:先看一下Geo-CNN源码文件好了:

  • nvcc指令
    Geo-CNN中tf_sampling.sh文件解读
  1. nvcc指令可以看一下这篇博客

  2. -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

  3. -c 只进行 预处理, 编译,汇编操作,生成.o (.obj)文件,不进行链接。生成的是二进制文件

  4. -O2是其中的一个-O选项,取英文单词Optimize(意为:优化)的第一个字母O

  • 编译器选项-O有的优化选项有4个级别-O,O1,-O2,-O3 ;-O0表示没有优化,-O1为缺省值,-O3优化级别最高。
  • 用法:# gcc -O1 test.c -o test
    作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
  1. -x none filename让gcc根据文件名后缀,自动识别文件类型。
  • -x cu让编译器根据文件名后缀.cu,自动识别cu文件类型。
  1. -Xcompiler官方网站的解释是:直接向编译器/预处理器指定选项,是编译工具内部选项。
    Geo-CNN中tf_sampling.sh文件解读
  2. fPICLinux共享对象之编译参数fPIC
    我觉得可以看一下下面两篇博客:
    Linux共享对象之编译参数fPIC - 烛秋 - 博客园
    -fpic 与-fPIC的区别_C/C++_冰冻三尺非一日之寒-****博客

看完第一句,再来看看下面的:
Geo-CNN中tf_sampling.sh文件解读

  1. g++当成c++语言编译器用就是了。(严格不能这么讲,这里只是为了讲一下g++是个什么东西)
  1. -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。
    Geo-CNN中tf_sampling.sh文件解读
  1. -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的专栏-****博客