diff --git a/projects/hip-tests/samples/0_Intro/CMakeLists.txt b/projects/hip-tests/samples/0_Intro/CMakeLists.txt index ed73f09e3d8..643e6fecc00 100644 --- a/projects/hip-tests/samples/0_Intro/CMakeLists.txt +++ b/projects/hip-tests/samples/0_Intro/CMakeLists.txt @@ -24,4 +24,5 @@ add_subdirectory(bit_extract) add_subdirectory(module_api) add_subdirectory(module_api_global) add_subdirectory(square) -add_subdirectory(generic_target) \ No newline at end of file +add_subdirectory(generic_target) +add_subdirectory(get_hip_pch) diff --git a/projects/hip-tests/samples/0_Intro/bit_extract/CMakeLists.txt b/projects/hip-tests/samples/0_Intro/bit_extract/CMakeLists.txt index 99813f0b7f5..30a6b0c8bf8 100644 --- a/projects/hip-tests/samples/0_Intro/bit_extract/CMakeLists.txt +++ b/projects/hip-tests/samples/0_Intro/bit_extract/CMakeLists.txt @@ -22,14 +22,6 @@ project(bit_extract) cmake_minimum_required(VERSION 3.10) -if(NOT WIN32 AND NOT DEFINED __HIP_ENABLE_PCH) - set(__HIP_ENABLE_PCH ON CACHE BOOL "enable/disable pre-compiled hip headers") -endif() - -if(${__HIP_ENABLE_PCH}) - add_definitions(-D__HIP_ENABLE_PCH) -endif() - if(UNIX) if(NOT DEFINED ROCM_PATH) if(DEFINED ENV{ROCM_PATH}) @@ -64,4 +56,4 @@ target_link_libraries(bit_extract hip::host) if(TARGET build_intro) add_dependencies(build_intro bit_extract) -endif() \ No newline at end of file +endif() diff --git a/projects/hip-tests/samples/0_Intro/bit_extract/bit_extract.cpp b/projects/hip-tests/samples/0_Intro/bit_extract/bit_extract.cpp index d3a57d0c3cf..2db9ece3c6b 100644 --- a/projects/hip-tests/samples/0_Intro/bit_extract/bit_extract.cpp +++ b/projects/hip-tests/samples/0_Intro/bit_extract/bit_extract.cpp @@ -45,27 +45,12 @@ int main(int argc, char* argv[]) { size_t N = 1000000; size_t Nbytes = N * sizeof(uint32_t); -#ifdef __HIP_ENABLE_PCH - // Verify hip_pch.o - const char* pch = nullptr; - unsigned int size = 0; - __hipGetPCH(&pch, &size); - printf("pch size: %u\n", size); - if (size == 0) { - printf("__hipGetPCH failed!\n"); - return -1; - } else { - printf("__hipGetPCH succeeded!\n"); - } -#endif - int deviceId; checkHipErrors(hipGetDevice(&deviceId)); hipDeviceProp_t props; checkHipErrors(hipGetDeviceProperties(&props, deviceId)); printf("info: running on device #%d %s\n", deviceId, props.name); - printf("info: allocate host mem (%6.2f MB)\n", 2 * Nbytes / 1024.0 / 1024.0); A_h = (uint32_t*)malloc(Nbytes); checkHipErrors(A_h == 0 ? hipErrorOutOfMemory : hipSuccess); diff --git a/projects/hip-tests/samples/0_Intro/get_hip_pch/CMakeLists.txt b/projects/hip-tests/samples/0_Intro/get_hip_pch/CMakeLists.txt new file mode 100644 index 00000000000..0288dc5643e --- /dev/null +++ b/projects/hip-tests/samples/0_Intro/get_hip_pch/CMakeLists.txt @@ -0,0 +1,56 @@ +# Copyright (c) 2020 - 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +project(get_hip_pch) + +cmake_minimum_required(VERSION 3.10) + +if(UNIX) + if(NOT DEFINED ROCM_PATH) + set(ROCM_PATH "/opt/rocm" CACHE STRING "Default ROCM installation directory.") + endif() + # Search for rocm in common locations + list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH}) +endif() + +# Find hip +find_package(hip) + +# Set compiler and linker +set(CMAKE_CXX_COMPILER ${HIP_HIPCC_EXECUTABLE}) + +set(CMAKE_CXX_LINKER ${HIP_HIPCC_EXECUTABLE}) + +# Create the excutable +if(TARGET build_intro) +set(EXCLUDE_OPTION EXCLUDE_FROM_ALL) +else() +set(EXCLUDE_OPTION ) +endif() +add_executable(get_hip_pch ${EXCLUDE_OPTION} get_hip_pch.cpp) + +target_include_directories(get_hip_pch PRIVATE ../../common) + +# Link with HIP +target_link_libraries(get_hip_pch hip::host) + +if(TARGET build_intro) + add_dependencies(build_intro get_hip_pch) +endif() diff --git a/projects/hip-tests/samples/0_Intro/get_hip_pch/README.md b/projects/hip-tests/samples/0_Intro/get_hip_pch/README.md new file mode 100644 index 00000000000..598db61a67a --- /dev/null +++ b/projects/hip-tests/samples/0_Intro/get_hip_pch/README.md @@ -0,0 +1,18 @@ +# get hip pch + +Just verify that if HIP is built PCH, the __hipGetPCH function and associated macros are exported. + +- Steps to build this sample: +``` +$ mkdir build; cd build +$ cmake .. -DCMAKE_PREFIX_PATH=/opt/rocm +$ make +``` + +- Execute File +``` +$ ./get_hip_pch +pch size: 11743288 +__hipGetPCH succeeded! +PASSED! +``` diff --git a/projects/hip-tests/samples/0_Intro/get_hip_pch/get_hip_pch.cpp b/projects/hip-tests/samples/0_Intro/get_hip_pch/get_hip_pch.cpp new file mode 100644 index 00000000000..62c734770e5 --- /dev/null +++ b/projects/hip-tests/samples/0_Intro/get_hip_pch/get_hip_pch.cpp @@ -0,0 +1,53 @@ +/* +Copyright (c) 2015 - 2021 Advanced Micro Devices, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include +#include "hip/hip_runtime.h" + +int main(int argc, char* argv[]) { +#ifdef __HIP_ENABLE_PCH +#ifndef __HIP_HAS_GET_PCH +#error "Macro __HIP_ENABLE_PCH defined but __HIP_HAS_GET_PCH not defined" +#endif + +#if __HIP_HAS_GET_PCH != 1 +#error "Macro __HIP_ENABLE_PCH defined but __HIP_HAS_GET_PCH value not equal to 1" +#endif + // Verify hip_pch.o + const char* pch = nullptr; + unsigned int size = 0; + __hipGetPCH(&pch, &size); + printf("pch size: %u\n", size); + if (size == 0) { + printf("__hipGetPCH failed!\n"); + return -1; + } +#endif + // CLR exposes hip_runtime.h and hip_fp16.h in a single precompiled header + // through the __hipGetPCH function. + // This PCH could be passed to Comgr by the user to compile hip kernels. + // This was the case for MIOpen, which has been dropped since ROCm 6.3 for + // the preferred hiprtc API. + printf("__hipGetPCH succeeded!\n"); + printf("PASSED!\n"); + return 0; +}