blob: c234ae55ac70103d0a4c5eebc49e7c5a68bd5ee8 [file] [log] [blame]
//
// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once
#include <armnn/NetworkFwd.hpp>
#include "INetwork.hpp"
#include "IProfiler.hpp"
#include "IWorkingMemHandle.hpp"
#include "Tensor.hpp"
#include "Types.hpp"
#include <mutex>
namespace armnn
{
struct INetworkProperties;
namespace profiling
{
class ProfilingService;
}
namespace experimental
{
class AsyncNetworkImpl;
class IAsyncNetwork
{
public:
IAsyncNetwork(std::unique_ptr<IOptimizedNetwork> net,
const INetworkProperties& networkProperties,
profiling::ProfilingService& profilingService);
~IAsyncNetwork();
TensorInfo GetInputTensorInfo(LayerBindingId layerId) const;
TensorInfo GetOutputTensorInfo(LayerBindingId layerId) const;
/// Thread safe execution of the network. Returns once execution is complete.
/// Will block until this and any other thread using the same workingMem object completes.
Status Execute(const InputTensors& inputTensors,
const OutputTensors& outputTensors,
IWorkingMemHandle& workingMemHandle);
/// Create a new unique WorkingMemHandle object. Create multiple handles if you wish to have
/// overlapped Execution by calling this function from different threads.
std::unique_ptr<IWorkingMemHandle> CreateWorkingMemHandle();
/// Get the profiler used for this network
std::shared_ptr<IProfiler> GetProfiler() const;
/// Register a debug callback function to be used with this network
void RegisterDebugCallback(const DebugCallbackFunction& func);
private:
std::unique_ptr<AsyncNetworkImpl> pAsyncNetworkImpl;
};
} // end experimental namespace
} // end armnn namespace