【超算/先进计算学习】日报4

news2024/11/20 4:34:44

目录

  • 今日已完成任务列表
  • 遇到的问题及解决方案
  • 任务完成详细笔记
    • 高性能算法
      • 计算机算法的特征及内涵
      • 科学计算算法的主要分类
      • 高性能算法与传统算法的异同
      • 稀疏矩阵向量乘法 SpMV 与稀疏矩阵存储结构
      • 常见的稀疏矩阵传统存储与其SpMV算法
      • 不同的稀疏矩阵传统存储结构存储效率与稀疏度
      • 针对 SpMV 的矩阵存储优化格式-CSR-CIMD
      • 高性能数学算法库的概念
      • BLAS/LAPACK 的使用
      • PETSc 的使用
  • 对自己的表现是否满意
  • 简述下次计划
  • 其他反馈

今日已完成任务列表


4-3、高性能算法

遇到的问题及解决方案


PETSc的安装
主要参考:link
安装步骤:

这里假设在 ~/trainees/username 目录下操作,命令前没有写路径的表示没有路径要求 (应该)

  • 拷贝安装包到用户目录
cp ~/software/petsc-3.18.1.tar ~/trainees/username
  • 对安装包进行解压
trainees/username$: tar -xf petsc-3.18.1.tar
  • 下载 petsc-pkg-fblaslapack.zip 包并上传 (download)

这里可以将其下载到本机,之后使用 mobaxterm 上传到 /username 文件夹下

  • 对 petsc-pkg-fblaslapack.zip 包进行解压
trainees/username$: unzip petsc-pkg-fblaslapack.zip
  • 移动 petsc-pkg-fblaslapack 到 petsc-3.18.1 下
mv ~/trainees/username/petsc-pkg-fblaslapack ~/trainees/username/petsc-3.18.1
  • 获取 MPI
module avail | grep mpi-n
module load mpich/mpi-n-gcc9.3.0
  • 查看 mpi 的路径
which mpif90

/thfs1/software/mpich/mpi-n-gcc9.3.0/bin/mpif90

  • 对一些基本变量进行设置
trainees/username/petsc-3.18.1$: export PETSC_DIR=$PWD
trainees/username/petsc-3.18.1$: mkdir arch-linux-c-debug   # 这里的文件夹命名随意, 自己记得就行
trainees/username/petsc-3.18.1$: export PETSC_ARCH=arch-linux-c-debug
  • 对安装进行配置
trainees/username/petsc-3.18.1$: ./configure --prefix=~/trainees/username/petscinstall --with-mpi-dir=/thfs1/software/mpich/mpi-n-gcc9.3.0/ --download-fblaslapack=petsc-pkg-fblaslapack

其中 --prefix 指定将来安装的路径,按要求设置为 ~/trainees/username/petscinstall

  • 安装
trainees/username/petsc-3.18.1$: make PETSC_DIR=~/trainees/username/petsc-3.18.1 PETSC_ARCH=arch-linux-c-debug all

完成之后执行

trainees/username/petsc-3.18.1$: make PETSC_DIR=~/trainees/username/petsc-3.18.1 PETSC_ARCH=arch-linux-c-debug install

之后就会发现 /username/petscinstall 文件夹下有 include、lib了

  • 拷贝 ex1.c 到用户目录
cp ~/trainees/username/petsc-3.18.1/src/ksp/ksp/tutorials/ex1.c ~/trainees/username
  • 将 lib 加到系统环境变量
export LD_LIBRARY_PATH=~/trainees/username/petscinstall/lib
  • 动态编译 ex1
trainees/username$: mpicc -o ex1 ex1.c -I ~/trainees/username/petscinstall/include -L ~/trainees/username/petscinstall/lib -l petsc
  • 使用天河运行
trainees/username$: yhrun -n 1 -N 1 -p thcp1 ./ex1

任务完成详细笔记


高性能算法

计算机算法的特征及内涵

计算机算法包含:[输入]、计算、输出三部分,可以没有输入
计算机算法五大特征:

  • 有穷性:一个算法必须是执行有限步之后结束
  • 确切性:每一步都有确切的意义
  • 可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现
  • 输入:一个或零个输入,刻画运行时对象的基本信息
  • 输出:一个算法有一个或多个输出,没有输出的算法没有意义

