Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
saskin
Зарегистрирован: 05.08.2003 Сообщения: 6
|
Добавлено: Вт Авг 05 2003 18:14 Заголовок сообщения: VC++ Оптимизация |
|
|
Народ посоветуйте что быстрее, применение __declspec( naced ) или метод класса inline static. Первый не создает лишнего, но не получаеться избавитья от call, второй позволяет вставлять функцию прямо в код, хотя тоже вопрос спорный, но при этом создает временные переменные, даже при использовании __fastcall. #define не предлагать. Или если кто в курсе, посоветуйте методику тестирования. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Ср Авг 06 2003 17:03 Заголовок сообщения: Re: VC++ Оптимизация |
|
|
Все локальные переменные в функциях в VC++ временные, если не объявлены статическими. Поэтому в этом отношении инлайн не ухудшает характеристики. Инлайн удлиняет тело конечного исполняемого кода. При современном уровне плат ОЗУ инлайн, конечно, предпочтительней, особенно, если функции короткие.
Правда, кэширование в современных процессорах может свести на нет преимущества инлайна.
Но вообще, нужно искать узкие места, а не пытаться оптимизировать всю программу целиком. Потому что есть принципиальные участки, где оптимизация почти бесполезна. Например, в функции чтения с диска нет смысла оптимизировать скорость: чтение будет медленнее, чем любой, самый неоптимальный алгоритм. Соответственно там будет интересней оптимизация пространства.
В общем, вопрос этот не имеет однозначного ответа. Опиши задачу, может что умное и подскажем. |
|
Вернуться к началу |
|
|
saskin
Зарегистрирован: 05.08.2003 Сообщения: 6
|
Добавлено: Сб Авг 09 2003 18:45 Заголовок сообщения: Re: VC++ Оптимизация |
|
|
Вопрос по большей части теоретический, потому как переключение процессов в винде сводит на нет все результаты тесов. Занимаюсь перекодировкой данных в реалтайме. Часть кода переписал на asm, но поскольку мелкософт не дает гаранти на состояние регистров при входе в __asm (и это горькая правда), то при использовании __fastcall создаеться кадр стека, ecx и edx сохраняються во временных переменных, а только потом из временных переменных передаються в __asm. Меня интересут можно ли обойти это безобразие с временными переменными. А если нет, то где теряеться больше производительности на лишнеи call, или на временных переменных при inline. |
|
Вернуться к началу |
|
|
Sclis Гость
|
Добавлено: Пн Авг 11 2003 05:52 Заголовок сообщения: Re: VC++ Оптимизация |
|
|
Я, извиняюсь, знатоком большим не буду прикидываться, но есть мнение... Раз "переключение процессов сводит на нет все результаты тестов", то зачем ты пытаешься оптимизировать асм-вставки? Твоя реал-тайм задача тоже будет на правах теста... и ей будет так же трудно на каком-то этапе критичности делают аппаратное решение, чтобы не зависить от проца... до этого, если мощностей тебе должно хватать (ты подсчитал), то надо оптимизировать алгоритмы (саму политику) кэширования, кодирования и доступа к ресурсам, а не крохи в алгоритмах. Например, увеличить глубину кэша. Если очередь данных растет, за каким-то порогом включать паралельный поток обработки, чтобы винда больше времени предоставляла твоей программе. Управлять промежуточным сохранением данных, если нагрузки идут скачками... Применить где-то таблицу в памяти вместо вычислений... ну и т.д. А лишний такт проца ситуацию не изменит (в принципе), а только отсрочит печальный финал Поелику, опять таки, "винда сведет все это не нет, своими внутренними манипуляциями". То бишь, путь у тебя правильный (оптимизацию делать надо), но проблему он не решает |
|
Вернуться к началу |
|
|
saskin
Зарегистрирован: 05.08.2003 Сообщения: 6
|
Добавлено: Пн Авг 11 2003 11:31 Заголовок сообщения: Re: VC++ Оптимизация |
|
|
Я наверное неправильно сформулировал вопрос. Меня интересовал способ эффективной связи С++ с asm. Вчера протестил компилер VC7, там временные переменные для inline & __asm вообще не создаються, если не использовать __fastcall то компилер сам со всем хорошо справляеться. Так что вопрос отпал сам собой. Всем большое спасибо!!! |
|
Вернуться к началу |
|
|
|