123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*
- Copyright (c) 2014 Intel Corporation. All Rights Reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Intel Corporation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- // 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
|