自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 收藏
  • 关注

原创 稀疏线性方程组求解技术——超节点法(Supernodal)简介

直接法的基础是矩阵的分解,常见的分解形式有LU分解、Cholesky分解、LDL分解等。直接法通过将A矩阵分解成两个或多个因子的乘积,使得原方程组转化为若干个较容易求解的子问题。例如LU分解A=LU,其中L是单位下三角矩阵,U是上三角矩阵。原方程转化为LUx=b,可以通过依次求解Ly=b和Ux=y两个三角方程组来得到原方程的解。稀疏线性方程组的两类常见直接求解算法分别为方法和法,其主要思想是将完整的稀疏矩阵的分解任务转化成许多个相对稠密的子矩阵的分解任务。

2024-09-25 15:59:37 645

原创 C++如何进阶? -- 整理一些学习资料

在学习完C++最基础的知识后,需要对C++有更近一步的认知。看门见山,首先贴出学习资料:侯捷老师的这几个视频是每个学习C++的人都应该仔细看几遍下来的,只看一遍是绝对记不住的具体来说必看的两本书,或者说,必看的两本书和一章节是STL源码剖析、Effective C++、深度探索C++对象模型第三章(虚函数)。而选看的两本书: More Effective C++、深度探索C++第三章以外的部分。

2024-09-22 12:00:52 342

原创 C++返回值优化(Return Value Optimization, RVO)与移动语义(Move Semantics)

在C++编程中,返回值优化(Return Value Optimization, RVO)与移动语义(Move Semantics)是提高程序效率、减少不必要的对象复制的重要机制。

2024-09-19 20:51:38 333

原创 一文入门生成式AI(理解ChatGPT的原理)

以ChatGPT为代表的生成式AI,是对已有的数据和知识进行,总结出数据的。从而在生成内容时,根据用户需求,结合关联字词的。可以这么联想,ChatGPT就是一个的机器,他会根据你给出的关键词,自动生成关键词的下一个最有可能衔接的词语。比如你说,“世界上最高的山”,ChatGPT就会回答“喜马拉雅山”。大模型需要:算力、数据/存力、算法这三大要素。算力:即需要GPU、NPU这些硬件进行训练。数据/存力:生成式AI需要处理和存储大量的数据。以GPT-3为例,光是训练参数就达到了1750亿个,

2024-09-17 22:14:00 1197

原创 钥匙和房间的题解——使用dfs或bfs进行图遍历

这 n 个房间看成有向图中的 n 个节点,在x号房拿到了打开y号房的钥匙,可以看作是图中的 x 号点到 y 号点的一条有向边。这样一来,问题就变成了给定一张有向图,询问从 0 号节点出发是否能够到达所有的节点。

2024-09-17 11:35:03 334

原创 线性方程组求解——预处理Preconditioning介绍

通俗地说, 预处理就是将难以求解的问题转化成等价的容易求解的新问题对于线性方程组而言, 预处理就是对(病态) 系数矩阵进行适当的线性变换,转换为一个(良态) 新矩阵, 从而达到改善迭代法收敛性的目的.预处理子选取基本准则:一个好的预处理子P 通常需满足下面两个要求:(1)具有更小的条件数和(或) 更好的特征值分布;P是A的一个很好的近似。(2) 线性方程组Pz = r 容易求解, 即预处理子P 的使用成本低廉.▶ 第一条是为了确保预处理后的线性方程组更容易求解, 即预处理子有效。

2024-09-11 16:08:24 736

原创 混合精度、异构计算——杂记

SM是streaming multiprocessor的简写,4个处理单元组成一个SM,如Figure 2。每个SM有64个INT32,64个FP32,32个FP64的CUDA core;每个SM还有4个Tensor Core。SM内共享L1缓存。CUDA Core是用作通用计算的,Tensor Core是专门针对深度学习优化的,负责矩阵运算、混合精度运算。Figure 1Figure 3展示了NVDIA不同代GPU的特性。Figure 3. 各代GPU架构。

2024-08-04 10:34:25 357

原创 好书推荐——《Parallel and High Performance Computing》(并行计算与高性能计算)

