Компиляция библиотеки Eigen для iPhone с векторизацией - PullRequest
3 голосов
/ 05 июня 2011

Я борюсь с компиляцией библиотеки Eigen для iPhone 4, которая имеет процессор ARM с набором инструкций armv7. Пока все работает нормально, когда я указываю препроцессор, определяю EIGEN_DONT_VECTORIZE. Но из-за некоторых проблем с производительностью я хотел бы использовать оптимизированный код armv7.

Независимо от того, какой компилятор я использую LLVM-GCC 4.2 или LLVM CLang 2.0, я всегда сталкиваюсь с ошибками компиляции. Я выяснил (или лучше так думаю), что LLVM-GCC 4.2 - это единственный способ получить доступ к этим специфическим инструкциям ARM-NEON.

Когда я не устанавливаю EIGEN_DONT_VECTORIZE (и предоставляю -mfloat-abi = softfp -mfpu = neon для gcc), я получаю следующую ошибку компилятора gcc:

src / m3CoreLib / Eigen / src / Core / arch / NEON / PacketMath.h: 89: ошибка: ожидаемый безусловный идентификатор перед '__ extension __'

Я читал о проблемах, связанных со "старой" версией gcc 4.2, и рекомендацией использовать более новую версию gcc. Я не уверен, но я считаю, что это не вариант из-за одобрения магазина приложений. Есть ли что-нибудь еще, что я могу сделать, чтобы скомпилировать его для iPhone? Есть кто-нибудь, кто решил это?

Спасибо, Кей

1 Ответ

1 голос
/ 07 июня 2011

После того, как я часами возился с различными настройками компилятора, я нашел для себя удовлетворительное решение и пришел к следующему выводу.

Существует удивительно огромная разница между настройками отладки и выпуска в отношении подхода библиотеки шаблонов Eigen: настройки выпуска с включенными обычными флагами оптимизации позволяют приложению работать в 20-40 раз быстрее , чем отладка. Я никогда не видел такой разницы ранее ни на одном языке, по моему опыту она обычно составляет 1,5 - 3 *. 1005 *

Хотя я все еще не могу форсировать векторизацию, то есть код компилируется только с определенным EIGEN_DONT_VECTORIZE, итоговая производительность теперь соответствует моим потребностям.

...