rocm Linpack 编译构建系统解析

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 解析

未完待续...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/422397.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

相互作用先验下的 3D 分子生成扩散模型 - IPDiff 评测

IPDiff 是一个基于蛋白质-配体相互作用先验引导的扩散模型,首次把配体-靶标蛋白相互作用引入到扩散模型的扩散和采样过程中,用于蛋白质(口袋)特异性的三维分子生成。 本文将对 IPDiff 实际的分子生成能力进行评测。 一、背景介绍 …

web基础之SSRF

1、内网访问 题目提示:访问位于127.0.0.1的flag.php;直接利用ssrf漏洞访问?url127.0.0.1/flag.php 2、伪协议读取文件 (1)题目提示:尝试去读取一下Web目录下的flag.php吧 (2)什么是伪协议&a…

AttackGen - AI 网络安全事件响应测试工具,附下载链接

为了提高我们团队在安全活动中的响应效率,我关注到了一款叫 AttackGen 的工具,我们需要的是一个既能快速生成场景又能准确反映现实威胁的工具。 在红蓝对抗中,我们经常要模拟各种攻击场景,以测试我们的防御水平。这不仅仅是为了“…

快排Java

快速排序的复杂度 快排代码 package leetcode;import java.util.Arrays;public class QuickSort {public static void quickSort(int[] array, int low, int high) {if (low < high) {int pivotIndex partition(array, low, high);quickSort(array, low, pivotIndex - 1);…

浙大数据结构:03-树2 List Leaves

这道题我借用了一点上一题的代码思路&#xff0c;这题考察的主要是层序遍历&#xff0c;即用队列来实现&#xff0c;当然此处我依然采用数组模拟队列来实现。 机翻 1、条件准备 map的键存下标&#xff0c;后面值分别存左右子树的下标&#xff0c;没有子树就存-1. head数组只…

Buzzer:一款针对eBPF的安全检测与模糊测试工具

关于Buzzer Buzzer是一款功能强大的模糊测试工具链&#xff0c;该工具基于Go语言开发&#xff0c;可以帮助广大研究人员简单高效地开发针对eBPF的模糊测试策略。 功能介绍 下面给出的是当前版本的Buzzer整体架构&#xff1a; 元素解析&#xff1a; 1、ControlUnit&#xff1a…

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果&#xff1a; 解密后的数据就是正常数据&#xff1a; 后端&#xff1a;使用的是spring-cloud框架&#xff0c;在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30…

51单片机-AT24C02(IIC总线介绍及其时序编写步骤)-第一节(下一节实战)

IIC开始通信&#xff08;6大步&#xff09; 我以前的文章也有对基本常用的通信协议讲解&#xff0c;如SPI UART IIC RS232 RS485 CAN的讲解&#xff0c;可前往主页查询&#xff0c;&#xff08;2024.9.12,晚上20&#xff1a;53&#xff0c;将AT24C02存储芯片&#xff0c;掉电不…

charles配置安卓抓包(避坑版)

1. 下载Charleshttps://www.charlesproxy.com/ 2. 安装&#xff0c;疯狂点击下一步即可 3. 注册&#xff1a;打开Charles&#xff0c;选择“Help”菜单中的“Register Charles”&#xff0c;进网站生成密钥&#xff1a;https://www.zzzmode.com/mytools/charles/,将生成的密钥…

【Linux修行路】信号的产生

目录 ⛳️推荐 一、信号的产生 二、产生信号的系统调用 2.1 kill——给指定的进程发送指定的信号 2.2 模拟实现指令 kill 2.3 raise——给调用的进程发送指定的信号 2.4 abort——给调用者发送 6 号信号 三、验证哪些信号不可以被捕捉 四、为什么除0和解引用空指针会给…

【C++】——vector

文章目录 vector介绍vector的使用vector的构造vector迭代器vector空间增减vector增删查改 vector介绍 vector是一个动态数组&#xff0c;可以根据需求变大变小vector支持随机访问vector会自动管理内存分配和释放vector在尾部添加和删除的效率非常高&#xff0c;中间和头部插入较…

Leetcode面试经典150题-134.加油站

解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {/**如果只有一个加油站&#xff0c;那它本来就在那个为止&#xff0c;0就是它的编号?但是这只是你的想象&#xff0c;题目有个变态规定&#xff0c;自…

GD32/STM32启动过程

GD32/STM32启动过程 文章目录 GD32/STM32启动过程前言一、系统架构二、自举配置三、启动文件四、启动流程总结 前言 本文以STM32F407为例简单介绍其启动过程。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、系统架构 STM32F407的系统架构如图所…

DRW的公式推导及代码解析

流程 分阶段指定β值 # 根据当前epoch计算使用的beta值idx epoch // 160 # 每160轮epoch切换一次加权系数betas [0, 0.9999] # 两个beta值beta betas[idx] # 根据idx选择beta值 计算有效样本的权重 对权重进行归一化 &#xff08;每类权重值 / 权重总和&#xff09;* …

k8s--pod控制器--1

Pod控制器介绍 Pod是kubernetes的最小管理单元&#xff0c;在kubernetes中&#xff0c;按照pod的创建方式可以将其分为两类&#xff1a; 自主式pod&#xff1a;kubernetes直接创建出来的Pod&#xff0c;这种pod删除后就没有了&#xff0c;也不会重建 控制器创建的pod&#xf…

OpenStack × OceanBase: 打造高可用可扩展的基础设施平台

OceanBase 社区资深总监封仲淹在9月3日参加 OpenInfra 亚洲峰会中&#xff0c;分享了OceanBase与OpenStack的联合解决方案。本文将介绍这一联合方案的技术亮点及其为用户带来的独特价值。 OpenStack长期以来一直是云计算领域的先行者&#xff0c;通过提供强大的开源平台&#x…

前端正确设置资源上下文路径ContextPath(发布目录outDir 、公共基础路径),保证打包部署后站点能正常加载资源。

文章目录 引言I 处理资源上下文路径ContextPathjavascript对象获取上下文路径使用`./` 加载资源文件Vite 的basepublicPath是webpack部署应用包时的基本 URLII 知识扩展:URL的识别2.1 标准的链接格式2.2 URL中的?涵义2.3 URL中的&涵义2.4 传参III #fragment3.1为网页位置…

圆锥曲线练习

设 A ( x 1 , y 1 ) , B ( x 2 , y 2 ) A\left( x_{1}, y_{1} \right), B\left( x_{2}, y_{2} \right) A(x1​,y1​),B(x2​,y2​) l : y k ( x 2 ) l: y k\left( x2 \right) l:yk(x2) 显然 y 0 y0 y0符合题意 当 k ≠ 0 k\neq 0 k0 联立 l l l和 C C C ( k 2 1 2 ) x…

shader 案例学习笔记之偏移

效果 代码 #ifdef GL_ES precision mediump float; #endifuniform vec2 u_resolution; uniform float u_time;vec2 brickTile(vec2 _st, float _zoom){_st * 5.;_st.x step(1., mod(_st.y,2.0)) * 0.5;return fract(_st); }float box(vec2 _st, vec2 _size){_size vec2(0.5)…

【软考中级攻略站】-软件设计师(5)- 软件工程

软件生存周期 什么是软件生存周期&#xff1f; 软件生存周期指的是一个软件从开始构思到最终停止使用&#xff08;或被替换&#xff09;的整个过程。就像人的生命一样&#xff0c;软件也有一个从出生到死亡的过程。 软件生存周期的几个阶段 软件生存周期通常可以分为以下几…