首页 > 其他分享 >rocm Linpack 编译构建系统解析

rocm Linpack 编译构建系统解析

时间:2024-09-12 21:52:47浏览次数:3  
标签:Linpack 编译 -- rocHPL rocm install 安装

0. 购买amd显卡,安装rocm

1, 编译 rocHPL

下载源码:

$ git clone --recursive https://github.com/ROCm/rocHPL.git


编译:

$ cd rocHPL/
$ ./install.sh --prefix=${PWD}/../local/


会自动 git clone blit,ucx,opempi,

$ ./mpirun_rochpl -P 1 -Q 1 -N  8092 --NB 128

2, 解析 rocHPL 构建系统

2.1 整体项目编译框架解析

rocHPL 是使用一个 bash 脚本驱动整个编译过程的

install.sh

1,检查是否安装 getopt

2, 检查rocHPL 是否支持当前系统

检查 /etc/os-release 文件是否存在,install.sh 脚本依赖本文件中定义的变量: ID=ubuntu
  执行 $ source /etc/os-release, 设置其中定义的变量
    rocHPL 支持的 Linux 发行版有如下几种: ubuntu|centos|rhel|fedora|sles
    通过函数 supported_distro() 来检查本机系统是否在被支持的列表中。

3, 定义了一堆编译链接相关的变量,

指定安装目录、指定构建类型、指定rocm的安装目录、mpi的安装目录、rocblas的安装目录、blis的安装目录、3个编译信息指示开关:
install_prefix=rocHPL
build_release=true
with_rocm=/opt/rocm
with_mpi=tpl/openmpi
with_rocblas=/opt/rocm/rocblas
with_cpublas=tpl/blis/lib
verbose_print=true
progress_report=true
detailed_timing=true


4, 解析 install.sh 被执行时的命令选项

    根据 install.sh 的命令选项,设置脚本内部变量的值。
    build_release:  编译类型
    install_prefix: 安装目录
    with_rocm:  rocm的安装目录
    with_mpi:   mpi 的安装目录
    with_rocblas: rocblas 的安装目录
    with_cpublas: blis 的安装目录
    verbose_print: 编译信息输出
    progress_repot: 编译进展报告
    detailed_timing: 详细的编译时间统计
    
5, 设定编译文件目录: build_dir,
    每次重新执行 install.sh 的时候,都会先删除这个文件夹(rm -rf ),然后重新创建(mkdir ...)。


6, 将 rocm/bin 设置进入 PATH 中去,并将当前目录压入目录栈中。


7, 编译安装 blas,项目中使用的时blis,作为gpu计算结果正确性的测试工具。
    git clone https://github.com/amd/blis --branch 4.2
    ./configure --prefix=${PWD} --enable-cblas --disable-sup-handling auto;
    make -j
    make install -j

8, 基于 ucx 编译安装 mpi,项目中使用的是 openmpi,作为集群通行工具,并基于知名通信库 ucx
  8.1 编译安装 ucx
    git clone --branch v1.16.0 https://github.com/openucx/ucx.git ucx
    ./autogen.sh; ./autogen.sh
    mkdir build; cd build
    ../contrib/configure-opt --prefix=${PWD}/../ --with-rocm=${with_rocm} --without-knem --without-cuda --without-java
    make -j
    make install
    
    检查 ucx 是否编译安装成功

  8.2 编译安装 openmpi
      git clone --branch v5.0.3 --recursive https://github.com/open-mpi/ompi.git openmpi
      cd openmpi; ./autogen.pl;
      mkdir build; cd build
      ../configure --prefix=${PWD}/../ --with-ucx=${PWD}/../../ucx --without-verbs
      make -j
      make install


9, 设置 cmake 的选项
   -DCMAKE_INSTALL_PREFIX=
   -DHPL_BLAS_DIR=
   -DHPL_MPI_DIR=
   -DROCM_PATH=
   -DROCBLAS_PATH=
   -DCMAKE_BUILD_TYPE=
   通过运行 shopt -s nocasematch,告诉 Bash shell 在执行字符串匹配时不区分大小写,在解析下列三个选项的设置。
   -DHPL_VERBOSE_PRINT=
   -DHPL_PROGRESS_REPORT=
   -DHPL_DETAILED_TIMING=
   通过运行 shopt -u nocasematch,告诉 Bash shell 在执行字符串匹配时不区分大小写,在解析下列三个选项的设置。
 
