L21 数据并行

Flynn Taxonomy

SIMD

Intel 的 SIMD 指令


ARM 有对应的 NEON/AARCH64/SVE 2048。
RISC-V 的 V 扩展指令集

L22 程序并行及 OPENMP

Use multiple cores to run multiple tasks in parallel

进程的状态迁移:

线程并行:

线程资源:

多线程和多核的对比


实际的应用语言,无论是 C++/JAVA/PYTHON 创建的线程,都会有相应的线程管理库映射到操作系统内核线程。
具体是线程库还是内核线程去管理绑哪个核,我暂时还不清楚,还需要学习。

Amdahl's Law

数据竞争

同步

这里简单介绍了一下 lock。
和软件锁不同,CS61C 着重介绍的是原子操作。

OPENMP

用过简单的。
https://computing.llnl.gov/tutorials/openMP/
简单的基本够用了。

L23

OPENMP 注意事项:


关注数据依赖性和共享。

并行的 CACHE 一致性

基于多核的设计

实现方法:

缓存一致性协议:MOESI

MSI


MESI


MOESI


False Sharing


一般这种情况,我会自己加互斥锁。课程没有介绍解决办法。。。


↙↙↙阅读原文可查看相关链接,并与作者交流