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
This commit is contained in:
afzpatel 2023-07-28 13:10:29 -04:00 committed by GitHub
parent a8301709a8
commit c1b084d754
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 124 additions and 1 deletions

View File

@ -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) {

View File

@ -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 @@ def cmake_args(self):
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)