Я пытаюсь использовать учебники по Halide-lang AOT и кросс-компиляции. Я хотел бы сделать кросс-компиляцию AOT-программы Halide для цели Linux на Cortex A9.
Я изменил lesson_11_cross_compilation.cpp со следующими изменениями:
Target target;
target.os = Target::Linux; // The operating system
target.arch = Target::ARM; // The CPU architecture
target.bits = 32; // The bit-width of the architecture
std::vector<Target::Feature> arm_features; // A list of features to set
arm_features.push_back(Target::ARMv7s);
target.set_features(arm_features);
brighter.compile_to_file("lesson_11_arm_32_linux", args, target); // Pass the target as the last argument.
brighter.compile_to_c("lession_11.c", args, "foo", target);
Я компилирую это с помощью команды g ++, указанной в верхней части файла lesson_11_cross_compilation.cpp. Это создает исполняемый файл lession_11. Я запускаю исполняемый файл и получаю файлы lesson_11_arm_32_linux.h / o.
Затем я запускаю кросс-компилятор для этого файла, чтобы попытаться сгенерировать программу для моей цели, используя следующую командную строку:
/opt/Xilinx/SDK/2014.2/gnu/arm/lin/bin/arm-xilinx-linux-gnueabi-g++ -o test -std = c ++ 11 -lpthread lesson_10_aot_compilation_run.cpp lesson_11_arm_32_linux.o -mfpu = neon-vf
/opt/Xilinx/SDK/2014.2/gnu/arm/lin/bin/../lib/gcc/arm-xilinx-linux-gnueabi/4.8.1/../../../../arm- xilinx-linux-gnueabi / bin / ld: error: lesson_11_arm_32_linux.o использует аргументы регистра VFP, test — нет
/opt/Xilinx/SDK/2014.2/gnu/arm/lin/bin/../lib/gcc/arm-xilinx-linux-gnueabi/4.8.1/../../../../arm- xilinx-linux-gnueabi / bin / ld: не удалось объединить данные, специфичные для цели, из файла lesson_11_arm_32_linux.o
collect2: error: ld вернул 1 состояние выхода
Кажется, Halide генерирует код, который использует VFP. Я попытался изменить опцию -mfpu и -mfloat-abi = softfp, soft и hard. Ничего не работает Есть ли способ настроить Halide для генерации инструкций FPU определенного типа?
Я не думаю, что вы хотите armv7s для Cortex-A9. За 32-битную руку Halide принимает cortex-a9 если у вас включен armv7s.
Если у вас есть набор инструментов ‘gnueabihf’, который вы можете использовать вместо этого, он должен работать (с плавающей запятой). Если вы хотите скомпилировать Halide самостоятельно, вы также можете изменить CodeGen_ARM :: use_soft_float_abi () (https://github.com/halide/Halide/blob/master/src/CodeGen_ARM.cpp#L1252) делать что хочешь.
Вероятно, мы должны добавить целевой флаг, который выбирает плавающий аби.