blob: 7fc8a8ee29ea0c4a8a47d2e89cef71ab7c4636ad [file] [edit]
// clang-format off
// RUN: %libomptarget-compile-run-and-check-generic
// REQUIRES: ompt
// REQUIRES: gpu
// clang-format on
/*
* Test to ensure that a tool receives the same number of devices
* via the OMPT entry point that an application receives via the
* omp_get_num_devices runtime function.
*
* Note, that the get_num_devices() entry point will _not_ provide
* the correct amount of devices before the PluginManager has been
* fully initialized, i.e. until after `ompt_initialize`.
*/
#include <assert.h>
#include <stdio.h>
#include <omp-tools.h>
#include <omp.h>
// OMPT entry point handles
static ompt_get_num_devices_t ompt_get_num_devices = 0;
// Init functions
int ompt_initialize(ompt_function_lookup_t lookup, int initial_device_num,
ompt_data_t *tool_data) {
ompt_get_num_devices = (ompt_get_num_devices_t)lookup("ompt_get_num_devices");
if (!ompt_get_num_devices)
return 0; // failed
return 1; // success
}
void ompt_finalize(ompt_data_t *tool_data) {}
ompt_start_tool_result_t *ompt_start_tool(unsigned int omp_version,
const char *runtime_version) {
static ompt_start_tool_result_t ompt_start_tool_result = {&ompt_initialize,
&ompt_finalize, 0};
return &ompt_start_tool_result;
}
int main(void) {
const int NumDevices = omp_get_num_devices();
assert(ompt_get_num_devices != NULL &&
"ompt_get_num_devices() should not be NULL\n");
const int NumDevicesOmpt = ompt_get_num_devices();
printf("Num Devices: %d\n", NumDevices);
printf("Num Devices via OMPT: %d\n", NumDevicesOmpt);
}
/// CHECK: Num Devices: [[NUM:[0-9]+]]
/// CHECK: Num Devices via OMPT: [[NUM]]