Я использую Eigen library, чтобы сделать некоторые вычисления на iPad 2. (то есть cortex-a9). Кажется, что некоторые операции векторизованы с использованием инструкций NEON, а другие нет.Собственное не векторизация матричного умножения в iOS?
Операции, которые я пробовал, чтобы получить векторизованные: точечные продукты, векторные и матричные дополнения и вычитания.
Операции, которые не становятся векторизованными: матричное умножение.
Я использую эти операции внутри одного и того же проекта и того же файла, поэтому параметры компилятора одинаковы. Я использую -O3 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
.
Все матрицы, которые я использую, имеют динамические размеры. Есть ли что-то, что я делаю неправильно, или это ожидаемое поведение?
Спасибо.
Насколько точно вы пришли к выводу, что некоторые операции вектурированы, а другие нет? Проверка кода? Как GCC, так и Clang испускают неоновые инструкции для операций с плавающей запятой для НЕОН, оборудованного блоком FP на частях Cortex A. Кроме того, вы действительно хотите «-mfloat-abi-softfp» для iOS? Это обычное явление в Linux-land, где людям нравится создавать программное обеспечение, совместимое со множеством различных версий ARM-арки, но с неприятным штрафом во время исполнения. Вместо этого Apple выбирает жирные двоичные файлы. – marko
Я использую Xcode Instruments для проверки кода ассемблера. Для точечного продукта я вижу кучу 'vadd' и' vmov', но не для матричного умножения. Кроме того, точечный продукт приводит к значительному улучшению функции OpenCV (примерно 50%), однако матричное умножение этого не делает. – user1906