diff --git a/projects/hip-tests/catch/unit/module/CMakeLists.txt b/projects/hip-tests/catch/unit/module/CMakeLists.txt index 262f8ff7dd..5e52e4575b 100644 --- a/projects/hip-tests/catch/unit/module/CMakeLists.txt +++ b/projects/hip-tests/catch/unit/module/CMakeLists.txt @@ -21,12 +21,18 @@ # Common Tests - Test independent of all platforms set(TEST_SRC hip_module_common.cc - hipModuleLoad.cc - hipModuleLoadData.cc - hipModuleLoadDataEx.cc - hipModuleUnload.cc + hipModuleLoad.cc + hipModuleLoadData.cc + hipModuleLoadDataEx.cc + hipModuleUnload.cc + hipModuleGetFunction.cc ) +add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/get_function_module.code + COMMAND ${CMAKE_CXX_COMPILER} --genco --std=c++17 ${CMAKE_CURRENT_SOURCE_DIR}/get_function_module.cc -o get_function_module.code + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/get_function_module.cc) +add_custom_target(get_function_module ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/get_function_module.code) + add_custom_target(empty_module.code COMMAND ${CMAKE_CXX_COMPILER} --genco ${OFFLOAD_ARCH_STR} ${CMAKE_CURRENT_SOURCE_DIR}/empty_module.cc @@ -129,6 +135,7 @@ hip_add_exe_to_target(NAME ModuleTest COMMON_SHARED_SRC ${COMMON_SHARED_SRC}) add_dependencies(build_tests empty_module.code) +add_dependencies(ModuleTest get_function_module) if(HIP_PLATFORM MATCHES "amd") add_dependencies(build_tests copyKernel.code copyKernel.s) diff --git a/projects/hip-tests/catch/unit/module/get_function_module.cc b/projects/hip-tests/catch/unit/module/get_function_module.cc new file mode 100644 index 0000000000..2c5a8a5636 --- /dev/null +++ b/projects/hip-tests/catch/unit/module/get_function_module.cc @@ -0,0 +1,28 @@ +/* +Copyright (c) 2022 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 + +extern "C" { +__global__ void GlobalKernel() {} + +__device__ void DeviceKernel() {} +} \ No newline at end of file diff --git a/projects/hip-tests/catch/unit/module/hipModuleGetFunction.cc b/projects/hip-tests/catch/unit/module/hipModuleGetFunction.cc new file mode 100644 index 0000000000..676a61c33d --- /dev/null +++ b/projects/hip-tests/catch/unit/module/hipModuleGetFunction.cc @@ -0,0 +1,74 @@ +/* +Copyright (c) 2022 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 "hip_module_common.hh" + +#include +#include + +static hipModule_t GetModule() { + HIP_CHECK(hipFree(nullptr)); + static const auto mg = ModuleGuard::LoadModule("get_function_module.code"); + return mg.module(); +} + +TEST_CASE("Unit_hipModuleGetFunction_Positive_Basic") { + hipFunction_t kernel = nullptr; + HIP_CHECK(hipModuleGetFunction(&kernel, GetModule(), "GlobalKernel")); + REQUIRE(kernel != nullptr); +} + +TEST_CASE("Unit_hipModuleGetFunction_Negative_Parameters") { + hipFunction_t kernel = nullptr; + + SECTION("function == nullptr") { + HIP_CHECK_ERROR(hipModuleGetFunction(nullptr, GetModule(), "GlobalKernel"), + hipErrorInvalidValue); + } + +// Disabled on AMD due to defect - EXSWHTEC-154 +#if HT_NVIDIA + SECTION("module == nullptr") { + HIP_CHECK_ERROR(hipModuleGetFunction(&kernel, nullptr, "GlobalKernel"), + hipErrorInvalidResourceHandle); + } +#endif + + SECTION("kname == nullptr") { + HIP_CHECK_ERROR(hipModuleGetFunction(&kernel, GetModule(), nullptr), hipErrorInvalidValue); + } + +// Disabled on AMD due to defect - EXSWHTEC-155 +#if HT_NVIDIA + SECTION("kname == empty string") { + HIP_CHECK_ERROR(hipModuleGetFunction(&kernel, GetModule(), ""), hipErrorInvalidValue); + } +#endif + + SECTION("kname == non existent kernel") { + HIP_CHECK_ERROR(hipModuleGetFunction(&kernel, GetModule(), "NonExistentKernel"), + hipErrorNotFound); + } + + SECTION("kname == __device__ kernel") { + HIP_CHECK_ERROR(hipModuleGetFunction(&kernel, GetModule(), "DeviceKernel"), hipErrorNotFound); + } +} \ No newline at end of file