-
-
Notifications
You must be signed in to change notification settings - Fork 233
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Дешевые оптимизации #1386
Comments
Я не вижу смысла пытаться обгонять libc и libm там, где они скорее всего уже оптимизированы под систему. На одной платформе NEON версия libm будет быстрее, на другой будет медленнее. На первой sprintf упрощен, на другой нет. Это бесконечная гонка, в которой мы не выиграем в долгосрочной перспективе. Матлиба из rehlds конечно хороша, можно было бы на её базе создать что-то своё. Но SSE код по моему опыту плохо накладывается на NEON. С другой стороны, эту проблему возможно решили в simde, тогда этой библиотеки не было. Функции работы с кватернионами переписал не только CSMoE, но @Crow-bar в своём PSP порте. libmpg123 вообще хорошо было бы обновить до апстрима, а потом уже решать что с ним делать. Дядя Миша туда вносил какие-то изменения, но вроде бы это только упрощенное API. Можно ли его реализовать только с публичным API пока тоже никто не проверял. GAME_EXPORT на данный момент ничего не делает под MSVC. И тем более, уже давно никто не проводил ревизию, проставлен ли он везде. Мне кстати интересно, достаточно ли умён MSVC чтобы такую оптимизацию применять к static или inline функциям. Я последнее время стал везде static проставлять, но скорее из привычки, нежели, чем какой-то реальной цели. Ну и к тому же, мы конечно любим дешевые и бесплатные оптимизации, но всегда стоит обращать внимание на результаты профилирования, иначе это всё может оказаться совершенно бесмысленным. Это release сборка. Прямо сейчас почти весь фрейм занимает отрисовка. Хотя если походить по функциям отрисовки, то из математических функций и правда сходу можно отметить кватернионы, матрицы и внезапно BoxOnPlaneSide в R_RecursiveWorldNode. |
ЕМНИП, static функции MSVC не инлайнит по умолчанию, даже если функция используется только 1 раз. |
Ладно, будем считать что вредно не будет. Но вопрос не только в инлайне, а в использовании кастомного соглашения. Я такое пару раз видел в декомпилированном коде, кстати скомпиленного с MSVC. |
Это не однократно обсуждалось, но как-то все забывается потому что не столь критично.
Ниже привожу список возможных оптимизаций, которые практически не требуют правки кода, а в основном предполагают включения дополнительных опций компилятора или подключения библиотек/заголовков.
Никаких замеров производительности разумеется не привожу.
/Gr
или/Gv
дляMSVC
, чтобы зафорсить загрузку аргументов функций в регистры. В теории это может дать лишние 5% к общей производительности наx86 windows
, но может потребовать добавления макросаGAME_EXPORT
в объявления некоторых функций. В любом случае,gcc
иclang
выполняют загрузку в регистры по умолчанию.CSMoE
утверждает, что есть бутылочное горлышко в выполнении алгоритмов AngleQuaternion и QuaternionSlerp, и предлагает использовать вручную векторизованные версии векторных и матричных функций.libmpg123
в3rdparty
и синхронизировать их с апстримом. В новых версияхlibmpg123
декодер используетSIMD
на множестве платформ, правда не факт, что мы тут где-то упираемся в производительность.CRC32
и декомпрессииPK3
/PNG
подключив libdeflate.The text was updated successfully, but these errors were encountered: