Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/xiaoyeli/superlu_dist
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaoyeli committed Jan 15, 2022
2 parents f74d065 + 363203d commit becc2d9
Show file tree
Hide file tree
Showing 107 changed files with 10,887 additions and 2,462 deletions.
92 changes: 81 additions & 11 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ option(TPL_COMBBLAS_LIBRARIES "List of absolute paths to CombBLAS link libraries
option(TPL_COMBBLAS_INCLUDE_DIRS "List of absolute paths to CombBLAS include directories [].")
#-- CUDA
option(TPL_ENABLE_CUDALIB "Enable the CUDA libraries" OFF)
option(TPL_ENABLE_HIPLIB "Enable the HIP libraries" OFF)

######################################################################
#
Expand Down Expand Up @@ -164,6 +165,7 @@ if(MPI_C_FOUND)
set(CMAKE_C_FLAGS "${MPI_C_COMPILE_FLAGS} ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${MPI_CXX_COMPILE_FLAGS} ${CMAKE_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MPI_C_LINK_FLAGS}" )
# message("MPI_C_INCLUDE_DIRS: ${MPI_C_INCLUDE_DIRS}")
endif()
if (XSDK_ENABLE_Fortran)
if(MPI_Fortran_FOUND)
Expand Down Expand Up @@ -192,21 +194,18 @@ if (TPL_ENABLE_CUDALIB) ## want to use cuda
# find_package(CUB REQUIRED)

find_package(CUDAToolkit REQUIRED)
if(CUDAToolkit_FOUND)
target_link_libraries(superlu PUBLIC CUDA::cudart CUDA::cusolver CUDA::cublas)
endif()
message("-- CUDAToolkit_LIBRARY_ROOT='${CUDAToolkit_LIBRARY_ROOT}'")
if (NOT "${CUDAToolkit_LIBRARY_ROOT}" STREQUAL "")
set(CUDA_LIBRARIES "${CUDAToolkit_LIBRARY_ROOT}/lib64/libcudart.so")
# set(CUDA_CUBLAS_LIBRARIES "${CUDAToolkit_LIBRARY_ROOT}/lib64/libcublas.so")

if(CUDAToolkit_FOUND)
target_link_libraries(superlu PUBLIC CUDA::cudart CUDA::cusolver CUDA::cublas)
endif()

set(CUDA_LIBRARIES "${CUDAToolkit_LIBRARY_ROOT}/lib64/libcudart.so")
# expose the following to make.inc, but location may not be reliable
set(CUDA_CUBLAS_LIBRARIES "${CUDAToolkit_LIBRARY_ROOT}/lib64/libcublas.so")
else()
message("-- CUDAToolkit_LIBRARY_ROOT empty, not setting CUDA_LIBRARIES")
message("-- CUDAToolkit_LIBRARY_ROOT empty, not setting CUDA_LIBRARIES")
endif()



# # The following make.inc exporting does not work
# set(CUDA_LIB CUDA::cudart CUDA::cublas CUDA::cusolver)
# # fix up CUDA library names
Expand Down Expand Up @@ -237,6 +236,75 @@ if (enable_openmp)
message("-- CMAKE_EXE_LINKER_FLAGS='${CMAKE_EXE_LINKER_FLAGS}'")
endif()
endif()



include(CheckLanguage)

#--------------------- CUDA libraries ---------------------
if (TPL_ENABLE_CUDALIB) ## want to use cuda
check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
message("-- Enabled support for CUDA.")
enable_language(CUDA)
find_package(CUDAToolkit REQUIRED)

# make.inc exporting not yet tested
set(CUDA_LIB CUDA::cudart CUDA::cublas CUDA::cusolver)
string (REPLACE ";" " " CUDA_LIB_STR "${CUDA_LIB}")
set(CUDA_LIB_EXPORT ${CUDA_LIB_STR})
set(HAVE_CUDA TRUE)
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_CUDA")
# set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -DHAVE_CUDA")
else()
message("-- CUDA libraries not found.")
endif()
endif()



#--------------------- HIP libraries ---------------------
if (TPL_ENABLE_HIPLIB) ## want to use hip
find_package(HIP MODULE)
if(HIP_FOUND)
message("-- Enabled support for HIP.")
find_package(hipblas REQUIRED)
find_package(rocsolver REQUIRED)
find_package(rocblas REQUIRED)
set(HIP_LIB roc::hipblas roc::rocblas roc::rocsolver)
message("HIP_LIB ${HIP_LIB}")

# make.inc exporting not yet tested
string (REPLACE ";" " " HIP_LIB_STR "${HIP_LIB}")
set(HIP_LIB_EXPORT ${HIP_LIB_STR})
set(HAVE_HIP TRUE)
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_HIP")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_HIP")
# set(HIP_HIPCC_FLAGS "${HIP_HIPCC_FLAGS} -DHAVE_HIP")
if (BUILD_SHARED_LIBS)
set(HIP_HIPCC_FLAGS "${HIP_HIPCC_FLAGS} -fPIC")
endif()




