summaryrefslogtreecommitdiffstats
path: root/openmp/offload/src/offload_host.h
diff options
context:
space:
mode:
Diffstat (limited to 'openmp/offload/src/offload_host.h')
-rw-r--r--openmp/offload/src/offload_host.h343
1 files changed, 0 insertions, 343 deletions
diff --git a/openmp/offload/src/offload_host.h b/openmp/offload/src/offload_host.h
deleted file mode 100644
index ea2399635de..00000000000
--- a/openmp/offload/src/offload_host.h
+++ /dev/null
@@ -1,343 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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.
-//
-//===----------------------------------------------------------------------===//
-
-
-/*! \file
- \brief The parts of the runtime library used only on the host
-*/
-
-#ifndef OFFLOAD_HOST_H_INCLUDED
-#define OFFLOAD_HOST_H_INCLUDED
-
-#ifndef TARGET_WINNT
-#include <unistd.h>
-#endif // TARGET_WINNT
-#include "offload_common.h"
-#include "offload_util.h"
-#include "offload_engine.h"
-#include "offload_env.h"
-#include "offload_orsl.h"
-#include "coi/coi_client.h"
-
-// MIC engines.
-extern Engine* mic_engines;
-extern uint32_t mic_engines_total;
-
-//! The target image is packed as follows.
-/*! 1. 8 bytes containing the size of the target binary */
-/*! 2. a null-terminated string which is the binary name */
-/*! 3. <size> number of bytes that are the contents of the image */
-/*! The address of symbol __offload_target_image
- is the address of this structure. */
-struct Image {
- int64_t size; //!< Size in bytes of the target binary name and contents
- char data[]; //!< The name and contents of the target image
-};
-
-// The offload descriptor.
-class OffloadDescriptor
-{
-public:
- OffloadDescriptor(
- int index,
- _Offload_status *status,
- bool is_mandatory,
- bool is_openmp,
- OffloadHostTimerData * timer_data
- ) :
- m_device(mic_engines[index % mic_engines_total]),
- m_is_mandatory(is_mandatory),
- m_is_openmp(is_openmp),
- m_inout_buf(0),
- m_func_desc(0),
- m_func_desc_size(0),
- m_in_deps(0),
- m_in_deps_total(0),
- m_out_deps(0),
- m_out_deps_total(0),
- m_vars(0),
- m_vars_extra(0),
- m_status(status),
- m_timer_data(timer_data)
- {}
-
- ~OffloadDescriptor()
- {
- if (m_in_deps != 0) {
- free(m_in_deps);
- }
- if (m_out_deps != 0) {
- free(m_out_deps);
- }
- if (m_func_desc != 0) {
- free(m_func_desc);
- }
- if (m_vars != 0) {
- free(m_vars);
- free(m_vars_extra);
- }
- }
-
- bool offload(const char *name, bool is_empty,
- VarDesc *vars, VarDesc2 *vars2, int vars_total,
- const void **waits, int num_waits, const void **signal,
- int entry_id, const void *stack_addr);
- bool offload_finish();
-
- bool is_signaled();
-
- OffloadHostTimerData* get_timer_data() const {
- return m_timer_data;
- }
-
-private:
- bool wait_dependencies(const void **waits, int num_waits);
- bool setup_descriptors(VarDesc *vars, VarDesc2 *vars2, int vars_total,
- int entry_id, const void *stack_addr);
- bool setup_misc_data(const char *name);
- bool send_pointer_data(bool is_async);
- bool send_noncontiguous_pointer_data(
- int i,
- PtrData* src_buf,
- PtrData* dst_buf,
- COIEVENT *event);
- bool receive_noncontiguous_pointer_data(
- int i,
- char* src_data,
- COIBUFFER dst_buf,
- COIEVENT *event);
-
- bool gather_copyin_data();
-
- bool compute();
-
- bool receive_pointer_data(bool is_async);
- bool scatter_copyout_data();
-
- void cleanup();
-
- bool find_ptr_data(PtrData* &ptr_data, void *base, int64_t disp,
- int64_t length, bool error_does_not_exist = true);
- bool alloc_ptr_data(PtrData* &ptr_data, void *base, int64_t disp,
- int64_t length, int64_t alloc_disp, int align);
- bool init_static_ptr_data(PtrData *ptr_data);
- bool init_mic_address(PtrData *ptr_data);
- bool offload_stack_memory_manager(const void * stack_begin, int routine_id,
- int buf_size, int align, bool *is_new);
- bool nullify_target_stack(COIBUFFER targ_buf, uint64_t size);
-
- bool gen_var_descs_for_pointer_array(int i);
-
- void report_coi_error(error_types msg, COIRESULT res);
- _Offload_result translate_coi_error(COIRESULT res) const;
-
-private:
- typedef std::list<COIBUFFER> BufferList;
-
- // extra data associated with each variable descriptor
- struct VarExtra {
- PtrData* src_data;
- PtrData* dst_data;
- AutoData* auto_data;
- int64_t cpu_disp;
- int64_t cpu_offset;
- CeanReadRanges *read_rng_src;
- CeanReadRanges *read_rng_dst;
- int64_t ptr_arr_offset;
- bool is_arr_ptr_el;
- };
-
- template<typename T> class ReadArrElements {
- public:
- ReadArrElements():
- ranges(NULL),
- el_size(sizeof(T)),
- offset(0),
- count(0),
- is_empty(true),
- base(NULL)
- {}
-
- bool read_next(bool flag)
- {
- if (flag != 0) {
- if (is_empty) {
- if (ranges) {
- if (!get_next_range(ranges, &offset)) {
- // ranges are over
- return false;
- }
- }
- // all contiguous elements are over
- else if (count != 0) {
- return false;
- }
-
- length_cur = size;
- }
- else {
- offset += el_size;
- }
- val = (T)get_el_value(base, offset, el_size);
- length_cur -= el_size;
- count++;
- is_empty = length_cur == 0;
- }
- return true;
- }
- public:
- CeanReadRanges * ranges;
- T val;
- int el_size;
- int64_t size,
- offset,
- length_cur;
- bool is_empty;
- int count;
- char *base;
- };
-
- // ptr_data for persistent auto objects
- PtrData* m_stack_ptr_data;
- PtrDataList m_destroy_stack;
-
- // Engine
- Engine& m_device;
-
- // if true offload is mandatory
- bool m_is_mandatory;
-
- // if true offload has openmp origin
- const bool m_is_openmp;
-
- // The Marshaller for the inputs of the offloaded region.
- Marshaller m_in;
-
- // The Marshaller for the outputs of the offloaded region.
- Marshaller m_out;
-
- // List of buffers that are passed to dispatch call
- BufferList m_compute_buffers;
-
- // List of buffers that need to be destroyed at the end of offload
- BufferList m_destroy_buffers;
-
- // Variable descriptors
- VarDesc* m_vars;
- VarExtra* m_vars_extra;
- int m_vars_total;
-
- // Pointer to a user-specified status variable
- _Offload_status *m_status;
-
- // Function descriptor
- FunctionDescriptor* m_func_desc;
- uint32_t m_func_desc_size;
-
- // Buffer for transferring copyin/copyout data
- COIBUFFER m_inout_buf;
-
- // Dependencies
- COIEVENT *m_in_deps;
- uint32_t m_in_deps_total;
- COIEVENT *m_out_deps;
- uint32_t m_out_deps_total;
-
- // Timer data
- OffloadHostTimerData *m_timer_data;
-
- // copyin/copyout data length
- uint64_t m_in_datalen;
- uint64_t m_out_datalen;
-
- // a boolean value calculated in setup_descriptors. If true we need to do
- // a run function on the target. Otherwise it may be optimized away.
- bool m_need_runfunction;
-};
-
-// Initialization types for MIC
-enum OffloadInitType {
- c_init_on_start, // all devices before entering main
- c_init_on_offload, // single device before starting the first offload
- c_init_on_offload_all // all devices before starting the first offload
-};
-
-// Initializes library and registers specified offload image.
-extern "C" void __offload_register_image(const void* image);
-extern "C" void __offload_unregister_image(const void* image);
-
-// Initializes offload runtime library.
-extern int __offload_init_library(void);
-
-// thread data for associating pipelines with threads
-extern pthread_key_t mic_thread_key;
-
-// Environment variables for devices
-extern MicEnvVar mic_env_vars;
-
-// CPU frequency
-extern uint64_t cpu_frequency;
-
-// LD_LIBRARY_PATH for MIC libraries
-extern char* mic_library_path;
-
-// stack size for target
-extern uint32_t mic_stack_size;
-
-// Preallocated memory size for buffers on MIC
-extern uint64_t mic_buffer_size;
-
-// Setting controlling inout proxy
-extern bool mic_proxy_io;
-extern char* mic_proxy_fs_root;
-
-// Threshold for creating buffers with large pages
-extern uint64_t __offload_use_2mb_buffers;
-
-// offload initialization type
-extern OffloadInitType __offload_init_type;
-
-// Device number to offload to when device is not explicitly specified.
-extern int __omp_device_num;
-
-// target executable
-extern TargetImage* __target_exe;
-
-// IDB support
-
-// Called by the offload runtime after initialization of offload infrastructure
-// has been completed.
-extern "C" void __dbg_target_so_loaded();
-
-// Called by the offload runtime when the offload infrastructure is about to be
-// shut down, currently at application exit.
-extern "C" void __dbg_target_so_unloaded();
-
-// Null-terminated string containing path to the process image of the hosting
-// application (offload_main)
-#define MAX_TARGET_NAME 512
-extern "C" char __dbg_target_exe_name[MAX_TARGET_NAME];
-
-// Integer specifying the process id
-extern "C" pid_t __dbg_target_so_pid;
-
-// Integer specifying the 0-based device number
-extern "C" int __dbg_target_id;
-
-// Set to non-zero by the host-side debugger to enable offload debugging
-// support
-extern "C" int __dbg_is_attached;
-
-// Major version of the debugger support API
-extern "C" const int __dbg_api_major_version;
-
-// Minor version of the debugger support API
-extern "C" const int __dbg_api_minor_version;
-
-#endif // OFFLOAD_HOST_H_INCLUDED
OpenPOWER on IntegriCloud