Add asserts and minimum values for kernarg alignment and utility functions.

Kernel argument size and alignment queries are not supported on
code object v3.

Change-Id: I1bdd34e2e62132f912ac39d80355efd3456df87c


[ROCm/ROCR-Runtime commit: 6182abf5e9]
Dieser Commit ist enthalten in:
Sean Keely
2020-11-21 21:37:58 -06:00
Ursprung e1734526fc
Commit 62138712cf
3 geänderte Dateien mit 9 neuen und 0 gelöschten Zeilen
@@ -335,6 +335,7 @@ hsa_status_t LoadKernelFromObjFile(BaseRocR* test, hsa_agent_t* agent) {
RET_IF_HSA_UTILS_ERR(err);
test->set_group_segment_size(val);
// Remaining queries only supported on code object v3.
err = hsa_executable_symbol_get_info(kern_sym,
HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_KERNARG_SEGMENT_SIZE, &val);
RET_IF_HSA_UTILS_ERR(err);
@@ -343,6 +344,8 @@ hsa_status_t LoadKernelFromObjFile(BaseRocR* test, hsa_agent_t* agent) {
err = hsa_executable_symbol_get_info(kern_sym,
HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_KERNARG_SEGMENT_ALIGNMENT, &val);
RET_IF_HSA_UTILS_ERR(err);
assert(val >= 16 && "Reported kernarg size is too small.");
val = (val == 0) ? 16 : val;
test->set_kernarg_align(val);
return HSA_STATUS_SUCCESS;
@@ -48,6 +48,7 @@
#ifndef _WIN32
#include <unistd.h>
#endif
#include <assert.h>
#include <cmath>
#include <iostream>
#include <string>
@@ -175,6 +176,7 @@ Compare(const double* refData, const double* data,
intptr_t
AlignDown(intptr_t value, size_t alignment) {
assert(alignment != 0 && "Zero alignment");
return (intptr_t) (value & ~(alignment - 1));
}
@@ -419,6 +419,7 @@ hsa_status_t LoadKernelFromObjFile(BinarySearch* bs) {
&bs->group_segment_size);
RET_IF_HSA_ERR(err);
// Remaining queries not supported on code object v3.
err = hsa_executable_symbol_get_info(kern_sym,
HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_KERNARG_SEGMENT_SIZE,
&bs->kernarg_size);
@@ -428,6 +429,8 @@ hsa_status_t LoadKernelFromObjFile(BinarySearch* bs) {
HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_KERNARG_SEGMENT_ALIGNMENT,
&bs->kernarg_align);
RET_IF_HSA_ERR(err);
assert(bs->kernarg_align >= 16 && "Reported kernarg size is too small.");
bs->kernarg_align = (bs->kernarg_align == 0) ? 16 : bs->kernarg_align;
return err;
}
@@ -465,6 +468,7 @@ hsa_status_t AgentMemcpy(void* dst, const void* src,
// return a value that has the specified alignment.
static intptr_t
AlignDown(intptr_t value, size_t alignment) {
assert(alignment != 0 && "Zero alignment");
return (intptr_t) (value & ~(alignment - 1));
}
static void*