"Оптимизация для PENTIUM процессора" - читать интересную книгу автораплавающей точкой, что вы используете приемлимое округление)
Очевидно, что вы должны пытаться минимизировать количество делений. Деления чисел с плавающей точкой на константу должно заменяться умножением на обратную величину. Но есть много других ситуаций, когда вы можете уменьшить количество делений. Например: if (A/B > C)... можно представить как if (A > B*C)... тогда B положительный, иначе - отрицательный. A/B + C/D можно переписать как (A*D + C*B) / (B*D) Если вы используете целочисленное деление, то вы должны знать, что округление ошибок может измениться, когда вы перепишете формулы. 17.10 WAIT ---------- Вы часто можете увеличить скорость, опуская эту инструкцию. У инструкции WAIT есть три функции: а. Процессор 8087 требовал WAIT перед _любой_ инструкцией с плавающей точкой. б. WAIT используется для координации доступа к памяти после инструкции с плавающей точкой и между целочисленной инструкцией. Примеры: б.1. FISTP [mem32] MOV EAX,[mem32] ; читаем результат его работы б.2. FILD [mem32] WAIT ; ждем сопроцессор, что бы прочитать значение... MOV [mem32],EAX ; и используем его б.3. FLD DWORD PTR [ESP] WAIT ; для получения аппаратного прерывания... ADD ESP,4 ; изменяем значение стека до его чтения в. WAIT, иногда, используется для проверки исключений. Она с генерирует прерывание, если оно разрешено в соответствующем битом в слове управления сопроцессором. Относительно а: Эта функция никогда не нужна в любом процессоре, более поздним, чем 8087. Если вы не хотите, что бы ваш код был совместим с 8087, то вы должны указать вашему ассемблеру не помещать эти инструкции автоматически, выбрав более поздний процессор. Относительно б: Инструкция WAIT, координирующая доступ к памяти требуется на 8087 и 80287 процессорах. Суперскалярный процессор Pentium имеет специальную схему, обнаруживающую подобные ситуации и вам не требуется помещать данную инструкцию, |
|
|