科学计算算法的主要分类

计算机应用算法分类:

  • 稠密线性系统:BLAS,GEMM
  • 稀疏线性系统:SPMV,HPCG
  • 谱方法:FFT
  • 多体方法:快速多极子算法
  • 结构化网络:速度快,精度高
  • 非结构化网络:适应复杂模型
  • MapReduce:MC (Monte Carlo)
  • 组合逻辑:AES、DES等加密算法
  • 图遍历:Graph500,搜索算法
  • 动态规划
  • 分支限界
  • 图模型
  • 有限状态机

计算原语:逻辑运算

高性能算法与传统算法的异同

程序 = 数据结构 + 算法
高性能程序 = 数据结构 + 算法 + 体系结构

  • 传统概念上程序只需关注基本的数据结构及算法流程,只是我们默认有支撑程序运行的软硬件环境
  • 高性能程序需要关注与体系架构相适应的数据结构,与体系架构相适应的高效算法
  • 并且需要兼顾多体系结构平台的可移植性与高效性

稀疏矩阵向量乘法 SpMV 与稀疏矩阵存储结构

在这里插入图片描述
稀疏矩阵:矩阵中,大量的元素值是 0 的矩阵,30% 甚至更多的 0 元素
在这里插入图片描述
SpMV算法:

for(i=0; i<m; i++)
{
	for(j=row[i]; j<row[i+1]; j++)
	{
		y[i] += data[j]*x[col[j]];
	}
}

稀疏矩阵的存储方法:压缩存储

  • 存储矩阵的一般方法是采用二维数组,其优点是可以随机地访问每一个元素,因而能够容易实现矩阵的各种运算
  • 但对于稀疏矩阵,通常具有很大的维度,有时候甚至大到整个矩阵 (零元素) 占用了绝大部分内存,采用二维数组的存储方法既浪费大量的存储单元来存放零元素,有要在运算中浪费大量的时间来进行零元素的无效运算。因此对稀疏矩阵进行压缩存储 (只存储非零元素)

常见的稀疏矩阵传统存储与其SpMV算法

COO (Coordinate Matrix) 坐标存储格式
CSR (Compressed Spare Row Matrix) 压缩稀疏行格式
CSC (Compressed Sparse Column Matrix) 压缩稀疏列矩阵
BSR (Block Spare Row Matrix) 分块压缩稀疏行格式
DIA (Diagonla Matrix) 对角存储格式

  • 稀疏矩阵的COO格式
    采用三元组 (row,col,data) 的形式来存储矩阵中非零元素的信息,三个数组row、col和data分别保存非零元素的行下标、列下标与值 (一般长度相同),故 coo[row[k]][col[k]] = data[k],即矩阵的第row[k] 行、第 col[k] 列的值为 data[k]
    在这里插入图片描述
  • CSR 存储格式
    csr_matrix 是按行对矩阵进行压缩的,通过 inidices,indptr,data 来确定矩阵。data 表示矩阵中的非零数据,对于第 i 行而言,该行中非零元素的列索引为 indices[indptr[i]:indices[i+1]]
    在这里插入图片描述
  • DIA 存储格式
    最适合对角矩阵的存储方式,dia_matrix通过两个数组确定:data 和 offsets,data:对角线元素的值,offsets:第 i 个 offsets 是当前第 i 个对角线和主对角线的距离,data[k:] 存储了 offsets[k] 对应的对角线的全部元素
    在这里插入图片描述

不同的稀疏矩阵传统存储结构存储效率与稀疏度

在这里插入图片描述

通常情况下 CSR 存储效率较高
在这里插入图片描述

针对 SpMV 的矩阵存储优化格式-CSR-CIMD

