19 void UpdateOutputSlotToFp32(OutputSlot& outputSlot)
21 const TensorInfo& origTensorInfo = outputSlot.GetTensorInfo();
22 TensorInfo newTensorInfo(origTensorInfo);
24 outputSlot.SetTensorInfo(newTensorInfo);
27 void ChangeOutputBf16ToFp32(
Layer& layer)
29 for (
auto&& outputSlot = layer.BeginOutputSlots(); outputSlot != layer.EndOutputSlots(); ++outputSlot)
33 UpdateOutputSlotToFp32(*outputSlot);
38 void ChangeOutputFp16ToFp32(
Layer& layer)
40 for (
auto&& outputSlot = layer.BeginOutputSlots(); outputSlot != layer.EndOutputSlots(); ++outputSlot)
44 UpdateOutputSlotToFp32(*outputSlot);
53 bool expectCorrectInputType)
55 std::vector<ConvertBf16ToFp32Layer*> convertLayers;
61 bool allowInsert =
true;
62 if (expectCorrectInputType)
65 OutputSlot* connectedOutputSlot = inputSlot->GetConnectedOutputSlot();
72 const std::string name =
73 std::string(
"convert_bf16_to_fp32-" + std::to_string(inputSlot->GetSlotIndex()) +
"-") +
83 convertLayers.emplace_back(convertLayer);
92 bool expectCorrectInputType)
94 std::vector<ConvertFp32ToBf16Layer*> convertLayers;
100 bool allowInsert =
true;
105 && inputSlot->GetSlotIndex() == 2)
110 if (expectCorrectInputType)
113 OutputSlot* connectedOutputSlot = inputSlot->GetConnectedOutputSlot();
120 const std::string name =
121 std::string(
"convert_fp32_to_bf16-" + std::to_string(inputSlot->GetSlotIndex()) +
"-") +
131 convertLayers.emplace_back(convertLayer);
135 return convertLayers;
140 bool expectCorrectInputType)
142 std::vector<ConvertFp16ToFp32Layer*> convertLayers;
148 bool allowInsert =
true;
149 if (expectCorrectInputType)
152 OutputSlot* connectedOutputSlot = inputSlot->GetConnectedOutputSlot();
159 const std::string name =
160 std::string(
"convert_fp16_to_fp32-" + std::to_string(inputSlot->GetSlotIndex()) +
"-") +
170 convertLayers.emplace_back(convertLayer);
174 return convertLayers;
181 std::vector<ConvertFp32ToBf16Layer*> convertLayers;
182 convertLayers.reserve(numOutputSlots);
185 ChangeOutputBf16ToFp32(layer);
188 for (
unsigned int slotIndex = 0u; slotIndex < numOutputSlots; ++slotIndex)
193 const std::string name =
194 std::string(
"convert_fp32_to_bf16-" + std::to_string(slotIndex) +
"-") + layer.
GetName();
203 convertLayers.emplace_back(convertLayer);
207 return convertLayers;
214 std::vector<ConvertFp32ToFp16Layer*> convertLayers;
215 convertLayers.reserve(numOutputSlots);
218 ChangeOutputFp16ToFp32(layer);
221 for (
unsigned int slotIndex = 0u; slotIndex < numOutputSlots; ++slotIndex)
226 const std::string name =
227 std::string(
"convert_fp32_to_fp16-" + std::to_string(slotIndex) +
"-") + layer.
GetName();
236 convertLayers.emplace_back(convertLayer);
240 return convertLayers;
245 std::vector<DebugLayer*> debugLayers;
249 uint32_t outputSlotIdx = 0;
252 const std::string debugName = std::string(
"DebugLayerAfter") + layer.
GetNameStr() +
"_" +
253 std::to_string(outputSlotIdx);
267 debugLayers.emplace_back(debugLayer);
std::vector< InputSlot >::iterator EndInputSlots()
std::vector< ConvertFp32ToFp16Layer * > InsertConvertFp32ToFp16LayersAfter(Graph &graph, Layer &layer)
std::vector< ConvertFp16ToFp32Layer * > InsertConvertFp16ToFp32LayersBefore(Graph &graph, Layer &layer, bool expectCorrectInputType)
unsigned int GetNumInputSlots() const override
Returns the number of connectable input slots.
CPU Execution: Reference C++ kernels.
This layer converts data type Float 16 to Float 32.
This layer converts data type BFloat16 to Float32.
Copyright (c) 2021 ARM Limited and Contributors.
void SetBackendId(const BackendId &id)
unsigned int GetNumOutputSlots() const override
Returns the number of connectable output slots.
std::vector< InputSlot >::iterator BeginInputSlots()
const InputSlot & GetInputSlot(unsigned int index) const override
Get a const input slot handle by slot index.
DataType GetDataType() const
const std::string & GetNameStr() const
LayerType GetType() const override
Returns the armnn::LayerType of this layer.
std::vector< ConvertBf16ToFp32Layer * > InsertConvertBf16ToFp32LayersBefore(Graph &graph, Layer &layer, bool expectCorrectInputType)
This layer visualizes the data flowing through the network.
#define ARMNN_ASSERT(COND)
void SetDataType(DataType type)
std::vector< ConvertFp32ToBf16Layer * > InsertConvertFp32ToBf16LayersAfter(Graph &graph, Layer &layer)
This layer converts data type Float 32 to Float 16.
std::vector< OutputSlot >::iterator BeginOutputSlots()
std::vector< ConvertFp32ToBf16Layer * > InsertConvertFp32ToBf16LayersBefore(Graph &graph, Layer &layer, bool expectCorrectInputType)
void SetTensorInfo(const TensorInfo &tensorInfo) override
std::vector< OutputSlot >::iterator EndOutputSlots()
const OutputSlot & GetOutputSlot(unsigned int index=0) const override
Get the const output slot handle by slot index.
const char * GetName() const override
Returns the name of the layer.
This layer converts data type Float32 to BFloat16.
LayerT * InsertNewLayer(InputSlot &insertBefore, Args &&... args)
Inserts a new layer between the output slot currently connected to insertBefore and insertBefore itse...
std::vector< DebugLayer * > InsertDebugLayerAfter(Graph &graph, Layer &layer)
const TensorInfo & GetTensorInfo() const override