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

развёрнутый код (два блока а посередине условный выход)

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

Вы привели код по такой схеме:

  mov edx, eax
@next:
 
[БЛОК]
  add ecx, 8
  jg  @done
 
[БЛОК]
 
  add ecx, 8
  jle @next
 
  mov eax, edx
@done:

Если удалить второй блок, то код будет выглядеть примерно так:

@next:
  mov edx, eax
[БЛОК]
  add ecx, 8
  jle @next

При этом скорость не уменьшится, а даже увеличится, за счёт уменьшения числа ветвлений. Если код будет вызываться каждый раз с разным размером буфера, то мы уменьшаем вероятность "branch mispredition penalty", и упрощам код, что позволяет процессору легче спрогнозировать окончание цикла. Для простых циклов процессоры, такие как Skylake, c MacroOp fusion, прогнозирует его окончание удивительно хорошо.

Ответить

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <h1> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <pre>, <code>, <asm>, <c>, <cpp>, <delphi>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>, <mytext>. Beside the tag style "<foo>" it is also possible to use "[foo]".

Подробнее о форматировании

CAPTCHA
Ведите текст с изображения. (вводить еще раз после предпросмотра а то не добавится комментарий)
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.