本书是由Robert Robey和Yuliana Zamora合著的专业著作,不仅从基础概念讲起,逐步深入到高级主题,还涵盖了最新的并行计算技术,如多核处理器、GPU加速和分布式计算系统。通过案例分析和实际应用,本书使理论与实践相结合,详细介绍了。等行业内标准工具的使用,适合计算机科学与工程专业的学生、研究人员、开发者以及对高性能计算技术感兴趣的技术爱好者。,任职于美国洛斯阿拉莫斯国家实验室,30多年来一直活跃在并行计算领域。出版日期:2021年。

2024-07-22 12:57:05 421

原创 C++常用但难记的语法

static和inline联合使用既能提高程序的运行效率又能让其声明后被多个.c文件使用。

2024-07-22 11:43:25 428

原创 内存问题检测工具——Valgrind

Valgrind 可以用来检测程序是否有非法使用内存的问题,例如访问未初始化的内存、访问数组时越界、忘记释放动态内存等问题。Valgrind最好和GCC编译器配合使用。或者,MPI分布式运行。

2024-07-22 11:31:53 231

原创 非线性系列(三)—— 非线性求解器算法分类

CAE中的非线性方程组求解主要依赖牛顿法(及牛顿法的变体),步骤如下。

2024-07-10 20:03:31 457

原创 slurm常用命令——多线程、多进程设置

这个命令是在用户的bashrc文件中添加一个名为"sq"的别名,用于列出当前用户的所有作业信息。具体来说,它使用了squeue命令来查询当前用户的所有作业信息,并将结果输出到终端。输出的信息包括作业ID、作业所属的分区、作业名称、作业提交者、作业状态、作业使用的内存、作业运行时间、作业的优先级等。这是一个用于查看当前用户正在运行的作业的命令。它将显示作业的ID、分区、作业名称、用户、状态、内存使用情况、节点和运行时间。

2024-05-09 17:43:44 637

原创 c++中constexpr的一个用法——在泛型编程中的作用

