课程的讲解顺序
- 单核向量–>多线程–>多个节点分布式编程–>cuda/gpu编程
多线程Pthread编程
Pthread编程(POSIX): 共享内存式的编程 (书上第四章内容)
共享内存和分布式内存回顾
Pthreads编程简介
- 基本概念
- 基础API
- 同步
共享内存系统
多个cpu通过一个互联网络与内存连接, 每一个cpu都能访问内存中每一块区域, cpu通过访问共享数据进行隐性通信, 而不是cpu之间直接通信.
- 一致内存访问(UMA)多核系统
- 非一致内存访问(NUMA)多核系统
Cache一致性的解决方法
- 基于侦听的Cache协同(每次改变通知所有核心该变量被更新了, 无关的核心也会被影响)
- 所有核心共享总线
- 总线上传输的任何信号都能被连接到总线的所有核心“看到”
- 基于目录的Cache协同
- 使用一种称为目录的数据结构保存每个cache line 的状态
- 当一个变量 被更新时, 就会查询目录, 对缓存了该变量的核心, 其缓存的副本的状态置为无效.
- 程序员无法直接控制Cache, 也无法控制Cache如何更新
- 但是程序员可以重新组织访存模式, 来更好的利用cache, 比如可以按行读取就不要按列读取
伪共享
- cpu从内存中读取数据时, 并非是一个机器字一个机器字的读取, 而是以缓存行为单位, 直接读取所需变量所在的一个缓存行.
- 一个cache line 中包含多个机器字
- 当多个cpu访问同一个cache line时, 即使访问的是不同的机器字, 看起来也有潜在的竞争条件, 产生不必要的开销.
书上的例子
共享互联网络
- 总线
- 一组并行通信线路 + 总线访问控制 硬件
- 连接到总线的设备共享通信线路
- 随着连接到总线的设备数量增加,