SpMV 优化的重点在于改良稀疏矩阵的存储结构,提升稀疏矩阵向量乘时的 Cache 命中率,并充分利用 CPU 内部硬件特性,或者多核平台来改善效率

  • 改良稀疏矩阵的存储结构,提升 Cache 命中率
    提出新的稀疏矩阵存储格式
    自动选择最优存储方式
  • 充分利用CPU内部硬件特性
    向量化技术(SIMD)
    流水线技术(Pipeline)
    预取技术(Prefetch)
  • 多核平台来改善效率
    启发式搜索最优划分块大小
    多线程下自动给出划分块大小
    SpMV 优化举例:CSR 存储格式下的优化 —— CSR-SIMD
    该存储格式在 CSR 的基础上,将非零元进一步压缩为可变长的具有来连续地址的非零元段,以段的方式对矩阵进行存储。通过这种方式,CSR-SIMD 中的每个非零元段都可以进行完全的向量化计算,同时增强了稀疏矩阵 A 以及向量 x 的数据局部性,以此达到性能加速效果
    在这里插入图片描述

按照上图中的方式,每段包含4个元素,每次计算 4 个元素,理论上可以将性能提高 4 倍

高性能数学算法库的概念

算法库:是计算领域的基础软件库,是发挥硬件算力的基石
在这里插入图片描述
主流硬件厂商会为自身硬件提供优化的算法库
在这里插入图片描述

BLAS/LAPACK 的使用

BLAS (Basic Linear Algebra Subprograms) 基础线性代数子程序。定义了一组应用接口标准,是一系列初级操作的规范,如向量之间的乘法、矩阵之间的乘法等

Level1:矢量-矢量运算:矢量/向量加

  • cblas_scopy、cblas_sscal

Level2:矩阵-矢量运算:矩阵向量乘

  • cblas_sgemv

Level3:矩阵-矩阵运算:矩阵矩阵乘

  • cblas_sgemm

LAPACK (linear algebra package) 著名的线性代数库。底层是 BLAS ,在此基础上定义了很多矩阵和高级向量高级运算的函数,如矩阵分解、求逆和求奇异值等,该库运行效率高于 BLAS
在这里插入图片描述
静态库:libxxxx.a
编译时库里面的代码会被编译进可执行程序里面
动态库:libxxxx.so
编译时只链接库文件中的程序接口,只有在真正运行时才会调用库中的接口

静态库文件大小大于动态库文件
静态库编译出的可执行文件无法在各平台间进行移植
动态库在编译之前要确保将其路径加到系统环境变量 LD_LIBRAY_PATH 里

填空练习
假设/home/blas/include下包含blas库的头文件,/home/blas/lib下包含blas的静态库文件libblas.so,对于一个用fortran语言编写的使用了blas接口的源程序mycode.f90,则编译命令为:

gfortran –O2 mycode.f90 -o mycode -I /home/blas/include -L /home/blas/lib -l blas

PETSc 的使用

PETSC

  • PETSc (Protable, Extensible Toolkit for Scientific Computation),主要用于高性能求解偏微分方程组及相关问题。目前 PETSc 所有消息传递均采用 MPI (集群间分布式并行通信) 标准实现
  • PETSc 用 c 语言开发,遵循面向对象设计的基本特征,用户可以基于 PETSc 对象灵活开发应用程序。目前 PETSc 支持 Fortran 77/90、C 和 C++编写的串行和并行代码
    PETSc架构
    在这里插入图片描述
    PC (预处理)

为什么需要预处理?
1、如果 A 的性质不那么好,是病态的,或者主对角线上的元素很小,或者特征值很小,那么收敛起来就会非常慢
2、将一个矩阵经过预处理后划分为多个类似结构的矩阵,实现天生并行化

PETSc 基本对象

  • 向量
  • 矩阵
  • 索引集

PETSc并行原理
基于块划分的方式,例如:如果有两个进程,会把一个向量的上半部分划给 P0,下半部分划给 P1,同样将矩阵的上半部分划给 P0,下半部分划给 P1,中间需要进行信息交换处会由 PETSc 自动进行管理。
在这里插入图片描述

对自己的表现是否满意

今天对高性能计算有了初步的了解,同时了解到了几种矩阵的存储格式,花了大量时间安装 PETSc,最后终于弄好 〒▽〒

简述下次计划

程序性能分析、传统性能优化

