软 / 硬件版本
-
PGI 20.7
-
netcdf-c 4.7.4
-
netcdf-fortran 4.5.3
-
cpu : Intel Xeon® E5-2680 v3
安装 netcdf
参考以前的文章
我这里使用的是之前用 intel 编译器编译的 netcdf ,在编译 ioapi 时并没有重新使用 pgi 编译器重新编译,暂时没有出现问题,后续有出错会再更新
安装 ioapi
修改配置文件
总共有 4 处文件需要修改
./Makefile
./ioapi/Makefile
./ioapi/Makeinclude.Linux2_x86_64pg_pgcc_nomp
./m3tools/Makefile.nocpl
修改 ./Makefile
BASEDIR = /path/to/ioapi-3.1
INSTALL = /path/to/want/to/install
CPLMODE = nocpl
修改 ./ioapi/Makefile
BASEDIR = /path/to/ioapi-3.1
这里我没有添加 netcdf 库的链接,编译也没有问题,后续如果你在使用过程中出现确实 nc 或 nf 函数的话就可能要在这里添加
修改 ./ioapi/Makeinclude.Linux2_x86_64pg_pgcc_nomp
COPTFLAGS = -O2 -tp=skylake
FOPTFLAGS = -O2 -tp=skylake -V -Mnosecond_underscore
这里最重要的就是添加你的 CPU 架构类型 -tp=xxxx
这个选项就算相当于 gcc 中的 -march=native 参数
修改 ./m3tools/Makefile.nocpl
BASEDIR = /path/to/ioapi-3.1
FFLAGS = -I$(IODIR) -DIOAPICPL $(ARCHFLAGS) $(PARFLAGS) $(FOPTFLAGS) $(ARCHFLAGS) -I/path/to/netcdf/include
LDFLAGS = -I$(IODIR) -DIOAPICPL $(DEFINEFLAGS) $(ARCHFLAGS) -I/path/to/netcdf/include
LIBS = -L${OBJDIR} -lioapi -L/path/to/netcdf/lib -lnetcdff -lnetcdf $(OMPLIBS) $(ARCHLIB) $(ARCHLIBS)
修改完成后执行
cp ./m3tools/Makefile.nocpl ./m3tools/Makefile
直接覆盖即可
如果直接使用原来的 Makefile 会提示 xxxx 是一个目录这样的错误,我暂时也没看出是哪里的问题,就直接拿模板覆盖了
make
上述 4 个文件都修改完成后就可以开始编译了
make BIN=Linux2_x86_64pg_pgcc_nomp
没有出现错误就可以了
这里不建议执行 make install
我发现大多数需要使用 ioapi 库的软件都会在编译时链接
-I/path/to/ioapi-3.1/ioapi/fixed_src
执行 install 有点多此一举
这里有一点提醒大家,pgi 20.7 编译器无法编译 ioapi-3.2,需要 21.1 版本之后才能安装
具体原因可以查看下面的链接
https://forums.developer.nvidia.com/t/nvfortran-fatal-fort2-terminated-by-signal-11/157434