Ported from OpenCL code of AutoDock. Specifically:
- Host code and Solis-Wets local search from ocladock-fpga (lga-sdx182)
- ADADELTA local search from AutoDock-GPU (v1.1)
git clone --single-branch --branch sx-aurora --recurse-submodules --shallow-submodules https://github.com/esa-tu-darmstadt/AutoDock-Aurora.git
cd Autodock-Aurora
make inputs
make CONFIG=FDEBUG
- Host binary is compiled with symbols enabled for gdb
- Device binary is compiled with no vectorization (
-O0 -g
).
To compile only the device code:
make -C device CONFIG=FDEBUG kernel_ga
PROGINF is always enabled as it costs no overhead.
For FTRACE pass TRACE=YES
(uppercase "YES"!) as a make variable.
make PDB=1yv3 NRUN=16 TRACE=YES eval
Setting the make variable REPRO=YES
will initialize the random seeds
to fixed numbers instead of using the time. This must be used in conjunction
with disabling OpenMP on the SX-Aurora Vector Engine (eg. OMP=NO
, which
is default). Disabling OpenMP is mandatory, on the VE the cores (i.e. different
LGA runs) share the same random generator and the order in which the cores call
it is undetermined.
When running with OMP disabled, please also set VE_OMP_NUM_THREADS=1
, for example:
env VE_OMP_NUM_THREADS=1 make PDB=1yv3 NRUN=16 REPRO=YES OMP=NO eval
This option is useful for debugging the kernel or finding the approximate or exact location of exceptions on the VE side. This option and FTRACE output (TRACE=YES) are mutually exclusive.
# Normally compiled VE kernel
make PDB=1yv3 NRUN=8 DEBUGVE=YES OMP=YES eval
# Full debug compile of VE kernel (-g -O0)
make PDB=1yv3 NRUN=8 DEBUGVE=YES OMP=YES CONFIG=FDEBUG eval
# Strict in order execution of VE instructions
env VE_ADVANCEOFF=YES make PDB=1yv3 NRUN=8 DEBUGVE=YES OMP=YES eval
When the VE kernel starts, you will get a prompt from the VE gdb. Start by typing
run
. You may set breakpoints at this point.
make PDB=1yv3 NRUN=16 eval
make eval
automatically configures all input arguments and set of parameters to launch a docking job.
By default CONFIG
=RELEASE.
PDB
is a molecular input IDNRUN
is the number of molecular docking runs
make TESTLS=ad POPSIZE=2048 PDB=1mzc NRUN=50 TRACE=YES eval
TESTLS
can be either sw
(Solis-Wets) or ad
(ADADELTA).
make PDB=1yv3 NRUN=16 OMP=YES eval
It runs above command bit for five different molecules, PDB = {1yv3
, 1ywr
, 1mzc
, 1jyq
, 3er5
}.
./val.sh
Multi-VE runs can be used to increase the performance by spreading the work across multiple VEs.
Specify the VE IDs in the environment variable VE_NODE_IDS
as a comma separated list. For example,
running on four VEs and using up all cores on them requires:
export VE_NODE_IDS=0,1,2,3
The environment variable can also be used to run autodock on a particular VE, by default VE#8 is chosen. For example:
export VE_NODE_IDS=6
When VEs are using uniform memory access mode (non-NUMA), the default number of OpenMP threads a process can use is equal to the number of cores, eg. 8 cores on VE20B. By limiting the number of OpenMP threads one can run multiple processes on one VE, for example:
# Running 2 OpenMP threads per process
export VE_OMP_NUM_THREADS=2
# Running 4 processes on VE #1
export VE_NODE_IDS=1,1,1,1
Vector Engines in NUMA mode by default only allow half of the cores to be in one OpenMP process. A VE10B or VE20B a maximum of 4 OpenMP threads per process. In order to benefit of the NUMA effects of reduced memory network/ports conflicts, one can use the multi-process mode. Simply run two processes on each VE:
export VE_NODE_IDS=0,0