diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 6ebf01656a..31838a9daf 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -527,7 +527,6 @@ set(ABACUS_BIN_PATH ${PROJECT_BINARY_DIR}/${ABACUS_BIN_NAME}) if(USE_CUDA) set_property(TARGET ${ABACUS_BIN_NAME} PROPERTY CUDA_ARCHITECTURES ${CMAKE_CUDA_ARCHITECTURES}) - target_compile_definitions(${ABACUS_BIN_NAME} PRIVATE __USE_NVTX) endif() if(ENABLE_COVERAGE) @@ -563,6 +562,20 @@ add_library( source_main/driver.cpp source_main/driver_run.cpp) +# __USE_NVTX gates the NVTX code in source_base/timer.cpp (target base) and +# source_main/driver.cpp (target driver), so it must be defined on those +# OBJECT libraries, not only on the final executable (whose sole TU, main.cpp, +# contains no NVTX code). Defining it only on the executable silently dropped +# every NVTX range and kept timer_enable_nvtx ineffective. +if(USE_CUDA) + target_compile_definitions(base PRIVATE __USE_NVTX) + target_compile_definitions(driver PRIVATE __USE_NVTX) + # NVTX is header-only since CUDA 12.9; older toolkits need libnvToolsExt. + if(CUDAToolkit_VERSION VERSION_LESS 12.9) + target_link_libraries(${ABACUS_BIN_NAME} PRIVATE CUDA::nvToolsExt) + endif() +endif() + list(APPEND device_srcs source_pw/module_pwdft/kernels/nonlocal_op.cpp source_pw/module_pwdft/kernels/veff_op.cpp diff --git a/source/source_lcao/module_lr/utils/lr_io_krlist.cpp b/source/source_lcao/module_lr/utils/lr_io_krlist.cpp index 84c05a2e14..1d9b53d9fc 100644 --- a/source/source_lcao/module_lr/utils/lr_io_krlist.cpp +++ b/source/source_lcao/module_lr/utils/lr_io_krlist.cpp @@ -1,6 +1,6 @@ #include "lr_io_krlist.h" #include "lr_io.h" -#include "source_lcao/module_ri/ri_util.h" +#include "source_lcao/module_ri/ri_util_bvk.h" #include "source_base/constants.h" #include #include diff --git a/source/source_lcao/module_ri/ri_util.h b/source/source_lcao/module_ri/ri_util.h index 67aef442dd..f5659d8732 100644 --- a/source/source_lcao/module_ri/ri_util.h +++ b/source/source_lcao/module_ri/ri_util.h @@ -8,6 +8,7 @@ #include "source_cell/klist.h" #include "source_lcao/module_ri/conv_coulomb_pot_k.h" +#include "source_lcao/module_ri/ri_util_bvk.h" #include #include @@ -20,13 +21,6 @@ namespace RI_Util { - inline extern std::array - get_Born_vonKarmen_period(const K_Vectors &kv); - - template - extern std::vector> - get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ); - template inline std::array Vector3_to_array3(const ModuleBase::Vector3 &v) diff --git a/source/source_lcao/module_ri/ri_util.hpp b/source/source_lcao/module_ri/ri_util.hpp index 886c5f1b37..41ce827001 100644 --- a/source/source_lcao/module_ri/ri_util.hpp +++ b/source/source_lcao/module_ri/ri_util.hpp @@ -12,61 +12,6 @@ namespace RI_Util { - inline std::array - get_Born_vonKarmen_period(const K_Vectors &kv) - { - return std::array{kv.nmp[0], kv.nmp[1], kv.nmp[2]}; - } - - template - std::vector> - get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) - { - using namespace RI::Array_Operator; - std::vector> Born_von_Karman_cells; - for( int c=0; c{c} % Born_von_Karman_period ); - return Born_von_Karman_cells; - } - - template - std::vector> - get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) - { - using namespace RI::Array_Operator; - - std::array sub_Born_von_Karman_period; - for(int i=0; i> Born_von_Karman_cells; - for( const std::array &sub_cell : get_Born_von_Karmen_cells(sub_Born_von_Karman_period) ) - for( Tcell c=0; c cell; - for(int i=0; i{c} % std::array{Born_von_Karman_period.back()})[0]; - Born_von_Karman_cells.emplace_back(std::move(cell)); - } - return Born_von_Karman_cells; - } - - /* example for Ndim=3: - template - std::vector> - get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) - { - using namespace Array_Operator; - std::vector> Born_von_Karman_cells; - for( int ix=0; ix{ix,iy,iz} % Born_von_Karman_period ); - return Born_von_Karman_cells; - } - */ - inline std::map>> update_coulomb_param( const std::map>> &coulomb_param, diff --git a/source/source_lcao/module_ri/ri_util_bvk.h b/source/source_lcao/module_ri/ri_util_bvk.h new file mode 100644 index 0000000000..d857425879 --- /dev/null +++ b/source/source_lcao/module_ri/ri_util_bvk.h @@ -0,0 +1,73 @@ +//======================= +// AUTHOR : Peize Lin +// DATE : 2022-08-17 +//======================= + +// Born-von Karmen supercell utilities. +// This header is free of LibRI dependencies so that modules built without +// LibRI (e.g. module_lr) can use it. + +#ifndef RI_UTIL_BVK_H +#define RI_UTIL_BVK_H + +#include "source_cell/klist.h" + +#include +#include + +namespace RI_Util +{ + inline std::array + get_Born_vonKarmen_period(const K_Vectors &kv) + { + return std::array{kv.nmp[0], kv.nmp[1], kv.nmp[2]}; + } + + // cell index c folded into [0, period) like (c % period + period) % period + template + std::vector> + get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) + { + std::vector> Born_von_Karman_cells; + for( Tcell c=0; c{c} ); + return Born_von_Karman_cells; + } + + template + std::vector> + get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) + { + std::array sub_Born_von_Karman_period; + for(size_t i=0; i> Born_von_Karman_cells; + for( const std::array &sub_cell : get_Born_von_Karmen_cells(sub_Born_von_Karman_period) ) + for( Tcell c=0; c cell; + for(size_t i=0; i + std::vector> + get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) + { + std::vector> Born_von_Karman_cells; + for( int ix=0; ix{ix,iy,iz} ); + return Born_von_Karman_cells; + } + */ +} + +#endif