Expose iterator for executables
Change-Id: I0c5d39fc33c15a6eb8ee10ff181c2dcf2e042675
[ROCm/ROCR-Runtime commit: 15e54d684d]
This commit is contained in:
committed by
Konstantin Zhuravlyov
parent
1c7abea61a
commit
b095fec147
@@ -78,6 +78,12 @@ namespace rocr {
|
||||
size_t size,
|
||||
hsa_code_object_reader_t *code_object_reader);
|
||||
|
||||
hsa_status_t
|
||||
hsa_ven_amd_loader_iterate_executables(
|
||||
hsa_status_t (*callback)(
|
||||
hsa_executable_t executable,
|
||||
void *data),
|
||||
void *data);
|
||||
} // namespace rocr
|
||||
|
||||
#endif
|
||||
|
||||
@@ -341,6 +341,8 @@ static size_t get_extension_table_length(uint16_t extension, uint16_t major, uin
|
||||
{"hsa_ext_finalizer_1_00_pfn_t", sizeof(hsa_ext_finalizer_1_00_pfn_t)},
|
||||
{"hsa_ven_amd_loader_1_00_pfn_t", sizeof(hsa_ven_amd_loader_1_00_pfn_t)},
|
||||
{"hsa_ven_amd_loader_1_01_pfn_t", sizeof(hsa_ven_amd_loader_1_01_pfn_t)},
|
||||
{"hsa_ven_amd_loader_1_02_pfn_t", sizeof(hsa_ven_amd_loader_1_02_pfn_t)},
|
||||
{"hsa_ven_amd_loader_1_03_pfn_t", sizeof(hsa_ven_amd_loader_1_03_pfn_t)},
|
||||
{"hsa_ven_amd_aqlprofile_1_00_pfn_t", sizeof(hsa_ven_amd_aqlprofile_1_00_pfn_t)}};
|
||||
static const size_t num_tables = sizeof(sizes) / sizeof(sizes_t);
|
||||
|
||||
@@ -448,15 +450,21 @@ hsa_status_t hsa_system_get_major_extension_table(uint16_t extension, uint16_t v
|
||||
|
||||
if (extension == HSA_EXTENSION_AMD_LOADER) {
|
||||
if (version_major != 1) return HSA_STATUS_ERROR;
|
||||
hsa_ven_amd_loader_1_01_pfn_t ext_table;
|
||||
ext_table.hsa_ven_amd_loader_query_host_address = hsa_ven_amd_loader_query_host_address;
|
||||
hsa_ven_amd_loader_1_03_pfn_t ext_table;
|
||||
ext_table.hsa_ven_amd_loader_query_host_address =
|
||||
hsa_ven_amd_loader_query_host_address;
|
||||
ext_table.hsa_ven_amd_loader_query_segment_descriptors =
|
||||
hsa_ven_amd_loader_query_segment_descriptors;
|
||||
ext_table.hsa_ven_amd_loader_query_executable = hsa_ven_amd_loader_query_executable;
|
||||
ext_table.hsa_ven_amd_loader_query_executable =
|
||||
hsa_ven_amd_loader_query_executable;
|
||||
ext_table.hsa_ven_amd_loader_executable_iterate_loaded_code_objects =
|
||||
hsa_ven_amd_loader_executable_iterate_loaded_code_objects;
|
||||
ext_table.hsa_ven_amd_loader_loaded_code_object_get_info =
|
||||
hsa_ven_amd_loader_loaded_code_object_get_info;
|
||||
ext_table.hsa_ven_amd_loader_code_object_reader_create_from_file_with_offset_size =
|
||||
hsa_ven_amd_loader_code_object_reader_create_from_file_with_offset_size;
|
||||
ext_table.hsa_ven_amd_loader_iterate_executables =
|
||||
hsa_ven_amd_loader_iterate_executables;
|
||||
|
||||
memcpy(table, &ext_table, Min(sizeof(ext_table), table_length));
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ using namespace core;
|
||||
using loader::CodeObjectReaderImpl;
|
||||
using loader::Executable;
|
||||
using loader::LoadedCodeObject;
|
||||
using loader::Loader;
|
||||
|
||||
namespace AMD {
|
||||
|
||||
@@ -273,4 +274,30 @@ hsa_ven_amd_loader_code_object_reader_create_from_file_with_offset_size(
|
||||
} catch(...) { return AMD::handleException(); }
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
Loader *GetLoader() {
|
||||
return Runtime::runtime_singleton_->loader();
|
||||
}
|
||||
|
||||
} // namespace anonymous
|
||||
|
||||
hsa_status_t
|
||||
hsa_ven_amd_loader_iterate_executables(
|
||||
hsa_status_t (*callback)(
|
||||
hsa_executable_t executable,
|
||||
void *data),
|
||||
void *data) {
|
||||
try {
|
||||
if (!Runtime::runtime_singleton_->IsOpen()) {
|
||||
return HSA_STATUS_ERROR_NOT_INITIALIZED;
|
||||
}
|
||||
if (nullptr == callback) {
|
||||
return HSA_STATUS_ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
return GetLoader()->IterateExecutables(callback, data);
|
||||
} catch(...) { return AMD::handleException(); }
|
||||
}
|
||||
|
||||
} // namespace rocr
|
||||
|
||||
@@ -493,10 +493,39 @@ hsa_ven_amd_loader_code_object_reader_create_from_file_with_offset_size(
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/**
|
||||
* @brief Iterate over the available executables, and invoke an
|
||||
* application-defined callback on every iteration.
|
||||
*
|
||||
* @param[in] callback Callback to be invoked once per executable. The HSA
|
||||
* runtime passes two arguments to the callback: the executable and the
|
||||
* application data. If @p callback returns a status other than
|
||||
* ::HSA_STATUS_SUCCESS for a particular iteration, the traversal stops and
|
||||
* ::hsa_ven_amd_loader_iterate_executables returns that status value.
|
||||
*
|
||||
* @param[in] data Application data that is passed to @p callback on every
|
||||
* iteration. May be NULL.
|
||||
*
|
||||
* @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
|
||||
*
|
||||
* @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
|
||||
* initialized.
|
||||
*
|
||||
* @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p callback is NULL.
|
||||
*/
|
||||
hsa_status_t
|
||||
hsa_ven_amd_loader_iterate_executables(
|
||||
hsa_status_t (*callback)(
|
||||
hsa_executable_t executable,
|
||||
void *data),
|
||||
void *data);
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/**
|
||||
* @brief Extension version.
|
||||
*/
|
||||
#define hsa_ven_amd_loader 001002
|
||||
#define hsa_ven_amd_loader 001003
|
||||
|
||||
/**
|
||||
* @brief Extension function table version 1.00.
|
||||
@@ -582,6 +611,50 @@ typedef struct hsa_ven_amd_loader_1_02_pfn_s {
|
||||
hsa_code_object_reader_t *code_object_reader);
|
||||
} hsa_ven_amd_loader_1_02_pfn_t;
|
||||
|
||||
/**
|
||||
* @brief Extension function table version 1.03.
|
||||
*/
|
||||
typedef struct hsa_ven_amd_loader_1_03_pfn_s {
|
||||
hsa_status_t (*hsa_ven_amd_loader_query_host_address)(
|
||||
const void *device_address,
|
||||
const void **host_address);
|
||||
|
||||
hsa_status_t (*hsa_ven_amd_loader_query_segment_descriptors)(
|
||||
hsa_ven_amd_loader_segment_descriptor_t *segment_descriptors,
|
||||
size_t *num_segment_descriptors);
|
||||
|
||||
hsa_status_t (*hsa_ven_amd_loader_query_executable)(
|
||||
const void *device_address,
|
||||
hsa_executable_t *executable);
|
||||
|
||||
hsa_status_t (*hsa_ven_amd_loader_executable_iterate_loaded_code_objects)(
|
||||
hsa_executable_t executable,
|
||||
hsa_status_t (*callback)(
|
||||
hsa_executable_t executable,
|
||||
hsa_loaded_code_object_t loaded_code_object,
|
||||
void *data),
|
||||
void *data);
|
||||
|
||||
hsa_status_t (*hsa_ven_amd_loader_loaded_code_object_get_info)(
|
||||
hsa_loaded_code_object_t loaded_code_object,
|
||||
hsa_ven_amd_loader_loaded_code_object_info_t attribute,
|
||||
void *value);
|
||||
|
||||
hsa_status_t
|
||||
(*hsa_ven_amd_loader_code_object_reader_create_from_file_with_offset_size)(
|
||||
hsa_file_t file,
|
||||
size_t offset,
|
||||
size_t size,
|
||||
hsa_code_object_reader_t *code_object_reader);
|
||||
|
||||
hsa_status_t
|
||||
(*hsa_ven_amd_loader_iterate_executables)(
|
||||
hsa_status_t (*callback)(
|
||||
hsa_executable_t executable,
|
||||
void *data),
|
||||
void *data);
|
||||
} hsa_ven_amd_loader_1_03_pfn_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
Reference in New Issue
Block a user