|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Alexei Dets 2:5020/400 15 Nov 2002 22:24:09 To : Ilya Teterin Subject : Re: Re: Re: компиляция ядра --------------------------------------------------------------------------------
Hi!
Ilya Teterin wrote:
> Fri Nov 15 2002 19:01, Alexei Dets wrote to Ilya Teterin:
>
> >> Hе понимаю. Критичные функции просто кладутся в отдельный файл
> >> critical.c, он компилируется несколько раз с разными ключами. Где
> >> накладные расходы?
>
> AD> Hу и что ты дальше предлагаешь сделать с полученным critical.o? ;-)
>
> Загружать как библиотеку. А в чем подвох?
Основной подвох в том, что затрахаешься софт патчить.
Оригинальные авторы софта такого делать HЕ БУДУТ в общем случае.
1) Hайти все критические к скорости модули в коде (случай, когда такие
участки
не вынесены в отдельные функции/классы и т.п. можно вообще не рассматривать
-
труба дело).
2) Пропатчить Makefile, чтобы он вместо сборки одного critical.o собрал
i386-,
i486-, i586-, i686- и athlon-варианты, причем в виде разделяемой библиотеки.
3) Пропатчить программу, чтобы она при загрузке задетектила архитектуру и
при
помощи dlopen() загрузила набор (у нас ведь не один критический участок?)
этих оптимизированных so.
4) Поправить в исходнике все места вызова этих функций, чтобы вызывались
функции, загруженные из библиотеки.
5) Убедиться в том, что код, вынесенный в so, не всегда работает так, как
просто влинкованный - потестить, найти и поправить все такие места.
6) Если функция небольшая и часто вызываемая (особенно, если в цикле), даст
ли
такая оптимизация хоть какой-то эффект, если учесть, что в
"оптимизированном"
варианте функция всегда будет вызываться через указатель, а в оригинале
компилятор мог ее просто заинлайнить?
Hу и самое интересное - а есть ли в этом вообще смысл?
В подавляющем большинстве случаев самое интересное в программах сидит в
библиотеках. Которые используются множеством программ. И именно в этих
библиотеках есть критичные к времени исполнения части. Также, любая
нормальная программа делает какие-нибудь системные вызовы. Они вообще едины
для всех программ.
Соответственно, установка оптимизированных под конкретную систему
_библиотек_
и _ядра_ даст тоже самое в большинстве случаев, но зато без такого траха.
Причем не всех, а тех, которые используются многими программами и могут
серьезно повлиять на время выполнения.
Сегодня уже очень многие дистрибутивы ставят оптимизированные под платформу
версии ядра и glibc, добавить туда еще libstdc++, библиотеки аудио/видео
кодеков, модули от XFree, может еще чего по мелочи, и вопрос будет на 99%
решен.
Алексей
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
* Origin: InfoDesk, S.A. (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/6488160a7baa.html, оценка из 5, голосов 10
|