Куча говна / Говнокод #21914 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
ВЫНЕСЕНИЕ ИНВАРИАНТНОГО КОДА ЗА ПРЕДЕЛЫ ЦИКЛА

Инвариантным называется код, не изменяющийся в ходе выполнения цикла. А раз так, – 
то какой смысл выполнять его в каждой итерации – не лучше ли вынести такой код за пределы цикла?
Рассмотрим следующий пример:

for(a = 0;a  <(b*2);  a++)

printf("%x\n",a*(b/2));

Выражения (b*2) и (b/2) очевидно представляют собой инвариант, и оптимизированный код будет выглядеть так:

tmp_1=b*2;

tmp_2=b/2;

for(a=0;a<tmp_1;a++)

printf("%x\n",tmp_2+=tmp_2);

Это экономит одну операцию деления и две операции умножения на каждую итерацию, что очень и очень неплохо!
Компиляторы Microsoft Visual C++ и WATCOM успешно распознают инвариантный код и выносят его за пределы цикла, 
а вот Borland C++ увы, нет.

Всегда было интересно узнать кто-нибудь чему-нибудь научился на книжках KPNC ?

Запостил: lazy_8 lazy_8, (Updated )

Комментарии (26) RSS

  • >что очень и очень неплохо!
    Единственным недостатком является неэквивалентность оптимизированного кода исходному, но, с учетом возросшего быстродействия, с этим можно смириться.
    Ответить
  • Ну я читал эту книжку. Кое-что понял про память, многое понял про кеш, хотя конечно терминальным байтойобством я не занимался
    Ответить
  • > KPNC
    KPNC is a radio station broadcasting a Country music format. Licensed to Ponca City, Oklahoma, USA. The station is currently owned by Team Radio, L.L.C..

    > tmp_2+=tmp_2
    Смачный эпик фейл гореоптимизатора.
    Ответить
    • Вообще-то KPNC это http://www.kpnc.ru/
      Кузбасский научный центр

      >>Смачный эпик фейл
      Это компайлер-специфик оптимизация.
      Конкретно в его компиляторе этот UB дает прирост 42%
      Ответить
      • > этот UB

        Где здесь UB, bayan?
        Дело в том, что в оригинальном коде выводилась арифметическая прогрессия
        0, (b/2), 2*(b/2), 3*(b/2), ...
        После "оптимизации" прогрессия стала геометрической
        2*(b/2), 4*(b/2), 8*(b/2), 16*(b/2), ...
        Ответить
            • пойду, почитаю стандарт
              вполне может быть что я обосрался
              Ответить
              • Это было бы UB, если бы правая часть меняла foo.
                Ответить
                • я думал грешным делом что апиратор "+=" меняет свой левый операнд
                  Ответить
                • все, я поня

                  вычисление левой и правой части может случиться в любом прядке

                  грубо говоря

                  FOO() + BAR() может сначала вычислить FOO или сначала вычислить BAR

                  А тут такой проблеиы нет
                  Ответить
  • Охбля, когда же вы наконец поймёте, что BCB нельзя сравнивать с MSVC и предьявлять аналогичные требования. Это, блять, БИЛДЕР. Он даже форму распаковывает из ресурсов - о какой оптимизации может идти речь? Зато, в отличие от VC, можно наваять прогу быстро и без лишнего гемора - здесь CB полностью оправдывает себя.
    Ответить
    • Послушай, зачем ты рассуждаешь о том, в чем ничерта не смыслишь?
      Ответить
      • Задай этот вопрос себе.
        Впредь прошу обходить меня стороной; не люблю пускаться в долгие дискуссии с людьми, чья компетентность вызывает у меня сомнения:

        http://www.govnokod.ru/21911#comment363772
        Ответить
        • Всё понятно.
          Ты ничего не умеешь кроме билдера, и потому априори считаешь все остальные технологи говном.
          Ну да, это конечно же проще чем признать что ты ничего не умеешь
          Ответить
          • Опять - баян... Пойми: уметь и испытывать необходимость - не одно и то же.

            @и потому априори считаешь все остальные технологи говном.
            Я так не считаю. Но, беря во внимание тот факт, что продукты Борланд актуальны в 2016 году - это говорит само за себя.
            Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8