Оптимизация кода

Прежде всего я хочу сказать, что я не являюсь профессиональным переводчиком и ранее не занимался переводами технической документации. Возможно, где то в тексте будут встречаться литературные огрехи, но в любом случае - документация на английском языке из любопытной вещи превратилась во вполне...
Отладка ассемблерного кода может быть весьма тяжелой и досаждающей, как вы, наверное, уже сами убедились. Я рекомендую начинать писать ту часть кода, которую вы хотите оптимизировать, как подпрограмму на языке высокого уровня...
Pentium изначально разрабатывался для 32 битного кода и 16 битный код исполняется на нем медленнее. Тот же эффект получается при сегментировании кода и данных, желательно использовать flat-модель памяти, современные операционные системы поддерживают этот режим (т.н...
Все данные в RAM должны быть выравнены на адрес, делящийся на 2, 4, или 8, согласно следующей схеме: размер операнда выравнивание ---------------------------------- 1 (byte) 1 2 (word) 2 (или адрес MOD 4 >< 3. другие процед. треб. выр...
Чип Pentium имеет 8k кеша (L1) для кода и 8k для данных. Данные на L1 могут быть прочитаны или записаны за 1 такт, а в случае промаха кеша это может стоить многих тактов. По этому очень важно, что бы вы поняли как работает кеш и могли использовать его с максимальной эффективностью...
Требуется один такт, что бы рассчитать адрес, требующийся инструкции для доступа к памяти. Обычно это делается отдельно, в конвеере, пока выполнятеся предыдущая инструкция или пара инструкций...
Pentuim снабжен двумя конвеерами для исполнения инструкций, называющиеся U-труба и V-труба. при определенных условиях можно выполнить две инструкции одновременно - одну в U-трубе, а другую в V-трубе. Это может практически удвоить скорость...
Обычно при первом исполнении некоторой части кода времени тратиться больше, чем при ее повторном исполнении. И причины этого следующие: 9.1 При загрузке кода из RAM в кеш требуется больше времени, чем на исполнение этого кода. 9.2 Декодирование кода - тонкий момент...
Есть ситуации, когда две спаривающиеся инструкции не выполняются одновременно, а с небольшим перекрытием. Однако они все еще составляют пару, поскольку одна инструкция выполнятеся в U-трубе, а вторая в V-трубе...
Вы можете заменять инструкции чтения/модифицирования и чтения/модифицирования/записи, что бы достигнуть спаривания. Пример: ADD [mem1],EAX / ADD [mem2],EBX ; 5 тактов Этот код можно заменить на последовательность, выполняющуюся за 3 такта: MOV ECX,[mem1] / MOV EDX,[mem2] / ADD ECX,EAX / ADD...
Яндекс цитирования