aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFinn Williams <finn.williams@arm.com>2022-03-02 12:45:44 +0000
committerKevin May <kevin.may@arm.com>2022-03-09 09:16:05 +0000
commitde1cd79500a3e6b8744d00fbf54abaae741d881f (patch)
tree937d04f0be6ce81e67d105a700ca5320ee676ae1
parent998a20832fd511de75c2cd935b7a0e851e91156d (diff)
downloadarmnn-de1cd79500a3e6b8744d00fbf54abaae741d881f.tar.gz
Add patch to support mapping ashmem and fix error handling
Signed-off-by: Kevin May <kevin.may@arm.com> Signed-off-by: Finn Williams <finn.williams@arm.com> Change-Id: I8ff912691c4d197d398c22c3e08288d0d0fd7e0a
-rw-r--r--shim/BuildGuideShimSupportLibrary.md6
-rw-r--r--shim/sl/canonical/ArmnnPreparedModel.cpp26
-rw-r--r--shim/sl/scripts/NeuralNetworks.patch39
-rw-r--r--shim/sl/scripts/NeuralNetworks_cpp.patch13
-rwxr-xr-xshim/sl/scripts/modify_aosp_libs.sh8
5 files changed, 66 insertions, 26 deletions
diff --git a/shim/BuildGuideShimSupportLibrary.md b/shim/BuildGuideShimSupportLibrary.md
index 1d8fb43cae..8029032371 100644
--- a/shim/BuildGuideShimSupportLibrary.md
+++ b/shim/BuildGuideShimSupportLibrary.md
@@ -31,6 +31,8 @@ export AOSP_ROOT=<path/to/aosp/root>
export NDK=<path/to/>/android-ndk-r20b
export NDK_TOOLCHAIN_ROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export PATH=$NDK_TOOLCHAIN_ROOT/bin/:$PATH
+export $FLATBUFFERS_ANDROID_BUILD=<path/to/flatbuffers/target/android/build>
+export $FLATBUFFERS_X86_BUILD=<path/to/flatbuffers/host/build-x86_64>
```
## Download Arm NN
@@ -83,8 +85,8 @@ CXX_FLAGS="-fPIE -fPIC" cmake .. \
-DARMCOMPUTE_ROOT=$AOSP_ROOT/vendor/arm/clframework/ \
-DARMCOMPUTE_BUILD_DIR=$AOSP_ROOT/vendor/arm/clframework/build/android-arm64v8a/ \
-DARMCOMPUTENEON=1 -DARMCOMPUTECL=1 -DARMNNREF=1 \
--DFLATBUFFERS_ROOT=<path/to/flatbuffers/target/android/build> \
--DFLATC_DIR=<path/to/flatbuffers/host/build-x86_64> \
+-DFLATBUFFERS_ROOT=$FLATBUFFERS_ANDROID_BUILD \
+-DFLATC_DIR=$FLATBUFFERS_X86_BUILD \
-DBUILD_ARMNN_SERIALIZER=1 -DBUILD_GATORD_MOCK=0 -DBUILD_BASE_PIPE_SERVER=0
```
diff --git a/shim/sl/canonical/ArmnnPreparedModel.cpp b/shim/sl/canonical/ArmnnPreparedModel.cpp
index 659a26cf3b..94809497d1 100644
--- a/shim/sl/canonical/ArmnnPreparedModel.cpp
+++ b/shim/sl/canonical/ArmnnPreparedModel.cpp
@@ -332,7 +332,7 @@ ExecutionResult<std::pair<std::vector<OutputShape>, Timing>> ArmnnPreparedModel:
switch(status)
{
case ErrorStatus::OUTPUT_INSUFFICIENT_SIZE:
- return NN_ERROR(ErrorStatus::NONE);
+ return NN_ERROR(ErrorStatus::OUTPUT_INSUFFICIENT_SIZE);
case ErrorStatus::GENERAL_FAILURE:
return NN_ERROR(ErrorStatus::GENERAL_FAILURE);
case ErrorStatus::INVALID_ARGUMENT:
@@ -522,10 +522,6 @@ GeneralResult<std::pair<SyncFence, ExecuteFencedInfoCallback>> ArmnnPreparedMode
VLOG(DRIVER) << "ArmnnCanonicalPreparedModel::executeFenced(...) before ExecuteGraph";
auto errorStatus = ExecuteGraph(memPools, *inputs, *outputs, ctx);
- if (errorStatus != ErrorStatus::NONE)
- {
- return NN_ERROR(errorStatus) << "executeFenced() failed";
- }
VLOG(DRIVER) << "ArmnnCanonicalPreparedModel::executeFenced(...) after ExecuteGraph";
if (relocation.output)
{
@@ -533,8 +529,24 @@ GeneralResult<std::pair<SyncFence, ExecuteFencedInfoCallback>> ArmnnPreparedMode
}
ExecuteFencedInfoCallback armnnFencedExecutionCallback =
- [timingSinceLaunch, timingAfterFence]() {
- return std::make_pair(timingSinceLaunch, timingAfterFence);
+ [timingSinceLaunch, timingAfterFence, errorStatus]() {
+
+ GeneralResult<std::pair<Timing, Timing>> result;
+
+ switch(errorStatus)
+ {
+ case ErrorStatus::OUTPUT_INSUFFICIENT_SIZE:
+ result.error().code = (ErrorStatus::OUTPUT_INSUFFICIENT_SIZE);
+ case ErrorStatus::GENERAL_FAILURE:
+ result.error().code = (ErrorStatus::GENERAL_FAILURE);
+ case ErrorStatus::INVALID_ARGUMENT:
+ result.error().code = (ErrorStatus::INVALID_ARGUMENT);
+ default:
+ {
+ result.value() = std::make_pair(timingSinceLaunch, timingAfterFence);
+ }
+ }
+ return result;
};
return std::make_pair(SyncFence::createAsSignaled(), std::move(armnnFencedExecutionCallback ));
}
diff --git a/shim/sl/scripts/NeuralNetworks.patch b/shim/sl/scripts/NeuralNetworks.patch
new file mode 100644
index 0000000000..c33177e081
--- /dev/null
+++ b/shim/sl/scripts/NeuralNetworks.patch
@@ -0,0 +1,39 @@
+diff --git a/common/SharedMemoryAndroid.cpp b/common/SharedMemoryAndroid.cpp
+index 4730de36b..896d643e7 100644
+--- a/common/SharedMemoryAndroid.cpp
++++ b/common/SharedMemoryAndroid.cpp
+@@ -160,8 +160,19 @@ GeneralResult<SharedMemory> allocateSharedMemory(size_t size) {
+ return createSharedMemoryFromUniqueFd(size, prot, std::move(fd), offset);
+ }
+
+-GeneralResult<Mapping> map(const Memory::Ashmem& /*memory*/) {
+- return NN_ERROR(ErrorStatus::INVALID_ARGUMENT) << "Cannot map ashmem memory";
++GeneralResult<Mapping> map(const Memory::Ashmem& memory) {
++ constexpr off64_t offset = 0;
++ constexpr int prot = PROT_READ | PROT_WRITE;
++ std::shared_ptr<base::MappedFile> mapping =
++ base::MappedFile::FromFd(memory.fd, offset, memory.size, prot);
++ if (mapping == nullptr || mapping->data() == nullptr) {
++ return NN_ERROR() << "Can't mmap the file descriptor.";
++ }
++ return Mapping{
++ .pointer = mapping->data(),
++ .size = memory.size,
++ .context = std::move(mapping),
++ };
+ }
+
+ #endif // NN_COMPATIBILITY_LIBRARY_BUILD
+diff --git a/runtime/NeuralNetworks.cpp b/runtime/NeuralNetworks.cpp
+index b91d3ce45..8977dac68 100644
+--- a/runtime/NeuralNetworks.cpp
++++ b/runtime/NeuralNetworks.cpp
+@@ -1859,7 +1859,7 @@ int SL_ANeuralNetworksDevice_forEachVendorExtensionOperandTypeInformation(
+ #define NNCL_FUNC(symbol) .symbol = symbol
+
+ NnApiSLDriverImplFL5 slDriverImpl{
+- .base{.implFeatureLevel = ANEURALNETWORKS_FEATURE_LEVEL_5},
++ .base={.implFeatureLevel = ANEURALNETWORKS_FEATURE_LEVEL_5},
+ NNCL_FUNC(ANeuralNetworksBurst_create),
+ NNCL_FUNC(ANeuralNetworksBurst_free),
+ NNCL_FUNC(ANeuralNetworksCompilation_createForDevices),
diff --git a/shim/sl/scripts/NeuralNetworks_cpp.patch b/shim/sl/scripts/NeuralNetworks_cpp.patch
deleted file mode 100644
index 40bdc07e8b..0000000000
--- a/shim/sl/scripts/NeuralNetworks_cpp.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/runtime/NeuralNetworks.cpp b/runtime/NeuralNetworks.cpp
-index b91d3ce45..8977dac68 100644
---- a/runtime/NeuralNetworks.cpp
-+++ b/runtime/NeuralNetworks.cpp
-@@ -1859,7 +1859,7 @@ int SL_ANeuralNetworksDevice_forEachVendorExtensionOperandTypeInformation(
- #define NNCL_FUNC(symbol) .symbol = symbol
-
- NnApiSLDriverImplFL5 slDriverImpl{
-- .base{.implFeatureLevel = ANEURALNETWORKS_FEATURE_LEVEL_5},
-+ .base={.implFeatureLevel = ANEURALNETWORKS_FEATURE_LEVEL_5},
- NNCL_FUNC(ANeuralNetworksBurst_create),
- NNCL_FUNC(ANeuralNetworksBurst_free),
- NNCL_FUNC(ANeuralNetworksCompilation_createForDevices),
diff --git a/shim/sl/scripts/modify_aosp_libs.sh b/shim/sl/scripts/modify_aosp_libs.sh
index c991678dd2..b10a36cfd1 100755
--- a/shim/sl/scripts/modify_aosp_libs.sh
+++ b/shim/sl/scripts/modify_aosp_libs.sh
@@ -11,12 +11,12 @@ pushd "${AOSP_DIR}/system/libbase/"
popd
pushd "${AOSP_DIR}/packages/modules/NeuralNetworks/"
- echo "Applying NeuralNetworks.cpp patch"
- git apply "${SCRIPT_PATH}/NeuralNetworks_cpp.patch"
+ echo "Applying NeuralNetworks patch"
+ git apply "${SCRIPT_PATH}/NeuralNetworks.patch"
echo " Checking out master version of SharedMemory.h/.cpp which includes convertRequestFromPointerToShared"
- git checkout master -- common/SharedMemory.cpp
- git checkout master -- common/include/nnapi/SharedMemory.h
+ git checkout 736317504083629929373bd349f667893bc8204c -- common/SharedMemory.cpp
+ git checkout 736317504083629929373bd349f667893bc8204c -- common/include/nnapi/SharedMemory.h
popd
pushd "${SCRIPT_PATH}/.."