Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 0 additions & 65 deletions README20260902

This file was deleted.

15 changes: 14 additions & 1 deletion source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,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)
Expand Down Expand Up @@ -553,6 +552,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()
Comment on lines +561 to +566

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Defining __USE_NVTX on base makes timer.cpp.o require NVTX symbols, but linking CUDA::nvToolsExt only to the main executable leaves other base consumers without that dependency. CUDA 12.2 CI already fails to link tests such as MODULE_CELL_SYMMETRY_analysis with undefined references to nvtxRangePushA and nvtxRangePop.

endif()

list(APPEND device_srcs
source_pw/module_pwdft/kernels/nonlocal_op.cpp
source_pw/module_pwdft/kernels/veff_op.cpp
Expand Down
2 changes: 1 addition & 1 deletion source/source_lcao/module_lr/utils/lr_io_krlist.cpp
Original file line number Diff line number Diff line change
@@ -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 <cassert>
#include <fstream>
Expand Down
8 changes: 1 addition & 7 deletions source/source_lcao/module_ri/ri_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <RI/global/Array_Operator.h>
#include <RI/global/Global_Func-2.h>
Expand All @@ -20,13 +21,6 @@

namespace RI_Util
{
inline extern std::array<int,3>
get_Born_vonKarmen_period(const K_Vectors &kv);

template<typename Tcell, size_t Ndim>
extern std::vector<std::array<Tcell,Ndim>>
get_Born_von_Karmen_cells( const std::array<Tcell,Ndim> &Born_von_Karman_period );

template<typename Tcell>
inline std::array<Tcell,3>
Vector3_to_array3(const ModuleBase::Vector3<Tcell> &v)
Expand Down
55 changes: 0 additions & 55 deletions source/source_lcao/module_ri/ri_util.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,61 +12,6 @@

namespace RI_Util
{
inline std::array<int,3>
get_Born_vonKarmen_period(const K_Vectors &kv)
{
return std::array<int,3>{kv.nmp[0], kv.nmp[1], kv.nmp[2]};
}

template<typename Tcell>
std::vector<std::array<Tcell,1>>
get_Born_von_Karmen_cells( const std::array<Tcell,1> &Born_von_Karman_period )
{
using namespace RI::Array_Operator;
std::vector<std::array<Tcell,1>> Born_von_Karman_cells;
for( int c=0; c<Born_von_Karman_period[0]; ++c )
Born_von_Karman_cells.emplace_back( std::array<Tcell,1>{c} % Born_von_Karman_period );
return Born_von_Karman_cells;
}

template<typename Tcell, size_t Ndim>
std::vector<std::array<Tcell,Ndim>>
get_Born_von_Karmen_cells( const std::array<Tcell,Ndim> &Born_von_Karman_period )
{
using namespace RI::Array_Operator;

std::array<Tcell,Ndim-1> sub_Born_von_Karman_period;
for(int i=0; i<Ndim-1; ++i)
sub_Born_von_Karman_period[i] = Born_von_Karman_period[i];

std::vector<std::array<Tcell,Ndim>> Born_von_Karman_cells;
for( const std::array<Tcell,Ndim-1> &sub_cell : get_Born_von_Karmen_cells(sub_Born_von_Karman_period) )
for( Tcell c=0; c<Born_von_Karman_period.back(); ++c )
{
std::array<Tcell,Ndim> cell;
for(int i=0; i<Ndim-1; ++i)
cell[i] = sub_cell[i];
cell.back() = (std::array<Tcell,1>{c} % std::array<Tcell,1>{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<typename Tcell, size_t Ndim>
std::vector<std::array<Tcell,Ndim>>
get_Born_von_Karmen_cells( const std::array<Tcell,Ndim> &Born_von_Karman_period )
{
using namespace Array_Operator;
std::vector<std::array<Tcell,Ndim>> Born_von_Karman_cells;
for( int ix=0; ix<Born_von_Karman_period[0]; ++ix )
for( int iy=0; iy<Born_von_Karman_period[1]; ++iy )
for( int iz=0; iz<Born_von_Karman_period[2]; ++iz )
Born_von_Karman_cells.push_back( std::array<Tcell,Ndim>{ix,iy,iz} % Born_von_Karman_period );
return Born_von_Karman_cells;
}
*/

inline std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>>
update_coulomb_param(
const std::map<Conv_Coulomb_Pot_K::Coulomb_Type, std::vector<std::map<std::string,std::string>>> &coulomb_param,
Expand Down
73 changes: 73 additions & 0 deletions source/source_lcao/module_ri/ri_util_bvk.h
Original file line number Diff line number Diff line change
@@ -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 <array>
#include <vector>

namespace RI_Util
{
inline std::array<int,3>
get_Born_vonKarmen_period(const K_Vectors &kv)
{
return std::array<int,3>{kv.nmp[0], kv.nmp[1], kv.nmp[2]};
}

// cell index c folded into [0, period) like (c % period + period) % period
template<typename Tcell>
std::vector<std::array<Tcell,1>>
get_Born_von_Karmen_cells( const std::array<Tcell,1> &Born_von_Karman_period )
{
std::vector<std::array<Tcell,1>> Born_von_Karman_cells;
for( Tcell c=0; c<Born_von_Karman_period[0]; ++c )
Born_von_Karman_cells.emplace_back( std::array<Tcell,1>{c} );
return Born_von_Karman_cells;
}

template<typename Tcell, size_t Ndim>
std::vector<std::array<Tcell,Ndim>>
get_Born_von_Karmen_cells( const std::array<Tcell,Ndim> &Born_von_Karman_period )
{
std::array<Tcell,Ndim-1> sub_Born_von_Karman_period;
for(size_t i=0; i<Ndim-1; ++i)
sub_Born_von_Karman_period[i] = Born_von_Karman_period[i];

std::vector<std::array<Tcell,Ndim>> Born_von_Karman_cells;
for( const std::array<Tcell,Ndim-1> &sub_cell : get_Born_von_Karmen_cells(sub_Born_von_Karman_period) )
for( Tcell c=0; c<Born_von_Karman_period.back(); ++c )
{
std::array<Tcell,Ndim> cell;
for(size_t i=0; i<Ndim-1; ++i)
cell[i] = sub_cell[i];
cell.back() = c;
Born_von_Karman_cells.emplace_back(std::move(cell));
}
return Born_von_Karman_cells;
}
Comment on lines +26 to +56

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LibRI's integer % operator actually uses (i % n + 3 * n / 2) % n - n / 2, which produces centered cell coordinates. Replacing it with c changes the returned coordinates, for example:

Period Before After
1 0 0
2 0, -1 0, 1
3 0, 1, -1 0, 1, 2
4 0, 1, -2, -1 0, 1, 2, 3

Callers rely on exact coordinate keys. For example, 58_KP_LR_BSE uses a (2,2,2) grid and reads (-1,-1,-1), which is now absent from Rlist; CPU CI fails with R coordinates ... are not in Rlist. Please preserve the original mapping in both the 1D and recursive cases when removing the LibRI dependency.


/* example for Ndim=3:
template<typename Tcell, size_t Ndim>
std::vector<std::array<Tcell,Ndim>>
get_Born_von_Karmen_cells( const std::array<Tcell,Ndim> &Born_von_Karman_period )
{
std::vector<std::array<Tcell,Ndim>> Born_von_Karman_cells;
for( int ix=0; ix<Born_von_Karman_period[0]; ++ix )
for( int iy=0; iy<Born_von_Karman_period[1]; ++iy )
for( int iz=0; iz<Born_von_Karman_period[2]; ++iz )
Born_von_Karman_cells.push_back( std::array<Tcell,Ndim>{ix,iy,iz} );
return Born_von_Karman_cells;
}
*/
}

#endif
Loading