index 6a71d87b47550c9708709974f161bec95593c163..dbdb90293206cf804b7fc9458d1cae596c4d444a 100644 (file)
Impl(Device* d, uint8_t device_index,
const ArgInfo& create_arg,
const ArgInfo& param_heap_arg,
- size_t extmem_heap_size);
+ size_t extmem_heap_size,
+ bool internal_input);
~Impl() {}
bool RunAsync(CallType ct);
up_malloc_ddr<OCL_TIDL_InitializeParams> shared_initialize_params_m;
up_malloc_ddr<OCL_TIDL_ProcessParams> shared_process_params_m;
- size_t in_size;
- size_t out_size;
+ size_t in_size_m;
+ size_t out_size_m;
ArgInfo in_m;
ArgInfo out_m;
uint8_t device_index,
const ArgInfo& create_arg,
const ArgInfo& param_heap_arg,
- size_t extmem_heap_size)
+ size_t extmem_heap_size,
+ bool internal_input)
{
pimpl_m = std::unique_ptr<ExecutionObject::Impl>
{ new ExecutionObject::Impl(d, device_index,
create_arg,
param_heap_arg,
- extmem_heap_size) };
+ extmem_heap_size,
+ internal_input) };
}
uint8_t device_index,
const ArgInfo& create_arg,
const ArgInfo& param_heap_arg,
- size_t extmem_heap_size):
+ size_t extmem_heap_size,
+ bool internal_input):
device_m(d),
k_initialize_m(nullptr),
k_process_m(nullptr),
tidl_extmem_heap_m (nullptr, &__free_ddr),
shared_initialize_params_m(nullptr, &__free_ddr),
shared_process_params_m(nullptr, &__free_ddr),
- in_size(0),
- out_size(0),
+ in_size_m(0),
+ out_size_m(0),
in_m(nullptr, 0),
out_m(nullptr, 0),
device_index_m(device_index),
shared_initialize_params_m->l2HeapSize = tinn::internal::DMEM1_SIZE;
shared_initialize_params_m->l1HeapSize = tinn::internal::DMEM0_SIZE;
shared_initialize_params_m->enableTrace = OCL_TIDL_TRACE_OFF;
+ shared_initialize_params_m->enableInternalInput = internal_input ? 1 : 0;
// Setup kernel arguments for initialize
KernelArgs args = { create_arg,
size_t ExecutionObject::GetInputBufferSizeInBytes() const
{
- if (pimpl_m->in_m.ptr() == nullptr) return pimpl_m->in_size;
+ if (pimpl_m->in_m.ptr() == nullptr) return pimpl_m->in_size_m;
else return pimpl_m->in_m.size();
}
size_t ExecutionObject::GetOutputBufferSizeInBytes() const
{
- if (pimpl_m->out_m.ptr() == nullptr) return pimpl_m->out_size;
+ if (pimpl_m->out_m.ptr() == nullptr) return pimpl_m->out_size_m;
else return pimpl_m->shared_process_params_m.get()->bytesWritten;
}
void ExecutionObject::SetInputOutputBuffer(const ArgInfo& in, const ArgInfo& out)
{
- assert (in.ptr() != nullptr && in.size() > 0);
- assert (out.ptr() != nullptr && out.size() > 0);
-
pimpl_m->SetupProcessKernel(in, out);
}
@@ -238,8 +240,13 @@ ExecutionObject::Impl::SetupProcessKernel(const ArgInfo& in, const ArgInfo& out)
shared_process_params_m.reset(malloc_ddr<OCL_TIDL_ProcessParams>());
shared_process_params_m->enableTrace = OCL_TIDL_TRACE_OFF;
+ shared_process_params_m->enableInternalInput =
+ shared_initialize_params_m->enableInternalInput;
shared_process_params_m->cycles = 0;
+ if (shared_process_params_m->enableInternalInput == 0)
+ assert(in.ptr() != nullptr && in.size() > 0);
+
KernelArgs args = { ArgInfo(shared_process_params_m.get(),
sizeof(OCL_TIDL_ProcessParams)),
in,
void ExecutionObject::Impl::HostWriteNetInput()
{
- char* readPtr = (char *) in_m.ptr();
+ char* readPtr = (char *) in_m.ptr();
+ PipeInfo *pipe = in_m.GetPipe();
+
for (unsigned int i = 0; i < shared_initialize_params_m->numInBufs; i++)
{
OCL_TIDL_BufParams *inBuf = &shared_initialize_params_m->inBufs[i];
- readPtr += readDataS8(
- readPtr,
- (char *) tidl_extmem_heap_m.get() + inBuf->bufPlaneBufOffset
- + inBuf->bufPlaneWidth * OCL_TIDL_MAX_PAD_SIZE
- + OCL_TIDL_MAX_PAD_SIZE,
- inBuf->numROIs,
- inBuf->numChannels,
- inBuf->ROIWidth,
- inBuf->ROIHeight,
- inBuf->bufPlaneWidth,
- inBuf->bufPlaneWidth
- * (inBuf->ROIHeight + 2 * OCL_TIDL_MAX_PAD_SIZE) );
+
+ if (shared_process_params_m->enableInternalInput == 0)
+ {
+ readPtr += readDataS8(
+ readPtr,
+ (char *) tidl_extmem_heap_m.get() + inBuf->bufPlaneBufOffset
+ + inBuf->bufPlaneWidth * OCL_TIDL_MAX_PAD_SIZE
+ + OCL_TIDL_MAX_PAD_SIZE,
+ inBuf->numROIs,
+ inBuf->numChannels,
+ inBuf->ROIWidth,
+ inBuf->ROIHeight,
+ inBuf->bufPlaneWidth,
+ ((inBuf->bufPlaneWidth * inBuf->bufPlaneHeight) /
+ inBuf->numChannels));
+ }
+ else
+ {
+ shared_process_params_m->inBufAddr[i] = pipe->bufAddr_m[i];
+ }
+
+ shared_process_params_m->inDataQ[i] = pipe->dataQ_m[i];
}
}
void ExecutionObject::Impl::HostReadNetOutput()
{
char* writePtr = (char *) out_m.ptr();
+ PipeInfo *pipe = out_m.GetPipe();
+
for (unsigned int i = 0; i < shared_initialize_params_m->numOutBufs; i++)
{
OCL_TIDL_BufParams *outBuf = &shared_initialize_params_m->outBufs[i];
- writePtr += writeDataS8(
- writePtr,
- (char *) tidl_extmem_heap_m.get() + outBuf->bufPlaneBufOffset
- + outBuf->bufPlaneWidth * OCL_TIDL_MAX_PAD_SIZE
- + OCL_TIDL_MAX_PAD_SIZE,
- outBuf->numChannels,
- outBuf->ROIWidth,
- outBuf->ROIHeight,
- outBuf->bufPlaneWidth,
- ((outBuf->bufPlaneWidth * outBuf->bufPlaneHeight)/
- outBuf->numChannels));
+ if (writePtr != nullptr)
+ {
+ writePtr += writeDataS8(
+ writePtr,
+ (char *) tidl_extmem_heap_m.get() + outBuf->bufPlaneBufOffset
+ + outBuf->bufPlaneWidth * OCL_TIDL_MAX_PAD_SIZE
+ + OCL_TIDL_MAX_PAD_SIZE,
+ outBuf->numChannels,
+ outBuf->ROIWidth,
+ outBuf->ROIHeight,
+ outBuf->bufPlaneWidth,
+ ((outBuf->bufPlaneWidth * outBuf->bufPlaneHeight)/
+ outBuf->numChannels));
+ }
+
+ pipe->dataQ_m[i] = shared_process_params_m->outDataQ[i];
+ pipe->bufAddr_m[i] = shared_initialize_params_m->bufAddrBase
+ + outBuf->bufPlaneBufOffset;
}
shared_process_params_m->bytesWritten = writePtr - (char *) out_m.ptr();
}
void ExecutionObject::Impl::ComputeInputOutputSizes()
{
- in_size = 0;
- out_size = 0;
+ if (shared_initialize_params_m->errorCode != OCL_TIDL_SUCCESS) return;
+
+ if (shared_initialize_params_m->numInBufs > OCL_TIDL_MAX_IN_BUFS ||
+ shared_initialize_params_m->numOutBufs > OCL_TIDL_MAX_OUT_BUFS)
+ {
+ std::cout << "Num input/output bufs ("
+ << shared_initialize_params_m->numInBufs << ", "
+ << shared_initialize_params_m->numOutBufs
+ << ") exceeded limit!" << std::endl;
+ shared_initialize_params_m->errorCode = OCL_TIDL_INIT_FAIL;
+ return;
+ }
+
+ in_size_m = 0;
+ out_size_m = 0;
for (unsigned int i = 0; i < shared_initialize_params_m->numInBufs; i++)
{
OCL_TIDL_BufParams *inBuf = &shared_initialize_params_m->inBufs[i];
- in_size += inBuf->numROIs * inBuf->numChannels * inBuf->ROIWidth *
- inBuf->ROIHeight;
+ in_size_m += inBuf->numROIs * inBuf->numChannels * inBuf->ROIWidth *
+ inBuf->ROIHeight;
}
for (unsigned int i = 0; i < shared_initialize_params_m->numOutBufs; i++)
{
OCL_TIDL_BufParams *outBuf = &shared_initialize_params_m->outBufs[i];
- out_size += outBuf->numChannels * outBuf->ROIWidth * outBuf->ROIHeight;
+ out_size_m += outBuf->numChannels * outBuf->ROIWidth *outBuf->ROIHeight;
}
}
if (has_work)
{
+ ComputeInputOutputSizes();
if (shared_initialize_params_m->errorCode != OCL_TIDL_SUCCESS)
throw Exception(shared_initialize_params_m->errorCode,
__FILE__, __FUNCTION__, __LINE__);
- ComputeInputOutputSizes();
}
return has_work;
}