在多核处理器出现之前,芯片上的大部分晶体管资源都用来让 单个指令流(single instruction stream) 跑得更快,而不是同时跑多个线程。
主要通过 指令级并行 (ILP) 来提升性能。
当时的发展趋势
More transistors → 更大的 cache、更聪明的乱序执行、更智能的分支预测
到了 功耗和发热的瓶颈(大约 2005 年前后),继续堆晶体管提升单核频率不再可行。
👉 这时业界转向 多核 (multi-core),通过并行任务来继续提高性能。
这张 slide 演示了:如何用 C++ 线程 (std::thread) 把原本单线程的 sinx
程序改写成并行程序。把数组分成两半:前半部分交给新线程,后半部分由主线程继续算。
parallel_sinx
→ 使用 2 个线程并行处理数组:
x[0..N/2-1]
。x[N/2..N-1]
。这张 slide 在讲 Data-parallel expression(数据并行表达式),它展示了如何通过简单的语言标记,把并行性“告诉”编译器,让编译器帮你自动生成并行代码。
告诉编译器:每次循环是独立的。
编译器就有机会自动把 forall
转换成 多线程代码(比如用 OpenMP、SIMD、GPU kernel)。