日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

5.15 vs2019 静态编译_HPCC S01E01 编译 win10,ubuntu 安装

發布時間:2024/1/23 Ubuntu 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.15 vs2019 静态编译_HPCC S01E01 编译 win10,ubuntu 安装 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文使用 Zhihu On VSCode 創作并發布

首先HPC Challenge的編譯需要bash。不能用cmd。
ubuntu會自帶bash,win10需要另外安裝bash,可以使用msys2 或者git bash

Makefile

hpcc有如下重要的文件夾
hpl,DGEMM,FFT,RandomAccess,src,STREAM,PTRANS
hpcc/hpl/setup 下有非常多的Make開頭的文件,后綴表示不同的架構。可以按照自己的平臺選
任選一個改,也可以。比如選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等等函數,所以用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) 鏈接動態庫或靜態庫用-l(library 的頭一個字母) 千萬別弄混了。
MPlib是靜態庫或者動態庫。


對于openmpi,需要libmpi.so的路徑。對于mpich,需要libmpich.a的路徑
如果libmpi.so在/usr/local/openmpi/lib下,MPlib=-L/usr/local/openmpi/lib -lmpi
-L表示靜態庫或動態庫的路徑,-l表示動態庫或靜態庫的名字
如果是mpich,需要libmpich.a的路徑,MPLib=-L/usr/lib/mpich/lib -lmpich
這里openmpi和mpich分別用動態庫和靜態庫,是因為openmpi安裝默認不產生靜態庫。
如果mpi.h,libmpi.so都在gcc的默認搜索路徑里面,(如果用對應的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和靜態庫libopenblas.a 或者libcblas.a


如果用MKL,最好配置好MKL的環境變量。
MKL默認安裝在/opt/intel/mkl
所以頭文件路徑LAinc= -I/opt/intel/mkl/include
在~/.bashrc中寫上
source /opt/intel/mkl/bin/mklvars.sh intel64
然后source ~/.bashrc 就可以配置好mkl的環境變量
LAlib= -L/opt/intel/mkl/lib/intel64 -lmkl_rt 即可


如果不配置mkl的環境變量
LAlib= -L/opt/intel/mkl/lib/intel64 -lm -dl -lpthread -liomp5 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core 應該也可以

提醒:netlib的blas沒有任何優化,如果要高性能至少要用openblas這種做了優化的。如果是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 其他的編譯器優化以后再說吧

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 = UNKNOWN include hpl/Make.$(arch)

輸入arch就會改變Makefile include的對象。默認是include Make.UNKNOWN文件
Makefile文件后面有

all:- $(MKDIR) hpl/lib/$(arch)( $(CD) hpl/lib/arch/build ; $(MAKE) arch=$(arch) -f Makefile.hpcc )

以Make.Linux文件為例。hpcc/hpl/lib/arch/build下面的Makefile.hpcc文件,實際是負責各代碼的實際編譯
所以,如果要改動某個c文件的編譯,可以去Makefile.hpcc里面改

編譯成功后,hpcc文件夾下,會產生可執行文件hpcc
hpcc文件夾下,有_hpccinf.txt 重命名為hpccinf.txt 即可
mpirun -n 進程數 ./hpcc 即可執行hpcc測試
會產生一個hpccoutf.txt文件,即為輸出結果。

如果提醒進程數不夠的話,那是因為進程數是在hpccinf.txt 里面設定了,進程數的值必須等于hpccinf.txt里面的Ps*Qs

win10編譯

win10的編譯需要bash??梢杂胢sys2代替。
msys2的環境配置請參考

本專欄的文章scalapack win安裝及mingw64環境配置.下載msys2,現在應該可以去清華鏡像源找。


安裝好mingw64, msmpi 和openblas即可
msys2安裝mingw64 gcc的默認頭文件在/mingw64/include
默認庫文件在/mingw64/lib
注意環境變量的問題。


選mingw-64 64bit那一個
選MSYS2其實也可以,不過要配置環境變量。也可以導入windows的環境變量。


如果用mingw64+msys2 是沒有linux的sys頭文件庫的。
所以需要改一改源代碼
用到sys頭文件的地方為
hpcc/hpl/testing/ptimer中的HPL_ptimer_cputime.c HPC_ptimer_walltime.c
hpcc/hpl/testing/timer
這2個和計時有關的地方


關于cputime 和walltime的區別
建議參考https://blog.csdn.net/aganlengzi/article/details/21888351


HPL_ptimer_cputime.c中cpu時間有好幾種計時方式,因為程序的計時用的是MPI_Wtime
cpu時間對最終的指標沒有什么影響。(會反映在一些次要指標上)
為了跨平臺,可以保留用time.h 中的clock實現的部分,其他部分刪除。
HPC_ptimer_walltime.c中的HPL_ptimer_walltime()
需要gettimeofday函數
參考https://www.jb51.net/article/101476.htm


在win10下實現 ,刪掉頭文件部分即可。

#include

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

總結

以上是生活随笔為你收集整理的5.15 vs2019 静态编译_HPCC S01E01 编译 win10,ubuntu 安装的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。