# if ("$ENV{HIP_PLATFORM}" STREQUAL "hcc")
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_HIP -D__HIP_PLATFORM_HCC__")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_HIP -D__HIP_PLATFORM_HCC__")
# elseif ("$ENV{HIP_PLATFORM}" STREQUAL "nvcc")
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_HIP -D__HIP_PLATFORM_NVCC__")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_HIP -D__HIP_PLATFORM_NVCC__")
# endif()


else()
message("-- HIP libraries not found.")
endif()
endif()




#--------------------- BLAS ---------------------
if(NOT TPL_ENABLE_INTERNAL_BLASLIB)
# set(TPL_BLAS_LIBRARIES "" CACHE FILEPATH
Expand Down Expand Up @@ -313,6 +381,8 @@ if (TPL_ENABLE_PARMETISLIB) ## want to use parmetis
endif()
set(CMAKE_C_FLAGS "-I${dir} ${CMAKE_C_FLAGS}")
endforeach()



message("-- Enabled support for PARMETIS.")
set(PARMETIS_FOUND TRUE)
Expand Down Expand Up @@ -343,7 +413,7 @@ FOREACH(_lib ${_c_libs})
set(EXTRA_LIB "-l${_lib} ${EXTRA_LIB}")
ENDFOREACH()
string (REPLACE ";" " " EXTRA_LIB_STR "${EXTRA_LIB}")
set(EXTRA_LIB_EXPORT ${EXTRA_LIB_STR})
set(EXTRA_LIB_EXPORT ${EXTRA_LIB_STR})
message("-- EXTRA_LIB_EXPORT='${EXTRA_LIB_EXPORT}'")

#---------------------- Additional Fortran linker library ---------
Expand Down
13 changes: 12 additions & 1 deletion EXAMPLE/pddrive.c
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,13 @@ int main(int argc, char *argv[])
options.DiagInv = NO;
*/
set_default_options_dist(&options);
// options.IterRefine = NOREFINE;
// options.DiagInv = YES;
// options.ReplaceTinyPivot = YES;

// options.Equil = NO;
// options.ColPerm = NATURAL;
// options.RowPerm = NOROWPERM;
#if 0
options.RowPerm = LargeDiag_HWPM;
options.RowPerm = NOROWPERM;
Expand All @@ -206,6 +213,10 @@ int main(int argc, char *argv[])
options.ReplaceTinyPivot = YES;
#endif

// options.ParSymbFact = YES;
// options.ColPerm = PARMETIS;