constexpr`是C++11引入的关键字,用于指示编译器在编译时进行计算和优化,以便在运行时获得更好的性能。在这个特定的上下文中,`constexpr`用于在编译时检查一个条件,并根据该条件的结果在编译时执行不同的代码。如果条件为`true`,则编译器将执行`if`语句中的代码块。如果条件为`false`,则编译器将忽略`if`语句中的代码块。这在泛型编程(运用模版)中很有作用,由于模板的typename类型可以改变,但是如果我们某段代码需要执行只有Type类型的变量才有的方法/属性。

2024-05-08 16:53:44 246

原创 c++多线程2小时速成

c++多线程基础需要掌握这三个标准库的使用:std::thread,std::mutex, andstd::async。

2024-05-04 17:36:18 1325

原创 Linux易错指令: 文件覆盖>和文件追加>>

指令 > : 如果文件存在,将原来文件的内容覆盖;原文件不存在则创建文件,再添加信息。指令 >>:不会覆盖原文件内容,将内容追加到文件的尾部。

2024-04-18 16:08:47 148 1

原创 非线性系列(二)—— 共轭梯度法 Conjugate Gradient Method (线性及非线性)

CG方法第一次被用来解非线性优化问题,是由Fletcher和Reeves提出的。(英语:BiConjugate gradient method)提供了一种处理非对称矩阵情况的推广。共轭梯度法(英语:Conjugate gradient method),是求解系数矩阵为。共轭梯度法中,搜索方向p,是关于A共轭的,即。最后的解为 [1, 1],f(x)最小值为0。其中delta为方向,beta为步长。共轭梯度法是一个迭代方法,它适用于。的线性方程组的数值解的方法。1. 求解线性方程组,首先安装自动微分工具。

2024-04-14 08:10:46 1212

原创 非线性系列(一)—— 非线性方程组求解与优化的关系 Nonlinear & Optimization

解非线性方程(Nonlinear Equations)的技术在其动机、分析和算法实现方面与优化技术(Optimization)有重叠。

2024-04-08 21:10:45 652

原创 分割数组的两种解法:动态规划、二分法

(包括当前子数组),那么每当 sum 加上当前值超过了 cnt,我们就把当前取的值作为新的一段分割子数组的开头,并将 cnt 加 1。遍历结束后验证是否 cnt 不超过 k。本题中,我们注意到:当我们选定一个值 x,我们可以线性地验证是否存在一种分割方案,满足其最大分割子数组和不超过 x。地模拟分割的过程,从前到后遍历数组,用 sum 表示当前分割子数组的和,cnt 表示已经分割出的。「将数组分割为 m 段,求……」是动态规划题目常见的问法。最大值尽可能小」是二分搜索题目常见的问法。

2024-03-24 15:24:48 221 1

原创 License授权的基本思路

对于收费软件,一般是我们需要去购买一个许可,然后输入这个许可到软件里就能够使用软件。于是有的小伙伴就开始好奇这个许可是怎么实现的,特别是在情况下它是怎么给软件授权,同时又能避免被破解的。

2024-03-22 16:10:39 1200 1

原创 C++ 智能指针的正确使用方式:unique_ptr VS shared_ptr

我们大多数场景下用到的应该都是 unique_ptr。unique_ptr 代表的是专属所有权,即由 unique_ptr 管理的内存,只能被一个对象持有。所以,unique_ptr 不支持复制和赋值// 编译错误如果想要把 w 复制给 w2, 是不可以的。因为复制从语义上来说,两个对象将共享同一块内存。因此,unique_ptr 只支持移动// w2 获得内存所有权,w 此时等于 nullptr。

2024-03-14 10:50:10 3055 2

原创 NUMA(Non-Uniform Memory Access)架构的介绍

最早的CPU是以下面这种形式访问内存的:在这种架构中,所有的CPU都是通过一条总线来访问内存,我们把这种架构叫做SMP架构(Symmetric Multi-Processor),也就是对称多处理器结构。但是随着CPU多核技术的发展,,因为所有的处理器都通过一条总线连接起来,因此随着处理器的增加,系统总线成为了系统瓶颈,另外,处理器和内存之间的通信延迟也较大。

2024-03-10 17:33:11 1660 1

原创 奇异值分解(SVD)的应用——图像压缩

我们想寻找一个A的逼近:Ak,使得rank(Ak) = k < n,且|A - Ak|最小。下面的定理(也称为Schmidt-Mirsky, Eckart-Young定理。

2024-02-10 20:41:04 975 1

原创 矩阵的正定(positive definite)性质的作用

注意,本文中正定和半正定矩阵不要求是对称或Hermite的。

2024-02-06 20:09:05 1394 1

原创 MPI 集体通信(collective communication)

MPI_REDUCE将组内每个进程输入缓冲区中的数据按给定的操作op进行运算,并将其结果返回到序列号为root的进程的输出缓冲区中。

2024-01-28 21:30:03 937

原创 MPI学习网站和资料

1. MPI 文档2. MPI练习题3. 推荐书籍。

2024-01-21 22:37:30 481

原创 MPI并行计算第一课(2小时入门)

MPI 全名叫 Message Passing Interface,即信息传递接口,作用是可以通过 MPI 可以在不同进程间传递消息,从而可以并行地处理任务,即进行。

2024-01-21 11:37:11 2562

原创 Leading Dimension是什么

矩阵在内存中存储时是连续地按(某种)顺序存储的,比如下图,A矩阵是列主序,那么A(0,0)和A(0,1)之间其实是不连续的,相隔了ldA个元素。在LAPACK中频繁出现Leading Dimension(中文翻译为“主维度”),那么它是什么呢?可以看到,里面的LDA就是A的行数。

2024-01-14 12:00:56 624 1

原创 计算机网络第一课

先了解层级:

2024-01-01 18:36:59 694

原创 SOLID之依赖倒置原则

依赖倒置原则(DIP,Dependence Inversion Principle)的定义是:高层模块不应该依赖底层模块,两者都应该依赖其抽象。抽象不应该依赖细节,即接口或抽象类不依赖于实现类。细节应该依赖抽象,即实现类不应该依赖于接口或抽象类。在具体软件设计时,上层模块不应该依赖于底层模块,底层模块更不应该依赖上层模块,而是上层模块和底层模块都向中间靠拢,共同依赖于二者中间的。整个软件程序设计的依赖关系应该终止于抽象接口层,上层和底层互不关心,甚至使用什么编程语言都不关心。

2023-12-31 11:37:31 442

原创 特征值求解——重启Arnoldi方法和收缩(deflation)技术

Arnoldi向量转换为Schur向量,注意,只作用在新近收敛的向量和下一个初始向量上。注意上面两个算法的区别,Algorithm 2相比1唯一的不同是,循环是从k+1开始的,也就是只改变Vm和Hm的最后m-k列,即active部分。在下一次的arnoldi过程中,只有m-k个arnoldi向量被计算,也就是active vectors。,我们将这个R的子矩阵取出来记为Rk,对应的Q中的前k列取出来记为Qk,那么我们有。注意,S≡Range(Qk)是A的不变子空间,对应着k个特征值,

2023-12-17 15:38:45 487

原创 “数据结构”模式之迭代器(Iterator)模式

常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。典型模式:CompositeIteratorChain of Resposibility1 模式动机在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合...

2023-12-03 21:27:00 77

原创 “接口隔离模式”之外观模式(门面模式)

1 模式动机外观模式属于“接口隔离模式”的一种。下图中,A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦?使用B方案的好处:无论系统内部如何变化,对外的接口(Facade)是没有变化的。2 模式定义...

2023-12-03 17:11:00 63

原创 适配器模式

1 模式动机在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象(老接口)的良好实现,同时又能满足新的应用环境所要求的接口?Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况",在遗留代码复角、类库迁移等方面非常有用。2 模式定...

2023-11-29 23:53:00 48

原创 观察者模式

1 模式动机建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。观察者模式的核心思想是1对多2 模式定义观察者模式(Observer P...

2023-11-26 21:46:00 35

原创 UML模型图之类图——以图书馆管理系统为例

UML模型图中类图是依据系统结构从静态观点描述系统的视图,它定义系统中的对象和类及类之间的关系,以及类的内部结构,即类的属性和操作。通过分析图书管理系统的用例模型和系统功能需求,作为借阅者(Borrower)需要有查书、借书、还书的行为(BorrowerInf),老师(Teacher)和学生(Student)作为借阅者时可借数量不一样,书目标题(Title)作为查找对象也必不可少。它们之间关系...

2023-11-26 21:11:00 5952 1

原创 c++右值引用、移动语义、完美转发

1.左值、右值、左值引用以及右值引用左值:一般指的是在内存中有对应的存储单元的值,最常见的就是程序中创建的变量右值:和左值相反,一般指的是没有对应存储单元的值(寄存器中的立即数,中间结果等),例如一个常量,或者表达式计算的临时变量int x = 10 int y = 20int z = x + y //x, y , z 是左值//10 , 20,x + y 是右值,因为它们...

2023-11-07 19:26:00 31

原创 Leetcode刷题模版总结

1. 双指针双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。1)滑动窗口若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。例题:class Solution {public: int maxVowels(string s, int k) { ...

2023-10-06 21:43:00 170

原创 特征值问题——polynomial filtering 技术

介绍为什么会有polynomial呢?因为特征值求解的常用技术比如幂迭代等,会用到polynomial,这些多项式迭代可以写成这种形式,,q代表polynomial的度数。我们因此需要一些近似(approximation)技巧构造一个好的多项式$p_q$。Filtering方法的用处:增加收敛性,从而达到加速的效果。Filtering方法的思路:目的是通过预处理近似特征向量或子空间,以增强...

2023-10-03 11:06:00 46

原创 Leetcode刷题本地debug框架搭建

思路1. 初版cmake + 单一.cpp文件参考:https://blog.songjiahao.com/archives/3622. 改良版cmake + 源文件、头文件(含List、Tree等数据结构)分离 + gtest参考:https://github.com/Pokerpoke/LeetCodeNormal模板以Leetcode 1 两数之和 为例#include...

2023-09-10 16:28:00 504

原创 吃透单调栈(2)——解两道Hard题:接雨水、柱状图中最大的矩形问题

怎么想到要用单调栈的?这类题目的数据通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置(寻找边界),此时我们就要想到可以用单调栈了。42.接雨水这道题就是要求解每一个柱子左边第一个比它高的柱子,以及右边第一个比它高的柱子,然后这两个柱子间形成的凹槽面积。注意,是横向扫来求面积。比如下图,4号柱左边第一个比它高的柱子是3号,右边第一个比它高的是7号,面积是蓝色...

2023-09-03 15:55:00 92

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除