跳转至

C. 不简单的编译

注意:Unexpected JSON ...... 出现的原因大概率是您没有选择合适的 ENV 就予以提交了,请仔细检查您的提交!!!

工欲善其事 必先利其器

说明

【提醒:附件 Tab 中有 baseline 】

【提示:只要是算卷积算出来的都可以,不能去hack结果校验过程。算法什么的都可以换,但预期解不需要这么做。本题分值为100分,可以尝试简单方法】

众所周知,HPC领域中常用的、性能比较好 的语言有 C, C++, Fortran。这些语言常用的编译器有五款,其中 AMD, Intel, NVIDIA 御三家各维护了一款编译器,而开源社区维护了 GNU 和 LLVM 两款编译器。

现在有这么一个涉及了三种语言的计算卷积的小项目(见附件)

handout/
├── CMakeLists.txt
├── filter.F90
└── main.cpp

使用合适的编程语言、编译器、编译选项编译这个项目,让它跑快一点。

你可以修改 CMakeLists.txtfilter.F90 并提交,提交时你可以从五家编译器中选择用你喜爱的一家。

评测环境

可选,见"评测方法"部分。

评测方法

提交三个文件,结构如下:

handin/ 
├── env.txt # 选择的环境
├── filter.F90 # 修改后的filter.F90
├── CMakeLists.txt # 修改后的CMakeLists.txt

其中:

  • env.txt:包括一行,表示本题选择的编译环境。可选值为:gcc , llvm , intel , aocc , nvhpc,分别对应 GNU, LLVM, Intel, AMD, NVIDIA 编译器,与签到题中"环境说明"的情况一致。特别的,保证CC, CXX, FC环境变量设置正确。
  • filter.F90:修改后的filter.F90文件,可以为C、CPP或者Fortan代码,具体类型可以在 CMakeLists.txt 中通过 set_source_files_properties设 置。该文件中只允许包括filter_run 函数、必要的模块声明及相应计算逻辑,不允许修改程序运行逻辑。
  • CMakeLists.txt:修改后的 CMakeLists.txt 文件。编译参数可以在其中设置。

这些文件将会被解压到一个随机生成的目录中,运行方式如下。请不要修改可执行文件名或输出路径。

cmake -B build 
cmake --build build
./build/program

评分标准

程序将在 Intel® Xeon® Platinum 8358 Processor 的一个核心上运行。

提交的程序输出与原始程序的相对误差不得超过 10^{-13},由于不同编译器的随机库的实现存在区别,比较结果时请使用相同编译器编译运行程序。

输出结果正确时,本题的得分 X 与用时 T 的关系为 X = \frac{85}{T} - 14,其中 T 的单位为秒。其中,T < 0.75 时满分,T > 5 不得分。

附件