From c1b084d7542c39fd7158bf553471756723099160 Mon Sep 17 00:00:00 2001 From: afzpatel <122491982+afzpatel@users.noreply.github.com> Date: Fri, 28 Jul 2023 13:10:29 -0400 Subject: Adding optional hip test (#34907) * Adding optional hip test * Modifications to run every samples test * Skipping test directories without a Makefile * fix styling and cleaning code * fix styling and changed method of itterating through sample folders * changed to new syntax for standalone tests * Updates for changes in syntax --- .../hip/0016-hip-sample-fix-hipMalloc-call.patch | 55 +++++++++++++++++ var/spack/repos/builtin/packages/hip/package.py | 70 +++++++++++++++++++++- 2 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 var/spack/repos/builtin/packages/hip/0016-hip-sample-fix-hipMalloc-call.patch (limited to 'var') diff --git a/var/spack/repos/builtin/packages/hip/0016-hip-sample-fix-hipMalloc-call.patch b/var/spack/repos/builtin/packages/hip/0016-hip-sample-fix-hipMalloc-call.patch new file mode 100644 index 0000000000..80e981c86a --- /dev/null +++ b/var/spack/repos/builtin/packages/hip/0016-hip-sample-fix-hipMalloc-call.patch @@ -0,0 +1,55 @@ +diff --git a/samples/2_Cookbook/15_static_library/device_functions/hipMain2.cpp b/samples/2_Cookbook/15_static_library/device_functions/hipMain2.cpp +index a3c3f8f..fafbf5a 100644 +--- a/samples/2_Cookbook/15_static_library/device_functions/hipMain2.cpp ++++ b/samples/2_Cookbook/15_static_library/device_functions/hipMain2.cpp +@@ -23,8 +23,15 @@ + #include + #include + #include ++#include + +-#define HIP_ASSERT(status) assert(status == hipSuccess) ++#define HIP_ASSERT(status) \ ++ { \ ++ if ((status != hipSuccess)) { \ ++ std::cerr << "Failed in: " << __LINE__ << " on hip call: " #status << std::endl; \ ++ throw std::runtime_error("generic failure"); \ ++ } \ ++ } + #define LEN 512 + + extern __device__ int square_me(int); +diff --git a/samples/2_Cookbook/15_static_library/host_functions/CMakeLists.txt b/samples/2_Cookbook/15_static_library/host_functions/CMakeLists.txt +index 3c7c306..8404ac5 100644 +--- a/samples/2_Cookbook/15_static_library/host_functions/CMakeLists.txt ++++ b/samples/2_Cookbook/15_static_library/host_functions/CMakeLists.txt +@@ -37,7 +37,7 @@ endif() + add_library(HipOptLibrary STATIC ${CPP_SOURCES}) + + # Set-up the correct flags to generate the static library. +-target_link_libraries(HipOptLibrary PRIVATE --emit-static-lib) ++target_link_options(HipOptLibrary PRIVATE --emit-static-lib) + target_include_directories(HipOptLibrary PRIVATE /opt/rocm/hsa/include) + + # Create test executable that uses libHipOptLibrary.a +diff --git a/samples/2_Cookbook/15_static_library/host_functions/hipOptLibrary.cpp b/samples/2_Cookbook/15_static_library/host_functions/hipOptLibrary.cpp +index 68f5418..7e52ce3 100644 +--- a/samples/2_Cookbook/15_static_library/host_functions/hipOptLibrary.cpp ++++ b/samples/2_Cookbook/15_static_library/host_functions/hipOptLibrary.cpp +@@ -23,8 +23,15 @@ + #include + #include + #include ++#include + +-#define HIP_ASSERT(status) assert(status == hipSuccess) ++#define HIP_ASSERT(status) \ ++ { \ ++ if ((status != hipSuccess)) { \ ++ std::cerr << "Failed in: " << __LINE__ << " on hip call: " #status << std::endl; \ ++ throw std::runtime_error("generic failure"); \ ++ } \ ++ } + #define LEN 512 + + __global__ void copy(uint32_t* A, uint32_t* B) { diff --git a/var/spack/repos/builtin/packages/hip/package.py b/var/spack/repos/builtin/packages/hip/package.py index 7b383f8de4..ad3f93d162 100644 --- a/var/spack/repos/builtin/packages/hip/package.py +++ b/var/spack/repos/builtin/packages/hip/package.py @@ -114,10 +114,12 @@ class Hip(CMakePackage): depends_on("cuda", when="+cuda") - depends_on("cmake@3.16.8:", type="build", when="@4.5.0:") + depends_on("cmake@3.16.8:", type=("build"), when="@4.5.0:") depends_on("cmake@3.4.3:", type="build") depends_on("perl@5.10:", type=("build", "run")) + test_requires_compiler = True + with when("+rocm"): depends_on("gl@4.5:") depends_on("py-cppheaderparser", type="build", when="@5.3.3:") @@ -330,6 +332,7 @@ class Hip(CMakePackage): patch("Add_missing_open_cl_header_file_for_4.3.0.patch", when="@4.3.0:4.3.2") patch("0014-hip-test-file-reorg-5.4.0.patch", when="@5.4.0:") + patch("0016-hip-sample-fix-hipMalloc-call.patch", when="@5.4.3:") patch("0014-remove-compiler-rt-linkage-for-host.5.5.0.patch", when="@5.5") # See https://github.com/ROCm-Developer-Tools/HIP/pull/3206 @@ -612,3 +615,68 @@ class Hip(CMakePackage): args.append("-DCMAKE_INSTALL_LIBDIR=lib") return args + + test_src_dir = "samples" + + @run_after("install") + def cache_test_sources(self): + """Copy the tests source files after the package is installed to an + install test subdirectory for use during `spack test run`.""" + if self.spec.satisfies("@:5.1.0"): + return + self.cache_extra_test_sources([self.test_src_dir]) + + def test_samples(self): + # configure, build and run all hip samples + if self.spec.satisfies("@:5.1.0"): + raise SkipTest("Test is only available for specs after version 5.1.0") + test_dir = join_path(self.test_suite.current_test_cache_dir, self.test_src_dir) + prefixes = ";".join( + [ + self.spec["hip"].prefix, + self.spec["llvm-amdgpu"].prefix, + self.spec["comgr"].prefix, + self.spec["hsa-rocr-dev"].prefix, + ] + ) + cc_options = ["-DCMAKE_PREFIX_PATH=" + prefixes, ".."] + + amdclang_path = join_path(self.spec["llvm-amdgpu"].prefix, "bin", "amdclang++") + os.environ["CXX"] = amdclang_path + os.environ["FC"] = "/usr/bin/gfortran" + + cmake = which(self.spec["cmake"].prefix.bin.cmake) + + for root, dirs, files in os.walk(test_dir): + dirs.sort() + if "CMakeLists.txt" in files or "Makefile" in files: + with working_dir(root, create=True): + head, test_name = os.path.split(root) + with test_part( + self, + "test_sample_{0}".format(test_name), + purpose="configure, build and run test: {0}".format(test_name), + ): + if "CMakeLists.txt" in files: + print("Configuring test " + test_name) + os.mkdir("build") + os.chdir("build") + cmake(*cc_options) + + print("Building test " + test_name) + make(parallel=False) + # iterate through the files in dir to find the newly built binary + for file in os.listdir("."): + if ( + file not in files + and os.path.isfile(file) + and os.access(file, os.X_OK) + and not file.endswith(".o") + ): + print("Executing test binary: " + file) + exe = which(file) + if file == "hipDispatchEnqueueRateMT": + options = ["16", "0"] + else: + options = [] + exe(*options) -- cgit v1.2.3-70-g09d2