其他反馈

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux进程概念及状态

Linux进程概念及进程状态 目录 Linux进程概念及进程状态引入1、什么是进程1.1 描述进程1.2 task_struct组织进程1.3 proc目录 2、进程标识符3、查看进程4、bash进程5、初始fork6、进程状态6.1 操作系统层面6.2 Linux内核源代码RSDX 6.3 僵尸进程6.4 孤儿进程关于kill指令 引入 …

nssctf web 入门(9)

[SWPUCTF 2021 新生赛]sql [SWPUCTF 2021 新生赛]sql 可以猜测做了过滤 这里可以bp跑一下看过滤了哪些 尝试发现过滤了空格/**/在sql中代表注释符在mysql中这个可以用来代表空格 发现--被过滤 #也不行我们试下url编码的#也就是%23 成功了 3个字段 得到库名test_db 这里提示非…

一篇文章让你彻底学会--防抖(并且自己可以手写)

Hi,有的小伙伴们在面试的时候会被要求手写防抖函数&#xff0c;很多都被难着了吧&#xff0c;宝贝&#xff0c;那你你没有理解防抖函数。 今天&#xff0c;就让我带你攻克它&#xff01; 1.防抖 防抖:单位时间内&#xff0c;频繁触发事件&#xff0c;只执行最后一次。 人话:说…

嵌入式Linux(1):make menuconfig图形化界面

文章目录 搜索功能配置驱动状态退出和make menuconfig有关的三个文件make menuconfig会读取哪个目录下的Kconfig文件&#xff1f;为什么要复制成.config而不复制成其他的文件呢&#xff1f;在默认的deconfig上面通过make menuconfig来改配置&#xff0c;然后保存怎么和Makefile…

门店智能经营平台能解决哪些问题?应该如何选购?

现在很多实体店都开始借助第三方软件或系统&#xff0c;来为自家门店搭建门店智能经营平台&#xff0c;来智能管理自家门店的商品和库存&#xff0c;提高门店运营效率。 一、使用门店智能经营平台能解决哪些难题&#xff1f; 1、实现数据化决策 通过门店智能经营平台&#xff…

VUE3的使用

文章目录 一、Vue3基础语法1、Vue开发准备2、Vue的模板语法3、条件渲染4、列表渲染5、事件处理6、表单输入绑定 二、Components组件1、组件基础2、组件交互3、自定义事件的组件交互4、组件生命周期5、引入第三方组件 三、网络请求及路由配置1、Axios网络请求2、Axios网络请求封…

【Python_Matplotlib学习笔记(一)】pyplot模块的基本用法

pyplot模块的基本用法 前言 Matplotlib 是一个 Python 的 2D绘图库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形&#xff08;来自&#xff1a;百度百科&#xff09;。pyplot 模块是 Matplotlib 模块提供的快速绘图模块&#xff0c;它模仿了 MA…

H12-831最新解析25题

401、(判断)isis silent命令用来配置IS-IS接口为抑制状态&#xff0c;即抑制该接口接收和发送IS-IS报文&#xff0c;但此接口所在网段的路由可以被发布出去。 A.TRUE B.FALSE 答案&#xff1a;A 解析&#xff1a;isis silent命令为设置静默接口&#xff0c;配置了之后该接口…

5.1、阻塞/非阻塞、同步/异步(网络IO)

5.1、阻塞/非阻塞、同步/异步&#xff08;网络IO&#xff09; 1.阻塞/非阻塞、同步/异步(网络IO)①典型的一次IO的两个阶段是什么&#xff1f; 2.日志系统①基础知识②整体概述③本文内容④单例模式1.经典的线程安全懒汉模式2.局部静态变量之线程安全懒汉模式 ⑤饿汉模式⑥条件…

Tomcat 部署与优化

1. Tomcat概述 Tomcat是Java语言开发的&#xff0c;Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;是Apache软件基金会的Jakarta项目中的一个核心项目&#xff0c;由Apache、Sun和其他一些公司及个人 共同开发而成。Tomcat属于轻量级应用服务器&#xff0c;在…

电商系统架构设计系列(一):电商系统到底是如何设计出来的?

