"Оптимизация для PENTIUM процессора" - читать интересную книгу автора10.4 Если инструкции чтения/модифицирования спаривается с инструкцией чтения/модифицирования или чтения/модифицирования/записи, то спаривание не полное. Количество используемых тактов приведено в этой таблице: | Первая инструкция | MOV или чтение/ чтение/модификация/ Вторая инструкция | межрегистровая модификация запись ----------------------|---------------------------------------------- MOV или межрегистровая| 1 2 3 чтение/модификация | 2 2 4 чтение/мод./запись | 3 3 5 ----------------------|----------------------------------------------- Примеры: ADD [mem1], EAX / ADD EBX, [mem2] ; 4 такта ADD EBX, [mem2] / ADD [mem1], EAX ; 3 такта 10.5 Когда спаренные инструкции используют дополнительные такты, из-за промахов кеша, рассогласования, или не правильного предсказания перехода, они будут выполняться больше времени, чем каждая инструкция в отдельности, но потрачено тактов все равно будет меньше, чем если бы они исполнялись отдельно. Что бы избежать не полного спаривания, вы должны следить какие инструкции попадают в U-трубу, а какие в V-трубу. Вы можете просмотреть ваш код, что бы обнаружить неспариваемые инструкции, инструкции спариваемые только в одной трубе, или инструкции, которые не могут спариться по правилам, определенным в разделе 8. От неполного спаривание можно избавиться просто поменяв инструкции местами. Например: L1: MOV EAX,[ESI] MOV EBX,[ESI] INC ECX Здесь инструкции MOV образуют не полную пару, поскольку получают доступ к одной и той же позиции памяти, последовательность исполнится за 3 такта. Мы может улучшить код простым переставлением инструкции INC ECX, что бы она составила пару с одной из инструкций MOV. L2: MOV EAX,OFFSET [A] XOR EBX,EBX INC EBX MOV ECX,[EAX] JMP L1 |
|
|