"Оптимизация для PENTIUM процессора" - читать интересную книгу автораЕсли ваш цикл слишком большой и не помещается в кеш, то против вас сработают
9.1 и 9.2. Вы должны попытаться реорганизовать цикл, что бы он целиком помещался в кеш. Если у вас более 256 переходов и ветви в цикле, то против вас сработает 9.3 по полной программе. Равно как, если ваш цикл часто обращается к слишком большим структурам данных, то замедление скорости будет связано с многочисленными промахами кеша данных. 10. НЕПОЛНОЕ СПАРИВАНИЕ ======================= Есть ситуации, когда две спаривающиеся инструкции не выполняются одновременно, а с небольшим перекрытием. Однако они все еще составляют пару, поскольку одна инструкция выполнятеся в U-трубе, а вторая в V-трубе. Ни одна инструкция не может начать исполняться, пока не завершаться обе недоспарившиеся инструкции. Неполное спаривание произойдет в следующих случаях: 10.1 Если у вторых инструкций остановка AGI 10.2 Две инструкции не могут получить доступ к одному и тому-же двойному слову одновременно. Следующий пример подоразумевает, что ESI делиться на 4: MOV AL, [ESI] / MOV BL, [ESI+1] Два операнда в пределах одного и того-же DWORD, они не могут выполниться MOV AL, [ESI+3] / MOV BL, [ESI+4] Здесь два операнда находятся по разные границы DWORD, они спариваются и на выполнение пары требуется один такт. 10.3 Правило 10.2 распространяется на те данные у которых одинаковые 2-4 бит в адресах. (конфликт банков кеша) Для DWORD адресов это означает, что два адреса не должны делиться на 32. Примеры: MOV [ESI], EAX / MOV [ESI+32000], EBX ; неполное спаривание MOV [ESI], EAX / MOV [ESI+32004], EBX ; полное спаривание Спаренные инструкции, не обращающиеся к памяти выполняются за один такт. MOV инструкции, передающие данные в или из памяти, так же исполняются за такт, если данные находятся в кеше и правильно выравнены. Нет замедления при использовании комплексов режимов адресации, таких как например масштабирование индексных регистров. Спаренные инструкции, которые читают из памяти, делают расчеты и сохраняют результат в регистре флагов, будут исполняться 2 такта.(инструкции чтения/модифицирования). Спаренные инструкции, которые читают из памяти, делают расчеты и сохраняют результат в памяти, будут исполняться 3 такта. (инструкции чтения/модифицирования/записи). |
|
|