inline void losetime_in(void) { reset_worktime_percentage_real(); #if MC_DPI_TICKS_WAIT == 1 ticks_wait(ff_node::TICKS2WAIT); #else sleepns(NS2WAIT); #endif }
/** * offfload the given task to the pipeline */ inline bool offload(void * task, unsigned int retry=((unsigned int)-1), unsigned int ticks=ff_node::TICKS2WAIT) { FFBUFFER * inbuffer = get_in_buffer(); if (inbuffer) { for(unsigned int i=0;i<retry;++i) { if (inbuffer->push(task)) return true; ticks_wait(ticks); } return false; } if (!has_input_channel) error("PIPE: accelerator is not set, offload not available\n"); else error("PIPE: input buffer creation failed\n"); return false; }
/** * It loads results. If \p false, EOS arrived or too many retries. If \p * true, there is a new value */ inline bool load_result(void ** task, unsigned int retry=((unsigned int)-1), unsigned int ticks=ff_node::TICKS2WAIT) { FFBUFFER * outbuffer = get_out_buffer(); if (outbuffer) { for(unsigned int i=0;i<retry;++i) { if (outbuffer->pop(task)) { if ((*task != (void *)FF_EOS)) return true; else return false; } ticks_wait(ticks); } return false; } if (!has_input_channel) error("PIPE: accelerator is not set, offload not available"); else error("PIPE: output buffer not created"); return false; }