| //===-- omptargetplugin.h - Target dependent OpenMP Plugin API --*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is dual licensed under the MIT and the University of Illinois Open |
| // Source Licenses. See LICENSE.txt for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines an interface between target independent OpenMP offload |
| // runtime library libomptarget and target dependent plugin. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef _OMPTARGETPLUGIN_H_ |
| #define _OMPTARGETPLUGIN_H_ |
| |
| #include <omptarget.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // Return the number of available devices of the type supported by the |
| // target RTL. |
| int32_t __tgt_rtl_number_of_devices(void); |
| |
| // Return an integer different from zero if the provided device image can be |
| // supported by the runtime. The functionality is similar to comparing the |
| // result of __tgt__rtl__load__binary to NULL. However, this is meant to be a |
| // lightweight query to determine if the RTL is suitable for an image without |
| // having to load the library, which can be expensive. |
| int32_t __tgt_rtl_is_valid_binary(__tgt_device_image *Image); |
| |
| // Initialize the specified device. In case of success return 0; otherwise |
| // return an error code. |
| int32_t __tgt_rtl_init_device(int32_t ID); |
| |
| // Pass an executable image section described by image to the specified |
| // device and prepare an address table of target entities. In case of error, |
| // return NULL. Otherwise, return a pointer to the built address table. |
| // Individual entries in the table may also be NULL, when the corresponding |
| // offload region is not supported on the target device. |
| __tgt_target_table *__tgt_rtl_load_binary(int32_t ID, |
| __tgt_device_image *Image); |
| |
| // Allocate data on the particular target device, of the specified size. |
| // HostPtr is a address of the host data the allocated target data |
| // will be associated with (HostPtr may be NULL if it is not known at |
| // allocation time, like for example it would be for target data that |
| // is allocated by omp_target_alloc() API). Return address of the |
| // allocated data on the target that will be used by libomptarget.so to |
| // initialize the target data mapping structures. These addresses are |
| // used to generate a table of target variables to pass to |
| // __tgt_rtl_run_region(). The __tgt_rtl_data_alloc() returns NULL in |
| // case an error occurred on the target device. |
| void *__tgt_rtl_data_alloc(int32_t ID, int64_t Size, void *HostPtr); |
| |
| // Pass the data content to the target device using the target address. |
| // In case of success, return zero. Otherwise, return an error code. |
| int32_t __tgt_rtl_data_submit(int32_t ID, void *TargetPtr, void *HostPtr, |
| int64_t Size); |
| |
| // Retrieve the data content from the target device using its address. |
| // In case of success, return zero. Otherwise, return an error code. |
| int32_t __tgt_rtl_data_retrieve(int32_t ID, void *HostPtr, void *TargetPtr, |
| int64_t Size); |
| |
| // De-allocate the data referenced by target ptr on the device. In case of |
| // success, return zero. Otherwise, return an error code. |
| int32_t __tgt_rtl_data_delete(int32_t ID, void *TargetPtr); |
| |
| // Transfer control to the offloaded entry Entry on the target device. |
| // Args and Offsets are arrays of NumArgs size of target addresses and |
| // offsets. An offset should be added to the target address before passing it |
| // to the outlined function on device side. In case of success, return zero. |
| // Otherwise, return an error code. |
| int32_t __tgt_rtl_run_target_region(int32_t ID, void *Entry, void **Args, |
| ptrdiff_t *Offsets, int32_t NumArgs); |
| |
| // Similar to __tgt_rtl_run_target_region, but additionally specify the |
| // number of teams to be created and a number of threads in each team. |
| int32_t __tgt_rtl_run_target_team_region(int32_t ID, void *Entry, void **Args, |
| ptrdiff_t *Offsets, int32_t NumArgs, |
| int32_t NumTeams, int32_t ThreadLimit, |
| uint64_t loop_tripcount); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // _OMPTARGETPLUGIN_H_ |