Skip to content

Neko

Neko 是一个用于高阶谱元流模拟的可移植的框架。它采用现代 Fortran 编写,使用面向对象的方法,允许求解器堆栈的多层次抽象,并支持从通用处理器、支持从 CUDA 和 HIP 的加速器到 SX-Aurora 向量处理器的各种硬件后端。Neko 源于芝加哥大学/阿贡国家实验室的谱元代码 Nek5000,许多命名、代码结构和数值方法都是源自于Nek5000。

Neko的文档在:Neko Docs

环境配置与编译

在本次比赛中,我们使用Neko v0.8.0,下载地址为:neko-0.8.0.tar.gz

Neko所依赖的软件包为:支持Fortran 2008的MPI,BLAS/LAPACK以及FortranJSON。

TODO: 加载MPI及BLAS/LAPACK

下面介绍如何编译FortranJSON:

git clone --depth=1 https://github.com/jacobwilliams/json-fortran.git
cd json-fortran && mkdir b && cd b
cmake -DCMAKE_INSTALL_PREFIX=/path/to/installation -DUSE_GNU_INSTALL_CONVENTION=ON ..
make install

接下来,以使用Intel编译器为例,编译Neko:

#!/bin/bash
# Load Intel Compilers and MPI libraries.
export MPIFC=mpiifort
export CC=mpiicc
export FC=$MPIFC
export PKG_CONFIG_PATH=/path/to/jsonfortran/lib64/pkgconfig:${PKG_CONFIG_PATH}

./regen.sh
./configure --prefix=<path>
make
make install

如果你想使用GCC作为编译器,需要将mpiifort改为?,将mpiicc改为?

运行

本次比赛所使用的测例为tgv,可从比赛集群中获取,位于/WORK/sccomp/tgv.zip,请运行前需要先将测例中自定义的初始化代码编译。测试点将会运行15分钟,计分项为15分钟内运行的迭代数。

cp /WORK/sccomp/tgv.zip . # 拷贝 tgv.zip 到本地目录
unzip tgv.zip # 解压 tgv.zip
cd tgv
# TODO: 加载IntelMPI
export MPIFC=mpiifort
export FC=$MPIFC

export LD_LIBRARY_PATH=<path>/json-fortran/lib64:$LD_LIBRARY_PATH
<path>/neko/bin/makeneko  ${TEST}.f90
mpirun -np <NPROC> ./neko tgv_Re1600.case

示例输出:

    _  __  ____  __ __  ____
   / |/ / / __/ / //_/ / __ \
  /    / / _/  / ,<   / /_/ /
 /_/|_/ /___/ /_/|_|  \____/

 (version: 0.8.0)
 (build: 2024-04-10 on x86_64-pc-linux-gnu using cray)


 -------Job Information--------
 Start time: 10:41 / 2024-04-10
 Running on: 256 MPI ranks
 CPU type  : AMD EPYC 7742 64-Core Processor
 Bcknd type: CPU
 Real type : double precision

 -------------Case-------------
 Reading case file tgv_Re1600.case

   -------------Mesh-------------
   Reading a binary Neko file 32768.nmsh
...
   -----Material properties------
   Read non-dimensional values:
...
   -----Starting simulation------
   T  : [  0.0000000E+00,  0.2000000E+01)
   dt :    0.5000000E-03
...
   ----------------------------------------------------------------
   t =   0.0000000E+00                                  [   0.00% ]
   ----------------------------------------------------------------
   Time-step:      1
    CFL:  0.3970812E-01 dt:  0.5000000E-03

...

   ----------------------------------------------------------------
   t =   0.2683500E+01                                  [  26.84% ]
   ----------------------------------------------------------------
   Time-step:   5368
    CFL:  0.4915199E-01 dt:  0.5000000E-03

       ------------Fluid-------------
       Projection Pressure
       Proj. vec.:   Orig. residual:
                 2     0.4020491E-05
       Pressure
       Iterations:   Start residual:     Final residual:
                 1     0.2061696E-06       0.8489571E-07
       X-Velocity
       Iterations:   Start residual:     Final residual:
                 2     0.8948043E-03       0.1355196E-08
       Y-Velocity
       Iterations:   Start residual:     Final residual:
                 2     0.8948043E-03       0.1355196E-08
       Z-Velocity
       Iterations:   Start residual:     Final residual:
                 2     0.8240080E-03       0.1270342E-08
       Elapsed time (s):  0.8980917E+03 Step time:  0.1604918E+00

       --------Postprocessing--------
   ! stop at job limit >>>
   ! saving checkpoint >>>
   Normal end.

性能调优提示

可以自行探索尝试的调优方向包括但不限于:

  1. 调整编译Neko时所使用的软件包,包括MPI实现、所使用的数学库等。不同的软件依赖在不同的系统和应用中可能会表现出较大的性能差距。
  2. 调整Neko的编译选项。有些编译选项会告诉编译器集群的特性或者一些优化策略,合理配置编译选项可能会带来一些性能提升。
  3. MPI的运行时选项和进程数配比。进程数对于程序的运行效率和性能有很大的影响,配合MPI的不同通信策略可能带来不同的效果。
  4. Neko文档的User Guide部分介绍了部分可调整项,可以自行尝试。

提交

请将程序的输出重定向至文件,并将文件提交至给定的目录下。

请注意,你在修改输入文件时,必须满足如下规则:

输出结果中除了红线划去的部分,均要求与截图内容保持一致;在此基础上可以尝试修改 solver 的 type, preconditioner 参数

Neko-1

Neko-2