diff options
author | Louis Verhaard <louis.verhaard@arm.com> | 2020-12-03 12:26:25 +0100 |
---|---|---|
committer | Louis Verhaard <louis.verhaard@arm.com> | 2020-12-11 12:24:25 +0100 |
commit | 9bfe0f86ea525055954b160a3c678024743030ec (patch) | |
tree | 384bac88fcc613abd357fbbf266ea30e34cbe526 /ethosu/tensor_allocator/tensor_allocator_main.cpp | |
parent | 93719a9b8c160de3acf047eacb9196f13167bddb (diff) | |
download | ethos-u-vela-9bfe0f86ea525055954b160a3c678024743030ec.tar.gz |
MLBEDSW-1373: Added search based allocator
Added a new tensor allocator that is based on searching,
implemented in C++ (C++11 compatible).
Change-Id: Ie96e9fcfc8e6c58d1fa53911f37de290eeba88cf
Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
Diffstat (limited to 'ethosu/tensor_allocator/tensor_allocator_main.cpp')
-rw-r--r-- | ethosu/tensor_allocator/tensor_allocator_main.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/ethosu/tensor_allocator/tensor_allocator_main.cpp b/ethosu/tensor_allocator/tensor_allocator_main.cpp new file mode 100644 index 00000000..27d96ef7 --- /dev/null +++ b/ethosu/tensor_allocator/tensor_allocator_main.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2020 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <cstdint> +#include <iostream> +#include <vector> + +#include "search_allocator.h" + +using namespace std; + +/** + * Reads live ranges from the input, and then performs allocation. + * The input has format: + +<number of live ranges> +<start_time> <end_time> <size> +... + + * e.g.: +4 +0 20 4096 +2 8 16000 +4 10 800 +6 20 1024 + */ +int main() { + int lr_count; + cin >> lr_count; + cin.ignore(); + vector<uint32_t> input; + vector<uint32_t> output; + for (int i = 0; i < lr_count; ++i) { + LiveRange lr; + cin >> lr.start_time >> lr.end_time >> lr.size; + lr.id = i; + cin.ignore(); + input.push_back(lr.start_time); + input.push_back(lr.end_time); + input.push_back(lr.size); + } + vector<LiveRange> lrs; + for (size_t i = 0; i < input.size(); i += 3) { + LiveRange lr; + lr.start_time = input[i]; + lr.end_time = input[i+1]; + lr.size = input[i+2]; + lrs.push_back(lr); + } + SearchAllocator allocator(lrs, 0); + uint32_t result = allocator.allocate(output); + printf("Output:\n"); + for (int i = 0; i < lr_count; ++i) { + printf("%4d: %6d %4d-%4d size %6d\n", i, output[i], input[3*i], input[3*i+1], input[3*i+2]); + } + uint32_t min_size = allocator.get_min_required_size(); + double overhead = 100.0 * (result - min_size)/(double)min_size; + printf("Total size: %d (%1.1f K), minimum required size: %d, overhead: %1.2f%%\n", + result, result/1024.0, min_size, overhead); + printf("Search used %ld iterations\n", (long)allocator.get_nr_iterations()); + return 0; +} |