Bridge++
Bridge++ is available at https://bridge.kek.jp/Lattice-code/ .
You may want to link the following packages (included in the tar ball of Bridge++), of which building is also stated in this page.
- lime (need to read ILDG format configurations)
- QWS (a solver for Clover fermion; if your local lattice size is 32 x YY x ZZ x TT, the multigrid solver becomes much faster.
If you are not sure, preparing lime is a good idea.
Building on Fugaku
- Download the tar ball (assumes bridge-2.x.y.tar.gz) and expand it:
tar -zxf bridge-2.x.y.tar.gz cd bridge-2.x.y
- prepare the lime (optional but needed to read ILDG format):
cd extra
tar -xzf lime-1.3.2.tar.gz cd lime-1.3.2
./configure CC=fccpx CFLAGS=-Nclang --host=armv8
make
cd ../../ - prepare the QWS (optional):
cd extra tar -zxf qws_20210322_0f95_bridge.tar.gz
cd qws-modified
make
cd ../../ - edit Makefile as follow:
- 1-a. Target paltform: comment out “target = PC_GNU” and uncomment “target = Fugaku_CLANG”
- 1-b. Communicaiton: set “use_mpi = fjmpi”
- 1-c. Multi-threading: set “use_thread = omp”
- 1-e. Compiler optimization level: set “use_opt_level = high”
- 1-j. Alternative code: set “use_alternative = yes”
- set “use_alt_qxs = yes”
- set “use_qxs_arch = acle”
- 3-a. LIME: if you want to use lime, set “use_lime_library = yes”
- 3-g. QWS: if you want to use QWS, set “use_qws_library = yes”
- build:
make
Running the tests
test of the core part of the library (“corelib”)
- The binary is build/tests/bridge.elf.
- The script would be something like (assumes 1 MPI process):
#!/bin/bash #PJM -L "node=1"
#PJM -L "rscgrp=small"
#PJM -L "elapse=1:00:00"
#PJM --mpi "proc=1"
#PJM -g YOUR_GROPU
export FLIB_BARRIER=HARD # optional but improves the performance in multi thread case
mpiexec ./bridge.elf --all
test of Fugaku native solvers
- build the tests
cd test_alt_spectrum/src/
make - run the test. The binary is test_alt_spectrum/test/bridge.elf
- a job script would be
#!/bin/bash
#PJM -L "node=1"
#PJM -L "rscgrp=small"
#PJM -L "elapse=1:00:00"
#PJM --mpi "proc=4"
#PJM -g YOUR_GROPU
export OMP_NUM_THREADS=12
export FLIB_BARRIER=HARD # optional but improves the performance in multi thread case
mpiexec ./bridge.elf
Restrictions
Fugaku native code (alt_QXS) has the following restriction on the local lattice volume. The local volume (the volume in each MPI proceess) must be a multiple of the following minimal volume.
- double precision case: 4x2x1x1
- single precision case: 4x4x1x1
- double precision case with even-odd operators: 8x2x1x1 (x-direction is doubled)
- single precision case with even-odd operators: 8x4x1x1 (x-direction is doubled)
- to use QWS: 32x1x1x1
he above minimal shape (except for QWS) can be changed in x-y directions can be modified by editing the following parameters in src/lib_alt_QXS/inline_ACLE/define_vlen.h#define VLENXD 4
#define VLENYD 2
#define VLENXS 4
#define VLENYS 4
The name of these parameters is self-explaining. Note that VLENXD x VLENYD must be 8 and VLENXS x VLENYS must be 16.
Tips
- If you want to use lime installed in the system (or your own build in the other directory), specify the suitable path in 3-a. LIME section of Makefile.
- For debugging, set the debug flag at 1-g. : use_debug = yes
- make lib skipps buildings the test of corelib part.
- For a large scale of job, the rankmap tool at https://github.com/RIKEN-LQCD/rankmap4d may help to improve the performance. Bridge++ uses the lexical ordering so use “rankmap_4d_general” or “rankmap_4d”.