LINUX.ORG.RU

C + ASM


0

0

Допустим есть некий алгоритм и его реализация на С. Предположим, что они максимально оптимизированы. Вопрос : если требуется добиться максимальной скорости выполнения кода, то есть ли смысл использовать ассемблерные вставки, или это не даст существенного прироста в скорости исполнения (т.е. gcc создаст и так оптимальный код).

anonymous

Re: C + ASM

Смотря для какой архитектуры (оптимизировать руками для p1 с его uv-пайпами - не самое приятное занятие). gcc, как правило, генерит код на троечку.

mv ★★★★★ ()

Re: C + ASM

Мой опыт из далекого детства (i.e. там был достаточно наивный код как на ассемблере, так и на C и компилятор был микрософтовский) говорит, что раз на раз не приходится, расхождение было до нескольких раз в обе стороны. Рекоммендуют только вместо ассемблерных вставок переписать нужную функцию целиком на ассемблере, либо взять сгенеренный gcc код (-s) и от него уже плясать.

AMDmi3 ()

Re: C + ASM

Зачастую не имеет.

Miguel ★★★★★ ()

Re: C + ASM

часто боттл-нек это ввод-вывод (в память, на диск, или в сеть) и оптимизация ассемблерных инструкций не очень важна

dilmah ★★★★★ ()

Re: C + ASM

Если требуется добиться максимальной скорости выполнения кода, то вам надо использовать профайлер и смотреть где узкие места и как их лучше исправить. Не стоит вслепую кидаться переписывать все на ассемблере.

anonymous ()
Ответ на: Re: C + ASM от anonymous

Re: C + ASM

Для начала попробуйте стандартный gprof из binutils, но у него были проблемы с многонитевыми (threaded) приложениями. Более специфичную информацию можно получить с помощью утилит из valgrind (вплоть до вероятных промахов кеша процессора). Гугл выложили свои Google Performance Tools там тоже есть профайлер, но ничего про него сказать не могу - не пробовал.

anonymous ()

Re: C + ASM

Если разработка идёт под конкретный процессор, то имеет смысл. Зная подробности архитектуры, можно подстроить под неё и сделать так, чтобы использовалось максимально возможностей проца. То есть, вручную "подсказать" процессору, чтобы он заранее загрузил нужные данные в кэш, перестроить арифметические операторы так, чтобы одновременно использовалось несколько АЛУ и тд.

krum ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.