Poplar and PopLibs
MultiConvolution.hpp
Go to the documentation of this file.
1// Copyright (c) 2020 Graphcore Ltd. All rights reserved.
8#ifndef poplin_MultiConvolution_hpp
9#define poplin_MultiConvolution_hpp
10
12
13#include <poplar/Graph.hpp>
14#include <poplar/OptionFlags.hpp>
15#include <poplar/Program.hpp>
16
17#include <vector>
18
19namespace poplin {
20
21namespace multiconv {
22
63 ConvParams params;
64 poplar::OptionFlags options;
65 std::string name;
66};
67
79 const std::vector<CreateTensorArgs> &args,
80 unsigned weightsIndex,
81 const poplar::OptionFlags &options = {},
82 poplin::PlanningCache *cache = nullptr);
83
95 const std::vector<CreateTensorArgs> &args,
96 unsigned inputIndex,
97 const poplar::OptionFlags &options = {},
98 poplin::PlanningCache *cache = nullptr);
99
107 poplar::Tensor inputs;
108 poplar::Tensor weights;
109 ConvParams params;
110 poplar::OptionFlags options;
111};
112
132 std::vector<ConvolutionArgs> &args,
133 const std::vector<poplar::Tensor> &weightsIn,
135 const poplar::OptionFlags &options,
136 const poplar::DebugContext &debugContext,
137 poplin::PlanningCache *cache);
138
153std::vector<poplar::Tensor>
154convolution(poplar::Graph &graph, const std::vector<ConvolutionArgs> &args,
155 bool transposeAndFlipWeights, poplar::program::Sequence &prog,
156 const poplar::DebugContext &debugContext = {},
157 const poplar::OptionFlags &options = {},
158 poplin::PlanningCache *cache = nullptr);
159
169 poplar::Tensor zDeltas;
170 poplar::Tensor activations;
171 ConvParams params;
172 poplar::OptionFlags options;
173};
174
189std::vector<poplar::Tensor>
191 const std::vector<CalculateWeightDeltasArgs> &args,
193 const poplar::DebugContext &debugContext = {},
194 const poplar::OptionFlags &options = {},
195 poplin::PlanningCache *cache = nullptr);
196
208 poplar::Tensor zDeltas;
209 poplar::Tensor weights;
210 poplar::Tensor activations;
211 poplar::Tensor scale;
212 ConvParams params;
213 poplar::OptionFlags options;
214};
215
229 const std::vector<ConvWeightUpdateArgs> &args,
231 const poplar::DebugContext &debugContext = {},
232 const poplar::OptionFlags &options = {},
233 poplin::PlanningCache *cache = nullptr);
234
246 poplar::Tensor zDeltas;
247 poplar::Tensor weights;
248 poplar::Tensor activations;
249 float scale;
250 ConvParams params;
251 poplar::OptionFlags options;
252};
253
267 poplar::Graph &graph, const std::vector<ConvWeightUpdateArgsScalar> &args,
269 const poplar::DebugContext &debugContext = {},
270 const poplar::OptionFlags &options = {},
271 poplin::PlanningCache *cache = nullptr);
272
273} // namespace multiconv
274} // namespace poplin
275
276#endif // poplin_MultiConvolution_hpp
Functions and data types to support performing convolutions.
DebugContext gathers the common external parameters of the context of an operation.
Definition: DebugContext.hpp:221
This class represents a graph program to be executed on the IPU.
Definition: Graph.hpp:52
A set of option/value string flags to be used in various APIs.
Definition: OptionFlags.hpp:24
A reference to a subset of tensor elements.
Definition: Tensor.hpp:38
Program that executes a sequence of programs.
Definition: Program.hpp:77
Linear algebra functions.
Definition: Cholesky.hpp:14
void convolutionWeightUpdate(poplar::Graph &graph, const poplar::Tensor &zDeltas, const poplar::Tensor &weights, const poplar::Tensor &activations, ConvParams params, const poplar::Tensor &scale, poplar::program::Sequence &prog, const poplar::DebugContext &debugContext={}, const poplar::OptionFlags &options={}, PlanningCache *cache=nullptr)
Append operations to a poplar::Program to generate and apply the weight update.
poplar::Tensor calculateWeightDeltas(poplar::Graph &graph, const poplar::Tensor &zDeltas, const poplar::Tensor &activations, const ConvParams &params, poplar::program::Sequence &prog, const poplar::DebugContext &debugContext={}, const poplar::OptionFlags &options={}, PlanningCache *cache=nullptr)
Append an operation to a poplar::Program to generate the tensor of weight deltas.
poplar::Tensor convolution(poplar::Graph &graph, const poplar::Tensor &in, const poplar::Tensor &weights, const ConvParams &params, bool transposeAndFlipWeights, poplar::program::Sequence &prog, const poplar::DebugContext &debugContext={}, const poplar::OptionFlags &options={}, PlanningCache *cache=nullptr)
Convolve an input with a set of weights.
poplar::Tensor createInput(poplar::Graph &graph, const ConvParams &params, const poplar::DebugContext &debugContext={}, const poplar::OptionFlags &options={}, PlanningCache *cache=nullptr)
Create an input tensor for a convolution.
void weightsTransposeChansFlipXY(poplar::Graph &graph, const poplar::Tensor &weightsIn, const poplar::Tensor &weightsOut, poplar::program::Sequence &prog, const poplar::DebugContext &debugContext={}, const poplar::OptionFlags &options={})
Copy the weights in weightsIn into weightsOut such that each element of the kernel is transposed with...
poplar::Tensor createWeights(poplar::Graph &graph, const ConvParams &params, const poplar::DebugContext &debugContext={}, const poplar::OptionFlags &options={}, PlanningCache *cache=nullptr)
Create a weight tensor suitable for use with convolution()
Definition: MultiConvolution.hpp:168
Definition: MultiConvolution.hpp:245
Definition: MultiConvolution.hpp:207
Definition: MultiConvolution.hpp:106
Multi-convolutions allow for a set of convolutions to be executed in parallel.
Definition: MultiConvolution.hpp:62