Add CompilationBuilder skeleton
authorHanjoung Lee <hanjoung.lee@samsung.com>
Wed, 21 Mar 2018 10:51:58 +0000 (19:51 +0900)
committer최형규/동작제어Lab(SR)/Senior Engineer/삼성전자 <hk0110.choi@samsung.com>
Thu, 22 Mar 2018 01:40:22 +0000 (10:40 +0900)
Get CompilationBuilder source from Android NN but implementation commented out

src/runtime/ref/nn/runtime/CMakeLists.txt
src/runtime/ref/nn/runtime/CompilationBuilder.cpp [new file with mode: 0644]
src/runtime/ref/nn/runtime/CompilationBuilder.h [new file with mode: 0644]

index 6ae0587..c9f9636 100644 (file)
@@ -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 (file)
index 0000000..8290a60
--- /dev/null
@@ -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<std::shared_ptr<Device>>& 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 (file)
index 0000000..eedc573
--- /dev/null
@@ -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