diff --git a/benchmark/benchmark_utils.hpp b/benchmark/benchmark_utils.hpp index c7cfd47a..de250f0f 100644 --- a/benchmark/benchmark_utils.hpp +++ b/benchmark/benchmark_utils.hpp @@ -43,16 +43,17 @@ namespace benchmark_utils { - +const size_t default_max_random_size = 1024 * 1024; // get_random_data() generates only part of sequence and replicates it, // because benchmarks usually do not need "true" random sequence. template -inline auto get_random_data(size_t size, T min, T max, size_t max_random_size = 1024 * 1024) +inline auto get_random_data(size_t size, T min, T max, size_t max_random_size = default_max_random_size) -> typename std::enable_if::value, std::vector>::type { std::random_device rd; std::default_random_engine gen(rd()); - std::uniform_int_distribution distribution(min, max); + using distribution_type = typename std::conditional<(sizeof(T)==1), short, T>::type; + std::uniform_int_distribution distribution(min, max); std::vector data(size); std::generate( data.begin(), data.begin() + std::min(size, max_random_size), @@ -66,7 +67,7 @@ inline auto get_random_data(size_t size, T min, T max, size_t max_random_size = } template -inline auto get_random_data(size_t size, T min, T max, size_t max_random_size = 1024 * 1024) +inline auto get_random_data(size_t size, T min, T max, size_t max_random_size = default_max_random_size) -> typename std::enable_if::value, std::vector>::type { std::random_device rd; @@ -85,7 +86,7 @@ inline auto get_random_data(size_t size, T min, T max, size_t max_random_size = } template -inline std::vector get_random_data01(size_t size, float p, size_t max_random_size = 1024 * 1024) +inline std::vector get_random_data01(size_t size, float p, size_t max_random_size = default_max_random_size) { std::random_device rd; std::default_random_engine gen(rd()); diff --git a/benchmark/cmdparser.hpp b/benchmark/cmdparser.hpp index 5ffc24f6..6cf82788 100644 --- a/benchmark/cmdparser.hpp +++ b/benchmark/cmdparser.hpp @@ -185,6 +185,13 @@ namespace cli { return std::stoul(elements[0]); } + static unsigned long long parse(const std::vector& elements, const unsigned long long&) { + if (elements.size() != 1) + throw std::bad_cast(); + + return std::stoull(elements[0]); + } + static long parse(const std::vector& elements, const long&) { if (elements.size() != 1) throw std::bad_cast(); diff --git a/benchmark/common_benchmark_header.hpp b/benchmark/common_benchmark_header.hpp index 7327b3f6..6c1c70f0 100644 --- a/benchmark/common_benchmark_header.hpp +++ b/benchmark/common_benchmark_header.hpp @@ -31,6 +31,7 @@ #include #include #include +#include // Google Benchmark #include "benchmark/benchmark.h" diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index 06ecc282..763d8983 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -161,7 +161,11 @@ if(BUILD_BENCHMARK) set(GOOGLEBENCHMARK_ROOT ${CMAKE_CURRENT_BINARY_DIR}/deps/googlebenchmark CACHE PATH "") if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")) # hip-clang cannot compile googlebenchmark for some reason - set(COMPILER_OVERRIDE "-DCMAKE_CXX_COMPILER=g++") + if(WIN32) + set(COMPILER_OVERRIDE "-DCMAKE_CXX_COMPILER=cl") + else() + set(COMPILER_OVERRIDE "-DCMAKE_CXX_COMPILER=g++") + endif() endif() download_project( @@ -170,7 +174,7 @@ if(BUILD_BENCHMARK) GIT_TAG v1.6.1 GIT_SHALLOW TRUE INSTALL_DIR ${GOOGLEBENCHMARK_ROOT} - CMAKE_ARGS -DCMAKE_BUILD_TYPE=RELEASE -DBENCHMARK_ENABLE_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX= ${COMPILER_OVERRIDE} + CMAKE_ARGS -DCMAKE_BUILD_TYPE=RELEASE -DBENCHMARK_ENABLE_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX= -DCMAKE_CXX_STANDARD=14 ${COMPILER_OVERRIDE} LOG_DOWNLOAD TRUE LOG_CONFIGURE TRUE LOG_BUILD TRUE diff --git a/rmake.py b/rmake.py index 9874946f..9a1dce38 100644 --- a/rmake.py +++ b/rmake.py @@ -1,5 +1,5 @@ #!/usr/bin/python3 -"""Copyright 2020-2021 Advanced Micro Devices, Inc. +"""Copyright 2020-2023 Advanced Micro Devices, Inc. Manage build and installation""" import re @@ -72,6 +72,12 @@ def delete_dir(dir_path) : linux_path = pathlib.Path(dir_path).absolute() #print( linux_path ) run_cmd( "rm" , f"-rf {linux_path}") + +def cmake_path(os_path): + if OS_info["ID"] == "windows": + return os_path.replace("\\", "/") + else: + return os.path.realpath(os_path) def config_cmd(): global args @@ -85,7 +91,9 @@ def config_cmd(): cmake_platform_opts = [] if (OS_info["ID"] == 'windows'): # we don't have ROCM on windows but have hip, ROCM can be downloaded if required - rocm_path = os.getenv( 'ROCM_PATH', "C:/hipsdk/rocm-cmake-master") #C:/hip") # rocm/Utils/cmake-rocm4.2.0" + # CMAKE_PREFIX_PATH set to rocm_path and HIP_PATH set BY SDK Installer + raw_rocm_path = cmake_path(os.getenv('HIP_PATH', "C:/hip")) + rocm_path = f'"{raw_rocm_path}"' # guard against spaces in path cmake_executable = "cmake.exe" toolchain = os.path.join( src_path, "toolchain-windows.cmake" ) #set CPACK_PACKAGING_INSTALL_PREFIX= defined as blank as it is appended to end of path for archive creation @@ -143,7 +151,7 @@ def config_cmd(): cmake_options.append( f"-DROCM_DISABLE_LDCONFIG=ON" ) if args.build_clients: - cmake_options.append( f"-DBUILD_TEST=ON -DBUILD_DIR={build_dir}" ) + cmake_options.append( f"-DBUILD_TEST=ON -DBUILD_BENCHMARK=ON -DBUILD_DIR={build_dir}" ) cmake_options.append( f"-DAMDGPU_TARGETS={args.gpu_architecture}" ) diff --git a/toolchain-windows.cmake b/toolchain-windows.cmake index 233e074c..6afe6741 100644 --- a/toolchain-windows.cmake +++ b/toolchain-windows.cmake @@ -3,7 +3,10 @@ # Ninja doesn't support platform #set(CMAKE_GENERATOR_PLATFORM x64) -if (DEFINED ENV{HIP_DIR}) +if (DEFINED ENV{HIP_PATH}) + file(TO_CMAKE_PATH "$ENV{HIP_PATH}" HIP_DIR) + set(rocm_bin "${HIP_DIR}/bin") +elseif (DEFINED ENV{HIP_DIR}) file(TO_CMAKE_PATH "$ENV{HIP_DIR}" HIP_DIR) set(rocm_bin "${HIP_DIR}/bin") else()