Как соединить ООП и быстродействие


Сайт о сжатии >> Форум #Компрессор# >> [Ответить] [Ответы]

Автор: Юрий,
31 января 2004 года в 02:41:42

В ответ на : Так надо что-то с этим делать от ImageCoder в 30 января 2004 года в 19:10:15:


Я пишу на C++ для embedded processors, в частности real-time wavelet codecs.

С ООП приходится быть очень аккуратным.
Иногда жертвуешь универсальностью/гибкостью в пользу скорости.
Например, компилятор не сможет сделать виртуальную функцию inline, и если эта функция вызывается достаточно часто, возникают проблемы.

Вообще для написания высокооптимизированного кода начинаю с экспериментов, пробую какой подход лучше себя проявит, и в несколько итераций прихожу к конечному варианту.
Иногда уходит несколько недель и сотни экспериментов для нахождения "того самого", но с опытом все становится намного быстрее.

А когда основная идея реализации ясна, начинаю писать ООП "обертку", продумывать интерфейс и т.д.
Часто смысле направление разработки противоположно классическому ООП-подходу, что продиктовано ограничениями реализации. В общем, поиск компромиссов.

К сожалению, при высокой оптимизации жертвуешь многими удобствами С++ (здравствуте, макросы), да еще такая штука есть, как ручной loop unrolling под размер страницы кеша... Я вот сейчас собираюсь писать генератор С++ кода для преобразования wavelet - задаются параметры изображения (способ хранения в памяти), параметры преобразования, и нужный код генерится автоматически, и ручками догоняется.

Такие дела. Если есть более подробные вопросы, пишите :)

Ответы:



Ответить на это сообщение

Тема:

Имя (желательно полное):

E-Mail:

URL:

Город:

Страна:

Вежливый и подробный комментарий:
(Форматируйте его, пожалуйста, как почту - короткими строками
Еnter в конце строки, пустая строка между параграфами).

Пожалуйста, заполните все поля.
И не нажимайте по два раза на кнопку! Дождитесь ответа сервера.