Loading CMakeLists.txt 100755 → 100644 +43 −27 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ # Vladimir Klement # Jakub Klinkovsky cmake_minimum_required( VERSION 3.4 ) cmake_minimum_required( VERSION 3.5.1 ) project( tnl ) Loading @@ -21,28 +21,25 @@ set( tnlVersion "0.1" ) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") include( OptimizeForArchitecture ) include( UseCodeCoverage ) #### # Settings for debug/release version # if( CMAKE_BUILD_TYPE STREQUAL "Debug") set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Debug/src/TNL ) set( PROJECT_TESTS_PATH ${PROJECT_SOURCE_DIR}/Debug/src/Tests ) set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Debug/src ) set( PROJECT_TOOLS_PATH ${PROJECT_SOURCE_DIR}/Debug/bin ) set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Debug/lib ) set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Debug/bin ) set( debugExt -dbg ) else() set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Release/src/TNL ) set( PROJECT_TESTS_PATH ${PROJECT_SOURCE_DIR}/Release/src/Tests ) set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Release/src ) set( PROJECT_TOOLS_PATH ${PROJECT_SOURCE_DIR}/Release/bin ) set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/lib ) set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/bin ) endif() # set Debug/Release options set( CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wno-unused-local-typedefs -Wno-unused-variable" ) set( CMAKE_CXX_FLAGS "-std=c++11 -pthread -Wall -Wno-unused-local-typedefs -Wno-unused-variable" ) set( CMAKE_CXX_FLAGS_DEBUG "-g" ) set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG" ) #set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG -ftree-vectorizer-verbose=1 -ftree-vectorize -fopt-info-vec-missed -funroll-loops" ) Loading @@ -54,7 +51,19 @@ set( CMAKE_SHARED_LIBRARY_LINK_C_FLAGS_RELEASE "" ) get_filename_component( CXX_COMPILER_NAME ${CMAKE_CXX_COMPILER} NAME ) if( CXX_COMPILER_NAME MATCHES "icpc" ) message( "Intel compiler detected..." ) set( CMAKE_CXX_FLAGS "${CXXFLAGS} -DHAVE_ICPC ") set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_ICPC -wd2568 -wd2571 -wd2570") ##### # Ckeck for MIC # if( WITH_MIC STREQUAL "yes" ) message( "Compile MIC support..." ) set( MIC_CXX_FLAGS "-DHAVE_MIC") # build all tests with MIC support set( CXX_TESTS_FLAGS ${CXX_TESTS_FLAGS} -DHAVE_MIC ) set( WITH_CUDA "no") else() set( MIC_CXX_FLAGS "") endif( ) endif() ##### Loading @@ -67,12 +76,19 @@ if( WITH_CUDA STREQUAL "yes" ) set(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE OFF) set(BUILD_SHARED_LIBS ON) set(CUDA_SEPARABLE_COMPILATION ON) # Use the CUDA_HOST_COMPILER environment variable if the user specified it. if( NOT $ENV{CUDA_HOST_COMPILER} STREQUAL "" ) message( "-- Setting CUDA_HOST_COMPILER to '$ENV{CUDA_HOST_COMPILER}'" ) set( CUDA_HOST_COMPILER $ENV{CUDA_HOST_COMPILER} ) else() message( "-- Setting CUDA_HOST_COMPILER to '${CMAKE_CXX_COMPILER}'" ) set( CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER} ) endif() set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ;-DHAVE_CUDA) # disable false compiler warnings # reference for the -Xcudafe flag: http://stackoverflow.com/questions/14831051/how-to-disable-compiler-warnings-with-nvcc/17095910#17095910 # list of possible tokens: http://www.ssl.berkeley.edu/~jimm/grizzly_docs/SSL/opt/intel/cc/9.0/lib/locale/en_US/mcpcom.msg set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; -Wno-deprecated-gpu-targets --expt-relaxed-constexpr -Xcudafe "\"--diag_suppress=code_is_unreachable --diag_suppress=implicit_return_from_non_void_function\"") #AddCompilerFlag( "-DHAVE_NOT_CXX11" ) # -U_GLIBCXX_ATOMIC_BUILTINS -U_GLIBCXX_USE_INT128 " ) set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; -Wno-deprecated-gpu-targets --expt-relaxed-constexpr --expt-extended-lambda -Xcudafe "\"--diag_suppress=code_is_unreachable --diag_suppress=implicit_return_from_non_void_function\"") set( ALL_CUDA_ARCHS -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_32,code=sm_32 Loading Loading @@ -115,9 +131,6 @@ if( WITH_CUDA STREQUAL "yes" ) set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; ${CUDA_ARCH} -D_FORCE_INLINES ) # TODO: this is necessary only due to a bug in cmake set( CUDA_ADD_LIBRARY_OPTIONS -shared ) # TODO: workaround for a bug in cmake 3.5.0 (fixed in 3.5.1) set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; -ccbin "${CMAKE_CXX_COMPILER}" ) set( CUDA_HOST_COMPILER "" ) #### # Check for cuBLAS Loading Loading @@ -257,7 +270,7 @@ if( ${SYS_TIME_INCLUDE_DIR} STREQUAL "SYS_TIME_INCLUDE_DIR-NOTFOUND" ) message( "Missing header file sys/time.h" ) set( HAVE_SYS_TIME_H "//#define HAVE_SYS_TIME_H 1" ) else() include_directories( ${SYS_TIME_INCLUDE_DIR}/tnl-${tnlVersion} ) #include_directories( ${SYS_TIME_INCLUDE_DIR} ) set( HAVE_SYS_TIME_H "#define HAVE_SYS_TIME_H 1" ) endif() Loading @@ -269,7 +282,7 @@ if( ${SYS_RESOURCE_INCLUDE_DIR} STREQUAL "SYS_RESOURCE_INCLUDE_DIR-NOTFOUND" ) message( "Missing header file sys/time.h" ) set( HAVE_SYS_RESOURCE_H "//#define HAVE_SYS_RESOURCE_H 1" ) else() include_directories( ${SYS_RESOURCE_INCLUDE_DIR}/tnl-${tnlVersion} ) #include_directories( ${SYS_RESOURCE_INCLUDE_DIR} ) set( HAVE_SYS_RESOURCE_H "#define HAVE_SYS_RESOURCE_H 1" ) endif() Loading @@ -281,16 +294,20 @@ if( ${SYS_IOCTL_INCLUDE_DIR} STREQUAL "SYS_IOCTL_INCLUDE_DIR-NOTFOUND" ) message( "Missing header file sys/time.h" ) set( HAVE_SYS_IOCTL_H "//#define HAVE_SYS_IOCTL_H 1" ) else() include_directories( ${SYS_IOCTL_INCLUDE_DIR}/tnl-${tnlVersion} ) #include_directories( ${SYS_IOCTL_INCLUDE_DIR} ) set( HAVE_SYS_IOCTL_H "#define HAVE_SYS_IOCTL_H 1" ) endif() if( WITH_TESTS STREQUAL "yes" ) find_package( GTest ) if( GTEST_FOUND ) set( CXX_TESTS_FLAGS "-DHAVE_GTEST" ) endif( GTEST_FOUND ) enable_testing() # build gtest libs include( BuildGtest ) if( WITH_COVERAGE STREQUAL "yes" AND CMAKE_BUILD_TYPE STREQUAL "Debug" ) # enable code coverage reports include( UseCodeCoverage ) endif() endif( WITH_TESTS STREQUAL "yes" ) find_package( PythonInterp 3 ) Loading Loading @@ -351,9 +368,6 @@ if( OPTIMIZED_VECTOR_HOST_OPERATIONS STREQUAL "yes" ) AddCompilerFlag( "-DOPTIMIZED_VECTOR_HOST_OPERATIONS " ) endif() set( CXX_TEST_FLAGS "-fprofile-arcs -ftest-coverage" ) set( LD_TEST_FLAGS "-lgcov -coverage" ) set( configDirectory \"${CMAKE_INSTALL_PREFIX}/share/tnl-${tnlVersion}/\") set( sourceDirectory \"${PROJECT_SOURCE_DIR}/\" ) set( testsDirectory \"${PROJECT_TESTS_PATH}/\" ) Loading @@ -366,7 +380,6 @@ endif( PYTHONINTERP_FOUND ) #Nastavime cesty k hlavickovym souborum a knihovnam INCLUDE_DIRECTORIES( src ) INCLUDE_DIRECTORIES( tests ) INCLUDE_DIRECTORIES( ${PROJECT_BUILD_PATH} ) LINK_DIRECTORIES( ${LIBRARY_OUTPUT_PATH} ) Loading @@ -374,7 +387,10 @@ LINK_DIRECTORIES( ${LIBRARY_OUTPUT_PATH} ) add_subdirectory( src ) add_subdirectory( share ) add_subdirectory( tests ) if( WITH_EXAMPLES STREQUAL "yes" ) add_subdirectory( examples ) endif() set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Template Numerical Library") set(CPACK_PACKAGE_VENDOR "MMG") Loading Copyright +1 −1 Original line number Diff line number Diff line MIT License Copyright (c) 2004-2016 Tomáš Oberhuber et al. Copyright (c) 2004-2017 Tomáš Oberhuber et al. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal Loading README +1 −1 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ Installation GNU g++ 4.8 or later (https://gcc.gnu.org/) CUDA 8.0 or later (https://developer.nvidia.com/cuda-downloads) For image processing problems, you may optionaly install: For image processing problems, you may optionally install: DCMTK (http://dicom.offis.de/dcmtk.php.en) libpng (http://www.libpng.org/pub/png/libpng.html) libjpeg (http://libjpeg.sourceforge.net/) Loading TODO +12 −12 Original line number Diff line number Diff line - pridet execution policy https://github.com/harrism/hemi/blob/master/hemi/execution_policy.h - prejmenova Assert na TNL_ASSERT a rozsirit asserce podobne jako v GTest - odstranit paramee lazy ze smart pointeru TODO: - pri zpracovani dat z MRI jde vetsinou o prilis male snimky na optimalni vyuziti GPU (ve 2D). Kdyby se ale pomoci CUDA streamu provadelo vice vypoctu soucasne, mohlo by se dosahnout mnohem lepsiho urychleni TODO: - objekt NeighborEnities by mohl vracet i lokalni index dane neighbor entity, coz je potreba pro spravne vkladani maticovych elementu, ted se tyto indexy doplnuji rucne podle znalosti indexovani v gridu. Jelikoz neighbor entities mohou znat typ okoli/vzor numerickeho schematu, dokazaly by se prizpusobit i ruznym patternum. To by pak vyresilo i skladani operatoru s ruznymi patterny. TODO: - pridat execution policy https://github.com/harrism/hemi/blob/master/hemi/execution_policy.h - odstranit parametr lazy ze smart pointeru TODO: - implementovat tnlMixedGridBoundaryConditions, kde by se pro kazdou stranu gridu definoval jiny zvlastni typ Loading @@ -15,14 +24,6 @@ TODO: - data by se na hostu preskupila do souvisleho bloku dat a ten se prenesl najednou TODO: - zrejme bude potreba udrzovat ke kazdemu objektu jeho obraz na GPU/MIC - to by zarizovala metoda syncToDevice() napr. kazdy objekt by mel promennou modified, ktera by rikala, jestli se zmenil a zda je nutne ho prekopirovavat TODO: - zavest namespaces TODO: CUDA unified memory - pretizit operator new s cudaMallocManaged, pak by bylo mozne vytvaret CUDA objekty pristupne pro host a device - v TNL solveru by pak vlastne jen stacilo vytvaret objekty pomoci new Loading @@ -43,7 +44,6 @@ TODO: implementace maticovych resicu * Gaussova eliminace * SOR metoda * Jacobiho metoda * TFQMR metoda * IDR metody TODO: Nahradit sablonovy parametr dimenze sitove entity za typ entity. Pak by se mohlo zkusit, napriklad u gridu Loading build +49 −28 Original line number Diff line number Diff line Loading @@ -2,35 +2,51 @@ TARGET=TNL PREFIX=${HOME}/.local INSTALL="no" ROOT_DIR="." DCMTK_DIR="/usr/include/dcmtk" BUILD="" BUILD_JOBS="" CMAKE="cmake" CMAKE_ONLY="no" HELP="no" VERBOSE="" WITH_CLANG="no" WITH_CUDA="yes" WITH_CUDA_ARCH="auto" WITH_TESTS="yes" WITH_COVERAGE="no" WITH_EXAMPLES="yes" WITH_CUDA_ARCH="auto" WITH_TEMPLATE_INSTANTIATION="yes" WITH_TEMPLATE_INSTANTIATION="no" INSTANTIATE_LONG_INT="no" INSTANTIATE_INT="yes" INSTANTIATE_LONG_DOUBLE="no" INSTANTIATE_DOUBLE="yes" INSTANTIATE_FLOAT="no" OPTIMIZED_VECTOR_HOST_OPERATIONS="no" CMAKE="cmake" CMAKE_ONLY="no" HELP="no" VERBOSE="" ROOT_DIR="." DCMTK_DIR="/usr/include/dcmtk" BUILD_JOBS="" for option in "$@" do case $option in --prefix=* ) PREFIX="${option#*=}" ;; --install=* ) INSTALL="${option#*=}" ;; --root-dir=* ) ROOT_DIR="${option#*=}" ;; --dcmtk-dir=* ) DCMTK_DIR="${option#*=}" ;; --build=* ) BUILD="${option#*=}" ;; --build-jobs=* ) BUILD_JOBS="${option#*=}" ;; --cmake=* ) CMAKE="${option#*=}" ;; --cmake-only=* ) CMAKE_ONLY="${option#*=}" ;; --verbose ) VERBOSE="VERBOSE=1" ;; --help ) HELP="yes" ;; --with-clang=* ) WITH_CLANG="${option#*=}" ;; --with-tests=* ) WITH_TESTS="${option#*=}" ;; --with-mic=* ) WITH_MIC="${option#*=}" ;; --with-cuda=* ) WITH_CUDA="${option#*=}" ;; --with-cuda-arch=* ) WITH_CUDA_ARCH="${option#*=}";; --with-tests=* ) WITH_TESTS="${option#*=}" ;; --with-coverage=* ) WITH_COVERAGE="${option#*=}" ;; --with-examples=* ) WITH_EXAMPLES="${option#*=}" ;; --with-templates-instantiation=* ) WITH_TEMPLATE_INSTANTIATION="${option#*=}" ;; --instantiate-long-int=* ) INSTANTIATE_LONG_INT="${option#*=}" ;; --instantiate-int=* ) INSTANTIATE_INT="${option#*=}" ;; Loading @@ -44,13 +60,6 @@ do INSTANTIATE_FLOAT="no" WITH_CUDA_ARCH="auto" ;; --optimize-vector-host-operations=* ) OPTIMIZED_VECTOR_HOST_OPERATIONS="yes" ;; --with-cmake=* ) CMAKE="${option#*=}" ;; --build-jobs=* ) BUILD_JOBS="${option#*=}" ;; --cmake-only=* ) CMAKE_ONLY="${option#*=}" ;; --verbose ) VERBOSE="VERBOSE=1" ;; --root-dir=* ) ROOT_DIR="${option#*=}" ;; --dcmtk-dir=* ) DCMTK_DIR="${option#*=}" ;; --help ) HELP="yes" ;; * ) echo "Unknown option ${option}. Use --help for more information." exit 1 ;; Loading @@ -61,15 +70,18 @@ if test ${HELP} = "yes"; then echo "TNL build options:" echo "" echo " --prefix=PATH Prefix for the installation directory. ${HOME}/local by default." echo " --build=Debug/Release Build type." echo " --with-tests=yes/no Enable unit tests. 'yes' by default (libcppunit-dev is required)." echo " --build-jobs=NUM Number of processes to be used for the build. It is set to the number of available CPU cores by default." echo " --prefix=PATH Prefix for the installation directory. ${HOME}/local by default." echo " --install=yes/no Enables the installation of TNL files." echo " --with-mic=yes/no Enable MIC (Intel Xeon Phi). 'no' by default (Intel Compiler required)." echo " --with-cuda=yes/no Enable CUDA. 'yes' by default (CUDA Toolkit is required)." echo " --with-cuda-arch=all/auto/30/35/... Choose CUDA architecture." echo " --with-templates-instantiation=yes/no Some TNL templates are precompiled during the build. 'yes' by default." echo " --full-build Instantiate all -- long int indexing, float and long double floating point arithmetics." echo " --with-cmake=CMAKE Path to cmake. 'cmake' by default." echo " --build-jobs=NUM Number of processes to be used for the build. It is set to a number of CPU cores by default." echo " --with-cuda-arch=all/auto/30/35/... Choose CUDA architecture. 'auto' by default." echo " --with-tests=yes/no Enable unit tests. 'yes' by default." echo " --with-coverage=yes/no Enable code coverage reports for unit tests. 'no' by default (lcov is required)." echo " --with-examples=yes/no Compile the 'examples' directory. 'yes' by default." echo " --with-templates-instantiation=yes/no Precompiles some TNL templates during the build. 'no' by default." echo " --cmake=CMAKE Path to cmake. 'cmake' by default." echo " --verbose It enables verbose build." echo " --root-dir=PATH Path to the TNL source code root dir." echo " --dcmtk-dir=PATH Path to the DCMTK (Dicom Toolkit) root dir." Loading @@ -89,10 +101,12 @@ echo "Configuring ${BUILD} $TARGET ..." ${CMAKE} ${ROOT_DIR} \ -DCMAKE_BUILD_TYPE=${BUILD} \ -DCMAKE_INSTALL_PREFIX=${PREFIX} \ -DWITH_MIC=${WITH_MIC} \ -DWITH_CUDA=${WITH_CUDA} \ -DWITH_CUDA_ARCH=${WITH_CUDA_ARCH} \ -DWITH_TESTS=${WITH_TESTS} \ -DPETSC_DIR=${PETSC_DIR} \ -DWITH_COVERAGE=${WITH_COVERAGE} \ -DWITH_EXAMPLES=${WITH_EXAMPLES} \ -DDCMTK_DIR=${DCMTK_DIR} \ -DWITH_TEMPLATE_INSTANTIATION=${WITH_TEMPLATE_INSTANTIATION} \ -DINSTANTIATE_FLOAT=${INSTANTIATE_FLOAT} \ Loading @@ -109,7 +123,7 @@ fi if test ${CMAKE_ONLY} = "yes"; then exit 1 exit 0 fi if [[ -n ${BUILD_JOBS} ]]; then Loading @@ -128,14 +142,21 @@ else echo "Building ${BUILD} $TARGET ..." fi make ${VERBOSE} if [[ "$INSTALL" == "yes" ]]; then # install implies all make_target="install" else make_target="all" fi make ${VERBOSE} $make_target if test $? != 0; then echo "Error: Build process failed." exit 1 fi if test WITH_TESTS = "yes"; if test ${WITH_TESTS} = "yes"; then make test if test $? != 0; then Loading Loading
CMakeLists.txt 100755 → 100644 +43 −27 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ # Vladimir Klement # Jakub Klinkovsky cmake_minimum_required( VERSION 3.4 ) cmake_minimum_required( VERSION 3.5.1 ) project( tnl ) Loading @@ -21,28 +21,25 @@ set( tnlVersion "0.1" ) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") include( OptimizeForArchitecture ) include( UseCodeCoverage ) #### # Settings for debug/release version # if( CMAKE_BUILD_TYPE STREQUAL "Debug") set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Debug/src/TNL ) set( PROJECT_TESTS_PATH ${PROJECT_SOURCE_DIR}/Debug/src/Tests ) set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Debug/src ) set( PROJECT_TOOLS_PATH ${PROJECT_SOURCE_DIR}/Debug/bin ) set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Debug/lib ) set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Debug/bin ) set( debugExt -dbg ) else() set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Release/src/TNL ) set( PROJECT_TESTS_PATH ${PROJECT_SOURCE_DIR}/Release/src/Tests ) set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Release/src ) set( PROJECT_TOOLS_PATH ${PROJECT_SOURCE_DIR}/Release/bin ) set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/lib ) set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/bin ) endif() # set Debug/Release options set( CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wno-unused-local-typedefs -Wno-unused-variable" ) set( CMAKE_CXX_FLAGS "-std=c++11 -pthread -Wall -Wno-unused-local-typedefs -Wno-unused-variable" ) set( CMAKE_CXX_FLAGS_DEBUG "-g" ) set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG" ) #set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG -ftree-vectorizer-verbose=1 -ftree-vectorize -fopt-info-vec-missed -funroll-loops" ) Loading @@ -54,7 +51,19 @@ set( CMAKE_SHARED_LIBRARY_LINK_C_FLAGS_RELEASE "" ) get_filename_component( CXX_COMPILER_NAME ${CMAKE_CXX_COMPILER} NAME ) if( CXX_COMPILER_NAME MATCHES "icpc" ) message( "Intel compiler detected..." ) set( CMAKE_CXX_FLAGS "${CXXFLAGS} -DHAVE_ICPC ") set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_ICPC -wd2568 -wd2571 -wd2570") ##### # Ckeck for MIC # if( WITH_MIC STREQUAL "yes" ) message( "Compile MIC support..." ) set( MIC_CXX_FLAGS "-DHAVE_MIC") # build all tests with MIC support set( CXX_TESTS_FLAGS ${CXX_TESTS_FLAGS} -DHAVE_MIC ) set( WITH_CUDA "no") else() set( MIC_CXX_FLAGS "") endif( ) endif() ##### Loading @@ -67,12 +76,19 @@ if( WITH_CUDA STREQUAL "yes" ) set(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE OFF) set(BUILD_SHARED_LIBS ON) set(CUDA_SEPARABLE_COMPILATION ON) # Use the CUDA_HOST_COMPILER environment variable if the user specified it. if( NOT $ENV{CUDA_HOST_COMPILER} STREQUAL "" ) message( "-- Setting CUDA_HOST_COMPILER to '$ENV{CUDA_HOST_COMPILER}'" ) set( CUDA_HOST_COMPILER $ENV{CUDA_HOST_COMPILER} ) else() message( "-- Setting CUDA_HOST_COMPILER to '${CMAKE_CXX_COMPILER}'" ) set( CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER} ) endif() set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ;-DHAVE_CUDA) # disable false compiler warnings # reference for the -Xcudafe flag: http://stackoverflow.com/questions/14831051/how-to-disable-compiler-warnings-with-nvcc/17095910#17095910 # list of possible tokens: http://www.ssl.berkeley.edu/~jimm/grizzly_docs/SSL/opt/intel/cc/9.0/lib/locale/en_US/mcpcom.msg set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; -Wno-deprecated-gpu-targets --expt-relaxed-constexpr -Xcudafe "\"--diag_suppress=code_is_unreachable --diag_suppress=implicit_return_from_non_void_function\"") #AddCompilerFlag( "-DHAVE_NOT_CXX11" ) # -U_GLIBCXX_ATOMIC_BUILTINS -U_GLIBCXX_USE_INT128 " ) set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; -Wno-deprecated-gpu-targets --expt-relaxed-constexpr --expt-extended-lambda -Xcudafe "\"--diag_suppress=code_is_unreachable --diag_suppress=implicit_return_from_non_void_function\"") set( ALL_CUDA_ARCHS -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_32,code=sm_32 Loading Loading @@ -115,9 +131,6 @@ if( WITH_CUDA STREQUAL "yes" ) set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; ${CUDA_ARCH} -D_FORCE_INLINES ) # TODO: this is necessary only due to a bug in cmake set( CUDA_ADD_LIBRARY_OPTIONS -shared ) # TODO: workaround for a bug in cmake 3.5.0 (fixed in 3.5.1) set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; -ccbin "${CMAKE_CXX_COMPILER}" ) set( CUDA_HOST_COMPILER "" ) #### # Check for cuBLAS Loading Loading @@ -257,7 +270,7 @@ if( ${SYS_TIME_INCLUDE_DIR} STREQUAL "SYS_TIME_INCLUDE_DIR-NOTFOUND" ) message( "Missing header file sys/time.h" ) set( HAVE_SYS_TIME_H "//#define HAVE_SYS_TIME_H 1" ) else() include_directories( ${SYS_TIME_INCLUDE_DIR}/tnl-${tnlVersion} ) #include_directories( ${SYS_TIME_INCLUDE_DIR} ) set( HAVE_SYS_TIME_H "#define HAVE_SYS_TIME_H 1" ) endif() Loading @@ -269,7 +282,7 @@ if( ${SYS_RESOURCE_INCLUDE_DIR} STREQUAL "SYS_RESOURCE_INCLUDE_DIR-NOTFOUND" ) message( "Missing header file sys/time.h" ) set( HAVE_SYS_RESOURCE_H "//#define HAVE_SYS_RESOURCE_H 1" ) else() include_directories( ${SYS_RESOURCE_INCLUDE_DIR}/tnl-${tnlVersion} ) #include_directories( ${SYS_RESOURCE_INCLUDE_DIR} ) set( HAVE_SYS_RESOURCE_H "#define HAVE_SYS_RESOURCE_H 1" ) endif() Loading @@ -281,16 +294,20 @@ if( ${SYS_IOCTL_INCLUDE_DIR} STREQUAL "SYS_IOCTL_INCLUDE_DIR-NOTFOUND" ) message( "Missing header file sys/time.h" ) set( HAVE_SYS_IOCTL_H "//#define HAVE_SYS_IOCTL_H 1" ) else() include_directories( ${SYS_IOCTL_INCLUDE_DIR}/tnl-${tnlVersion} ) #include_directories( ${SYS_IOCTL_INCLUDE_DIR} ) set( HAVE_SYS_IOCTL_H "#define HAVE_SYS_IOCTL_H 1" ) endif() if( WITH_TESTS STREQUAL "yes" ) find_package( GTest ) if( GTEST_FOUND ) set( CXX_TESTS_FLAGS "-DHAVE_GTEST" ) endif( GTEST_FOUND ) enable_testing() # build gtest libs include( BuildGtest ) if( WITH_COVERAGE STREQUAL "yes" AND CMAKE_BUILD_TYPE STREQUAL "Debug" ) # enable code coverage reports include( UseCodeCoverage ) endif() endif( WITH_TESTS STREQUAL "yes" ) find_package( PythonInterp 3 ) Loading Loading @@ -351,9 +368,6 @@ if( OPTIMIZED_VECTOR_HOST_OPERATIONS STREQUAL "yes" ) AddCompilerFlag( "-DOPTIMIZED_VECTOR_HOST_OPERATIONS " ) endif() set( CXX_TEST_FLAGS "-fprofile-arcs -ftest-coverage" ) set( LD_TEST_FLAGS "-lgcov -coverage" ) set( configDirectory \"${CMAKE_INSTALL_PREFIX}/share/tnl-${tnlVersion}/\") set( sourceDirectory \"${PROJECT_SOURCE_DIR}/\" ) set( testsDirectory \"${PROJECT_TESTS_PATH}/\" ) Loading @@ -366,7 +380,6 @@ endif( PYTHONINTERP_FOUND ) #Nastavime cesty k hlavickovym souborum a knihovnam INCLUDE_DIRECTORIES( src ) INCLUDE_DIRECTORIES( tests ) INCLUDE_DIRECTORIES( ${PROJECT_BUILD_PATH} ) LINK_DIRECTORIES( ${LIBRARY_OUTPUT_PATH} ) Loading @@ -374,7 +387,10 @@ LINK_DIRECTORIES( ${LIBRARY_OUTPUT_PATH} ) add_subdirectory( src ) add_subdirectory( share ) add_subdirectory( tests ) if( WITH_EXAMPLES STREQUAL "yes" ) add_subdirectory( examples ) endif() set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Template Numerical Library") set(CPACK_PACKAGE_VENDOR "MMG") Loading
Copyright +1 −1 Original line number Diff line number Diff line MIT License Copyright (c) 2004-2016 Tomáš Oberhuber et al. Copyright (c) 2004-2017 Tomáš Oberhuber et al. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal Loading
README +1 −1 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ Installation GNU g++ 4.8 or later (https://gcc.gnu.org/) CUDA 8.0 or later (https://developer.nvidia.com/cuda-downloads) For image processing problems, you may optionaly install: For image processing problems, you may optionally install: DCMTK (http://dicom.offis.de/dcmtk.php.en) libpng (http://www.libpng.org/pub/png/libpng.html) libjpeg (http://libjpeg.sourceforge.net/) Loading
TODO +12 −12 Original line number Diff line number Diff line - pridet execution policy https://github.com/harrism/hemi/blob/master/hemi/execution_policy.h - prejmenova Assert na TNL_ASSERT a rozsirit asserce podobne jako v GTest - odstranit paramee lazy ze smart pointeru TODO: - pri zpracovani dat z MRI jde vetsinou o prilis male snimky na optimalni vyuziti GPU (ve 2D). Kdyby se ale pomoci CUDA streamu provadelo vice vypoctu soucasne, mohlo by se dosahnout mnohem lepsiho urychleni TODO: - objekt NeighborEnities by mohl vracet i lokalni index dane neighbor entity, coz je potreba pro spravne vkladani maticovych elementu, ted se tyto indexy doplnuji rucne podle znalosti indexovani v gridu. Jelikoz neighbor entities mohou znat typ okoli/vzor numerickeho schematu, dokazaly by se prizpusobit i ruznym patternum. To by pak vyresilo i skladani operatoru s ruznymi patterny. TODO: - pridat execution policy https://github.com/harrism/hemi/blob/master/hemi/execution_policy.h - odstranit parametr lazy ze smart pointeru TODO: - implementovat tnlMixedGridBoundaryConditions, kde by se pro kazdou stranu gridu definoval jiny zvlastni typ Loading @@ -15,14 +24,6 @@ TODO: - data by se na hostu preskupila do souvisleho bloku dat a ten se prenesl najednou TODO: - zrejme bude potreba udrzovat ke kazdemu objektu jeho obraz na GPU/MIC - to by zarizovala metoda syncToDevice() napr. kazdy objekt by mel promennou modified, ktera by rikala, jestli se zmenil a zda je nutne ho prekopirovavat TODO: - zavest namespaces TODO: CUDA unified memory - pretizit operator new s cudaMallocManaged, pak by bylo mozne vytvaret CUDA objekty pristupne pro host a device - v TNL solveru by pak vlastne jen stacilo vytvaret objekty pomoci new Loading @@ -43,7 +44,6 @@ TODO: implementace maticovych resicu * Gaussova eliminace * SOR metoda * Jacobiho metoda * TFQMR metoda * IDR metody TODO: Nahradit sablonovy parametr dimenze sitove entity za typ entity. Pak by se mohlo zkusit, napriklad u gridu Loading
build +49 −28 Original line number Diff line number Diff line Loading @@ -2,35 +2,51 @@ TARGET=TNL PREFIX=${HOME}/.local INSTALL="no" ROOT_DIR="." DCMTK_DIR="/usr/include/dcmtk" BUILD="" BUILD_JOBS="" CMAKE="cmake" CMAKE_ONLY="no" HELP="no" VERBOSE="" WITH_CLANG="no" WITH_CUDA="yes" WITH_CUDA_ARCH="auto" WITH_TESTS="yes" WITH_COVERAGE="no" WITH_EXAMPLES="yes" WITH_CUDA_ARCH="auto" WITH_TEMPLATE_INSTANTIATION="yes" WITH_TEMPLATE_INSTANTIATION="no" INSTANTIATE_LONG_INT="no" INSTANTIATE_INT="yes" INSTANTIATE_LONG_DOUBLE="no" INSTANTIATE_DOUBLE="yes" INSTANTIATE_FLOAT="no" OPTIMIZED_VECTOR_HOST_OPERATIONS="no" CMAKE="cmake" CMAKE_ONLY="no" HELP="no" VERBOSE="" ROOT_DIR="." DCMTK_DIR="/usr/include/dcmtk" BUILD_JOBS="" for option in "$@" do case $option in --prefix=* ) PREFIX="${option#*=}" ;; --install=* ) INSTALL="${option#*=}" ;; --root-dir=* ) ROOT_DIR="${option#*=}" ;; --dcmtk-dir=* ) DCMTK_DIR="${option#*=}" ;; --build=* ) BUILD="${option#*=}" ;; --build-jobs=* ) BUILD_JOBS="${option#*=}" ;; --cmake=* ) CMAKE="${option#*=}" ;; --cmake-only=* ) CMAKE_ONLY="${option#*=}" ;; --verbose ) VERBOSE="VERBOSE=1" ;; --help ) HELP="yes" ;; --with-clang=* ) WITH_CLANG="${option#*=}" ;; --with-tests=* ) WITH_TESTS="${option#*=}" ;; --with-mic=* ) WITH_MIC="${option#*=}" ;; --with-cuda=* ) WITH_CUDA="${option#*=}" ;; --with-cuda-arch=* ) WITH_CUDA_ARCH="${option#*=}";; --with-tests=* ) WITH_TESTS="${option#*=}" ;; --with-coverage=* ) WITH_COVERAGE="${option#*=}" ;; --with-examples=* ) WITH_EXAMPLES="${option#*=}" ;; --with-templates-instantiation=* ) WITH_TEMPLATE_INSTANTIATION="${option#*=}" ;; --instantiate-long-int=* ) INSTANTIATE_LONG_INT="${option#*=}" ;; --instantiate-int=* ) INSTANTIATE_INT="${option#*=}" ;; Loading @@ -44,13 +60,6 @@ do INSTANTIATE_FLOAT="no" WITH_CUDA_ARCH="auto" ;; --optimize-vector-host-operations=* ) OPTIMIZED_VECTOR_HOST_OPERATIONS="yes" ;; --with-cmake=* ) CMAKE="${option#*=}" ;; --build-jobs=* ) BUILD_JOBS="${option#*=}" ;; --cmake-only=* ) CMAKE_ONLY="${option#*=}" ;; --verbose ) VERBOSE="VERBOSE=1" ;; --root-dir=* ) ROOT_DIR="${option#*=}" ;; --dcmtk-dir=* ) DCMTK_DIR="${option#*=}" ;; --help ) HELP="yes" ;; * ) echo "Unknown option ${option}. Use --help for more information." exit 1 ;; Loading @@ -61,15 +70,18 @@ if test ${HELP} = "yes"; then echo "TNL build options:" echo "" echo " --prefix=PATH Prefix for the installation directory. ${HOME}/local by default." echo " --build=Debug/Release Build type." echo " --with-tests=yes/no Enable unit tests. 'yes' by default (libcppunit-dev is required)." echo " --build-jobs=NUM Number of processes to be used for the build. It is set to the number of available CPU cores by default." echo " --prefix=PATH Prefix for the installation directory. ${HOME}/local by default." echo " --install=yes/no Enables the installation of TNL files." echo " --with-mic=yes/no Enable MIC (Intel Xeon Phi). 'no' by default (Intel Compiler required)." echo " --with-cuda=yes/no Enable CUDA. 'yes' by default (CUDA Toolkit is required)." echo " --with-cuda-arch=all/auto/30/35/... Choose CUDA architecture." echo " --with-templates-instantiation=yes/no Some TNL templates are precompiled during the build. 'yes' by default." echo " --full-build Instantiate all -- long int indexing, float and long double floating point arithmetics." echo " --with-cmake=CMAKE Path to cmake. 'cmake' by default." echo " --build-jobs=NUM Number of processes to be used for the build. It is set to a number of CPU cores by default." echo " --with-cuda-arch=all/auto/30/35/... Choose CUDA architecture. 'auto' by default." echo " --with-tests=yes/no Enable unit tests. 'yes' by default." echo " --with-coverage=yes/no Enable code coverage reports for unit tests. 'no' by default (lcov is required)." echo " --with-examples=yes/no Compile the 'examples' directory. 'yes' by default." echo " --with-templates-instantiation=yes/no Precompiles some TNL templates during the build. 'no' by default." echo " --cmake=CMAKE Path to cmake. 'cmake' by default." echo " --verbose It enables verbose build." echo " --root-dir=PATH Path to the TNL source code root dir." echo " --dcmtk-dir=PATH Path to the DCMTK (Dicom Toolkit) root dir." Loading @@ -89,10 +101,12 @@ echo "Configuring ${BUILD} $TARGET ..." ${CMAKE} ${ROOT_DIR} \ -DCMAKE_BUILD_TYPE=${BUILD} \ -DCMAKE_INSTALL_PREFIX=${PREFIX} \ -DWITH_MIC=${WITH_MIC} \ -DWITH_CUDA=${WITH_CUDA} \ -DWITH_CUDA_ARCH=${WITH_CUDA_ARCH} \ -DWITH_TESTS=${WITH_TESTS} \ -DPETSC_DIR=${PETSC_DIR} \ -DWITH_COVERAGE=${WITH_COVERAGE} \ -DWITH_EXAMPLES=${WITH_EXAMPLES} \ -DDCMTK_DIR=${DCMTK_DIR} \ -DWITH_TEMPLATE_INSTANTIATION=${WITH_TEMPLATE_INSTANTIATION} \ -DINSTANTIATE_FLOAT=${INSTANTIATE_FLOAT} \ Loading @@ -109,7 +123,7 @@ fi if test ${CMAKE_ONLY} = "yes"; then exit 1 exit 0 fi if [[ -n ${BUILD_JOBS} ]]; then Loading @@ -128,14 +142,21 @@ else echo "Building ${BUILD} $TARGET ..." fi make ${VERBOSE} if [[ "$INSTALL" == "yes" ]]; then # install implies all make_target="install" else make_target="all" fi make ${VERBOSE} $make_target if test $? != 0; then echo "Error: Build process failed." exit 1 fi if test WITH_TESTS = "yes"; if test ${WITH_TESTS} = "yes"; then make test if test $? != 0; then Loading