From b34c39ca51059d1f56ea223f582d79bc6d9209bf Mon Sep 17 00:00:00 2001 From: Hanjoung Lee Date: Wed, 21 Mar 2018 19:51:58 +0900 Subject: [PATCH] Add CompilationBuilder skeleton Get CompilationBuilder source from Android NN but implementation commented out --- src/runtime/ref/nn/runtime/CMakeLists.txt | 3 +- src/runtime/ref/nn/runtime/CompilationBuilder.cpp | 105 ++++++++++++++++++++++ src/runtime/ref/nn/runtime/CompilationBuilder.h | 57 ++++++++++++ 3 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 src/runtime/ref/nn/runtime/CompilationBuilder.cpp create mode 100644 src/runtime/ref/nn/runtime/CompilationBuilder.h diff --git a/src/runtime/ref/nn/runtime/CMakeLists.txt b/src/runtime/ref/nn/runtime/CMakeLists.txt index 6ae0587..c9f9636 100644 --- a/src/runtime/ref/nn/runtime/CMakeLists.txt +++ b/src/runtime/ref/nn/runtime/CMakeLists.txt @@ -1,5 +1,6 @@ # Library `runtime` -SET (RUNTIME_SRCS NeuralNetworks.cpp) +SET (RUNTIME_SRCS NeuralNetworks.cpp + CompilationBuilder.cpp) add_library(runtime SHARED ${RUNTIME_SRCS}) include_directories(runtime PRIVATE . include) diff --git a/src/runtime/ref/nn/runtime/CompilationBuilder.cpp b/src/runtime/ref/nn/runtime/CompilationBuilder.cpp new file mode 100644 index 0000000..8290a60 --- /dev/null +++ b/src/runtime/ref/nn/runtime/CompilationBuilder.cpp @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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 + * + * http://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. + */ + +#define LOG_TAG "CompilationBuilder" + +#include "CompilationBuilder.h" + +// TODO Include these files once availible +#if 0 +#include "ExecutionBuilder.h" +#include "ExecutionPlan.h" +#include "Manager.h" +#include "ModelBuilder.h" +#include "Utils.h" +#endif + +namespace android { +namespace nn { + +CompilationBuilder::CompilationBuilder(const ModelBuilder* model) : + mModel(model) { +// VLOG(COMPILATION) << "CompilationBuilder::CompilationBuilder"; +} + +int CompilationBuilder::finish() { + // Dummy Implementation + return ANEURALNETWORKS_NO_ERROR; + + // Original code for reference +#if 0 + if (mFinished) { + LOG(ERROR) << "ANeuralNetworksCompilation_finish called more than once"; + return ANEURALNETWORKS_BAD_STATE; + } + // TODO validate the rest + + mFinished = true; + + if (uint32_t p = DeviceManager::get()->getPartitioning()) { + // Get the list of HAL devices. + const std::vector>& devices = DeviceManager::get()->getDrivers(); + + int n = mModel->partitionTheWork(devices, mPreference, &mPlan); + if (!DeviceManager::partitioningAllowsFallback(p) && + (n != ANEURALNETWORKS_NO_ERROR)) { + return n; + } + } + + return ANEURALNETWORKS_NO_ERROR; +#endif +} + +int CompilationBuilder::setPreference(int32_t preference) { + // Dummy Implementation + return ANEURALNETWORKS_NO_ERROR; + + // Original code for reference +#if 0 + if (mFinished) { + LOG(ERROR) << + "ANeuralNetworksCompilation_setPreference can't modify after compilation finished"; + return ANEURALNETWORKS_BAD_STATE; + } + if (preference >= kNumberOfPreferences) { + LOG(ERROR) << "ANeuralNetworksCompilation_setPreference invalid preference " << preference; + return ANEURALNETWORKS_BAD_DATA; + } + + mPreference = preference; + return ANEURALNETWORKS_NO_ERROR; +#endif +} + +int CompilationBuilder::createExecution(ExecutionBuilder **execution) { + // Dummy Implementation + return ANEURALNETWORKS_NO_ERROR; + + // Original code for reference +#if 0 + if (!mFinished) { + LOG(ERROR) << "ANeuralNetworksExecution_create passed an unfinished compilation"; + *execution = nullptr; + return ANEURALNETWORKS_BAD_STATE; + } + *execution = new ExecutionBuilder(this); + return (*execution ? ANEURALNETWORKS_NO_ERROR : ANEURALNETWORKS_OUT_OF_MEMORY); +#endif +} + +} // namespace nn +} // namespace android diff --git a/src/runtime/ref/nn/runtime/CompilationBuilder.h b/src/runtime/ref/nn/runtime/CompilationBuilder.h new file mode 100644 index 0000000..eedc573 --- /dev/null +++ b/src/runtime/ref/nn/runtime/CompilationBuilder.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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 + * + * http://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. + */ + +#ifndef ANDROID_ML_NN_RUNTIME_COMPILATION_BUILDER_H +#define ANDROID_ML_NN_RUNTIME_COMPILATION_BUILDER_H + +// #include "ExecutionPlan.h" // NOTE ExecutionPlan disabled +#include "NeuralNetworks.h" + +namespace android { +namespace nn { + +class ExecutionBuilder; +class ModelBuilder; + +class CompilationBuilder { +public: + friend class ExecutionBuilder; // TODO remove this + + CompilationBuilder(const ModelBuilder* model); + + int setPreference(int32_t preference); + + int finish(); + + int createExecution(ExecutionBuilder** execution); + +private: + const ModelBuilder* mModel; + +// ExecutionPlan mPlan; // NOTE ExecutionPlan disabled + + // Whether the application prefers to go fast or use low power for this execution. + int32_t mPreference = ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWER; + + // Once the compilation has been finished, we should not allow further + // modifications to the compilation. + bool mFinished = false; +}; + +} // namespace nn +} // namespace android + +#endif // ANDROID_ML_NN_RUNTIME_COMPILATION_BUILDER_H -- 2.7.4