10, 配置 rocHPL
    mkdir -p build/
    cd build/
    cmake + 9中设置的选项值;


11, 编译 rocHPL

    make -j

2.2 rocHPL CMakeLists.txt 解析

未完待续...

标签:Linpack,编译,--,rocHPL,rocm,install,安装
From: https://blog.csdn.net/eloudy/article/details/142186085

相关文章

  • 【北京迅为】iTOP-i.MX6开发板使用手册第四部分固件编译第十四章非设备树Android4.4系
     可根据用户需求更换,百变定制,高端产品无忧! 迅为IMX6Q兼容四核商业级、双核商业级、四核工业级、更可提供i.MX6Q家族PLUS版本核心板。核心板采用十层PCB沉金盲埋设计,更能保证电磁兼容与系统稳定。 公众号:迅为电子 -----------------------------------------   ......
  • 0. 编译错误解决
    1.WARNING:Makefile'package/utils/busybox/Makefile'hasadependencyon'libpam',whichdoesnotexistWARNING:Makefile'package/utils/busybox/Makefile'hasadependencyon'libpam',whichdoesnotexistWARNING......
  • 银河麒麟服务器V10 编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.0+zlib1.3.1
    测试镜像Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso #安装必备和常用软件包yum-yinstallgccmakevimwgettelnetnet-toolstcpdumptarperlnc #安装zlib./configure--prefix=/usr/local/zlibmake&&makeinstall #安装openssl./confi......
  • Python编译器IDE爬虫爬取3首歌曲代码
    importrequestssong_urls=[“http://music.163.com/song/media/outer/url?id=25795016.mp3”,“http://music.163.com/song/media/outer/url?id=5255631.mp3”,“http://music.163.com/song/media/outer/url?id=5255640.mp3”]forindex,song_urlinenumerate(so......
  • 手机安卓版Python编译器IDE彩色音乐播放器代码
    importpygameimporttkinterastkfromtkinterimportfiledialog初始化pygamepygame.mixer.init()current_song_index=0defplay_music():selected_indices=song_list.curselection()ifselected_indices:globalcurrent_song_indexcurrent_song_index=......
  • lazarus交叉编译riscv64应用时编译出错取巧处理方法
    lazarus交叉编译riscv64应用时自带的memdataset/lazreporr等控件如果使用到formeditingintf.pas时链接时出现出类以下提示的错误:这是fpc引起的问题,也提交给lazarus/fpc官方,不知道啥能修复(希望官方最快修复这个Bug)。以下是网友英分享的修复方法(但本方法部分控件还存在链接问题),常......
  • Jenkins 编译 .NET 6 WPF
    最近公司需求要将产品编译自动化,干了那么多年客户端开发一直都是小作坊作业最近换了一个比较正规的互联网公司一切都需要标准化流程化了,自动化也必不可少!然后我就了解到了Jenkins这玩意,找了两天资料感觉还挺简单的写篇文章收录下。因为签名UKey只要windows驱动,所以我只能将环境......
  • gcc / g++ 编译的区别
    今天在群里聊天的时候突然发现自己叫不清楚gcc/g++这两个东西。于是学习并且进行总结分享一下。GCC:GNUCompilerCollectionGNU编译器集合。那么GNU又是什么呢?是一个操作系统!具体涉及到一些历史知识和开源运动,放入下面的链接里啦https://www.gnu.org/home.zh-cn.html所以......
  • rsync 学习笔记(一)编译
    一、背景 rsync二进制程序依赖外部库,由于安全问题,有时会单独升级依赖的外部库。另外为了防止因为栈溢出攻击导致服务器被黑,需要对rsync及其依赖的外部库重新编译,开启安全编译选项,增加黑客破解的复杂度。 所有的库编译必须要求加上如下编译选项:栈保护(-fstack-protector-al......
  • 痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是在MDK开发环境下自定义安装与切换不同编译器版本的方法。KeilMDK想必是嵌入式开发者最熟悉的工具之一了,自2005年Arm公司收购Keil公司之后,MDK就走上了发展快车道,从v2.50a一路狂奔到现在最新的v......