diff options
author | Andrew Selle <aselle@google.com> | 2018-07-13 10:59:05 -0700 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2018-07-13 11:04:28 -0700 |
commit | b5b5cc0e248b6fbd5025765f592a43af158a1cb2 (patch) | |
tree | 82deb1f8db93f157e1dbc45662a63313aa5bd717 /tensorflow/contrib/lite/arena_planner.cc | |
parent | 2449da260ccd7dc075b890729f7a6cbb08e10882 (diff) |
Make an option that allows making the memory plan not reuse space.
This is called 'allow_intermediates'. In the future we should have
a way for users to enable this functionality from the interpreter API.
Also, preserve_inputs is now better commented.
PiperOrigin-RevId: 204496777
Diffstat (limited to 'tensorflow/contrib/lite/arena_planner.cc')
-rw-r--r-- | tensorflow/contrib/lite/arena_planner.cc | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/tensorflow/contrib/lite/arena_planner.cc b/tensorflow/contrib/lite/arena_planner.cc index 4257e754ad..16a0e71624 100644 --- a/tensorflow/contrib/lite/arena_planner.cc +++ b/tensorflow/contrib/lite/arena_planner.cc @@ -36,12 +36,13 @@ struct AllocationInfo { ArenaPlanner::ArenaPlanner(TfLiteContext* context, std::unique_ptr<GraphInfo> graph_info, - bool preserve_inputs) + bool preserve_inputs, bool preserve_intermediates) : context_(context), graph_info_(std::move(graph_info)), arena_(kDefaultArenaAlignment), persistent_arena_(kDefaultArenaAlignment), - preserve_inputs_(preserve_inputs) {} + preserve_inputs_(preserve_inputs), + preserve_intermediates_(preserve_intermediates) {} ArenaPlanner::~ArenaPlanner() {} int64_t ArenaPlanner::BasePointer(TfLiteAllocationType type) { @@ -164,13 +165,15 @@ TfLiteStatus ArenaPlanner::PlanAllocations() { // Then update the ref-counts of the node's inputs, and if necessary queue // them for deallocation. - TfLiteIntArray* node_inputs = node.inputs; - for (int j = 0; j < node_inputs->size; ++j) { - int tensor_index = node_inputs->data[j]; - if (tensor_index != kOptionalTensor) { - refcounts[tensor_index]--; - if (refcounts[tensor_index] == 0) { - TF_LITE_ENSURE_STATUS(deallocate(i, tensor_index)); + if (!preserve_intermediates_) { + TfLiteIntArray* node_inputs = node.inputs; + for (int j = 0; j < node_inputs->size; ++j) { + int tensor_index = node_inputs->data[j]; + if (tensor_index != kOptionalTensor) { + refcounts[tensor_index]--; + if (refcounts[tensor_index] == 0) { + TF_LITE_ENSURE_STATUS(deallocate(i, tensor_index)); + } } } } |