"Оптимизация для PENTIUM процессора" - читать интересную книгу автора MOV [RESULTLIST][EDX],EAX ; сохраняем результат в таблице
ADD EDX,TYPE RESULTLIST ; увеличиваем счетчик MOV [COUNTER],EDX ; сохраняем счетчик таймера CMP EDX,ITER * (TYPE RESULTLIST) JB TESTLOOP ; повторяем итерацию ; включите сюда код, для чтения результатов из таблицы RESULTLIST Инструкция "заполнитель" устанавливается до и после критических частей кода. Не спариваемая инструкция CLD включена, для того, что бы убедиться, что спаривание и прочие эффекты идут как задумывалось. Восемь инструкций NOP включены для защиты от декодирования префиксов и что бы тестовый код был свободен от теней декодировки других инструкций. Однобайтные инструкции включены здесь для сохранения условий спаривания. Инструкция CLC после тестируемого кода включена для оттенения декодирования префикса 0FH инструкции RDTSC, осовбождая тест от возможного затеняющего эффекта. На PentiumPro вы можете использовать инструкцию CPUID до и после каждого RDTSC, для того, что бы предотвратить параллельное исполнение вашего кода с чем-нибудь еще. Декодирование CPUID на Pentium без MMX, из-за префикса 0FH, но на него не распространяется затеняющий эффект, из-за того, что она выполняется сериями. Инструкция RDTSC не может выполняться в режиме виртуального 8086, так если вы запускаете эту программу под DOS вы должны закомментировать EMM386 (или под Windows. У Pentium процессоров есть специальные счетчики монитора производительности, с помощью которых вы можете просчитать такие вещи, как промахи кеша, рассогласование, остановки AGI, и т.д. Подробное руководство, как пользоваться этими счетчиками, не описано в этом руководстве, и может быть найдено где-нибудь еще. 23. СООБРАЖЕНИЯ О ДРУГИХ МИКРОПРОЦЕССОРАХ ========================================= Большинство оптимизаций, описанных в этом документе может иметь очень маленькую, а может и вообще отрицательную, эффективность на других, не-Intel микропроцессорах, но о некоторых проблемах лучше быть осведомленным. Использование полного регистра, после записи в его часть вызовет серьезные задержки на 80486 и небольшие задержки на PentiumPro. Например: MOV AL,[EBX] / MOV ECX,EAX На PentiumPro может быть анулированно обнулением полного регистра перед записью: XOR EAX,EAX / MOV AL,[EBX] / MOV ECX,EAX или используя MOVZX EAX,BYTE PTR [EBX] При планировании кода с плавающей точкой на Pentium, обычно используется |
|
|