技能储备要求

对于技能储备,我们是没有硬性要求的;不会的东西学就好了。当然,有预先掌握的知识点或技能点会成为加分项。以下条目按重要性从高到低排序。

  • 信息检索,主要是搜索引擎的使用。

    熟练使用使用英文关键字在 Google 等(也就是不能是国内搜索引擎,例如百度)查找自己所需要的信息。不建议使用百度的原因是百度的结果当中,CSDN 等低质量社区权重较高,并且使用英文关键字搜索的质量较低;同时,高质量的 Stackoverflow 等社区都为英文。而很多 news 和 manual 都是 English only 的,因此建议使用英文关键字在 Google 上查找信息。

    当然了这也就要求你具备相当程度的英文阅读水平。你可以从现在起尝试一下,接下来每一条目的内容如果有不熟悉,直接去 Google 搜索。

  • Linux 的使用。

    这里指的是 unix-like shell 中对包含 GNU toolchain 在内的工具的熟练使用,例如 gcc、git、bash script、包管理器等;以及对环境配置方式的了解,例如 PATHLD_LIBRARY_PATH 等环境变量。

  • 理解计算机系统的构成,理解编译器、操作系统、处理器的工作方式。

    《计算机系统概论》(《Introduction to Computing Systems》)将是很好的入门性质教材/课程参考,而《计算机体系结构:量化研究方法》则是很好的进阶教材(对应课程是计算机学院的必修课《计算机体系结构》)。

    你需要清楚从源代码到汇编到二进制再到被处理器执行的整个过程。这将有助于你分析性能问题、进行优化。

  • 了解 GitHub 上多人协作的方式。

    在各种比赛中,如果需要修改代码或编写一些工具,通过实验室的 GitLab 平台进行协作将是较合适的方式,而 GitLab 与 GitHub 相似点很多。

  • 了解包括 CMake 和 automake 在内的多种自动化构建系统,掌握 Makefile。

    在 SCC 比赛中,每个赛题都是一个成型的项目,经常会有超大型的(百万甚至千万行代码)的项目,这样的项目的编译配置都十分复杂,你需要熟练地使用各类自动化构建系统,才能快速上手项目。常用的构建工具包括 CMake 和 automake,但有时需要自己魔改编译参数、或者修 bug(没错,有 bug 很常见的)的时候,直接去接触 Makefile 本身也是必须的。

    CMake 和 automake 都是用来根据选项自动生成 Makefile 的工具。不了解的同学请参考它们的主页和文档。

  • 并行计算。

    你需要:

    • 了解 CPU 的多线程并行、GPU 的 SIMT 并行模型、多节点的分布式并行;
    • 会使用 OpenMP、MPI 或 CUDA 编写并行程序。

      了解概念有助于理解项目的运行方式(或者说不了解概念就理解不了),而能够编写并行程序则对于需要上手优化的项目有很重要的意义。在 PAC 比赛和 RDMA 比赛中,并行编程都是必须的。