19# include "config_auto.h"
42 int stack_size =
stack_.size();
43 for (
int i = 1;
i < stack_size; ++
i) {
54 bool parallel_debug =
false;
58 parallel_debug =
true;
61 int stack_size =
stack_.size();
64 std::vector<NetworkScratch::IO> results(stack_size);
65 for (
int i = 0;
i < stack_size; ++
i) {
69# pragma omp parallel for num_threads(stack_size)
71 for (
int i = 0;
i < stack_size; ++
i) {
72 stack_[
i]->Forward(debug, input,
nullptr, scratch, results[
i]);
77 for (
int i = 0;
i < stack_size; ++
i) {
78 out_offset =
output->CopyPacking(*results[
i], out_offset);
89 src_transpose = &transposed_input_;
93 for (
int i = 0;
i < stack_size; ++
i) {
94 stack_[
i]->Forward(debug, input, src_transpose, scratch, result);
101 out_offset =
output->CopyPacking(*result, out_offset);
104#ifndef GRAPHICS_DISABLED
105 if (parallel_debug) {
118#ifndef GRAPHICS_DISABLED
123 auto stack_size =
stack_.size();
126 std::vector<NetworkScratch::IO> in_deltas(stack_size);
127 std::vector<NetworkScratch::IO> out_deltas(stack_size);
129 int feature_offset = 0;
130 for (
unsigned i = 0;
i <
stack_.size(); ++
i) {
131 int num_features =
stack_[
i]->NumOutputs();
132 in_deltas[
i].Resize(fwd_deltas, num_features, scratch);
134 in_deltas[
i]->CopyUnpacking(fwd_deltas, feature_offset, num_features);
135 feature_offset += num_features;
138# pragma omp parallel for num_threads(stack_size)
140 for (
unsigned i = 0;
i < stack_size; ++
i) {
141 stack_[
i]->Backward(debug, *in_deltas[
i], scratch,
i == 0 ? back_deltas : out_deltas[
i]);
144 for (
unsigned i = 1;
i < stack_size; ++
i) {
154 int feature_offset = 0;
155 for (
unsigned i = 0;
i <
stack_.size(); ++
i) {
156 int num_features =
stack_[
i]->NumOutputs();
157 in_deltas->
CopyUnpacking(fwd_deltas, feature_offset, num_features);
158 feature_offset += num_features;
162 out_deltas->
CopyAll(*back_deltas);
172 back_deltas->
CopyAll(*out_deltas);
void DisplayForward(const NetworkIO &matrix)
void DisplayBackward(const NetworkIO &matrix)
void ScaleFloatBy(float factor)
void Transpose(TransposedArray *dest) const
void CopyUnpacking(const NetworkIO &src, int feature_offset, int num_features)
void AddAllToFloat(const NetworkIO &src)
void CopyAll(const NetworkIO &src)
void ResizeFloat(const NetworkIO &src, int num_features, NetworkScratch *scratch)
void Forward(bool debug, const NetworkIO &input, const TransposedArray *input_transpose, NetworkScratch *scratch, NetworkIO *output) override
bool Backward(bool debug, const NetworkIO &fwd_deltas, NetworkScratch *scratch, NetworkIO *back_deltas) override
TESS_API Parallel(const char *name, NetworkType type)
StaticShape OutputShape(const StaticShape &input_shape) const override
std::vector< Network * > stack_
void set_depth(int value)