当前位置: 首页 > news >正文

HPL 源码结构分析

文件夹结构:

$ cd /home/hipper/ex_hpl_hpcg/

$ pwd

$ mkdir ./openmpi

$mkdir ./openblas

$mkdir ./hpl

$ tree

1. 安装openmpi

1.1.1 使用Makefile下载配置编译安装 openmpi

Makefile:

all:wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.6.tar.gz && \tar zxf openmpi-4.1.6.tar.gz && \cd openmpi-4.1.6/ && \./configure --enable-mpi-cxx --with-cuda --prefix=${PWD}/local/ 2>&1 | tee config.out && \make -j all 2>&1 | tee make.outinstall:make -C openmpi-4.1.6/ install 2>&1 | tee install.out.PHONY: clean
clean:-rm -rf ./openmpi-4.1.6/ ./openmpi-4.1.6.tar.gz
$ make
$ make install

$ ls

1.1.2 注意事项

如果 是 openmpi 5.0及其以上,则./configure 时不能要选项:

--enable-mpi-cxx

mpi 以后仅支持使用相对广泛很多的 C 语言风格的 API,不再支持 C++ 风格的使用方式,虽然有在用,但很不主流,C 风格 api 足够强大,足够使用。

无论4.x还是5.x,如果没有安装cuda,则 ./configure 时不需要该项:

--with-cuda

而,指定安装目录时需要指定绝对路径,例如:

--prefix=${PWD}/local/

或者不使用 Makefile 方式,而使用命令行安装 openmpi:

$ wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.6.tar.g
$ tar zxf openmpi-4.1.6.tar.gz
$ cd openmpi-4.1.6/其中 configure 选项 --prefix=/.../ 需要使用绝对路径,例如:
$ ./configure --enable-mpi-cxx --with-cuda --prefix=/home/hipper/ex_hpl/openmpi/local/ 2>&1 | tee config.out
$ make -j all 2>&1 | tee make.out
$ make install 2>&1 | tee install.out

1.1.3 配置环境变量

 export PATH=/home/hipper/ex_openmpi/local/bin:$PATHexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hipper/ex_openmpi/local/libcd examplesmakempirun -np 7 hello_c

2. 安装 openblas

 
all:wget https://github.com/OpenMathLib/OpenBLAS/archive/refs/tags/v0.3.27.tar.gztar zxf v0.3.27.tar.gz make -C OpenBLAS-0.3.27 FC=gfortran -jinstall:make -C OpenBLAS-0.3.27 install PREFIX=../local/
#PREFIX=/opt/OpenBLAS
# PREFIX=../local/clean:-rm -rf ./local/ ./OpenBLAS-0.3.27/ ./v0.3.27.tar.gz

$ make
$ make install
$ ls

3. 配置编译运行 hpl

1.3.1 下载 hpl 源代码

$ wget https://www.netlib.org/benchmark/hpl/hpl-2.3.tar.gz
$ tar zxf hpl-2.3.tar.gz
$ cd hpl-2.3/

1.3.2 配置

$ cd hpl-2.3/
$ hpl-2.3$ cp ./setup/Make.Linux_PII_CBLAS ./

vim ./Make.Linux_PII_CBLAS

# ######################################################################
#
# ----------------------------------------------------------------------
# - shell --------------------------------------------------------------
# ----------------------------------------------------------------------
#
SHELL        = /bin/sh
#
CD           = cd
CP           = cp
LN_S         = ln -s
MKDIR        = mkdir
RM           = /bin/rm -f
TOUCH        = touch
#
# ----------------------------------------------------------------------
# - Platform identifier ------------------------------------------------
# ----------------------------------------------------------------------
#
ARCH         = Linux_PII_CBLAS
#
# ----------------------------------------------------------------------
# - HPL Directory Structure / HPL library ------------------------------
# ----------------------------------------------------------------------
#
#/home/hipper/ex_hpl_hpcg/hpl/hpl-2.3
TOPdir       = $(HOME)/ex_hpl_hpcg/hpl/hpl-2.3
INCdir       = $(TOPdir)/include
BINdir       = $(TOPdir)/bin/$(ARCH)
LIBdir       = $(TOPdir)/lib/$(ARCH)
#
HPLlib       = $(LIBdir)/libhpl.a
#
# ----------------------------------------------------------------------
# - Message Passing library (MPI) --------------------------------------
# ----------------------------------------------------------------------
# MPinc tells the  C  compiler where to find the Message Passing library
# header files,  MPlib  is defined  to be the name of  the library to be
# used. The variable MPdir is only used for defining MPinc and MPlib.
#
#MPdir        = /usr/local/mpi
MPdir        = $(HOME)/ex_hpl_hpcg/openmpi/local
MPinc        = -I$(MPdir)/include
MPlib        = $(MPdir)/lib/libmpi.so
#
# ----------------------------------------------------------------------
# - Linear Algebra library (BLAS or VSIPL) -----------------------------
# ----------------------------------------------------------------------
# LAinc tells the  C  compiler where to find the Linear Algebra  library
# header files,  LAlib  is defined  to be the name of  the library to be
# used. The variable LAdir is only used for defining LAinc and LAlib.
#
#LAdir        = $(HOME)/netlib/ARCHIVES/Linux_PII
LAdir        = $(HOME)/ex_hpl_hpcg/openblas/local
LAinc        =
LAlib        = $(LAdir)/lib/libopenblas.a
#
# ----------------------------------------------------------------------
# - F77 / C interface --------------------------------------------------
# ----------------------------------------------------------------------
# You can skip this section  if and only if  you are not planning to use
# a  BLAS  library featuring a Fortran 77 interface.  Otherwise,  it  is
# necessary  to  fill out the  F2CDEFS  variable  with  the  appropriate
# options.  **One and only one**  option should be chosen in **each** of
# the 3 following categories:
#
# 1) name space (How C calls a Fortran 77 routine)
#
# -DAdd_              : all lower case and a suffixed underscore  (Suns,
#                       Intel, ...),                           [default]
# -DNoChange          : all lower case (IBM RS6000),
# -DUpCase            : all upper case (Cray),
# -DAdd__             : the FORTRAN compiler in use is f2c.
#
# 2) C and Fortran 77 integer mapping
#
# -DF77_INTEGER=int   : Fortran 77 INTEGER is a C int,         [default]
# -DF77_INTEGER=long  : Fortran 77 INTEGER is a C long,
# -DF77_INTEGER=short : Fortran 77 INTEGER is a C short.
#
# 3) Fortran 77 string handling
#
# -DStringSunStyle    : The string address is passed at the string loca-
#                       tion on the stack, and the string length is then
#                       passed as  an  F77_INTEGER  after  all  explicit
#                       stack arguments,                       [default]
# -DStringStructPtr   : The address  of  a  structure  is  passed  by  a
#                       Fortran 77  string,  and the structure is of the
#                       form: struct {char *cp; F77_INTEGER len;},
# -DStringStructVal   : A structure is passed by value for each  Fortran
#                       77 string,  and  the  structure is  of the form:
#                       struct {char *cp; F77_INTEGER len;},
# -DStringCrayStyle   : Special option for  Cray  machines,  which  uses
#                       Cray  fcd  (fortran  character  descriptor)  for
#                       interoperation.
#
F2CDEFS      =
#
# ----------------------------------------------------------------------
# - HPL includes / libraries / specifics -------------------------------
# ----------------------------------------------------------------------
#
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc) -lpthread
HPL_LIBS     = $(HPLlib) $(LAlib) $(MPlib) -lpthread
#
# - Compile time options -----------------------------------------------
#
# -DHPL_COPY_L           force the copy of the panel L before bcast;
# -DHPL_CALL_CBLAS       call the cblas interface;
# -DHPL_CALL_VSIPL       call the vsip  library;
# -DHPL_DETAILED_TIMING  enable detailed timers;
#
# By default HPL will:
#    *) not copy L before broadcast,
#    *) call the BLAS Fortran 77 interface,
#    *) not display detailed timing information.
#
HPL_OPTS     = -DHPL_CALL_CBLAS
#
# ----------------------------------------------------------------------
#
HPL_DEFS     = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
#
# ----------------------------------------------------------------------
# - Compilers / linkers - Optimization flags ---------------------------
# ----------------------------------------------------------------------
#
CC           = $(HOME)/ex_hpl_hpcg/openmpi/local/bin/mpicc
CCNOOPT      = $(HPL_DEFS)
CCFLAGS      = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops
#
# On some platforms,  it is necessary  to use the Fortran linker to find
# the Fortran internals used in the BLAS library.
#
LINKER       = $(HOME)/ex_hpl_hpcg/openmpi/local/bin/mpif77
LINKFLAGS    = $(CCFLAGS)
#
ARCHIVER     = ar
ARFLAGS      = r
RANLIB       = echo
#
# ----------------------------------------------------------------------

前后区别:

$ diff Make.Linux_PII_CBLAS setup/Make.Linux_PII_CBLAS 

hipper@hipper-G21:~/ex_hpl_hpcg/hpl/hpl-2.3$ diff Make.Linux_PII_CBLAS setup/Make.Linux_PII_CBLAS
70,71c70
< #/home/hipper/ex_hpl_hpcg/hpl/hpl-2.3
< TOPdir       = $(HOME)/ex_hpl_hpcg/hpl/hpl-2.3
---
> TOPdir       = $(HOME)/hpl
85,86c84
< #MPdir        = /usr/local/mpi
< MPdir        = /home/hipper/ex_hpl_hpcg/openmpi/local
---
> MPdir        = /usr/local/mpi
88c86
< MPlib        = $(MPdir)/lib/libmpi.so
---
> MPlib        = $(MPdir)/lib/libmpich.a
97,98c95
< #LAdir        = $(HOME)/netlib/ARCHIVES/Linux_PII
< LAdir        = $(HOME)/ex_hpl_hpcg/openblas/local
---
> LAdir        = $(HOME)/netlib/ARCHIVES/Linux_PII
100c97
< LAlib        = $(LAdir)/lib/libopenblas.a
---
> LAlib        = $(LAdir)/libcblas.a $(LAdir)/libatlas.a
147,148c144,145
< HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc) -lpthread
< HPL_LIBS     = $(HPLlib) $(LAlib) $(MPlib) -lpthread
---
> HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc)
> HPL_LIBS     = $(HPLlib) $(LAlib) $(MPlib)
172c169
< CC           = $(HOME)/ex_hpl_hpcg/openmpi/local/bin/mpicc
---
> CC           = /usr/bin/gcc
179c176
< LINKER       = $(HOME)/ex_hpl_hpcg/openmpi/local/bin/mpif77
---
> LINKER       = /usr/bin/g77
hipper@hipper-G21:~/ex_hpl_hpcg/hpl/hpl-2.3$

1.3.3编译运行

make arch=Linux_PII_CBLAS

$ ls

单节点运行:

$ /home/hipper/ex_hpl_hpcg/openmpi/local/bin/mpirun -np 4 ./xhpl > HPL-Benchmark.txt
效果:
多节点:
mpirun -np 8 --host node1,node2 ./xhpl > HPL-Benchmark.txt

https://www.advancedclustering.com/act_kb/tune-hpl-dat-file
mpirun 的参数 np 值需要跟 HPL.dat 的 (P x Q) 相等。

2,hpl 源码框架分析

先保存备忘,待续。。。。

相关文章:

HPL 源码结构分析

