| //===----------------------------------------------------------------------===// |
| // |
| // 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. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| |
| // The parts of the offload library used only on the target |
| |
| #ifndef OFFLOAD_TARGET_H_INCLUDED |
| #define OFFLOAD_TARGET_H_INCLUDED |
| |
| #include "offload_common.h" |
| #include "coi/coi_server.h" |
| |
| // The offload descriptor. |
| class OffloadDescriptor |
| { |
| public: |
| ~OffloadDescriptor() { |
| if (m_vars != 0) { |
| free(m_vars); |
| } |
| } |
| |
| // Entry point for COI. Synchronously execute offloaded region given |
| // the provided buffers, misc and return data. |
| static void offload( |
| uint32_t buffer_count, |
| void** buffers, |
| void* misc_data, |
| uint16_t misc_data_len, |
| void* return_data, |
| uint16_t return_data_len |
| ); |
| |
| // scatters input data from in buffer to target variables |
| void scatter_copyin_data(); |
| |
| // gathers output data to the buffer |
| void gather_copyout_data(); |
| |
| // merges local variable descriptors with the descriptors received from |
| // host |
| void merge_var_descs(VarDesc *vars, VarDesc2 *vars2, int vars_total); |
| |
| int get_offload_number() const { |
| return m_offload_number; |
| } |
| |
| void set_offload_number(int number) { |
| m_offload_number = number; |
| } |
| |
| private: |
| // Constructor |
| OffloadDescriptor() : m_vars(0) |
| {} |
| |
| private: |
| typedef std::list<void*> BufferList; |
| |
| // 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_buffers; |
| |
| // Variable descriptors received from host |
| VarDesc* m_vars; |
| int m_vars_total; |
| int m_offload_number; |
| }; |
| |
| // one time target initialization in main |
| extern void __offload_target_init(void); |
| |
| // logical device index |
| extern int mic_index; |
| |
| // total number of available logical devices |
| extern int mic_engines_total; |
| |
| // device frequency (from COI) |
| extern uint64_t mic_frequency; |
| |
| struct RefInfo { |
| RefInfo(bool is_add, long amount):is_added(is_add),count(amount) |
| {} |
| bool is_added; |
| long count; |
| }; |
| |
| #endif // OFFLOAD_TARGET_H_INCLUDED |