在多核处理器出现之前,芯片上的大部分晶体管资源都用来让 单个指令流(single instruction stream) 跑得更快,而不是同时跑多个线程。

主要通过 指令级并行 (ILP) 来提升性能。

当时的发展趋势

More transistors → 更大的 cache、更聪明的乱序执行、更智能的分支预测

到了 功耗和发热的瓶颈(大约 2005 年前后),继续堆晶体管提升单核频率不再可行。

👉 这时业界转向 多核 (multi-core),通过并行任务来继续提高性能。

image.png

这张 slide 演示了:如何用 C++ 线程 (std::thread) 把原本单线程的 sinx 程序改写成并行程序。把数组分成两半:前半部分交给新线程,后半部分由主线程继续算。

image.png

这张 slide 在讲 Data-parallel expression(数据并行表达式),它展示了如何通过简单的语言标记,把并行性“告诉”编译器,让编译器帮你自动生成并行代码。

告诉编译器:每次循环是独立的。

编译器就有机会自动把 forall 转换成 多线程代码(比如用 OpenMP、SIMD、GPU kernel)。

image.png