diff --git a/apps/example_app_codegen/CMakeLists.txt b/apps/example_app_codegen/CMakeLists.txt index 60a8c8e23f3a4091240f24994bc475479535bcce..4ab7c412a56f64286c604d6e2bc5ad2ca5a8ebb8 100644 --- a/apps/example_app_codegen/CMakeLists.txt +++ b/apps/example_app_codegen/CMakeLists.txt @@ -1,13 +1,23 @@ waLBerla_link_files_to_builddir( *.prm *.py) -waLBerla_generate_target_from_python(NAME LatticeModelGenerated FILE LatticeModel.py +waLBerla_generate_target_from_python(NAME LatticeModelGenerated FILE ExampleApp.py OUT_FILES CumulantMRTSweep.h CumulantMRTSweep.cpp CumulantMRTPackInfo.h CumulantMRTPackInfo.cpp InitialPDFsSetter.h InitialPDFsSetter.cpp CumulantMRTNoSlip.h CumulantMRTNoSlip.cpp - CumulantMRTSweepAVX.h CumulantMRTSweepAVX.cpp CumulantMRTPackInfoAVX.h CumulantMRTPackInfoAVX.cpp InitialPDFsSetterAVX.h InitialPDFsSetterAVX.cpp CumulantMRTNoSlipAVX.h CumulantMRTNoSlipAVX.cpp +) + +waLBerla_generate_target_from_python(NAME LatticeModelGeneratedAVX FILE ExampleAppAVX.py + OUT_FILES CumulantMRTSweepAVX.h CumulantMRTSweepAVX.cpp CumulantMRTPackInfoAVX.h CumulantMRTPackInfoAVX.cpp InitialPDFsSetterAVX.h InitialPDFsSetterAVX.cpp CumulantMRTNoSlipAVX.h CumulantMRTNoSlipAVX.cpp ) target_compile_options(LatticeModelGenerated PRIVATE -mavx2) +target_compile_options(LatticeModelGeneratedAVX PRIVATE -mavx2) waLBerla_add_executable ( NAME ExampleAppCodegen FILES ExampleApp.cpp DEPENDS blockforest core field lbm geometry timeloop gui LatticeModelGenerated) target_compile_options(ExampleAppCodegen PRIVATE -mavx2) + +waLBerla_add_executable ( NAME ExampleAppCodegenAVX + FILES ExampleApp.cpp + DEPENDS blockforest core field lbm geometry timeloop gui + LatticeModelGeneratedAVX) +target_compile_options(ExampleAppCodegenAVX PRIVATE -mavx2 -DWALBERLA_BUILD_WITH_AVX) diff --git a/apps/example_app_codegen/LatticeModel.py b/apps/example_app_codegen/LatticeModel.py index b0d28978c984be91a90811841b212af0dd32c6c9..8730764c96849a1d337ce8d6ddf4b2608b265bac 100755 --- a/apps/example_app_codegen/LatticeModel.py +++ b/apps/example_app_codegen/LatticeModel.py @@ -71,16 +71,8 @@ cpu_vectorize_info = { params_cpu = {"target": ps.Target.CPU} params_avx = {"target": ps.Target.CPU, "cpu_vectorize_info": cpu_vectorize_info} -with CodeGeneration() as ctx: - for optim, params in zip(("", "AVX"), (params_cpu, params_avx)): - print(f"generating kernels for CPU {optim}") - """ - generate_sweep(ctx, f"CumulantMRTSweep{optim}", lbm_update_rule, field_swaps=[(pdfs, pdfs_tmp)], **params) - generate_pack_info_from_kernel(ctx, f"CumulantMRTPackInfo{optim}", lbm_update_rule, **params) - generate_sweep(ctx, f"InitialPDFsSetter{optim}", pdfs_setter, **params) - generate_boundary(ctx, f"CumulantMRTNoSlip{optim}", NoSlip(), lbm_method, **params) - """ - generate_sweep(ctx, f"CumulantMRTSweep{optim}", lbm_update_rule, field_swaps=[(pdfs, pdfs_tmp)], **params) - generate_pack_info_from_kernel(ctx, f"CumulantMRTPackInfo{optim}", lbm_update_rule, **params) - generate_sweep(ctx, f"InitialPDFsSetter{optim}", pdfs_setter, **params) - generate_boundary(ctx, f"CumulantMRTNoSlip{optim}", NoSlip(), lbm_method, **params) +def generate(ctx, optim, params): + generate_sweep(ctx, f"CumulantMRTSweep{optim}", lbm_update_rule, field_swaps=[(pdfs, pdfs_tmp)], **params) + generate_pack_info_from_kernel(ctx, f"CumulantMRTPackInfo{optim}", lbm_update_rule, **params) + generate_sweep(ctx, f"InitialPDFsSetter{optim}", pdfs_setter, **params) + generate_boundary(ctx, f"CumulantMRTNoSlip{optim}", NoSlip(), lbm_method, **params) diff --git a/apps/example_app_codegen/Readme.md b/apps/example_app_codegen/Readme.md index 228799d588ced3fd95e375a753d2f4dc8a1f7fd1..fff2bb66a551273309dfd15ca6d9404284dd6bb5 100644 --- a/apps/example_app_codegen/Readme.md +++ b/apps/example_app_codegen/Readme.md @@ -14,13 +14,6 @@ VERSION=0.4.4 DEPS="/work/jgrad/walberla_deps" PYTHONPATH="${DEPS}/${VERSION}/lb VERSION=0.4.4 DEPS="/work/jgrad/walberla_deps" PYTHONPATH="${DEPS}/${VERSION}/lbmpy:${DEPS}/${VERSION}/pystencils:${DEPS}/devel/walberla/python/" make -j$(nproc) ``` -Then compile the AVX binary separately with: -```sh -(cd /work/jgrad/walberla_deps/devel/example_app/build/apps/example_app_codegen && /usr/bin/ccache /usr/bin/clang++ -DBOOST_ALL_NO_LIB -I/work/jgrad/walberla_deps/devel/example_app/build/walberla/src -I/work/jgrad/walberla_deps/devel/walberla/src -I/work/jgrad/walberla_deps/devel/example_app/build/apps/example_app_codegen/default_codegen -isystem /work/jgrad/walberla_deps/devel/example_app/src -isystem /work/jgrad/walberla_deps/devel/example_app/build/src -isystem /work/jgrad/walberla_deps/0.4.4/pystencils/pystencils/include -isystem /usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include -Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments -pthread -pthread -g -std=gnu++17 -DWALBERLA_BUILD_WITH_AVX -mavx2 -o CMakeFiles/ExampleAppCodegen.dir/ExampleAppAVX.cpp.o -c /work/jgrad/walberla_deps/devel/example_app/apps/example_app_codegen/ExampleApp.cpp) -(cd /work/jgrad/walberla_deps/devel/example_app/build/apps/example_app_codegen && /tikhome/jgrad/.local/lib/python3.8/site-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/ExampleAppCodegen.dir/link.txt --verbose=1 -/usr/bin/clang++ -Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments -pthread -pthread -g CMakeFiles/ExampleAppCodegen.dir/ExampleAppAVX.cpp.o -o ExampleAppCodegenAVX -Wl,-rpath,/usr/lib/x86_64-linux-gnu/openmpi/lib ../../walberla/src/blockforest/libblockforest.a ../../walberla/src/core/libcore.a ../../walberla/src/field/libfield.a ../../walberla/src/lbm/liblbm.a ../../walberla/src/geometry/libgeometry.a ../../walberla/src/timeloop/libtimeloop.a ../../walberla/src/gui/libgui.a libLatticeModelGenerated.a ../../walberla/src/domain_decomposition/libdomain_decomposition.a ../../walberla/src/vtk/libvtk.a ../../walberla/src/boundary/libboundary.a ../../walberla/src/blockforest/libblockforest.a ../../walberla/src/core/libcore.a ../../walberla/src/field/libfield.a ../../walberla/src/lbm/liblbm.a ../../walberla/src/geometry/libgeometry.a ../../walberla/src/timeloop/libtimeloop.a ../../walberla/src/gui/libgui.a libLatticeModelGenerated.a ../../walberla/src/domain_decomposition/libdomain_decomposition.a ../../walberla/src/vtk/libvtk.a ../../walberla/src/boundary/libboundary.a ../../walberla/src/blockforest/libblockforest.a ../../walberla/src/core/libcore.a ../../walberla/src/field/libfield.a ../../walberla/src/lbm/liblbm.a ../../walberla/src/geometry/libgeometry.a ../../walberla/src/timeloop/libtimeloop.a ../../walberla/src/gui/libgui.a libLatticeModelGenerated.a ../../walberla/src/domain_decomposition/libdomain_decomposition.a ../../walberla/src/vtk/libvtk.a ../../walberla/src/boundary/libboundary.a /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so /usr/lib/libpfft.so /usr/lib/x86_64-linux-gnu/libfftw3.so /usr/lib/x86_64-linux-gnu/libfftw3_mpi.so ../../walberla/extern/lodepng/liblodepng.a /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/libpfft.so /usr/lib/x86_64-linux-gnu/libfftw3.so /usr/lib/x86_64-linux-gnu/libfftw3_mpi.so) -``` - Run the binaries with the parameter files: ```sh apps/example_app_codegen/ExampleAppCodegen ../apps/example_app_codegen/ExampleApp.prm