Сбой сборки Tensorflow lite для процессора ARM926

Все,

Я пытаюсь создать tenorflow lite для своего целевого процессора ARM926EJ-S (архитектура ARM5te). Я скопировал сценарий сборки и настройки сборки для моего целевого процессора из сценария сборки и настроек Rasp PI. Вот мои настройки сборки для моего целевого процессора в arm926_makefile.inc:

# Settings for ARM926.
ifeq ($(TARGET),arm926)
  TARGET_ARCH := armv5te

  ifeq ($(TARGET_ARCH), armv5te)
    TARGET_TOOLCHAIN_PREFIX := //arm-eabi-uclibc/usr/bin/arm-linux-
    CXXFLAGS += \
      -march=armv5te \
      -mcpu=arm926ej-s \
      -funsafe-math-optimizations \
      -ftree-vectorize \
      -fPIC

    CFLAGS += \
      -march=armv5te \
      -mcpu=arm926ej-s \
      -funsafe-math-optimizations \
      -ftree-vectorize \
      -std=c99 \
      -fPIC

    LDFLAGS := \
      -Wl,--no-export-dynamic \
      -Wl,--exclude-libs,ALL \
      -Wl,--gc-sections \
      -Wl,--as-needed
  endif

  LIBS := \
    -latomic \
    -lstdc++ \
    -lpthread \
    -lm \
    -ldl

endif

Сценарий сборки успешно создает группу файлов. Но в основном он жалуется на математические функции, такие как round, atoi, min, max пространства имен std. Версия инструментальной цепочки моего целевого процессора - arm-linux-g ++ (Buildroot 2014.08) 4.9.2. Тот же tenorflow lite успешно строится с использованием версии инструментальной цепочки Pi arm-linux-gnueabihf-g ++ (GCC) 8.3.0.

Я вижу эти математические функции, объявленные и определенные в моей инструментальной цепочке, но они не идентифицируются сборкой tensorflow-lite. Кстати .. Я пробовал использовать global :: round (), тогда его нужно заменить во многих местах и ​​других математических функциях. Должен быть простой способ или передача некоторой конфигурации, чтобы включить эти функции из моей инструментальной цепочки.

Может ли кто-нибудь указать мне правильное направление для создания tenorflow-lite для ARM926?

Вот ошибки сборки из моей инструментальной цепочки:

./tensorflow/lite/kernels/internal/reference/reduce.h:385:71: error: no matching function for call to 'min(double, float)'
./tensorflow/lite/kernels/internal/round.h:34:10: error: 'round' is not a member of 'std'
   return std::round(x);
/tensorflow/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/GlobalFunctions.h:93:36: note:   'Eigen::round'
   EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(round,scalar_round_op,nearest integer,\sa Eigen::floor DOXCOMMA Eigen::ceil DOXCOMMA ArrayBase::round)
./tensorflow/lite/kernels/internal/reference/concatenation.h:125:36: error: 'round' is not a member of 'std'
./tensorflow/lite/kernels/internal/reference/reduce.h:374:28: error: 'round' is not a member of 'std'

Кстати .. Я также пробовал использовать последнюю версию инструментария Rasp Pi для создания tenorflow lite для моего целевого процессора, используя параметры компиляции -march = armv5te и -mcpu = arm926ej-s. Он строится, но не запускается - я думаю, что набор инструментов rasp pi не генерирует правильный машинный код для архитектуры процессора ARM926 и ARMv5te.

Я был бы признателен и приветствовал бы любые указатели или идеи для решения этой проблемы сборки tenorflow-lite для процессора ARM9.

Спасибо, Арм


person arm    schedule 04.03.2020    source источник
comment
Ваша SoC с процессором ARM926EJ-S обычно не имеет аппаратного модуля с плавающей запятой. В вашей инструментальной цепочке должна быть указана программная поддержка операций с плавающей запятой, то есть ABI с плавающей запятой. SoC Broadcom, используемые в RPi, имеют FPU и способны использовать ABI с жесткой плавающей запятой, так что это несовместимый шаблон для использования. См. stackoverflow.com/questions/3321468/   -  person sawdust    schedule 04.03.2020
comment
Чтобы сделать его совместимым, я удалил флаги компилятора -mfpu. Я также получил настройки сборки микроконтроллера и получил те же ошибки сборки. Мне не хватает каких-либо конкретных флагов компилятора для процессора ARM926 или набора инструментов arm-linux-g ++ 4.9.2?   -  person arm    schedule 04.03.2020