并行计算入门导学
作为第一篇技术类文章(写着一篇纯属看到其他人都写的是技术类博客),本文章并不专注于讲授知识,而是大致地提供学习知识的路径和方法。时间紧迫,日后会缓慢更新。
超算竞赛
如果你是打算参加超算竞赛,那么你应该需要了解超算竞赛的流程,这里推荐《超算竞赛导引》,里面详细介绍了超算竞赛的流程,你可以很轻易的在浏览器中搜索到这个资源
主要组成部分:集群搭建、跑分、应用优化
linux系统基础
- 基本命令行的使用
- 环境管理工具
- 各种奇奇怪怪的编译
并行编程
如何利用有限的硬件资源跑得更快,这就是并行编程。并行的类型可分为数据并行以及任务并行,在层次上可分为线程级并行和进程级并行。
线程级并行
通常我们的程序都是单进程单线程一个核,如果我们开启多线程,就可以单进程多线程多个核。这种方法主要用于一个节点中,使用共享内存模型。
主要工具:openmp(非常简单)
学习资料:
《并行计算导论第四章》
进程级并行
这个方法主要用于不同节点中,使用分布式内存模型,需要注意通信问题。
主要工具: intel mpi / openmpi(难度一般)
学习资料:
Running an MPI Program (intel.com)
Open MPI: Open Source High Performance Computing (open-mpi.org)
并行编程技巧
流水线并行。
数据依赖问题。
缓存命中问题。
向量运算。
编译器优化。
并行硬件
了解并行硬件是跑分和优化题的基础。主要了解关于缓存的知识(访问一次主存的时间约好几千个时钟周期,辅存更甚)
GPU编程
并行计算中主要使用CUDA c++而非python。
一般而言,GPU适合简单且密集的运算,CPU适合复杂的运算。GPU有多个SM(类比于CPU的一个核),每个SM有多个计算核心。
学习资料:
CUDA C++ Programming Guide (nvidia.com)
并行计算入门导学
https://bruoye-nountum.github.io/2024/05/05/并行计算入门导学/