Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions offload/test/offloading/interop-print.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
// RUN: %libomptarget-compile-amdgcn-amd-amdhsa
// RUN: %libomptarget-run-generic 2>&1 | \
// RUN: %fcheck-amdgcn-amd-amdhsa -check-prefixes=AMD

// RUN: %libomptarget-compile-nvptx64-nvidia-cuda
// RUN: %libomptarget-run-generic 2>&1 | \
// RUN: %fcheck-nvptx64-nvidia-cuda -check-prefixes=NVIDIA

// REQUIRES: gpu
// XFAIL: nvptx64-nvidia-cuda

#include <omp.h>
#include <stdio.h>

const char *interop_int_to_string(const int interop_int) {
switch (interop_int) {
case 1:
return "cuda";
case 2:
return "cuda_driver";
case 3:
return "opencl";
case 4:
return "sycl";
case 5:
return "hip";
case 6:
return "level_zero";
case 7:
return "hsa";
default:
return "unknown";
}
}

int main(int argc, char **argv) {

// Loop over all available devices
for (int id = 0; id < omp_get_num_devices(); ++id) {
omp_interop_t iobj = omp_interop_none;

// TODO: Change targetsync to target when AMD toolchain supports it.
#pragma omp interop init(target : iobj) device(id)

int err;
int interop_int = omp_get_interop_int(iobj, omp_ipr_fr_id, &err);

if (err) {
fprintf(stderr, "omp_get_interop_int failed: %d\n", err);
return -1;
}

// AMD: {{.*}} hsa
// NVIDIA: {{.*}} cuda
printf("omp_get_interop_int returned %s\n",
interop_int_to_string(interop_int));

const char *interop_vendor =
omp_get_interop_str(iobj, omp_ipr_vendor_name, &err);
if (err) {
fprintf(stderr, "omp_get_interop_str failed: %d\n", err);
return -1;
}

// AMD: {{.*}} amd
// NVIDIA: {{.*}} nvidia
printf("omp_get_interop_str returned %s\n", interop_vendor);

const char *interop_fr_name =
omp_get_interop_str(iobj, omp_ipr_fr_name, &err);
if (err) {
fprintf(stderr, "omp_get_interop_str failed: %d\n", err);
return -1;
}

// AMD: {{.*}} hsa
// NVIDIA: {{.*}} cuda
printf("omp_get_interop_str returned %s\n", interop_fr_name);

#pragma omp interop destroy(iobj)
}
return 0;
}
Loading