if (!iam) {
print_sp_ienv_dist(&options);
print_options_dist(&options);
Expand Down Expand Up @@ -252,7 +263,7 @@ int main(int argc, char *argv[])
SUPERLU_FREE(b);
SUPERLU_FREE(xtrue);
SUPERLU_FREE(berr);
fclose(fp);
// fclose(fp);

/* ------------------------------------------------------------
RELEASE THE SUPERLU PROCESS GRID.
Expand Down
1 change: 1 addition & 0 deletions EXAMPLE/pddrive3d.c
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,7 @@ main (int argc, char *argv[])
*/
set_default_options_dist (&options);
#if 0
options.ReplaceTinyPivot = YES;
options.RowPerm = NOROWPERM;
options.IterRefine = NOREFINE;
options.ColPerm = NATURAL;
Expand Down
70 changes: 53 additions & 17 deletions SRC/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
set(headers
superlu_FCnames.h
cublas_utils.h
dcomplex.h
machines.h
psymbfact.h
Expand All @@ -9,10 +8,8 @@ set(headers
supermatrix.h
util_dist.h
colamd.h
TreeBcast_slu.hpp
TreeReduce_slu.hpp
TreeBcast_slu_impl.hpp
TreeReduce_slu_impl.hpp
gpu_api_utils.h
gpu_wrapper.h
${CMAKE_CURRENT_BINARY_DIR}/superlu_dist_config.h
${PROJECT_SOURCE_DIR}/SRC/superlu_FortranCInterface.h
)
Expand All @@ -31,7 +28,7 @@ set(sources
comm.c
memory.c
util.c
cublas_utils.c
gpu_api_utils.c
superlu_grid.c
pxerr_dist.c
superlu_timer.c
Expand All @@ -45,17 +42,21 @@ set(sources
dmach_dist.c
colamd.c
superlu_dist_version.c
TreeInterface.cpp
comm_tree.c
superlu_grid3d.c ## 3D code
supernodal_etree.c
supernodalForest.c
trfAux.c
communication_aux.c
treeFactorization.c
sec_structs.c
sec_structs.c
)
if (HAVE_CUDA)
list(APPEND sources cublas_utils.c superlu_gpu_utils.cu)
list(APPEND sources superlu_gpu_utils.cu)
endif()

if (HAVE_HIP)
list(APPEND sources superlu_gpu_utils.hip.cpp)
endif()

if (MSVC)
Expand All @@ -67,6 +68,13 @@ set_source_files_properties(superlu_timer.c PROPERTIES COMPILE_FLAGS -O0)
if(enable_double)
list(APPEND headers superlu_ddefs.h dlustruct_gpu.h)

if(TPL_ENABLE_CUDALIB)
list(APPEND sources pdgstrs_lsum_cuda.cu)
endif()
# if(TPL_ENABLE_HIPLIB)
# list(APPEND sources pdgstrs_lsum_cuda.hip.cpp)
# endif()

list(APPEND sources
dlangs_dist.c
dgsequ_dist.c
Expand Down Expand Up @@ -120,6 +128,7 @@ if(enable_double)
if (HAVE_CUDA)
list(APPEND sources dsuperlu_gpu.cu)
endif()

if (HAVE_COMBBLAS)
list(APPEND sources d_c2cpp_GetHWPM.cpp dHWPM_CombBLAS.hpp)
endif()
Expand Down Expand Up @@ -248,22 +257,49 @@ endif()
if (HAVE_COMBBLAS)
list(APPEND sources z_c2cpp_GetHWPM.cpp zHWPM_CombBLAS.hpp)
endif()

endif() ######### enable compex16

if (TPL_ENABLE_HIPLIB)
file(GLOB MyFiles *.hip.cpp)
set_source_files_properties(
${MyFiles}
PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)

add_library(superlu_dist ${sources} ${HEADERS})
set(hipsources
pdgstrs_lsum_cuda.hip.cpp
superlu_gpu_utils.hip.cpp
dsuperlu_gpu.hip.cpp
)
if(enable_single)
list(APPEND hipsources ssuperlu_gpu.hip.cpp)
endif()
if(enable_complex16)
list(APPEND hipsources zsuperlu_gpu.hip.cpp)
endif()
hip_add_library(superlu_dist ${hipsources})
if (BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS)
hip_add_library(superlu_dist-static STATIC ${hipsources})
endif()

else()
add_library(superlu_dist "")
if (BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS)
add_library(superlu_dist-static STATIC "")
endif()
endif()


target_sources(superlu_dist PRIVATE ${sources} ${HEADERS})
set(targets superlu_dist)

if (BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS)
# build both shared and static libs
add_library(superlu_dist-static STATIC ${sources} ${HEADERS})
target_sources(superlu_dist-static PRIVATE ${sources} ${HEADERS})
list(APPEND targets superlu_dist-static)
endif()

set(superlu_dist_libs ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES} ${BLAS_LIB} ${LAPACK_LIB}
${PARMETIS_LIB} ${COMBBLAS_LIB} ${CUDA_LIBRARIES} ${CUDA_CUBLAS_LIBRARIES})

${PARMETIS_LIB} ${COMBBLAS_LIB} ${CUDA_LIB} ${HIP_LIB})
if (NOT MSVC)
list(APPEND superlu_dist_libs m)
endif ()
Expand All @@ -272,15 +308,15 @@ foreach(target ${targets})
target_link_libraries(${target} ${superlu_dist_libs})
if (HAVE_COMBBLAS)
set_target_properties(${target} PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
OUTPUT_NAME superlu_dist
CUDA_SEPARABLE_COMPILATION ON
OUTPUT_NAME superlu_dist
VERSION ${PROJECT_VERSION}
SOVERSION ${VERSION_MAJOR}
LINKER_LANGUAGE CXX
)
else()
set_target_properties(${target} PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
CUDA_SEPARABLE_COMPILATION ON
OUTPUT_NAME superlu_dist
VERSION ${PROJECT_VERSION}
SOVERSION ${VERSION_MAJOR}
Expand Down
11 changes: 5 additions & 6 deletions SRC/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ ALLAUX = sp_ienv.o etree.o sp_colorder.o get_perm_c.o \
# Following are from 3D code
ALLAUX += superlu_grid3d.o supernodal_etree.o supernodalForest.o \
trfAux.o communication_aux.o treeFactorization.o sec_structs.o

#
# Routines literally taken from SuperLU, but renamed with suffix _dist
#
Expand Down Expand Up @@ -85,7 +84,7 @@ ZPLUSRC += pzgssvx3d.o pzgstrf3d.o ztreeFactorization.o zscatter3d.o \
znrformat_loc3d.o ztreeFactorizationGPU.o ##$(FACT3D)

ifeq ($(HAVE_CUDA),TRUE)
ALLAUX += cublas_utils.o superlu_gpu_utils.o
ALLAUX += cublas_utils.o superlu_gpu_utils.o pdgstrs_lsum_cuda.o
DPLUSRC += dsuperlu_gpu.o
ZPLUSRC += zsuperlu_gpu.o
endif
Expand Down Expand Up @@ -136,19 +135,19 @@ complex16: config_h $(ZSLUSRC) $(ZPLUSRC) $(ALLAUX)
$(RANLIB) $(DSUPERLULIB)

pdgstrf.o: dscatter.c dlook_ahead_update.c dSchCompUdt-2Ddynamic.c pdgstrf.c
$(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c pdgstrf.c $(VERBOSE)
$(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) $(INCLUDEDIR) -c pdgstrf.c $(VERBOSE)

pzgstrf.o: zscatter.c zlook_ahead_update.c zSchCompUdt-2Ddynamic.c pzgstrf.c
$(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c pzgstrf.c $(VERBOSE)
$(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) $(INCLUDEDIR) -c pzgstrf.c $(VERBOSE)

.c.o:
$(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c $< $(VERBOSE)
$(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) $(INCLUDEDIR) -c $< $(VERBOSE)

.cu.o:
$(NVCC) $(NVCCFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c $< $(VERBOSE)

.cpp.o:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c $< $(VERBOSE)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(CDEFS) $(BLASDEF) $(INCLUDEDIR) -c $< $(VERBOSE)

.f.o:
$(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
Expand Down
Loading

0 comments on commit becc2d9

Please sign in to comment.