| // 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]] |