Ответ 1
Бенчмаркинг - один из этих скользких склонов, вы можете найти тест, чтобы любой язык или инструмент выглядели хорошо или плохо в зависимости от того, что вы пытаетесь доказать.
Вначале я обычно работаю на платформах без операционной системы, поэтому довольно просто выполнить время, иногда до часов, плюс или минус, чтобы сравнить компиляторы или параметры. У меня также есть собственный симулятор большого пальца (thumbulator в github), где я рассчитываю инструкции и обращения к памяти, и, конечно, хорошие и плохое интерпретируются.
В частности, когда вы попадаете на платформы с кешем, все становится еще хуже. Если вы добавите или удалите nops из кода запуска, в результате чего вся программа изменит свое местоположение в памяти, что означает, что все изменит настройку кеша, без каких-либо изменений оптимизации компилятора вы иногда можете найти больше различий в производительности из-за кеша, чем различия в компиляторе или бэкэнд оптимизаций.
Я обычно запускаю dhrystone, но не объявляю победу или неудачу с этим. Возможно, вы захотите сделать точильный камень, если вы используете поплавок или точильный камень с мягким fpu.
Как уже упоминалось выше, самоконтрольные тесты - хорошая идея. Код реального мира тоже. Например, подпрограммы сжатия, возьмите текст (возможно, часть книги из проекта gutenburg), скомпилируйте его, затем распакуйте и сравните вывод с intput, вы можете добавить дополнительную проверку, сжимая ее на платформе управления, например, на вашем хосте и hardcode сжатый размер в тест, если сжатая версия под тестированием не соответствует, но она получает правильный результат, который все еще не выполняется. Я также использовал библиотеку jpeg для преобразования изображений из/в jpeg, если изображение не должно возвращаться в исходное состояние с сжатием с потерями, тогда вы можете просто сделать одну передачу и контрольную сумму или проверить размер или перенести копию ожидаемый результат и сравнение. Aes и дешифрование и дешифрование.
Есть объемы проектов с открытым исходным кодом, которые вы можете использовать с вашим модифицированным компилятором, чтобы сравнить его с компилятором запаса или другими компиляторами. Будучи кодом реального мира, это то, что ваш компилятор будет использоваться в любом случае. Обратите внимание, что, когда вы переходите на аппаратное обеспечение toms или на другие эталонные сайты, существует множество разных эталонных тестов, времени, которое требуется для рендеринга, времени, необходимого для компиляции gcc или linux или выполнения поиска в базе данных, куча приложений реального мира. И различные приложения получают разные оценки, очень редко, что одна платформа/решение подметает батарею тестов.
Когда ваша производительность падает, когда вы вносите изменения, это время, когда вы изучаете ассемблер и пытаетесь выяснить, почему. Вспомните, что сказал Майкл Абраш (и другие), независимо от того, насколько хорошо вы думаете, что ваш ассемблер вам все равно должен его время. Также попробуйте сумасшедшие вещи, которые, как вы уверены, будут медленными, потому что иногда вы обнаруживаете, что они быстрые по причинам, о которых вы никогда не думали.