Loading CMakeLists.txt +31 −24 Original line number Diff line number Diff line Loading @@ -309,30 +309,34 @@ if( ${WITH_GMP} ) endif() endif() #if( BUILD_MPI ) # FIND_PATH( PETSC_INCLUDE_DIR petsc.h # /usr/include/petsc # ${PETSC_DIR}/${PETSC_ARCH}/include # ${PETSC_DIR}/include # DOC "PETSC headers." # ) # if( ${PETSC_INCLUDE_DIR} STREQUAL "PETSC_INCLUDE_DIR-NOTFOUND" ) # message( "PETSC not found." ) # else() # message( "PETSC headers found -- ${PETSC_INCLUDE_DIR}" ) # FIND_LIBRARY(PETSC_LIBRARY petsc # ${PETSC_INCLUDE_DIR}/../lib # /usr/local/lib # /usr/lib) # if( PETSC_LIBRARY ) # #string( REPLACE ";" " " MPI_LIBRARIES "${MPI_CXX_LIBRARIES}" ) # #set( PETSC_LIBRARY "${MPI_LIBRARIES} ${PETSC_LIBRARY}") # message( "PETSC library found -- ${PETSC_LIBRARY}") #### # Test for PETSc if( BUILD_MPI ) FIND_PATH( PETSC_INCLUDE_DIR petsc.h /usr/include/petsc ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include DOC "PETSC headers." ) if( ${PETSC_INCLUDE_DIR} STREQUAL "PETSC_INCLUDE_DIR-NOTFOUND" ) message( "PETSC not found." ) else() message( "PETSC headers found -- ${PETSC_INCLUDE_DIR}" ) FIND_LIBRARY(PETSC_LIBRARY petsc ${PETSC_INCLUDE_DIR}/../lib /usr/local/lib /usr/lib) if( PETSC_LIBRARY ) #string( REPLACE ";" " " MPI_LIBRARIES "${MPI_CXX_LIBRARIES}" ) #set( PETSC_LIBRARY "${MPI_LIBRARIES} ${PETSC_LIBRARY}") message( "PETSC library found -- ${PETSC_LIBRARY}") #list( GET MPI_CXX_INCLUDE_PATH 0 MPI_CXX_PATH ) #set(PETSC_CXX_FLAGS "-DHAVE_PETSC -I${PETSC_INCLUDE_DIR} -DHAVE_MPI -I${MPI_CXX_PATH}") # endif() # endif() #endif() set(PETSC_CXX_FLAGS -DHAVE_PETSC -I${PETSC_INCLUDE_DIR}) set(PETSC_LINKER_FLAGS ${PETSC_LIBRARY}) endif() endif() endif() # configure build paths set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin ) Loading Loading @@ -413,6 +417,9 @@ message( " CMAKE_SHARED_LINKER_FLAGS_RELEASE = ${CMAKE_SHARED_LINKER_FLAGS_REL message( " CUDA_NVCC_FLAGS = ${CUDA_NVCC_FLAGS}" ) message( " CUDA_SAMPLES_FLAGS = ${CUDA_SAMPLES_FLAGS}" ) message( " GMP_LIBRARIES = ${GMP_LIBRARIES}" ) message( " PETSC_CXX_FLAGS = ${PETSC_CXX_FLAGS}" ) message( " PETSC_LINKER_FLAGS = ${PETSC_LINKER_FLAGS}" ) if( MPI_CXX_FOUND AND ${WITH_MPI} ) message( " MPI_CXX_COMPILE_OPTIONS = ${MPI_CXX_COMPILE_OPTIONS}" ) message( " MPI_CXX_COMPILE_DEFINITIONS = ${MPI_CXX_COMPILE_DEFINITIONS}" ) Loading src/Benchmarks/SpMV/CMakeLists.txt +4 −3 Original line number Diff line number Diff line Loading @@ -11,12 +11,13 @@ if( BUILD_CUDA ) cuda_include_directories( ${CXX_BENCHMARKS_INCLUDE_DIRS} ) message( STATUS ${CXX_BENCHMARKS_FLAGS} ) CUDA_ADD_EXECUTABLE( tnl-benchmark-spmv tnl-benchmark-spmv.cu OPTIONS ${CXX_BENCHMARKS_FLAGS} ) TARGET_LINK_LIBRARIES( tnl-benchmark-spmv ${CUDA_cusparse_LIBRARY} ${CUDA_cudadevrt_LIBRARY} ) CUDA_ADD_EXECUTABLE( tnl-benchmark-spmv tnl-benchmark-spmv.cu OPTIONS ${CXX_BENCHMARKS_FLAGS} ${PETSC_CXX_FLAGS} ) TARGET_LINK_LIBRARIES( tnl-benchmark-spmv ${CUDA_cusparse_LIBRARY} ${CUDA_cudadevrt_LIBRARY} ${PETSC_LINKER_FLAGS}) else() ADD_EXECUTABLE( tnl-benchmark-spmv tnl-benchmark-spmv.cpp ) target_compile_options( tnl-benchmark-spmv PRIVATE ${CXX_BENCHMARKS_FLAGS} ) target_compile_options( tnl-benchmark-spmv PRIVATE ${CXX_BENCHMARKS_FLAGS} ${PETSC_CXX_FLAGS} ) target_include_directories( tnl-benchmark-spmv PRIVATE ${CXX_BENCHMARKS_INCLUDE_DIRS} ) TARGET_LINK_LIBRARIES( tnl-benchmark-spmv ${PETSC_LINKER_FLAGS} ) endif() install( TARGETS tnl-benchmark-spmv RUNTIME DESTINATION bin ) src/Benchmarks/SpMV/spmv.h +36 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,10 @@ #include <TNL/Algorithms/Segments/ChunkedEllpack.h> #include <TNL/Algorithms/Segments/BiEllpack.h> #ifdef HAVE_PETSC #include <petscmat.h> #endif // Comment the following to turn off some groups of SpMV benchmarks and speed-up the compilation #define WITH_TNL_BENCHMARK_SPMV_GENERAL_MATRICES #define WITH_TNL_BENCHMARK_SPMV_SYMMETRIC_MATRICES Loading Loading @@ -492,6 +496,38 @@ benchmarkSpmv( BenchmarkType& benchmark, benchmark.writeHeader(); benchmark.time< Devices::Host >( resetHostVectors, "", spmvCSRHost, csrBenchmarkResults ); #ifdef HAVE_PETSC Mat petscMatrix; Containers::Vector< PetscInt, Devices::Host, PetscInt > petscRowPointers( csrHostMatrix.getRowPointers() ); Containers::Vector< PetscInt, Devices::Host, PetscInt > petscColumns( csrHostMatrix.getColumnIndexes() ); Containers::Vector< PetscScalar, Devices::Host, PetscInt > petscValues( csrHostMatrix.getValues() ); MatCreateSeqAIJWithArrays( PETSC_COMM_WORLD, //PETSC_COMM_SELF, csrHostMatrix.getRows(), csrHostMatrix.getColumns(), petscRowPointers.getData(), petscColumns.getData(), petscValues.getData(), &petscMatrix ); Vec inVector, outVector; VecCreateSeq( PETSC_COMM_WORLD, csrHostMatrix.getColumns(), &inVector ); VecCreateSeq( PETSC_COMM_WORLD, csrHostMatrix.getRows(), &outVector ); auto resetPetscVectors = [&]() { VecSet( inVector, 1.0 ); VecSet( outVector, 0.0 ); }; auto petscSpmvCSRHost = [&]() { MatMult( petscMatrix, inVector, outVector ); }; SpmvBenchmarkResult< Real, Devices::Host, int > petscBenchmarkResults( String( "Petsc" ), hostOutVector, hostOutVector, csrHostMatrix.getNonzeroElementsCount() ); //benchmark.addLogsMetadata( petscBenchmarkResults.getTableHeader() ); //benchmark.writeHeader(); benchmark.time< Devices::Host >( resetPetscVectors, "", petscSpmvCSRHost, petscBenchmarkResults ); #endif #ifdef HAVE_CUDA //// // Perform benchmark on CUDA device with cuSparse as a reference GPU format Loading src/Benchmarks/SpMV/tnl-benchmark-spmv.h +8 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,11 @@ #include "spmv.h" #include <TNL/Matrices/MatrixReader.h> #ifdef HAVE_PETSC #include <petscmat.h> #endif using namespace TNL::Matrices; #include <exception> Loading Loading @@ -94,6 +99,9 @@ setupConfig( Config::ConfigDescription & config ) int main( int argc, char* argv[] ) { #ifdef HAVE_PETSC PetscInitialize( &argc, &argv, nullptr, nullptr ); #endif Config::ParameterContainer parameters; Config::ConfigDescription conf_desc; Loading Loading
CMakeLists.txt +31 −24 Original line number Diff line number Diff line Loading @@ -309,30 +309,34 @@ if( ${WITH_GMP} ) endif() endif() #if( BUILD_MPI ) # FIND_PATH( PETSC_INCLUDE_DIR petsc.h # /usr/include/petsc # ${PETSC_DIR}/${PETSC_ARCH}/include # ${PETSC_DIR}/include # DOC "PETSC headers." # ) # if( ${PETSC_INCLUDE_DIR} STREQUAL "PETSC_INCLUDE_DIR-NOTFOUND" ) # message( "PETSC not found." ) # else() # message( "PETSC headers found -- ${PETSC_INCLUDE_DIR}" ) # FIND_LIBRARY(PETSC_LIBRARY petsc # ${PETSC_INCLUDE_DIR}/../lib # /usr/local/lib # /usr/lib) # if( PETSC_LIBRARY ) # #string( REPLACE ";" " " MPI_LIBRARIES "${MPI_CXX_LIBRARIES}" ) # #set( PETSC_LIBRARY "${MPI_LIBRARIES} ${PETSC_LIBRARY}") # message( "PETSC library found -- ${PETSC_LIBRARY}") #### # Test for PETSc if( BUILD_MPI ) FIND_PATH( PETSC_INCLUDE_DIR petsc.h /usr/include/petsc ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include DOC "PETSC headers." ) if( ${PETSC_INCLUDE_DIR} STREQUAL "PETSC_INCLUDE_DIR-NOTFOUND" ) message( "PETSC not found." ) else() message( "PETSC headers found -- ${PETSC_INCLUDE_DIR}" ) FIND_LIBRARY(PETSC_LIBRARY petsc ${PETSC_INCLUDE_DIR}/../lib /usr/local/lib /usr/lib) if( PETSC_LIBRARY ) #string( REPLACE ";" " " MPI_LIBRARIES "${MPI_CXX_LIBRARIES}" ) #set( PETSC_LIBRARY "${MPI_LIBRARIES} ${PETSC_LIBRARY}") message( "PETSC library found -- ${PETSC_LIBRARY}") #list( GET MPI_CXX_INCLUDE_PATH 0 MPI_CXX_PATH ) #set(PETSC_CXX_FLAGS "-DHAVE_PETSC -I${PETSC_INCLUDE_DIR} -DHAVE_MPI -I${MPI_CXX_PATH}") # endif() # endif() #endif() set(PETSC_CXX_FLAGS -DHAVE_PETSC -I${PETSC_INCLUDE_DIR}) set(PETSC_LINKER_FLAGS ${PETSC_LIBRARY}) endif() endif() endif() # configure build paths set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin ) Loading Loading @@ -413,6 +417,9 @@ message( " CMAKE_SHARED_LINKER_FLAGS_RELEASE = ${CMAKE_SHARED_LINKER_FLAGS_REL message( " CUDA_NVCC_FLAGS = ${CUDA_NVCC_FLAGS}" ) message( " CUDA_SAMPLES_FLAGS = ${CUDA_SAMPLES_FLAGS}" ) message( " GMP_LIBRARIES = ${GMP_LIBRARIES}" ) message( " PETSC_CXX_FLAGS = ${PETSC_CXX_FLAGS}" ) message( " PETSC_LINKER_FLAGS = ${PETSC_LINKER_FLAGS}" ) if( MPI_CXX_FOUND AND ${WITH_MPI} ) message( " MPI_CXX_COMPILE_OPTIONS = ${MPI_CXX_COMPILE_OPTIONS}" ) message( " MPI_CXX_COMPILE_DEFINITIONS = ${MPI_CXX_COMPILE_DEFINITIONS}" ) Loading
src/Benchmarks/SpMV/CMakeLists.txt +4 −3 Original line number Diff line number Diff line Loading @@ -11,12 +11,13 @@ if( BUILD_CUDA ) cuda_include_directories( ${CXX_BENCHMARKS_INCLUDE_DIRS} ) message( STATUS ${CXX_BENCHMARKS_FLAGS} ) CUDA_ADD_EXECUTABLE( tnl-benchmark-spmv tnl-benchmark-spmv.cu OPTIONS ${CXX_BENCHMARKS_FLAGS} ) TARGET_LINK_LIBRARIES( tnl-benchmark-spmv ${CUDA_cusparse_LIBRARY} ${CUDA_cudadevrt_LIBRARY} ) CUDA_ADD_EXECUTABLE( tnl-benchmark-spmv tnl-benchmark-spmv.cu OPTIONS ${CXX_BENCHMARKS_FLAGS} ${PETSC_CXX_FLAGS} ) TARGET_LINK_LIBRARIES( tnl-benchmark-spmv ${CUDA_cusparse_LIBRARY} ${CUDA_cudadevrt_LIBRARY} ${PETSC_LINKER_FLAGS}) else() ADD_EXECUTABLE( tnl-benchmark-spmv tnl-benchmark-spmv.cpp ) target_compile_options( tnl-benchmark-spmv PRIVATE ${CXX_BENCHMARKS_FLAGS} ) target_compile_options( tnl-benchmark-spmv PRIVATE ${CXX_BENCHMARKS_FLAGS} ${PETSC_CXX_FLAGS} ) target_include_directories( tnl-benchmark-spmv PRIVATE ${CXX_BENCHMARKS_INCLUDE_DIRS} ) TARGET_LINK_LIBRARIES( tnl-benchmark-spmv ${PETSC_LINKER_FLAGS} ) endif() install( TARGETS tnl-benchmark-spmv RUNTIME DESTINATION bin )
src/Benchmarks/SpMV/spmv.h +36 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,10 @@ #include <TNL/Algorithms/Segments/ChunkedEllpack.h> #include <TNL/Algorithms/Segments/BiEllpack.h> #ifdef HAVE_PETSC #include <petscmat.h> #endif // Comment the following to turn off some groups of SpMV benchmarks and speed-up the compilation #define WITH_TNL_BENCHMARK_SPMV_GENERAL_MATRICES #define WITH_TNL_BENCHMARK_SPMV_SYMMETRIC_MATRICES Loading Loading @@ -492,6 +496,38 @@ benchmarkSpmv( BenchmarkType& benchmark, benchmark.writeHeader(); benchmark.time< Devices::Host >( resetHostVectors, "", spmvCSRHost, csrBenchmarkResults ); #ifdef HAVE_PETSC Mat petscMatrix; Containers::Vector< PetscInt, Devices::Host, PetscInt > petscRowPointers( csrHostMatrix.getRowPointers() ); Containers::Vector< PetscInt, Devices::Host, PetscInt > petscColumns( csrHostMatrix.getColumnIndexes() ); Containers::Vector< PetscScalar, Devices::Host, PetscInt > petscValues( csrHostMatrix.getValues() ); MatCreateSeqAIJWithArrays( PETSC_COMM_WORLD, //PETSC_COMM_SELF, csrHostMatrix.getRows(), csrHostMatrix.getColumns(), petscRowPointers.getData(), petscColumns.getData(), petscValues.getData(), &petscMatrix ); Vec inVector, outVector; VecCreateSeq( PETSC_COMM_WORLD, csrHostMatrix.getColumns(), &inVector ); VecCreateSeq( PETSC_COMM_WORLD, csrHostMatrix.getRows(), &outVector ); auto resetPetscVectors = [&]() { VecSet( inVector, 1.0 ); VecSet( outVector, 0.0 ); }; auto petscSpmvCSRHost = [&]() { MatMult( petscMatrix, inVector, outVector ); }; SpmvBenchmarkResult< Real, Devices::Host, int > petscBenchmarkResults( String( "Petsc" ), hostOutVector, hostOutVector, csrHostMatrix.getNonzeroElementsCount() ); //benchmark.addLogsMetadata( petscBenchmarkResults.getTableHeader() ); //benchmark.writeHeader(); benchmark.time< Devices::Host >( resetPetscVectors, "", petscSpmvCSRHost, petscBenchmarkResults ); #endif #ifdef HAVE_CUDA //// // Perform benchmark on CUDA device with cuSparse as a reference GPU format Loading
src/Benchmarks/SpMV/tnl-benchmark-spmv.h +8 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,11 @@ #include "spmv.h" #include <TNL/Matrices/MatrixReader.h> #ifdef HAVE_PETSC #include <petscmat.h> #endif using namespace TNL::Matrices; #include <exception> Loading Loading @@ -94,6 +99,9 @@ setupConfig( Config::ConfigDescription & config ) int main( int argc, char* argv[] ) { #ifdef HAVE_PETSC PetscInitialize( &argc, &argv, nullptr, nullptr ); #endif Config::ParameterContainer parameters; Config::ConfigDescription conf_desc; Loading