Я не знаю об iPhone, но в общем заявлении, что большой палец медленнее, чем у ARM. Учитывая 32-разрядную память ожидания ожидания, большой палец будет немного медленнее, например, 5% или 10%. Теперь, если это thumb2, это совсем другая история, говорят, что thumb2 может работать быстрее, я не знаю, что iPhone имеет мое предположение, что это не thumb2.
Если у вас не хватает 32-битной памяти с нулевым состоянием, тогда ваши результаты будут отличаться. Одна большая вещь - 32-битная память. Если вы работаете на шине с 16-разрядной шиной, такой как семейство GameBoy Advance, и есть некоторые состояния ожидания в этой памяти или ПЗУ, тогда большой палец может легко запустить ARM для производительности, даже если для выполнения одной задачи требуется больше инструкций с большим пальцем.
Проверьте свой код! Нетрудно придумать тест, который дает результаты, которые вас интересуют или нет. Так же легко показать, как рука сдувает большой палец, так как он большой палец сдувает руку. Кто заботится о том, что такое dhrystones, так это то, как быстро он запускает ваш код СЕГОДНЯ, что имеет значение.
То, что я нашел за эти годы в тестировании производительности кода для ARM, заключается в том, что ваш код и ваш компилятор являются большим фактором. Таким образом, большой палец на несколько процентов медленнее в теории, потому что он использует несколько процентов больше инструкций для формирования одной и той же задачи. Но знаете ли вы, что ваш любимый компилятор может быть ужасным и просто скомпилировать компиляторы, которые вы могли бы выполнять в несколько раз быстрее (gcc попадает в эту категорию)? Или используя тот же компилятор и смешивая параметры оптимизации. В любом случае вы можете отбросить разницу между руками и пальцами, умея использовать инструменты. Вы, наверное, знаете об этом, но вы были бы удивлены, узнав, сколько людей думают, что единственный способ, которым они знают, как скомпилировать код, - единственный способ, и единственный способ повысить производительность - это избавить больше памяти или другое оборудование от проблемы.
Если вы на iPhone, я слышал, что эти люди используют LLVM?Мне нравится концепция llvm во многих отношениях, и я очень хочу использовать ее в качестве моего ежедневного драйвера, когда он созревает, но обнаружил, что он создает код, который был на 10-20% (или намного больше) медленнее для конкретной задачи, которую я делал. Я был в ручном режиме, я не пробовал режим большого пальца, и у меня был кеш l1 и l2. Если бы я протестировал без кэшей, чтобы действительно сравнить большой палец с мышью, я, вероятно, увижу большой палец на несколько процентов медленнее, но если вы подумаете об этом (чего я тогда не интересовал), вы можете кэшировать в два раза больше кода большого пальца, чем код руки, который MIGHT подразумевает, что, хотя для этой задачи есть всего несколько процентов кода в целом, путем кэширования значительно большего количества его и уменьшения среднего времени выборки, большой палец может быть заметно быстрее. Возможно, мне придется попробовать.
Если вы используете llvm, у вас есть другая проблема нескольких мест для выполнения оптимизации. Переходя от C к байт-коду, который вы можете оптимизировать, вы можете оптимизировать сам байт-код, затем вы можете объединить весь свой байт-код и оптимизировать его в целом, а затем перейдя от байт-кода к ассемблеру, вы можете оптимизировать его. Если бы у вас было только 3 исходных файла и предполагалось, что на каждую возможность было только два уровня оптимизации, те не оптимизировали или не оптимизировали, с gcc у вас было бы 8 комбинаций для тестирования, при этом llvm число экспериментов почти на порядок выше , Больше, чем вы действительно можете запустить, от сотен до тысяч. Для одного теста я работал, не опираясь на шаг C на байт-код, затем НЕ оптимизируя байт-код в то время как отдельный, но оптимизируя после слияния файлов байт-кода в один большой (ger). Оптимизация llc на пути к руке дала наилучшие результаты.
Нижняя линия ... тест, тест, тест.
EDIT:
Я использую слово байткод, я думаю, что правильный термин в битовом коде LLVM мире. Код в файлах .bc - это то, что я имею в виду ...
Если вы переходите от C к ARM с помощью LLVM, в середине находится биткод (bc). Существуют опции командной строки для оптимизации на шаге C до bc. После bc вы можете оптимизировать файл, от bc до bc. Если вы выберете, вы можете объединить два или более файла bc в большие файлы bc или просто превратить все файлы в один большой файл bc. Затем каждый из этих комбинированных файлов также может быть оптимизирован.
Моя теория, в которой пока что есть только несколько тестовых примеров, заключается в том, что если вы не будете оптимизировать, пока не будете иметь всю программу/проект в одном большом файле bc, оптимизатор будет иметь максимальную сумму, если информацию, с которой можно выполнить свою работу. Таким образом, это означает переход от C к bc без оптимизации. Затем объедините все файлы bc в один большой файл bc. После того, как у вас есть все, что угодно, как один большой файл bc, дайте оптимизатору выполнить шаг оптимизации, максимизируя информацию и, надеюсь, качество оптимизации. Затем перейдите от оптимизированного файла bc к ассемблеру ARM. Значение по умолчанию для llc с оптимизацией включено, вы хотите разрешить эту оптимизацию, поскольку это единственный шаг, который знает, как оптимизировать для цели. Оптимизации от bc до bc являются универсальными, а не целевыми (AFAIK).
Вы все еще должны протестировать, протестировать, протестировать. Идите вперед и экспериментируйте с оптимизацией между этими шагами, посмотрите, ускоряет или замедляет работу вашей программы.
Ooh Случайный -1 голос без объяснения причин. Хороший. – Justicle
Wow другой. Классные усилия людей - мы все много учимся. – Justicle
+1 - Кажется, мне нужен разумный вопрос (только я вернусь к нулю, хотя я боюсь ...) –