5.15 vs2019 静态编译_HPCC S01E01 编译 win10,ubuntu 安装
首先HPC Challenge的編譯需要bash。不能用cmd。
ubuntu會自帶bash,win10需要另外安裝bash,可以使用msys2 或者git bash
Makefile
hpcc有如下重要的文件夾
hpl,DGEMM,FFT,RandomAccess,src,STREAM,PTRANS
hpcc/hpl/setup 下有非常多的Make開頭的文件,后綴表示不同的架構(gòu)。可以按照自己的平臺選
任選一個改,也可以。比如選Make.Linux_Pll_CBLAS
將其中一個文件比如Make.Linux_Pll_CBLAS, 移動到hpcc/hpl文件夾下。重命名為Make.Linux(其他的名也可以 Make.XXX 其中XXX任意
主要需要配置的就是
MPinc,MPlib,LAinc,LAlib ,LINKER,CC,CCFLAGS
MPI
版本:因為HPCC里面用了老的MPI_Address等等函數(shù),所以用openmpi-4.0會報錯。mpi 2.0 ok!
其中MPinc是mpi庫的頭文件mpi.h的路徑。在ubuntu下,如果mpi.h不在gcc的默認搜索路徑。需要自己添加。
一般在/usr/local/include或者/usr/include下面。
如果是源碼編譯的,注意./configure --prefix的值。比如有可能在/usr/local/openmpi/include下面
如果是/usr/local/openmpi/include,MPinc= -I/usr/local/openmpi/include 加上-I表示gcc的搜索頭文件
gcc 搜索頭文件,用-I (include的I) 搜索庫文件用-L(library 的L) 鏈接動態(tài)庫或靜態(tài)庫用-l(library 的頭一個字母) 千萬別弄混了。
MPlib是靜態(tài)庫或者動態(tài)庫。
對于openmpi,需要libmpi.so的路徑。對于mpich,需要libmpich.a的路徑
如果libmpi.so在/usr/local/openmpi/lib下,MPlib=-L/usr/local/openmpi/lib -lmpi
-L表示靜態(tài)庫或動態(tài)庫的路徑,-l表示動態(tài)庫或靜態(tài)庫的名字
如果是mpich,需要libmpich.a的路徑,MPLib=-L/usr/lib/mpich/lib -lmpich
這里openmpi和mpich分別用動態(tài)庫和靜態(tài)庫,是因為openmpi安裝默認不產(chǎn)生靜態(tài)庫。
如果mpi.h,libmpi.so都在gcc的默認搜索路徑里面,(如果用對應(yīng)的mpicc編譯,那必然在默認搜索路徑里面)
也可以讓MPinc,MPlib為空。
這里有一種糟糕的情況,就是同時安裝了openmpi和mpich。這時候就需要注意,CC ,LINKER的mpicc到底是mpich的還是openmpi的。
通過which mpicc可以看到底是那個的
如果2個都裝了,可能mpich的mpicc會被命名為mpicc.mpich
如果這種情況,使用mpich,CC,LINKER都需要是mpicc.mpich 運行hpcc的時候,要用mpirun.mpich
BLAS
LAinc,LAlib 類似,代表的是blas庫。
Make.Linux里面的
HPL_OPTS = -DHPL_CALL_CBLAS
會保證hpcc使用blas庫。
如果用openblas,就需要openblas的頭文件cblas.h和靜態(tài)庫libopenblas.a 或者libcblas.a
如果用MKL,最好配置好MKL的環(huán)境變量。
MKL默認安裝在/opt/intel/mkl
所以頭文件路徑LAinc= -I/opt/intel/mkl/include
在~/.bashrc中寫上
source /opt/intel/mkl/bin/mklvars.sh intel64
然后source ~/.bashrc 就可以配置好mkl的環(huán)境變量
LAlib= -L/opt/intel/mkl/lib/intel64 -lmkl_rt 即可
如果不配置mkl的環(huán)境變量
LAlib= -L/opt/intel/mkl/lib/intel64 -lm -dl -lpthread -liomp5 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core 應(yīng)該也可以
提醒:netlib的blas沒有任何優(yōu)化,如果要高性能至少要用openblas這種做了優(yōu)化的。如果是intel的cpu,最好用mkl
mpich+openblas
最簡單的辦法。ubuntu的話
sudo apt-get install mpich
sudo apt-get install libopenblas-dev
在/usr/include 或者/usr/local/include里面找到mpich的頭文件mpi.h
在/usr/lib或者/usr/local/lib里面找到libopenblas.a
按上面的方法配置就可以了。
建議用find 命令搜索
我的電腦的話,mpich 在/usr/lib/mpich下面
openblas 在/usr/lib/x86_64-linux-gnu/openblas下面。這樣的話,如下配置
CC
CC= mpicc, LINKER= mpicc
或者CC=gcc ,LINKER=gcc
CCFLAGS 里面至少加個-O3 其他的編譯器優(yōu)化以后再說吧
Ubuntu編譯
在hpcc文件夾下,打開bash
輸入make arch=Linux
如果那個Make.Linux命名成http://Make.XXX,即hpl/http://Make.XXX
輸入make arch=XXX也可以
如果編譯失敗后,改動了http://Make.XXX文件,最好make arch=XXX clean
然后再make arch=XXX
在hpcc文件夾下,有個Makefile,里面有
輸入arch就會改變Makefile include的對象。默認是include Make.UNKNOWN文件
Makefile文件后面有
以Make.Linux文件為例。hpcc/hpl/lib/arch/build下面的Makefile.hpcc文件,實際是負責(zé)各代碼的實際編譯
所以,如果要改動某個c文件的編譯,可以去Makefile.hpcc里面改
編譯成功后,hpcc文件夾下,會產(chǎn)生可執(zhí)行文件hpcc
hpcc文件夾下,有_hpccinf.txt 重命名為hpccinf.txt 即可
mpirun -n 進程數(shù) ./hpcc 即可執(zhí)行hpcc測試
會產(chǎn)生一個hpccoutf.txt文件,即為輸出結(jié)果。
如果提醒進程數(shù)不夠的話,那是因為進程數(shù)是在hpccinf.txt 里面設(shè)定了,進程數(shù)的值必須等于hpccinf.txt里面的Ps*Qs
win10編譯
win10的編譯需要bash。可以用msys2代替。
msys2的環(huán)境配置請參考
本專欄的文章scalapack win安裝及mingw64環(huán)境配置.下載msys2,現(xiàn)在應(yīng)該可以去清華鏡像源找。
安裝好mingw64, msmpi 和openblas即可
msys2安裝mingw64 gcc的默認頭文件在/mingw64/include
默認庫文件在/mingw64/lib
注意環(huán)境變量的問題。
選mingw-64 64bit那一個
選MSYS2其實也可以,不過要配置環(huán)境變量。也可以導(dǎo)入windows的環(huán)境變量。
如果用mingw64+msys2 是沒有l(wèi)inux的sys頭文件庫的。
所以需要改一改源代碼
用到sys頭文件的地方為
hpcc/hpl/testing/ptimer中的HPL_ptimer_cputime.c HPC_ptimer_walltime.c
hpcc/hpl/testing/timer
這2個和計時有關(guān)的地方
關(guān)于cputime 和walltime的區(qū)別
建議參考https://blog.csdn.net/aganlengzi/article/details/21888351
HPL_ptimer_cputime.c中cpu時間有好幾種計時方式,因為程序的計時用的是MPI_Wtime
cpu時間對最終的指標沒有什么影響。(會反映在一些次要指標上)
為了跨平臺,可以保留用time.h 中的clock實現(xiàn)的部分,其他部分刪除。
HPC_ptimer_walltime.c中的HPL_ptimer_walltime()
需要gettimeofday函數(shù)
參考https://www.jb51.net/article/101476.htm
在win10下實現(xiàn) ,刪掉頭文件部分即可。
hpcc/hpl/testing/timer文件夾類似
然后在http://Make.XXX中CCFLAGS加上-DWIN32
改好的Make.msys2中,libmsmpi.a 是用lmsmpi去鏈接的,CC,LINKER都使用gcc ,其他的如上。
具體修改后的代碼放在github
chenlin0/HPCC/S01E01
最后在hpcc文件下,make arch=msys2即可
不過運行的時候,因為msmpi沒有提供mpirun
使用mpiexec 代替
參考文獻
[1] https://blog.csdn.net/aganlengzi/article/details/21888351
[2] https://www.jb51.net/article/101476.htm
總結(jié)
以上是生活随笔為你收集整理的5.15 vs2019 静态编译_HPCC S01E01 编译 win10,ubuntu 安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 易语言 设置屏幕刷新率 源码_DxOMa
- 下一篇: 电脑测速软件_iPerf3 搭建局域网内