Foreign-runtime support for AMD GPUs (GNU libgomp)

#### 12.1.1 OpenMP `interop` – Foreign-Runtime Support for AMD GPUs ¶

On AMD GPUs, the foreign runtimes are HIP (C++ Heterogeneous-Compute Interface for Portability) and HSA (Heterogeneous System Architecture), where HIP is the default. The interop object is created using OpenMP’s `interop` directive or, implicitly, when invoking a `declare variant` procedure that has the `append_args` clause. In either case, the `prefer_type` modifier determines whether HIP or HSA is used.

When specifying the `targetsync` modifier: For HIP, a stream is created using `hipStreamCreate`. For HSA, a queue is created of type `HSA_QUEUE_TYPE_MULTI` with a queue size of 64.

Invoke the Interoperability Routines on an interop object to obtain the following properties. For properties with integral (int), pointer (ptr), or string (str) data type, call `omp_get_interop_int`, `omp_get_interop_ptr`, or `omp_get_interop_str`, respectively. Note that `device_num` is the OpenMP device number while `device` is the HIP device number or HSA device handle.

When using HIP with C and C++, the `__HIP_PLATFORM_AMD__` preprocessor macro must be defined before including the HIP header files.

For the API routine call, add the prefix `omp_ipr_` to the property name; for instance:

    omp_interop_rc_t ret;
    int device_num = omp_get_interop_int (my_interop_obj, omp_ipr_device_num, &ret);

Available properties for an HIP interop object:

Property | C data type | API routine | value (if constant)
--- | --- | --- | ---
`fr_id` | `omp_interop_fr_t` | int | `omp_fr_hip`
`fr_name` | `const char *` | str | `"hip"`
`vendor` | `int` | int | `1`
`vendor_name` | `const char *` | str | `"amd"`
`device_num` | `int` | int |
`platform` | N/A |  |
`device` | `hipDevice_t` | int |
`device_context` | `hipCtx_t` | ptr |
`targetsync` | `hipStream_t` | ptr |

Available properties for an HSA interop object:

Property | C data type | API routine | value (if constant)
--- | --- | --- | ---
`fr_id` | `omp_interop_fr_t` | int | `omp_fr_hsa`
`fr_name` | `const char *` | str | `"hsa"`
`vendor` | `int` | int | `1`
`vendor_name` | `const char *` | str | `"amd"`
`device_num` | `int` | int |
`platform` | N/A |  |
`device` | `hsa_agent *` | ptr |
`device_context` | N/A |  |
`targetsync` | `hsa_queue *` | ptr |