外观
parallel/README.md
配套源码,运行方法见同目录 README。返回实验总览。
md
# CS149 核心实践(原创)
本目录围绕 Stanford CS149 Fall 2025 的并行机制,提供独立教学程序,不复制官方作业答案,也不声称通过官方评分。
```sh
make -C labs/parallel test
make -C labs/parallel benchmark-run
make -C labs/parallel sanitize
```
需要 C++17 编译器与线程库;性能数据必须来自普通 `-O3` 构建。`sanitize` 会清理并改用检测构建,之后请先 `make clean` 再运行 benchmark,避免混用构建选项。
- `benchmark.cpp`:前四分之一任务较重,比较 serial、连续区间 static、原子领取块的 dynamic;每次逐元素对照串行参考。参数依次为 items、threads、grain、repeats。
- `false_sharing.cpp`:每线程自己的原子计数器,比较紧密相邻和 `alignas(128)` 布局。无数据竞争,实验反映布局、原子与调度的综合成本,不能单凭时间确定硬件缓存行大小。
- `reduction.cu`:可选 CUDA 教学代码,256 线程块内树形归约,CPU 合并各块结果,带尾部和误差检查。当前 macOS 环境未编译/运行,也未做 GPU 性能计时。有 NVIDIA CUDA 环境后可 `make gpu`、`./reduction`。
已记录的实测命令:
```sh
./labs/parallel/benchmark 200000 4 64 5
./labs/parallel/false_sharing 4 1000000 5
```
结果在 `results-scheduling.csv`、`results-sharing.csv`,stderr 在相应 `.log`,解释与限制在 `VALIDATION.md`。每种方案先热身一次,再计时 5 次;输出 min/median/max,包含线程创建与 join,不计数据初始化和逐元素比较。未设置 CPU affinity,无硬件性能计数器证据。
学习正文从 `docs/parallel/index.md` 开始。