本文使用 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。可以用msys2代替。
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 安装相关推荐

  1. 【ijkplayer】编译 Android 版本的 ijkplayer ① ( Ubuntu 安装 Git 软件 | 下载 ijkplayer 代码 )

    文章目录 一.安装 Git 软件 二.下载 ijkplayer 代码 参考 https://github.com/bilibili/ijkplayer 项目的编译过程 ; 一.安装 Git 软件 执行 ...

  2. 5.15 vs2019 静态编译_Go Web 开发如何优雅的包含静态资源文件?

    点击上方蓝色"Go语言中文网"关注我们,领全套Go资料,每天学习 Go 语言 静态文件,也有人叫资产或资源,是一些被程序使用.没有代码的文件.在 Go 中,这类文件就是非 .go ...

  3. 5.15 vs2019 静态编译_xmake v2.3.8 发布, 新增 Intel C++/Fortran 编译器支持

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...

  4. QT5.15.2静态编译MSVC2019

    下载源码: 官网:下载地址 腾讯源:下载地址 清华源:下载地址 查看源码编译环境 源码目录中的README文件 Windows:    -------- Open a command prompt. ...

  5. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统. ...

  6. 【OBS编译】基于VS2019的W10下的编译

    最近想学习一下开源库的编译,同时又想搞一下音视频,所以选择了OBS,我是想搞一下桌面录制 网络直播,话不多说,操作如下: 官网现在已经更新到28.0.1,支持QT6.0,要求装VS2022,可惜我的电 ...

  7. apache 静态编译和动态编译参考

    apache-2.2.22 编译安装笔记 一.静态编译     在使用./configure 编译的时候,即没有使用--enable-mods-shared=[module]或者--enable-[m ...

  8. 主讲:A1(老吴) 时间:2004-10-22 15:00 主题:0一点点编译。1解决DLL与EXE沟通时String和其它Memory的问题.2公布hmOlevariants.pas 3成批...

    主讲:A1(老吴) 时间:2004-10-22 15:00 主题: 0>一点点编译. 1>解决DLL与EXE沟通时String和其它Memory的问题. 2>公布hmOlevaria ...

  9. 【chromium】win10 VS2019 环境 chromium 配置与编译。

    文章目录 硬件&软件配置 安装 depot_tools get the code 编译 编译加速 基础概念 https://chromium.googlesource.com/chromium ...

最新文章

  1. 转载 1-EasyNetQ介绍(黄亮翻译) https://www.cnblogs.com/HuangLiang/p/7105659.html
  2. httpstat:一个检查网站性能的 curl 统计分析工具
  3. 【Python】如何选择赋值和拷贝
  4. [环境] OpenAI gym经典控制环境CartPole-v0 介绍
  5. 在Word中如何进行半行输入
  6. HIPS软件的一些知识
  7. 图像处理黑科技——弯曲矫正、去摩尔纹、切边增强、PS检测
  8. C#直接调用IE打开指定的网页文件
  9. 申请阿里云服务器并配置SSL证书(附带微信公众号配置服务器)
  10. 如何用算法绘制一张上海外滩夜景图
  11. 算法练习(21):Frog Jump
  12. 负荷分配问题的动态规划算法递归实现
  13. 将字符串中的大写字母转化为小写字母
  14. CODESYS Install
  15. 初学者也能轻松做出好Beat——FL Studio FPC鼓机使用教程
  16. java集成蜂鸟配送
  17. 漫天桃花只为你飘落(代码实现)
  18. QUI框架多选下拉框回填
  19. ☀️苏州程序大白一文让你学会Java Servlet基础☀️《❤️记得收藏❤️》
  20. 利用js或者后台获取客户ip地址

热门文章

  1. Hadoop之MapReduce工作流程
  2. 教育机构如何提升在线教育技术能力? | 云+社区技术沙龙
  3. Ansible之Playbook详解、案例
  4. HTTP basic auth
  5. srs代码学习(2)- 线程模型
  6. 分享实用监控脚本:使用Shell检查进程是否存在
  7. 绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?
  8. leetcode 769. Max Chunks To Make Sorted | 769. 最多能完成排序的块(Java)
  9. 【SpringMVC】登录状态验证
  10. Pandas之:Pandas简洁教程