引言 电商这个业务&#xff0c;和我们的生活息息相关。你可能对电商多少有一些了解&#xff0c;但是&#xff0c;即使是一个最小化的电商系统&#xff0c;它仍然非常复杂。在这个系列的文章里&#xff0c;我们将一起以一个创业公司的 CTO 的视角&#xff0c;来设计一个最小化的…

深度学习实战26-(Pytorch)搭建TextCNN实现多标签文本分类的任务

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下深度学习实战26-(Pytorch)搭建TextCNN实现多标签文本分类的任务&#xff0c;TextCNN是一种用于文本分类的深度学习模型&#xff0c;它基于卷积神经网络(Convolutional Neural Networks, CNN)实现。TextCNN的主要思想…

C语言实现链表--数据结构

魔王的介绍&#xff1a;&#x1f636;‍&#x1f32b;️一名双非本科大一小白。魔王的目标&#xff1a;&#x1f92f;努力赶上周围卷王的脚步。魔王的主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王.&#x1f525;&#x1f525;&#x1f525; ❤️‍&#x1…

gateway整合knife4j(微服务在线文档)

文章目录 knife4j 微服务整合一、微服务与单体项目文档整合的区别二、开始整合1. 搭建一个父子maven模块的微服务,并引入gateway2.开始整合文档 总结 knife4j 微服务整合 由于单个服务的knife4j 整合之前已经写过了,那么由于效果比较好,然后微服务的项目中也想引入,所以开始微…

【Linux】多线程的互斥与同步

目录 一、线程冲突 二、重入与线程安全 1、线程不安全的情况 2、线程安全的情况 3、不可重入的情况 4、可重入的情况 5、可重入和线程安全的联系 6、STL是否线程安全 7、智能指针是否线程安全 三、互斥锁 1、互斥锁的使用 2、基于RAII风格的互斥锁的封装 2.1Mutex…

ChatGPT-4回答电子电路相关问题,感觉它有思想,有灵魂,一起看看聊天记录

前几天发了一篇文章&#xff0c;讲了我们平常摸电脑或者其它电器设备的时候&#xff0c;会有酥酥麻麻的感觉&#xff0c;这个并不是静电&#xff0c;而是Y电容通过金属壳泄放高频扰动&#xff0c;我们手摸金属壳的时候&#xff0c;就给Y电容提供了一个泄放回路&#xff0c;所以…

全网抓包天花板教程,CSDN讲的最详细的Fiddler抓包教程。2小时包你学会

目录 前言 一、安装 Fiddler 二、打开 Fiddler 并设置代理 三、抓取 HTTP/HTTPS 流量 四、流量分析和调试 五、应用场景 六、注意事项 七、实际案例 八、拓展阅读 九、结论 前言 Fiddler 是一款功能强大的网络调试工具&#xff0c;可以用于捕获和分析 HTTP 和 HTTPS …

生物信息学有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是几个生物信息学领域的SCI期刊推荐&#xff1a; Bioinformatics&#xff1a; 该期刊是生物信息学领域最具影响力的SCI期刊之一&#xff0c;涵盖了生物信息学、计算生物学、系统生物学、生物医学工程等多个研究方向。 BMC Bioinformatics&#xff1a; 该期刊是生物信息学…

数据结构入门(C语言版)二叉树链式结构的实现

二叉树链式结构的实现 二叉树的概念及结构创建1、概念2、结构创建2、创建结点函数3、建树函数 二叉树的遍历1、前序遍历2、中序遍历3、后序遍历4、层序遍历 二叉树的销毁结语 二叉树的概念及结构创建 1、概念 简单回顾一下二叉树的概念&#xff1a; ★ 空树 ★非空&#xff1…

intellij 从2020升级到2023 踩坑实录

1.下载新版本intellij 工作机器上的intellij版本为2020社区版&#xff0c;版本比较老旧&#xff0c;需要进行升级。IDE这种提高生产力的工具&#xff0c;还是蛮重要的&#xff0c;也是值得稍微多花点时间研究一下的。升级之前就预计到了不会是那么简单&#xff0c;后面事实也证…