Задать вопрос
Ответы пользователя по тегу Трансляторы
  • Самый быстрый исполняемый код?

    @halyavin
    Человек выдает более быстрый код. Компиляторы на самом деле ничего не знают о конвеерах и правильно делают — они сильно отличаются на разных процессорах, так что оптимизация под один ухудшит скорость на другом. Как раз вставка nop'ов это наглядно показывает. Функция может ускорится на 5-10%, так почему же компилятор не вставил этот nop?! Все что они делают — это выравнивают циклы. Эта работа легко автоматизируется макросами.

    Когда говорят об NP-полноте оптимизации программы и возможности компилятора перебрать множество вариантов люди совершенно забывают о том, что человек и компьютер играют по разным правилам — человек не ограничен исходной программой и может делать оптимизации, которые компилятору запрещены (например, человек может знать, что те или иные указатели не являются алиасами при нормальной работе программы; перевернуть цикл, поскольку в спецификации указано, что порядок выдачи результатов не важен) или использовать конструкции, которых нет в языке программирования (одновременное деление и получение остатка, умножение 32-битных чисел с 64-битным результатом). И чем сложнее алгоритм, тем больше количество вариантов у человека по сравнению с компилятором.

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