Split up Verlet SIMD kernels for faster compilation
authorMark Abraham <mark.j.abraham@gmail.com>
Mon, 25 Feb 2013 20:00:44 +0000 (21:00 +0100)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Sun, 25 Aug 2013 12:19:41 +0000 (14:19 +0200)
commitf98bb3f3dc864ccd34b8c458947604a51ae9877a
tree33c7528a429958074e07e6c3cdd14b6319d7d6f7
parent4f40d576b762496ba1c809ae41c65ec5005de9fd
Split up Verlet SIMD kernels for faster compilation

Each kernel is now defined in a seperate compilation unit, and the
files for the kernel functions, the kernel dispatcher function, and
their definitions are all generated by Python script. See its comments
for details. The generation is done by developers and the results
stored in the repo, to avoid CMake-time dependencies. The source for
the file generation is separated from the results of the generation.

On a 48-core AMD machine using GCC 4.7 for an SSE2 build (i.e. 4xN
Verlet kernels), the time for "make mdrun -j" went from 73 s to 34 s.

On a more recent 8-core Intel machine using GCC 4.6.4 for AVX_256
build (both 2xNN and 4xN), the time for "make mdrun -j" went from
81 s to 63 s.

On 16 cores of a POWER7 BlueGene/Q front-end node, time to compile
release-4-6 stays about the same (around 160s).

Also unwound some include file dependencies and removed repeated
definitions of some supporting structures and functions.

Change-Id: I0da1faf351defbe68d5ca43febcabddd93e21f0d
114 files changed:
include/gmx_math_x86_avx_256_double.h
include/gmx_math_x86_avx_256_single.h
src/mdlib/CMakeLists.txt
src/mdlib/nbnxn_kernels/nbnxn_kernel_file_generator/make_verlet_simd_kernel_files.py [new file with mode: 0755]
src/mdlib/nbnxn_kernels/nbnxn_kernel_file_generator/nbnxn_kernel_simd_2xnn_kernel.c.pre [new file with mode: 0644]
src/mdlib/nbnxn_kernels/nbnxn_kernel_file_generator/nbnxn_kernel_simd_4xn_kernel.c.pre [new file with mode: 0644]
src/mdlib/nbnxn_kernels/nbnxn_kernel_file_generator/nbnxn_kernel_simd_template.c.pre [new file with mode: 0644]
src/mdlib/nbnxn_kernels/nbnxn_kernel_file_generator/nbnxn_kernel_simd_template.h.pre [new file with mode: 0644]
src/mdlib/nbnxn_kernels/nbnxn_kernel_ref.c
src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_2xnn.h [deleted file]
src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_2xnn_includes.h [deleted file]
src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_4xn.h [deleted file]
src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_4xn_includes.h [deleted file]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn.c [moved from src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_2xnn.c with 59% similarity]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn.h [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_common.h [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_comb_none_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_twin_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_twin_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_twin_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_twin_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_twin_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_twin_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_twin_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_twin_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_ewald_twin_comb_none_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_inner.h [moved from src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_2xnn_inner.h with 99% similarity]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_outer.h [moved from src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_2xnn_outer.h with 86% similarity]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_rf_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_rf_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_rf_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_rf_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_rf_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_rf_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_rf_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_rf_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_rf_comb_none_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_comb_none_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_twin_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_twin_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_twin_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_twin_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_twin_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_twin_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_twin_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_twin_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_tab_twin_comb_none_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn.c [moved from src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_4xn.c with 58% similarity]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn.h [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_common.h [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_comb_none_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_twin_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_twin_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_twin_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_twin_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_twin_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_twin_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_twin_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_twin_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_ewald_twin_comb_none_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_inner.h [moved from src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_4xn_inner.h with 98% similarity]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_outer.h [moved from src/mdlib/nbnxn_kernels/nbnxn_kernel_simd_4xn_outer.h with 86% similarity]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_rf_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_rf_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_rf_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_rf_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_rf_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_rf_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_rf_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_rf_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_rf_comb_none_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_comb_none_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_twin_comb_geom_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_twin_comb_geom_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_twin_comb_geom_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_twin_comb_lb_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_twin_comb_lb_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_twin_comb_lb_noener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_twin_comb_none_ener.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_twin_comb_none_energrp.c [new file with mode: 0644]
src/mdlib/nbnxn_kernels/simd_4xn/nbnxn_kernel_simd_4xn_tab_twin_comb_none_noener.c [new file with mode: 0644]
src/mdlib/sim_util.c