blob: 7db31474213c8a365a5d4fc58902823aae19ee05 [file] [log] [blame]
//===----------------------------------------------------------------------===//
//
// 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