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.txt、filter.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 不得分。