文件夹结构&#xff1a; $ cd /home/hipper/ex_hpl_hpcg/ $ pwd $ mkdir ./openmpi $mkdir ./openblas $mkdir ./hpl $ tree 1. 安装openmpi 1.1.1 使用Makefile下载配置编译安装 openmpi Makefile&#xff1a; all:wget https://download.open-mpi.org/release/open-m…...

Java代码审计篇 | ofcms系统审计思路讲解 - 篇3 | 文件上传漏洞审计

文章目录 0. 前言1. 文件上传代码审计【有1处】1.1 可疑点1【无漏洞】1.1.1 直接搜索upload关键字1.1.2 选择第一个&#xff0c;点进去分析一下1.1.3 分析this.getFile()方法1.1.4 分析new MultipartRequest(request, uploadPath)1.1.5 分析isSafeFile()方法1.1.6 分析request.…...

【Kubernetes】常见面试题汇总(五)

目录 13.简述 Kubernetes Replica Set 和 Replication Controller 之间有什么区别&#xff1f; 14.简述 kube-proxy 作用&#xff1f; 15.简述 kube-proxy iptables 原理&#xff1f; 16.简述 kube-proxy ipvs 原理&#xff1f; 13.简述 Kubernetes Replica Set 和 Replicat…...

MySQL 解决时区相关问题

在使用 MySQL 的过程中&#xff0c;你可能会遇到时区相关问题&#xff0c;比如说时间显示错误、时区不是东八 区、程序取得的时间和数据库存储的时间不一致等等问题。其实&#xff0c;这些问题都与数据库时区设 置有关。 MySQL Server 中有 2 个环境变量和时区有关&#xff0c;…...

SpringSecurity Context 中 获取 和 更改 当前用户信息的问题

SpringSecurity Context 获取和更改用户信息的问题 SecurityContext 异步线程中获取用户信息 今天在做项目时遇到了一个问题&#xff0c;我需要获取当前用户的 ID。之前&#xff0c;前端并没有存储用户信息&#xff0c;我一直是在后端的 service 中通过 SecurityContext 来获…...

Makefile的四种赋值运算符

Makefile有四种赋值运算符&#xff1a;简单赋值&#xff08;:&#xff09;、递归赋值&#xff08;&#xff09;、条件赋值&#xff08;?&#xff09;和追加赋值&#xff08;&#xff09; 1. 简单赋值&#xff08;:&#xff09; 作用&#xff1a;覆盖之前的值。若在多次简单赋…...

framebuffer

framebuffer&#xff1a;帧缓冲、帧缓存 Linux内核为显示提供的一套应用程序接口&#xff08;驱动内核支持&#xff09; 分辨率&#xff1a;像素点的总和 像素点&#xff1a; 显示屏&#xff1a;800*600&#xff08;横向有800个像素点&#xff0c;纵向有600个像素点&#x…...

7.科学计算模块Numpy(4)ndarray数组的常用操作(二)

引言 书接上回&#xff0c;numpy能作为python中最受欢迎的数据处理模块&#xff0c;脱离不了它最核心的部件——ndarray数组。那么&#xff0c;我们今天就来了解一下numpy中对ndarray的常用操作。 通过阅读本篇博客&#xff0c;你可以&#xff1a; 1.掌握ndarray数组的分割 …...

抖音评论区截流脚本软件详细使用教学,抖音私域获客引流的五种方法。

1.先说下什么是抖音截流玩法&#xff0c;截流顾名思义就是在别的博主的视频下面去截流评论潜在流量&#xff0c;然后用评论文案的形式或者其它方式吸引用户加我们的私域~ 玩截流一定不是主动去私信别人&#xff0c;这个就不叫截流了&#xff0c;且一个账号私信多了一定会降权和…...

Linux_kernel移植uboot07

一、移植 根据硬件平台的差异&#xff0c;将代码进行少量的修改&#xff0c;修改过后的代码在目标平台上运行起来 移植还需要考虑硬件环境&#xff0c;驱动只需要考虑内核的环境 二、移植内容 1、移植Uboot uboot属于bootloader的一种&#xff0c;还有其他的bootloader&#x…...

