summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorafzpatel <122491982+afzpatel@users.noreply.github.com>2023-07-28 13:10:29 -0400
committerGitHub <noreply@github.com>2023-07-28 10:10:29 -0700
commitc1b084d7542c39fd7158bf553471756723099160 (patch)
tree4c85f54a0d75e6dd2744b7edb12919796179bf07 /var
parenta8301709a8d925e062e31942123535dc8536fd4f (diff)
downloadspack-c1b084d7542c39fd7158bf553471756723099160.tar.gz
spack-c1b084d7542c39fd7158bf553471756723099160.tar.bz2
spack-c1b084d7542c39fd7158bf553471756723099160.tar.xz
spack-c1b084d7542c39fd7158bf553471756723099160.zip
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
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/hip/0016-hip-sample-fix-hipMalloc-call.patch55
-rw-r--r--var/spack/repos/builtin/packages/hip/package.py70
2 files changed, 124 insertions, 1 deletions
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 <hip/hip_runtime.h>
+ #include <hip/hip_runtime_api.h>
+ #include <iostream>
++#include <stdexcept>
+
+-#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 <hip/hip_runtime.h>
+ #include <hip/hip_runtime_api.h>
+ #include <iostream>
++#include <stdexcept>
+
+-#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)