2020创新实训
2020-05-30 规划和写申请文档
2020-06-01 完善申请书和进行签名
2020-06-14 开会并配置环境,如何运行
项目文件列表
如何运行
cmke .
source /home/asc/intel/compilers_and_libraries/linux/bin/compilervars.sh
make
其中第二句是声明intel icpc 和 intel icc 编译器,以便make的时候使用,否则会出错。
然而这样也会出现一个问题,诸如malloc is undefined 等符号未定义问题,原因在开会过程中一直找,从gcc 版本,cmake版本,intel icpc icc编译器等方面入手,但是在开会过程中并没有找到,最后由另一位成员发现,更改gcc版本为较新的7.5,在编译的时候使用新的gcc可以解决这个问题.
以下是成功编译的截图
2020-06-20 gcc 通用编译
从工程的角度来讲,一个软件不应该对其它的软件库太过依赖,另外去除软件对特殊类库的依赖也有利于软件的推广何使用。对于我们实现的gwas软件,依赖于intel mkl比较多,而intel mkl 的使用需要安装Intel Parallel Studio,而且这个软件的安装还需要认证激活,如果是学生,还可以进行学生认证使用,但是其它科研工作者使用就并不是那么简单了,而且安装使用激活过程对于非专业人员也是有一定难度的,并且还有一定的经费支出。
综上所述,gwas软件去掉intel数学库无论在工程上还是软件适配性角度来说,都是有必要的。
下面的cmake编译配置说明了,当前的gwas使用的是intel的编译器
SET(CMAKE_CXX_COMPILER icpc)
SET(CMAKE_C_COMPILER icc)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -g -mkl -static-intel -no-intel-extensions -static-libstdc++ -march=native -qopenmp")
这些行声明了c++,c编译器分别是icpc、icc并且编译参数中使用了-mkl -static-intel来添加相关依赖
1.分析依赖库有那些
通过通读代码,发现依赖库主要是在计算部分,如下图:
#include <mkl.h>
//X2 = Xt * X
cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans, M, M, N, 1, X, N, X, N, 0, X2, M);
简单分析可知依赖库是intel mkl 和 BLAS
//solve(Xt * X)
int inv_success = LAPACKE_dgesv(LAPACK_COL_MAJOR, M