Day-04-QFile打开文件的两种方式

一、UI界面设置两个按键&#xff0c;并直接转到槽函数 二、两种代码展示 #include <QFile> #include <QDebug>//此两种方式中调用函数&#xff0c;应包含的头文件void Widget::on_btnReadFile01_clicked()//第一种打开方式 {//1. 打开文件QFile file;file.setFile…...

第三部分:4---进程地址空间

目录 数组的空间分配解析&#xff1a; 物理地址和虚拟地址&#xff1a; 虚拟地址空间&#xff1a; 进程地址空间的本质&#xff1a; 为什么要有进程地址空间&#xff1f; 页表对进程访问内存的检查&#xff1a; 进程地址空间和页表如何关联起来&#xff1f; 进程的独立…...

【Android】程序开发组件—探究Jetpack

引言 Jetpack是一个开发组件工具集&#xff0c;它的主要目的是帮助我们编写出更加简洁的代码&#xff0c;并简化我们的开发过程&#xff0c;在这么多的组件当中&#xff0c;最需要我们关注的其实还是架构组件&#xff0c;接下来就对Jetpack的主要架构组件进行学习&#xff01;…...

pytorch torch.norm函数介绍

torch.norm 函数用于计算张量的范数&#xff08;norm&#xff09;&#xff0c;可以理解为张量的“长度”或“大小”。根据范数的不同类型&#xff0c;它可以衡量不同的张量性质。该函数可以计算 向量 和 矩阵 的多种范数&#xff0c;如 L1范数、L2范数、无穷范数 等。 1. 函数…...

【lc_hot100】刷题心得

链表 二叉树 二叉树相关的题目基本都有个基本的框架&#xff0c;基本框架就是二叉树的四种遍历方法&#xff1a;前序遍历、中序遍历、后序遍历、层序遍历 往往常用的是前序遍历和中序遍历 图 图跟二叉树一样都有自己的的基本框架&#xff0c;基本框架就是图的两种遍历方法&am…...

FANUC 数控 A06B-6058-H227 伺服放大器

‌发那科伺服放大器是一种控制电机的电子装置&#xff0c;属于电机控制系统的一部分&#xff0c;用于将输入信号放大并转换成电动机可以理解的信号&#xff0c;从而实现运动控制和定位。‌ 发那科伺服放大器的主要作用包括&#xff1a; ‌实现运动控制‌&#xff1a;通过控制…...

Python将表格文件中某些列的数据整体向上移动一行

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;对其中的每一个文件加以操作——将其中指定的若干列的数据部分都向上移动一行&#xff0c;并将所有操作完毕的Excel表格文件中的数据加以合并&#xff0c;生成一个新的Excel文件的方法。 首…...

基于YOLOv8的PCB缺陷检测算法,加入一种基于内容引导注意力(CGA)的混合融合方案(一)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文内容&#xff1a;针对基于YOLOv8的PCB缺陷检测算法进行性能提升&#xff0c;加入各个创新点做验证性试验。 1&#xff09;提出了一种基于内容引导注意力(CGA)的混合融合方案&#xff0c;mAP0.5由原始的0.966提升至0.975 1.PCB缺陷…...

如何在红米手机中恢复已删除的照片?(6 种方式可供选择)

凭借出色的相机和实惠的价格&#xff0c;小米红米系列已成为全球知名品牌。但是&#xff0c;最近有些人抱怨他们在 红米设备上丢失了许多珍贵的图片或视频&#xff0c;并希望弄清楚如何从小米手机恢复已删除的照片。好吧&#xff0c;在小米设备上恢复已删除的视频/照片并不难。…...

嵌入式实时操作系统(RTOS):原理、应用与发展

摘要&#xff1a;本文围绕嵌入式实时操作系统&#xff08;RTOS&#xff09;展开。首先介绍嵌入式系统与实时操作系统的概念&#xff0c;阐述嵌入式 RTOS 的体系结构。接着分析其关键特性&#xff0c;包含任务管理&#xff08;如任务的创建与删除、调度、同步与通信&#xff09;…...

