diff --git a/examples/.gitignore b/examples/.gitignore new file mode 100644 index 0000000000..ae0c959c3b --- /dev/null +++ b/examples/.gitignore @@ -0,0 +1,2 @@ +/build* +/install* diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index ab8ae47eb7..057a4fdaa7 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -14,6 +14,13 @@ if(CMAKE_PROJECT_NAME STREQUAL "omnitrace") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + omnitrace_add_option(OMNITRACE_INSTALL_EXAMPLES "Install omnitrace examples" OFF) +else() + option(OMNITRACE_INSTALL_EXAMPLES "Install omnitrace examples" ON) +endif() + +if(OMNITRACE_INSTALL_EXAMPLES) + include(GNUInstallDirs) endif() add_subdirectory(transpose) diff --git a/examples/code-coverage/CMakeLists.txt b/examples/code-coverage/CMakeLists.txt index 5450542940..c02261255b 100644 --- a/examples/code-coverage/CMakeLists.txt +++ b/examples/code-coverage/CMakeLists.txt @@ -10,6 +10,9 @@ add_executable(code-coverage code-coverage.cpp) target_link_libraries(code-coverage PRIVATE Threads::Threads) target_compile_options(code-coverage PRIVATE ${_FLAGS}) -if(NOT CMAKE_PROJECT_NAME STREQUAL "omnitrace") - install(TARGETS code-coverage DESTINATION bin) +if(OMNITRACE_INSTALL_EXAMPLES) + install( + TARGETS code-coverage + DESTINATION bin + COMPONENT omnitrace-examples) endif() diff --git a/examples/lulesh/CMakeLists.txt b/examples/lulesh/CMakeLists.txt index 11b427e025..c4899d0a32 100644 --- a/examples/lulesh/CMakeLists.txt +++ b/examples/lulesh/CMakeLists.txt @@ -7,8 +7,20 @@ list(INSERT CMAKE_MODULE_PATH 0 ${PROJECT_SOURCE_DIR}/cmake/Modules) option(LULESH_BUILD_KOKKOS "Build Kokkos from submodule" ON) if(LULESH_BUILD_KOKKOS) add_subdirectory(external) - if(LULESH_USE_CUDA OR LULESH_USE_HIP) + if(LULESH_USE_CUDA) kokkos_compilation(PROJECT) + elseif(LULESH_USE_HIP AND NOT "${CMAKE_CXX_COMPILER}" MATCHES "hipcc") + if(NOT HIPCC_EXECUTABLE) + find_package(hip QUIET) + + find_program( + HIPCC_EXECUTABLE + NAMES hipcc + HINTS ${ROCM_PATH} ENV ROCM_PATH /opt/rocm + PATHS ${ROCM_PATH} ENV ROCM_PATH /opt/rocm) + mark_as_advanced(HIPCC_EXECUTABLE) + endif() + kokkos_compilation(PROJECT COMPILER ${HIPCC_EXECUTABLE}) endif() else() find_package(Kokkos REQUIRED COMPONENTS separable_compilation) @@ -44,6 +56,18 @@ add_executable(${PROJECT_NAME} ${sources} ${headers}) target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/includes) target_link_libraries(${PROJECT_NAME} PRIVATE Kokkos::kokkos lulesh-mpi) -if(NOT CMAKE_PROJECT_NAME STREQUAL "omnitrace") - install(TARGETS ${PROJECT_NAME} DESTINATION bin) +if(OMNITRACE_INSTALL_EXAMPLES) + if(LULESH_BUILD_KOKKOS) + install( + TARGETS kokkoscore kokkoscontainers + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT omnitrace-examples) + set_target_properties( + ${PROJECT_NAME} PROPERTIES INSTALL_RPATH + "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") + endif() + install( + TARGETS ${PROJECT_NAME} + DESTINATION bin + COMPONENT omnitrace-examples) endif() diff --git a/examples/lulesh/external/CMakeLists.txt b/examples/lulesh/external/CMakeLists.txt index 4bff89894d..06d250922a 100644 --- a/examples/lulesh/external/CMakeLists.txt +++ b/examples/lulesh/external/CMakeLists.txt @@ -30,4 +30,4 @@ checkout_git_submodule( set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY ON) -add_subdirectory(kokkos) +add_subdirectory(kokkos EXCLUDE_FROM_ALL) diff --git a/examples/mpi/CMakeLists.txt b/examples/mpi/CMakeLists.txt index 577c0d8744..54088a172a 100644 --- a/examples/mpi/CMakeLists.txt +++ b/examples/mpi/CMakeLists.txt @@ -16,6 +16,9 @@ endif() target_link_libraries(mpi-example PRIVATE MPI::MPI_CXX) -if(NOT CMAKE_PROJECT_NAME STREQUAL "omnitrace") - install(TARGETS mpi-example DESTINATION bin) +if(OMNITRACE_INSTALL_EXAMPLES) + install( + TARGETS mpi-example + DESTINATION bin + COMPONENT omnitrace-examples) endif() diff --git a/examples/openmp/CMakeLists.txt b/examples/openmp/CMakeLists.txt index 726ce66034..534bc3698a 100644 --- a/examples/openmp/CMakeLists.txt +++ b/examples/openmp/CMakeLists.txt @@ -36,6 +36,9 @@ else() endif() endif() -if(NOT CMAKE_PROJECT_NAME STREQUAL "omnitrace") - install(TARGETS openmp-cg openmp-lu DESTINATION bin) +if(OMNITRACE_INSTALL_EXAMPLES) + install( + TARGETS openmp-cg openmp-lu + DESTINATION bin + COMPONENT omnitrace-examples) endif() diff --git a/examples/parallel-overhead/CMakeLists.txt b/examples/parallel-overhead/CMakeLists.txt index 50877a2a33..f06177190b 100644 --- a/examples/parallel-overhead/CMakeLists.txt +++ b/examples/parallel-overhead/CMakeLists.txt @@ -11,6 +11,9 @@ add_executable(parallel-overhead-locks parallel-overhead.cpp) target_link_libraries(parallel-overhead-locks PRIVATE Threads::Threads) target_compile_definitions(parallel-overhead-locks PRIVATE USE_LOCKS=1) -if(NOT CMAKE_PROJECT_NAME STREQUAL "omnitrace") - install(TARGETS parallel-overhead parallel-overhead-locks DESTINATION bin) +if(OMNITRACE_INSTALL_EXAMPLES) + install( + TARGETS parallel-overhead parallel-overhead-locks + DESTINATION bin + COMPONENT omnitrace-examples) endif() diff --git a/examples/parallel-overhead/parallel-overhead.cpp b/examples/parallel-overhead/parallel-overhead.cpp index 5ecc33b402..c5bf98a9f0 100644 --- a/examples/parallel-overhead/parallel-overhead.cpp +++ b/examples/parallel-overhead/parallel-overhead.cpp @@ -1,18 +1,23 @@ +#include #include #include #include +#include #include #include #include -#if defined(USE_LOCKS) +#if !defined(USE_LOCKS) +# define USE_LOCKS 0 +#endif + +#if USE_LOCKS > 0 # include using auto_lock_t = std::unique_lock; long total = 0; std::mutex mtx{}; #else -# include std::atomic total{ 0 }; #endif @@ -31,17 +36,29 @@ fib(long n) void run(size_t nitr, long n) { -#if defined(USE_LOCKS) + static std::atomic _tids{ 0 }; + auto _tid = ++_tids; + + std::default_random_engine eng(std::random_device{}() * (100 + _tid)); + std::uniform_int_distribution distr{ n - 2, n + 2 }; + + auto _get_n = [&]() { return distr(eng); }; + + printf("[%i] number of iterations: %zu\n", _tid, nitr); + +#if USE_LOCKS > 0 for(size_t i = 0; i < nitr; ++i) { - auto _v = fib(n); + auto _v = fib(_get_n()); auto_lock_t _lk{ mtx }; total += _v; } #else long local = 0; for(size_t i = 0; i < nitr; ++i) - local += fib(n); + { + local += fib(_get_n()); + } total += local; #endif } @@ -64,8 +81,11 @@ main(int argc, char** argv) printf("\n[%s] Threads: %zu\n[%s] Iterations: %zu\n[%s] fibonacci(%li)...\n", _name.c_str(), nthread, _name.c_str(), nitr, _name.c_str(), nfib); + bool run_on_main_thread = (USE_LOCKS == 0); + auto nwait = nthread + ((run_on_main_thread) ? 1 : 0); + pthread_barrier_t _barrier; - pthread_barrier_init(&_barrier, nullptr, nthread); + pthread_barrier_init(&_barrier, nullptr, nwait); auto _run = [&_barrier](size_t nitr, long n) { pthread_barrier_wait(&_barrier); @@ -75,15 +95,13 @@ main(int argc, char** argv) std::vector threads{}; for(size_t i = 0; i < nthread; ++i) { - size_t _nitr = ((i % 2) == 1) ? (nitr - (0.1 * nitr)) : (nitr + (0.1 * nitr)); - _nitr = std::max(_nitr, 1); - threads.emplace_back(_run, _nitr, nfib); + threads.emplace_back(_run, nitr, nfib); } -#if !defined(USE_LOCKS) - auto _nitr = std::max(nitr - 0.25 * nitr, 1); - run(_nitr, nfib - 0.1 * nfib); -#endif + if(run_on_main_thread) + { + _run(nitr, nfib); + } for(auto& itr : threads) itr.join(); diff --git a/examples/python/CMakeLists.txt b/examples/python/CMakeLists.txt index bc29ab4c26..e43eb3edbc 100644 --- a/examples/python/CMakeLists.txt +++ b/examples/python/CMakeLists.txt @@ -4,14 +4,17 @@ project(omnitrace-python) set(PYTHON_FILES builtin.py external.py source.py) -if(NOT CMAKE_PROJECT_NAME STREQUAL "omnitrace") +if(OMNITRACE_INSTALL_EXAMPLES) find_package(Python3 COMPONENTS Interpreter) if(Python3_FOUND) set(PYTHON_EXECUTABLE "${Python3_EXECUTABLE}") foreach(_FILE ${PYTHON_FILES}) configure_file(${PROJECT_SOURCE_DIR}/${_FILE} ${PROJECT_BINARY_DIR}/${_FILE} @ONLY) - install(PROGRAMS ${PROJECT_BINARY_DIR}/${_FILE} DESTINATION bin) + install( + PROGRAMS ${PROJECT_BINARY_DIR}/${_FILE} + DESTINATION bin + COMPONENT omnitrace-examples) endforeach() endif() endif() diff --git a/examples/transpose/CMakeLists.txt b/examples/transpose/CMakeLists.txt index 391b4d0f9a..b8b16b1d57 100644 --- a/examples/transpose/CMakeLists.txt +++ b/examples/transpose/CMakeLists.txt @@ -2,7 +2,13 @@ cmake_minimum_required(VERSION 3.16 FATAL_ERROR) project(omnitrace-transpose LANGUAGES CXX) -find_program(HIPCC_EXECUTABLE NAMES hipcc) +find_package(hip QUIET) + +find_program( + HIPCC_EXECUTABLE + NAMES hipcc + HINTS ${ROCM_PATH} ENV ROCM_PATH /opt/rocm + PATHS ${ROCM_PATH} ENV ROCM_PATH /opt/rocm) mark_as_advanced(HIPCC_EXECUTABLE) if(NOT HIPCC_EXECUTABLE) @@ -10,9 +16,18 @@ if(NOT HIPCC_EXECUTABLE) return() endif() -if(NOT CMAKE_CXX_COMPILER_IS_HIPCC - AND HIPCC_EXECUTABLE - AND NOT COMMAND omnitrace_custom_compilation) +if(NOT CMAKE_CXX_COMPILER_IS_HIPCC AND HIPCC_EXECUTABLE) + if(CMAKE_CXX_COMPILER STREQUAL HIPCC_EXECUTABLE OR "${CMAKE_CXX_COMPILER}" MATCHES + "hipcc") + set(CMAKE_CXX_COMPILER_IS_HIPCC + 1 + CACHE BOOL "HIP compiler") + endif() +endif() + +if((NOT CMAKE_CXX_COMPILER_IS_HIPCC OR (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang" + AND NOT hip_FOUND)) + AND (NOT COMMAND omnitrace_custom_compilation AND NOT HIPCC_EXECUTABLE)) message(AUTHOR_WARNING "transpose target could not be built") return() endif() @@ -25,8 +40,13 @@ endif() add_executable(transpose transpose.cpp) -if(CMAKE_CXX_COMPILER_IS_CLANG AND TARGET omnitrace::omnitrace-compile-options) - target_link_libraries(transpose PRIVATE omnitrace::omnitrace-compile-options) +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + target_link_libraries( + transpose + PRIVATE + $,omnitrace::omnitrace-compile-options,> + $,hip::host,> + $,hip::device,>) else() target_compile_options(transpose PRIVATE -W -Wall) endif() @@ -41,6 +61,9 @@ if(NOT CMAKE_CXX_COMPILER_IS_HIPCC AND HIPCC_EXECUTABLE) omnitrace_custom_compilation(COMPILER ${HIPCC_EXECUTABLE} TARGET transpose) endif() -if(NOT CMAKE_PROJECT_NAME STREQUAL "omnitrace") - install(TARGETS transpose DESTINATION bin) +if(OMNITRACE_INSTALL_EXAMPLES) + install( + TARGETS transpose + DESTINATION bin + COMPONENT omnitrace-examples) endif() diff --git a/examples/user-api/CMakeLists.txt b/examples/user-api/CMakeLists.txt index 8a23ca01d3..6d8b502650 100644 --- a/examples/user-api/CMakeLists.txt +++ b/examples/user-api/CMakeLists.txt @@ -10,6 +10,9 @@ endif() add_executable(user-api user-api.cpp) target_link_libraries(user-api PRIVATE Threads::Threads omnitrace::omnitrace-user-library) -if(NOT CMAKE_PROJECT_NAME STREQUAL "omnitrace") - install(TARGETS user-api DESTINATION bin) +if(OMNITRACE_INSTALL_EXAMPLES) + install( + TARGETS user-api + DESTINATION bin + COMPONENT omnitrace-examples) endif()