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;
101 if (expectCorrectInputType)
104 OutputSlot* connectedOutputSlot = inputSlot->GetConnectedOutputSlot();
111 const std::string name =
112 std::string(
"convert_fp32_to_bf16-" + std::to_string(inputSlot->GetSlotIndex()) +
"-") +
122 convertLayers.emplace_back(convertLayer);
126 return convertLayers;
131 bool expectCorrectInputType)
133 std::vector<ConvertFp16ToFp32Layer*> convertLayers;
139 bool allowInsert =
true;
140 if (expectCorrectInputType)
143 OutputSlot* connectedOutputSlot = inputSlot->GetConnectedOutputSlot();
150 const std::string name =
151 std::string(
"convert_fp16_to_fp32-" + std::to_string(inputSlot->GetSlotIndex()) +
"-") +
161 convertLayers.emplace_back(convertLayer);
165 return convertLayers;
172 std::vector<ConvertFp32ToBf16Layer*> convertLayers;
173 convertLayers.reserve(numOutputSlots);
176 ChangeOutputBf16ToFp32(layer);
179 for (
unsigned int slotIndex = 0u; slotIndex < numOutputSlots; ++slotIndex)
184 const std::string name =
185 std::string(
"convert_fp32_to_bf16-" + std::to_string(slotIndex) +
"-") + layer.
GetName();
194 convertLayers.emplace_back(convertLayer);
198 return convertLayers;
205 std::vector<ConvertFp32ToFp16Layer*> convertLayers;
206 convertLayers.reserve(numOutputSlots);
209 ChangeOutputFp16ToFp32(layer);
212 for (
unsigned int slotIndex = 0u; slotIndex < numOutputSlots; ++slotIndex)
217 const std::string name =
218 std::string(
"convert_fp32_to_fp16-" + std::to_string(slotIndex) +
"-") + layer.
GetName();
227 convertLayers.emplace_back(convertLayer);
231 return convertLayers;
236 std::vector<DebugLayer*> debugLayers;
240 uint32_t outputSlotIdx = 0;
243 const std::string debugName = std::string(
"DebugLayerAfter") + layer.
GetNameStr() +
"_" +
244 std::to_string(outputSlotIdx);
258 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
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