3步终极指南:用开源TCC-G15彻底解决Dell G15散热难题

3步终极指南&#xff1a;用开源TCC-G15彻底解决Dell G15散热难题 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15笔记本的过热问题而烦恼…...

3个维度重新定义Cursor使用体验:如何突破免费试用限制

3个维度重新定义Cursor使用体验&#xff1a;如何突破免费试用限制 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tri…...

大模型评测实战指南:从基准测试到技术选型的全流程解析

1. 项目概述&#xff1a;为什么我们需要一个“大模型评测”清单&#xff1f;如果你在过去一年里深度参与过大语言模型&#xff08;LLM&#xff09;的应用开发、技术选型或者仅仅是技术追踪&#xff0c;你大概率会和我有同样的感受&#xff1a;“评测”这件事&#xff0c;变得越…...

别再复制粘贴了!用LabVIEW 2023实现TCP/IP通讯的保姆级教程(附完整DEMO下载)

LabVIEW 2023 TCP/IP通讯实战&#xff1a;从原理到健壮性设计的深度解析 在工业自动化与测试测量领域&#xff0c;稳定可靠的通讯系统如同设备的神经系统。许多LabVIEW开发者虽然能够通过复制粘贴完成基础通讯功能&#xff0c;却在真实项目中频繁遭遇数据丢失、连接不稳定等&qu…...

Pega Helm Charts:Kubernetes上企业级低代码BPM平台部署指南

1. 项目概述&#xff1a;Pega Helm Charts 是什么&#xff0c;以及为什么你需要它如果你正在或计划在 Kubernetes 上部署 Pega Platform&#xff0c;那么pegasystems/pega-helm-charts这个项目就是你绕不开的“官方说明书”和“自动化部署工具箱”。简单来说&#xff0c;这是一…...

基于GitHub Actions打造自动化工作流:测试、构建、部署

从手工到自动化的测试交付变革在软件研发流程中&#xff0c;测试从来不是孤立环节。每一次代码提交&#xff0c;都可能触发一轮新的构建、部署与验证。传统模式下&#xff0c;测试人员往往需要等待开发手动打包、手动部署到测试环境&#xff0c;再通过人工触发或定时执行测试脚…...

3分钟快速上手:SillyTavern如何让你成为AI聊天高手

3分钟快速上手&#xff1a;SillyTavern如何让你成为AI聊天高手 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 你是否厌倦了千篇一律的AI对话界面&#xff1f;想要一个能真正理解你需求、支…...

多核架构下的实时高性能计算优化与实践

1. 多核架构下的实时高性能计算革命五年前还需要超级计算机才能解决的计算密集型问题&#xff0c;如今在嵌入式多核处理器上就能实时完成。这一技术突破正在彻底改变工程计算的格局。作为从业十余年的高性能计算工程师&#xff0c;我见证了从传统集群计算到现代多核实时计算的演…...

Awesome List Creator:基于规则引擎的自动化资源清单生成工具

1. 项目概述&#xff1a;一个清单的“引擎”在信息过载的时代&#xff0c;无论是开发者寻找工具库&#xff0c;还是学习者梳理知识体系&#xff0c;一份结构清晰、内容精选的“Awesome List”&#xff08;优质资源清单&#xff09;都堪称无价之宝。然而&#xff0c;维护一份高质…...

Butlerclaw:OpenClaw AI Agent的图形化桌面管理工具

1. 项目概述如果你和我一样&#xff0c;对AI Agent的潜力感到兴奋&#xff0c;但又对OpenClaw这类框架复杂的安装、配置和日常管理感到头疼&#xff0c;那么Butlerclaw的出现&#xff0c;绝对是一个值得庆祝的消息。简单来说&#xff0c;Butlerclaw是一个为OpenClaw量身打造的“…...