高性能计算学习路线

# 高性能计算学习路线 – 麦当 (macdown.net)

# 入门指南

# Easy:一两星期就够了!

习题:使用多线程(可以使用 openmp,std::thread, pthread 中的任意一种)和 SIMD 优化以下程序

int sum_array(int *arr, int len) {
  int sum = 0;
  for(int i = 0; i < len; ++i) {
    sum += arr[i];
  }
  return sum;
}

int dot_product(int *a, int *b, int len) {
  int sum = 0;
  for(int i = 0; i < len; ++i) {
    sum += a[i] * b[i];
  }
  return sum;
}

# Hard:来点有意思的

习题:优化矩阵乘法

void matrix_mul(int *a, int *b, int *c, int len) {
  for(int i = 0; i < len; ++i) {
    for(int j = 0; j < len; ++j) {
      int sum = 0;
      for(int k = 0; k < len; ++k) {
        sum += a[i * len + k] * b[k * len + j];
      }
      c[i * len + j] = sum;
    }
  }
}

# Lunatic:大的要来了

习题:完整参与一次比赛

# 高性能计算 = 高性能的算法 + 高性能的软件系统 + 高性能的硬件

HPC是一个比较综合的方向,涉及算法、体系结构、编程语言、操作系统、计算机网络等,还涉及专业的学科知识譬如生物信息学等,这也正是它的趣味性所在。High level 地想一想,要以最高效的方式来对一个给定问题求解,我们必然需要有高效的算法设计(上层)、高效的编程模型和代码生成(中层)、以及高效的计算机体系结构来执行机器码(下层)。要实现极致的效率,三者必须协作。

# 学习资源

利用提问的方式来梳理下一些知识,大部分都是开放式问题, 启发你自己去查找资料、思考。

# 基础篇

# 程序性能分析

# 学习OpenMP

# 学习MPI

# 学习使用高性能集群

# 提高篇

# 计算机体系结构

推荐 现代微处理器架构 90 分钟指南

# 操作系统、编译器、运行时系统、算法

推荐 高速缓存与内存一致性专栏

# 拓展阅读