Week 1Project Framing 与问题公式化
课程一开始通常不是直接写代码,而是先把研究问题形式化。官方 overview 特别提到要把问题表达成 digital computing 可访问的操作序列,这意味着第一步是任务分解、变量定义、输入输出边界和数值流程设计。
Week 2Mathematica 与科学问题原型化
在正式进入高性能实现前,课程会先强调原型化与验证思维。Mathematica 这类工具的价值在于快速验证公式、探索数值行为,并把计算流程说明清楚,而不是一上来就陷入优化细节。
Week 3Numerically Intensive Programming in C/C++/Fortran
进入核心实现阶段,讨论为什么数值密集型 computation 需要更接近底层的语言,以及如何在性能、可读性和可维护性之间做取舍。对许多学生来说,这一段是从“能跑”转向“跑得对、跑得稳”的关键。
Week 4Modularization 与 Scientific Libraries
课程会强调模块化设计,既包括自己写 procedures,也包括正确调用现有高性能库,例如 BLAS 和 LAPACK。重点不是重复造轮子,而是学会把复杂计算任务拆成可复用、可测试、可组合的模块。
Week 5Verification, Testing 与 Instrumentation
官方 overview 特别提到 code instrumentation,用于验证正确性和监控性能。这一周的核心是建立测试与验证意识:在科学计算里,结果“看起来合理”不等于实现正确,你需要能证明程序在已知输入下行为可信。
Week 6Profiling with gprof
当工具能够正确运行后,课程通常会进入 profiling。gprof 之类的工具帮助你识别瓶颈,理解时间究竟花在什么地方,从而避免盲目优化。
Week 7Optimization 与 Performance Tuning
这一周会把 profiling 结果转化为具体优化动作,讨论算法选择、内存访问、函数调用开销和数据结构设计如何影响性能。真正的目标不是机械追求更快,而是让优化与项目目标保持一致。
Week 8Parallelization with OpenMPI
官方明确提到 OpenMPI,因此课程后半段通常会涉及并行化。重点在于识别哪些任务适合并行、并行后通信成本如何影响收益,以及如何避免把复杂度引入得比性能收益更大。
Week 9Visualisation with Rendering / Graphics Tools
科学计算的结果不仅要算出来,还要能被人理解。课程会引导学生用 Geomview、OpenGL 或其他图形工具做数据可视化,把数值结果转化为可解释的图像与结构。
Week 10Interfaces through Python or Matlab
除了核心计算引擎,课程也关注与用户的交互。通过 Python 或 Matlab 等工具建立界面和调用层,可以让研究代码更易于演示、复用和交付,这也是“研究脚本”与“研究工具”之间的重要差别。
Week 11LaTeX Documentation 与 Reproducibility
官方 assessment 明确要求提交 LaTeX 格式文档,说明设计、操作和限制。因此这一阶段的重点不是单纯写报告,而是把软件架构、使用方式、样例输入输出和局限性讲清楚,形成真正可复现的 project package。
Week 12End-of-Semester Project Integration
最后一周通常围绕项目整合与最终交付:整理代码、验证 sample input/output、核查编译和执行流程、润色文档、说明性能和限制。高质量提交的关键往往不是多写功能,而是让工具在设计、实现、验证和说明四个层面都闭环。