Оптимизация для pentium процессора неполное спаривание


Содержание

Оптимизация для pentium процессора неполное спаривание

Оптимизация кода под процессоры семейства Intel x86 и Intel Pentium

Итак, предположим, что ваша программа готова, но скорость ее работы оставляет желать лучшего. Что же делать? Оптимизировать. Оптимизировать и еще раз оптимизировать (Известный теоретик) :).

Общие рекомендации для всех процессоров

Вообще, когда пишете трехмерное приложение, старайтесь все критичные по времени функции переводить на ассемблер (критичные по времени — значит все ;). Но если вдруг вы не можете переписать их на язык низкого уровня (не хватает времени, терпения, желания, умения и т.д.), то есть несколько видов оптимизации и на высокоуровневых языках.

Использование механизма предварительных вычислений

По возможности, не занимайтесь сложными вычислениями внутри циклов и внутри часто вызываемых функций. Следуйте принципу: никогда не вычисляй то, что можно вычислить заранее. Если внутри программы используются однотипные вычисления с одними и теми же параметрами, то эти вычисления лучше выполнить заранее, присвоив результаты каким-либо глобальным (лучше локальным ;) переменным.

Использование табличных данных

По возможности, результаты всех сложных вычислений лучше свести в таблицы. Например, если вы пользуетесь тригонометрическими функциями (синусами и косинусами, хотя некоторые умудряются и тангенсами ;), то лучше всего на начальном этапе результаты вычисления этих функций занести в таблицу, назвав ее sine или cosine. Результаты лучше хранить в формате с фиксированной точкой. Размер таблицы будет зависеть от дискретности значений углов в вашей программе, иными словами, от того, насколько плавно вы производите вращение/перемещение и иже с ними. Например, если дискретность углов равна 1/2 градуса, то таблица будет состоять из 720 значений (360*2), а размер ее можно определить как MAX_DEGREES:

#define MAX_DEGREES 720

В этом случае, при определении синуса угла ANGLE будем писать так:

Где Ang определяется как

#define Ang(a)((a) * MAX_DEGREES/360)

Инициализацию таблицы можно провести следующим образом:

В этой функции быстродействие не важно, так как она вызывается только один раз при старте программы. Следовательно никто не мешает использовать вам здесь арифметику с плавающей точкой.

Регистровые параметры и переменные

Как вы (наверно ;) знаете, регистровая передача параметров функции работает намного быстрее. Кроме того, если вызываемая функция написана на ассемблере, то использование в ней параметров, передача которых осуществляется через стек, связано с определенными трудностями, заключающимися в локализации этих переменных внутри стека (нахождение смещения внутри стека) с учетом того, что:

А) 4 байта вычитается из стека при вызове функции near

Б) сохранение регистров в стеке. На каждый 32-разрядный регистр из стека также вычитается 4 байта

Если вы работаете в C++ и используете классы, то желательно, чтобы количество передаваемых в функцию параметров не превышало 3, так как первым параметром в регистр EAX всегда передается указатель на класс. В обычном же случае в регистра EAX, EDX, EBX и ECX передаются соответственно первый, второй, третий и четвертый параметры функции.

Неявные операции умножения и деления на константу

При работе с арифметикой одними из самых медленных операций являются умножение и деление. Однако, если операции проводятся над константой, то в ряде случаев этот процесс можно значительно ускорить, использую команды неявного умножения и деления. Покажем, как это делается на простых примерах, где источником и приемником является регистр EAX (то же самое можно проделать с любым регистром общего назначения, причем регистр-источник совсем не должен совпадать с регистром-приемником). Итак

Умножение на 4: lea eax,[eax*4] или просто shl eax,2

Умножение на 5: lea eax,[eax+eax*4]

Умножение на 6: lea eax,[eax*2+eax*4]

Умножение на 7: lea edx,[eax+eax*2] lea eax,[edx=eax*4]

Умножение на 8: lea eax,[eax*8] или shl eax,3

С неявным делением дела обстоят не так благополучно, как с умножением. Делителем при неявном делении может быть число, в двоичном эквиваленте которого только одна единица (кратное двум) — 2, 4, 8, 16 и так далее:

Деление на 2: shr eax,1

Деление на 4: shr eax,2

Деление на 8: shr eax,3

Не пользуйтесь стандартными функциями

Надеюсь, вам не надо объяснять, почему при выводе точки на экран под Windows не надо использовать SetPixel, а под DOS прерывание 10H ;)

По возможности старайтесь не использовать стандартные функции работы с клавиатурой и видео. Также можно некоторые часто используемые библиотечные функции переписать на ассемблер, подогнав под свои нужды, и использовать их как макросы.

Оптимизация «прям в лоб» ;)

Как правило, большую часть времени программа крутится в каких-либо циклах. Поэтому очень актуально уменьшить время выполнения одной итерации. При этом если, например, время одной итерации вы уменьшили на 50 тактов процессорного времени, а всего итераций — 10000 (десять тысяч ;), то в цеом получите выигрыш 10000*50=500000 тактов работы процессора. Ускорение работы цикла можно получить таким образом: если количество итераций — константа, например — 10000, то внутри тела цикла можно последовательно написать, допустим, 5 итераций, а цикл сделать по 2000 (10000/5). Это БУДЕТ работать быстрее, так как ветвления в семействе процессоров х86 вызывают перегрузку очереди команд, что дает некоторое замедление.

Также при работе с циклами старайтесь пользоваться только регистровыми переменными и использовать механизмы предварительных вычислений.

Использование 32-разрядных регистров

При работе в 32-битном режиме процессора размер операнда по умолчанию для процессора равен 32 бита (4 байта). Если вы используете другой размер (например вместо EDX адресуете DX и DL), то код команды становится на один байт длиннее: перед непосредственно командой вставляется «префикс размера операнда» (0x66 или 0xfe). На быстродействие это сильно не влияет, но на результирующий размер кода может оказать непосредственное влияние.

Спаривание целочисленных команд для процессоров Intel Pentium (по материалам demo.design.3D pro gramming FAQ)

Один из основных приемов ускорения для Пентиумов. Дело в том, что у процессоров семейства Intel Pentium есть два конвейера обработки команд, U-pipe и V-pipe. В результате некоторые пары команд могут исполняться одновременно, а это практически удваивает скорость.

Следующие команды могут быть исполнены и в U-pipe и в V-pipe, и при этом могут быть спарены ( с какой-либо другой командой):

mov reg/mem, reg/mem/imm

lea, nop, inc, dec, add, sub, cmp, and, or, xor

некоторые формы test

Следующие команды могут быть исполнены только в U-pipe, но приэтом все-таки могут быть спарены:

shr, sar, shl, sal на заданное число

ror, rol, rcr, rcl на заданное число

Следующие команды могут быть исполнены в любом конвейере, но спарены могут быть только в V-pipe:

near call (близкий вызов)

short/near jump (короткий/близкий переход)

short/near conditional jump (короткий/близкий условный переход)

Все остальные целочисленные команды могут быть спарены только в U-pipe или не могут быть спарены вообще.

Две последовательно идущих команды будут спарены в случае выполнения всех нижеследующих условий. Если хотя бы одно из условий не выполняется, то исполняется только первая команда, вторая (и, возможно, следующая за ней) команда будет исполнена лишь в следующем такте. Вот условия спаривания:

1. Первая команда может быть исполнена и спарена в U-pipe, вторая, соответственно, в V-pipe.

2. Если первая команда записывает что-то в регистр, то вторая команда не может производить чтение/запись из регистра. Причем, в этом условии части регистров считаются за весь регистр (то есть, запись в al/ah расценивается как запись в eax , а запись в cf — как запись в flags ). Пример:

mov eax,1234h / mov ebx,eax — НЕ будут спарены

mov eax,1234h / mov ebx,1234h — будут спарены

inc eax / mov ecx,eax — НЕ будут спарены

mov ecx,eax / inc ecx — будут спарены

mov al,bl / mov ah,0 — НЕ будут спарены

3. Две команды, записывающие что-то в регистр флагов, могут быть спарены, не смотря на условие 2:

shr ebx,4 / inc ebx — будут спарены

4. Команда, записывающая что-то в регистр флагов, может быть спарена с условным переходом, не смотря на условие 2:

cmp eax,2 / ja @@label_bigger — будут спарены

5. Следующие пары команд могут спариваться не смотря на то, что обе команды изменяют esp:

push + push, push + call, pop + pop

6. Существуют ограничения на исполнение команд с префиксом. Префиксы возникают в таких случаях:

-команда, адресующаяся не к сегменту по умолчанию, имеет префикс сегмента (примеры: mov eax,es:[ebx]; mov eax,ds:[ebp])

-команда, работающая с 16-битными операндами в 32-битном режиме или с 32-битными операндами в 16-битном режиме, имеет префикс разрядности операнда (примеры: mov ax,1234 в защищенном режиме; mov ax,word ptr [variable] в защищенном режиме; xor eax,eax в реальном режиме)

-команды, использующая 32-битную адресацию в 16-битном режиме, имеет префикс разрядности адреса (пример: mov ax,[ebx] в реальном режиме)

rep, lock — префиксы (пример: rep stosd)

-многие команды, которых не было на 8086, имеют двухбайтовый код команды, где первый байт равен 0Fh . На процессоре Pentium без MMX этот байт считается префиксом. Наиболее часто встречающиеся команды с префиксом 0Fh: movzx, movsx, push/pop fs/gs, lfs/lgs/lss, setXX, bt/btc/btr/bts/bsf/bsr/shld/shrd, imul с двумя операндами и без операнда-числа (immediate).

На процессоре Pentium без MMX команда с префиксом может исполняться только в U-pipe, исключение — близкие переходы по условию ( conditional near jumps ). На процессоре Pentium с MMX команды с префиксами 0Fh и размера операнда или адреса может исполняться в любом конвейере; но команды с префиксами сегмента, rep или lock (повторения или блокировки шины) могут исполняться только в U-pipe.

7. Команда, в которой одновременно участвует смещение (displacement) и заданное число (immediate) не может быть спарена на процессоре Pentium без MMX и может быть выполнена и спарена только в U-pipe на процессоре Pentium с MMX. Вот примеры:

mov byte ptr ds:[1000],0 ; НЕ спаривается ни с чем

mov byte ptr [ebx+8],1 ; НЕ спаривается ни с чем

mov byte ptr [ebx],1 ; спаривается в U-pipe

mov byte ptr [ebx+8],al ; спаривается в U-pipe

Спаривающаяся команда, которая читает из памяти, считает и записывает результат в регистр или в регистр флагов занимает 2 такта. Спаривающаяся команда, которая читает из памяти, считает и записывает результат обратно в память занимает 3 такта. Примеры таких команд:

add eax,[ebx] ; 2 такта

add [ebx],eax ; 3 такта

Существует также так называемое неполное спаривание (imperfect pairing), когда обе команды выполняются в разных конвейерах, но НЕ одновременно (возможно, частично перекрываясь по времени исполнения), а следующие за ними команды не могут начать исполнение, пока обе команды не закончатся. Такое случается в следующих случаях:

1. Вторая команда вызывает AGI (address generation interlock, блокировка генерирования адреса). Это происходит, если адрес, используемый во второй команде зависит от регистров, измененных в первой команде. Примеры:

add ebx,4 / mov eax,[ebx] ; AGI

mov eax,[ebx+4] / add ebx,4 ; нормально спаривается

add esp,4 / pop esi ; AGI (pop использует esp)

inc esi / lea eax,[ebx+4*esi] ; AGI

2. Две команды одновременно обращаются к одному и тому же двойному слову памяти. Примеры (подразумевается, что esi делится на 4):

mov al,[esi] / mov bl,[esi+1] ; неполное спаривание

mov al,[esi+3] / mov bl,[esi+4] ; нормальное спаривание

3. Две команды одновременно обращаются к адресам, в которых одинаковы биты 2-4 (это вызывает конфликт кэш-банков). Для dword-адресов это значит, что разница между двумя адресами делится на 32. Пример:

mov eax,[esi] / mov ebx,[esi+32000] ; неполное спаривание

mov eax,[esi] / mov ebx,[esi+32004] ; нормальное спаривание

4. Первая команда производит чтение, подсчет и запись одновременно; вторая — чтение и изменение; в этом случае число тактов, требующееся для выполнения пары команд, можно рассчитать по следующей таблице:

Как увеличить производительность процессора за 5 минут


Здравствуйте дорогие читатели блога. Сейчас четырехядерные процессоры стоят наверное у каждого второго. Конечно если раньше два ядра было хорошо, то сегодня 4 ядра в системе это вообще отлично.

Только вот чем больше ядер в процессоре, тем хуже организована его работа с задачами, которые мы на компьютере выполняем а значит оптимизация процессора оставляет желать лучшего.

В основном так происходит от того, что не все программы хорошо заточены под многоядерные процессоры, то есть в некоторых приложения, программах и играх основная производительная мощь вашего процессора может просто не быть задействована и находится в режиме простоя.

Думаю такое положение вещей мало кого устраивает, особенно когда требовательная игра или программа тормозит на мощном четырехядернике.

Сегодня мы поговорим о эффективной оптимизации процессора при помощи простенькой, но полезной программе CPU Control .

Чтобы оптимизировать процессор через CPU Control , нам не придется его разгонять как мы это делали в статье — как разогнать процессор . Кстати, рекомендую к прочтению.

Скачиваем программу CPU Control ( ссылка ) и запускаем её. Программа очень простенькая, бесплатная и на русском языке.

После установки у вас появится ярлычок, запускаем программу и видим такое окошко.

Приступаем к оптимизации процессора с CPU Control . По умолчанию программа находится в выключенном состоянии. Для начала заходим в настройки и выбираем русский язык.

Далее выбираем второй пункт оптимизации процессора CPU Control — ручной .

Чтобы выбрать ядро процессора для определенной задачи, нажимаем правой кнопкой мыши по процессу и выбираем одно из ядер процессора.

Также, можно выделить сразу несколько процессов для одного ядра или один процесс для нескольких ядер.

Второе (третье и четвертое) ядро настраиваем для всех остальных процессов.

Если игра или какое-то приложение тормозит или производительности явно не хватает.

Попробуйте самостоятельно отдать на обработку все процессы кроме того которое тормозит на обработку четвертому или второму ядру. А все остальные ядра процессора пусть займутся одной вашей задачей.

Если копаться и разбираться в настройках желания нет, можно просто выбрать режим авто и наблюдать прирост производительности.

Оптимизация процессора с CPU Control это жизненно необходимая манипуляция для всех многоядерных компьютеров, особенно четырехядерных. Еще бы, ведь прирост производительности благодаря оптимизации процессора с CPU Control может достигать в полтора раза. На двухядерных компьютерах прирост также будет заметный но, возможно, меньшим чем с 4-мя ядрами.

В случае с одноядерными процессорами CPU Control ничего не сможет сделать, так как программа рассчитана под оптимизацию как минимум двух ядер процессора.

Ваш компьютер укомплектован одноядерным процессором? Тогда рекомендую вам ознакомится с мощной статьей — 7 способов ускорения компьютера . Проделав 7 несложных шагов вы и без CPU Control сделаете работу за вашим компьютером удобней и быстрей ��

Теперь вы знаете как оптимизировать процессор с CPU Control и получить прирост производительности бесплатно, не более чем за 5 минут. Кстати чтобы максимально ускорить свой многоядерный компьютер, рекомендую эту статью . Таким образом вы сделаете работу вашего компьютера еще быстрее. Также не забудьте подписаться на обновления блога . Только так вы сможете узнать о новых статьях на блоге первыми. На этом у меня все. Я желаю вам улыбаться почаще и смотреть на мир позитивней ��

Илон Маск рекомендует:  Что такое код hw_api >insertdocument

«Оптимизация для PENTIUM процессора» — читать интересную книгу автора

ОПТИМИЗАЦИЯ ДЛЯ PENTIUM ПРОЦЕССОРА
**********************************
Права на распространение Ангера Фога, (c) 1996
Перевод Дмитрия Померанцева, (c) 1997 FTS Labs.

0. примечание переводчика
1. введение
2. литература
3. отладка и проверка
4. модель памяти
5. выравнивание
6. кеш
7. блокировка генерации адреса (AGI)
8. спаривание инструкций
9. исполнение кода в цикле
10. неполное спаривание
11. замена сложных инструкций на более простые
12. переходы и ветви
13. префиксы
14. уменьшение длины кода
15. планирование операций с плавающей точкой
16. оптимизация цикла
17. обзор специальных инструкций

18. целые числа вместо чисел с плавающей точкой
19. числа с плавающей точкой вместо целых чисел
20. список целочисленных инструкций
21. список инструкций с плавающей точкой
22. скоростные испытания
23. соображения о других микропроцессорах

0. ПРИМЕЧАНИЕ ПЕРЕВОДЧИКА
=========================
Прежде всего я хочу сказать, что я не являюсь профессиональным переводчиком
и ранее не занимался переводами технической документации. Возможно, где то
в тексте будут встречаться литературные огрехи, но в любом случае —
документация на английском языке из любопытной вещи превратилась во вполне
понятное руководство, пригодное к повседневной работе.

И так, прежде всего несколько неточностей — что бы не загромождать текст
фразами типа: «инструкции, оперирующие с числами с плавающей точкой», я
просто называю их «инструкции с плавающей точкой», справедливо пологая, что
от технического руководства не будут требовать литературных изысков. Подобная
ситуация наблюдается и с целыми числами. Надеюсь, что теперь вы правильно меня
поймете и подобные выражения в тексте не будут вызывать праведный гнев.

В остальном же я старался при переводе сохранить первоначальный смысл текста,
передать его вам без искажений. Пользуйтесь на здоровье.

Оптимизация процессора Intel

13.08.2015, 13:40

Температура процессора Intel i3 4170
Здравствуйте, не подскажите температура 45C для процессора нормальная. Просто при запуске данная.

Разгон процессора intel celeon
Здравствуйте! Я хотел бы разогнать свой проц! Есть ли возможность это сделать не открывая корпус.

Заявленная температура процессора от Intel
Вопрос такой у меня возник спонтанно, в связи с жалобами многих владельцев процессоров Intel 7й.

Топовые Intel процессора подешевели?
Ух. Смотрите парни, что сейчас творится на computeruniverse :) i7-8700k — 25.5 рубля. i9-9900k.

Температуры Процессора Intel P4 3.00 ггц
У меня Intel P4 3.00 ггц,presscot,s 478.Без нагрузки температура 47-50 градусов,а под нагрузкой(в.

Оптимизация работы процессора: утилита CPU Control

В данной публикации пойдет речь еще об одном стороннем инструменте оптимизации работы многоядерных процессоров – бесплатной программе CPU Control. «Еще» – потому, что автор уже касался этой темы, смотрите заметку об ICEAffinity . Детище немецкого разработчика Маттиаса Коча (Matthias Koch), русифицированная утилита CPU Control будет особенно интересна начинающим компьютерным пользователям из-за наличия многопрофильного авторежима оптимизации, но обо всем – по порядку.

/ опубликовано в IT-издании » Компьютерные Вести » № 6 2013 в рубрике «Software» /

» Зачем это надо & что я буду с этого иметь? «

Данный вопрос был затронут в озвученной статье, поэтому дефрагментирую сказанное до пары абзацев:

  • Некоторые приложения не поддерживают многоядерный режим, поэтому для корректной работы необходимо вручную выделить им отдельное процессорное ядро. Другой «проблемный» вариант – материнская плата асинхронно инициализирует ядра. В обоих случаях требуется оперативное вмешательство пользователя.
  • По умолчанию, Windows присваивает всем запускаемым процессам равный приоритет в пользовании процессорных мощностей. Что не совсем правильно в случае запуска ресурсоемких приложений, например, когда вашему любимому Call of Duty «мешает» антивирус вкупе с дюжиной другого «второстепенного» ПО. CPU Control поможет пропорционально разнести процессы по ядрам, что напрямую скажется на общей производительности системы.

Important!

Утилита поддерживает двух- и четырехъядерные процессоры, но, по отзывам, корректно работает и на 6–8 ядрах.

Оптимизируем

1. Для начала необходимо скачать утилиту например отсюда, из моего Каталога лучшего софта . Никаких «хитростей» в установке нет, поэтому последовательно жмем «Next» («Далее«) до полной инсталляции. Кстати, программа не «сорит» в реестре, т.е. портативна и носима на съемных накопителях.

2. После запуска первым делом кликаем на » Options » («Опции«) и русифицируем CPU Control через «Languages» («Языки«) → «Russion«. Далее, в соответствии со следующим скриншотом, ставим галочки напротив » Автозапуск с Windows «, » Минимизировать » и » 4 ядра » (для четырех и более ядер). Понятно, что если ЦП двухъядерный, активировать «4 ядра» без надобности.

3. Закрыв «Опции», в главном окне приложения видим 5 режимов контроля работы ЦП: » Авто «, » Ручной «, » CPU1 » (все процессы выполняются на 1-ом ядре), » CPU2 » (все процессы выполняются на 2-ом ядре) и » Отключено » (без оптимизации). Последние три режима нам не интересны, поэтому сосредоточимся на первых двух.

Для начинающих пользователей автор рекомендует просто выбрать режим « Авто » и, закрыв окно, проверить для будущих загрузок Windows, чтобы CPU Control был в списке автозагружаемых приложений ( ! ). Это легко сделать, например, через Revo Uninstaller любой версии, смотрите в панели меню «Инструменты» → «Менеджер автозапуска» (при необходимости добавить приложение кликаем апплет «Добавить«).

4. Для любителей «покопаться» эта простенькая утилита дает шанс «развернуться»: в авторежиме имеется 9 базовых профилей-вариаций распределения процессов по ядрам (скриншот ниже). При наличии времени и открытом на вкладке «Быстродействие» Диспетчере задач («Ctrl + Alt + Del» ), для мониторинга результатов, можно выбрать оптимальный профиль под свою систему.

5. Самые «продвинутые» пользователи , желающие добиться максимальных результатов в деле повышения производительности системы данным способом, наверняка заинтересуются режимом « Ручной «. В этом режиме вы самостоятельно распределяете процессы по ядрам или группам ядер. Все просто: выделяете процесс(-ы) и через правую клавишу мыши «вешаете» на нужное ядро или комбинацию ядер. Например, при выборе «CPU1» процесс будет «висеть» на первом ядре, при выборе «CPU3+4» – на третьем и четвертом ядрах и т.д.

Вот хороший вариант ранжирования для 4-ядерного ПК: системные процессы оставьте 1-ому ядру, самые ресурсоемкие приложения (типа Photoshop) «распылите» между всеми ядрами (вариант как на последнем скриншоте), а «середнячков» типа антивирусного сканера отдайте в руки комбинации на 2 ядра, скажем, «CPU3+4«. Диспетчер задач Windows поможет сделать правильный выбор. Для удобства мониторинга, при открытой в Диспетчере вкладке «Быстродействие«, проверьте, чтобы была активирована функция » По графику на каждый ЦП » (см. «Вид» → «Загрузка ЦП» → искомое «По графику на каждый ЦП«).

В общем, экспериментируйте и ваши усилия обязательно окупятся сторицей!

Как улучшить производительность процессора

Многие известные программы, такие как офисные инструменты, графические и видеоредакторы, среды разработки и даже браузеры с каждым обновлением потребляют все больше энергии. В итоге, компьютер, который раньше был быстрым и легко справлялся с любой задачей, начинает проявлять замедления в работе. Как улучшить производительность процессора , чтобы избавиться от тормозов, не покупая новый ПК, поможет этот материал.

Причины замедления процессора

Перед тем, как улучшить процессор компьютера , нужно выяснить, по каким причинам он стал медленным. В зависимости от результата диагностики и будет зависеть решение проблемы.

  • Устаревание железа . В связи с быстрым развитием софта, компьютерное железо не может одинаково хорошо справляться с поставленными задачами на протяжении многих лет. Выход новых, рассчитанных на более свежие комплектующие, версий привычных программ, приводит к тому, что «старичку» становится тяжелее. Этот только Windows не меняла 10 лет требований к процессору, а вот какой-нибудь Chrome, Photoshop, Office, AutoCad даже за 5 лет заметно «поправился». Компьютеры, на которых летает древняя версия программы, с последним ее выпуском могут уже не справиться.
  • Перегрев. Очень распространенная причина замедления компьютеров – повышение температур их компонентов свыше допустимой нормы. К примеру, если производитель указал для процессора критичным нагрев до 70°C, то при преодолении данной отметки ЦП сбросит частоту и/или начнет пропускать такты. Сделано это для того, чтобы он мог «расслабиться» и остыть. Для пользователя такое поведение процессора выглядит, как существенное замедление компьютера.
  • «Мусор» в системе. Активно используемая ОС Windows (особенно без антивируса) склонна накапливать при работе системный мусор. К нему относятся остатки удаленных программ и игр, лишние записи в реестре, оставленные ими же, ошибки реестра. Засорение системного раздела такими мелкими и бесполезными файлами тоже замедляет ПК, и со стороны кажется, что виновен именно процессор. А о вирусах и говорить нечего: черви «плодятся», забивая собой память и нагружая ЦП, а троянцы и шпионские программы постоянно отнимают время у процессора для своих «грязных делишек». Для пользователя все это тоже выглядит как замедление процессора.
  • Деградация процессора. При постоянном воздействии повышенных температур кремниевый кристалл процессора деградирует: у него нарушается целостность микроскопических транзисторов, теряются связи между ними. В итоге, в лучшем случае, он просто замедляется, а в худшем – приводит к внезапным выключениям, зависаниям и частым «синим экранам смерти».
  • Выход жесткого диска из строя. Такой компонент, как HDD (казалось бы, не связанный напрямую с ЦП) при деградации и выходе из строя приводит к жутким тормозам. На первый взгляд в голову даже не приходит мысль, что виновник – именно он. Ведь кажется, что замедлился процессор. В итоге ПК долго включается, открывает программы и файлы, «думает» при переключении задач и подвисает на некоторое время.

С чего начать перед тем, как улучшить работу процессора

Основные причины замедления процессора выяснены. Перед тем, как улучшить производительность процессора , остается выявить, какая из них беспокоит в конкретном случае.

Тест жесткого диска

Перед тем, как улучшить процессор , диагностику компьютера следует начать с проверки жесткого диска. Для этого существует простая и бесплатная программа Crystal Disk Info . Она отображает данные журнала SMART, регистрирующего все проблемы с жестким диском на аппаратном уровне. Если диск исправен – все пункты журнала будут подсвечены одним цветом, а в верхней части окошка появится надпись «Хорошо». При выявлении неполадок – проблемные пункты журнала будут выделены другим цветом, а надпись заявит «Тревога».

Не все ошибки критичны для жесткого диска: с некоторыми он может прослужить еще не один год. Но такие пункты, как «переназначенные сектора», «неисправимые ошибки», «нестабильные сектора», «события переназначения», «неисправимые ошибки секторов» с крупными значениями в поле RAW прямо свидетельствуют: HDD доживает свой век. «Ошибки чтения» могут указывать на то, что имеются проблемы с кабелем.

Если с жестким все хорошо, но тормоза есть – нужно переходить к следующему разделу. Если HDD плохой – его нужно сменить.

Проверка температур

Измерение температур компонентов компьютера позволит обнаружить перегрев. Для этого понадобится программа HWMonitor , которая проста и бесплатна. В ней нужно найти свой процессор и посмотреть значения для каждого ядра. В простое в норме должно быть не более 45 градусов для настольного ПК и 50-55 – для ноутбука. Если значение больше – нужно нагрузить компьютер какой-нибудь требовательной задачей (например, игрой, но можно использовать и специальный тест LinX ), а затем посмотреть на максимальное значение температуры. Для настольного ПК нежелательно свыше 65-70 градусов, для ноутбука – 70-75. Если выше – виной всему перегрев.

Если процессор не перегревается, но тормоза есть, следует переходить к следующему пункту. При выявлении перегрева – его требуется срочно устранить.

Проверка стабильности работы процессора

Выше упомянутый тест LinX позволяет протестировать процессор на предмет стабильности работы и наличия ошибок. Он нагружает ядра сложными математическими вычислениями (решение систем линейных уравнений) для максимального их прогрева. Если процессор имеет дефекты и работает нестабильно, при нормальных температурах – в вычисления закрадется ошибка и программа сообщит об этом, остановив тестирование.

При выявлении ошибок в условиях отсутствия перегрева нужно устранять проблему. Если же по итогам длительного (от получаса) теста ошибок нет, нагрев в пределах допустимого – нужно двигаться дальше.

Сканирование ПК на предмет вирусов

Чтобы быстро проверить ПК на предмет наличия вредоносных программ – подойдет программа Malwarebytes Anti-Malware . Ее пробная версия бесплатная и для разового сканирования вполне подходит. Можно перестраховаться и использовать несколько антивирусных программ. Следует помнить, что они могут конфликтовать, поэтому одновременно устанавливать несколько не стоит. Лучше проверить одной, а если результат не устроил – удалить ее и инсталлировать другой антивирус.

Улучшение работы процессора

После того, как тесты проведены, становится ясно, как улучшить процессор компьютера . В зависимости от того, на каком этапе диагностики возникли проблемы, их виновника нужно «наказать».

  • Если сломался жесткий диск – нужно купить новый HDD или SSD и установить его в компьютер.
  • При выявлении перегрева необходимо разобрать системный блок или корпус ноутбука, снять кулеры, пропылесосить их, нанести на чипы новую термопасту и вернуть охлаждение на место. Особенно осторожным надо быть перед тем, как улучшить процессор на ноутбуке (точнее, его охлаждение). Разобрать лэптоп неподготовленному пользователю сложно, если есть опасения сломать что-то – лучше довериться специалистам.
  • Деградация процессора, к сожалению, необратима. Можно попробовать прочистить охлаждение и сменить термопасту (иногда снижение температур возвращает к жизни слегка дефектные элементы ядра). Если это не помогает – нужен ремонт.
  • Вирусы лечатся с помощью той же программы, что и обнаруживаются. После сканирования любой антивирус отчитается о выявленных угрозах и предложит удалить их. Естественно, с ним нужно согласиться.

Как улучшить процессор, если ничего не помогает

Если жесткий диск исправен, перегрева уже нет, процессор цел, а вирусов нет, но ПК все равно тормозит – нужно действовать дальше. В первую очередь, следует установить бесплатную программу CCleaner , с ее помощью просканировать систему и удалить мусор, а затем – проанализировать и исправить ошибки реестра. Также рекомендуется посмотреть во вкладку «Сервис», пункт «Автозагрузка». Там отображается список программ, которые запускаются при старте Windows. Если их много (10 и больше), и их автостарт не требуется – желательно выключить лишние.

Если проблем нет ни на одном этапе, но производительности процессора не хватает – скорее всего, ЦП попросту морально устарел. Проблема решается только с помощью разгона, апгрейда процессора или замены ПК .

Разгон процессора компьютера

Разгоном называется процедура повышения тактовых частот процессора. Она позволяет реализовать скрытый потенциал процессора, заставив его работать быстрее. Но перед тем, как улучшить процессор компьютера методом разгона, следует помнить: никто не гарантирует успеха, все делается на свой страх и риск.

Осторожности при разгоне

Производитель не зря ограничил тактовую частоту ЦП значением, которое для него стало стандартным. Вероятность большого разгона невелика. Кроме того, значительное ускорение ядер приводит и к росту потребления энергии. Поэтому нужен хороший блок питания. А если кулер процессора «родной» — и его, может быть, придется заменить, так как стандартной системы охлаждения не хватит. Если эксплуатировать процессор с перегревом – он деградирует и может выйти из строя, это надо помнить. Именно по этим причинам разгон не гарантирует ни один производитель, а зачастую они еще и снимают с себя гарантийные обязательства.

Как разогнать процессор

Разгон процессора осуществляется из системного меню BIOS/UEFI материнской платы. Попасть в него можно на первых секундах включения компьютера, нажав Del, F1, F2 или другую кнопку (нужно смотреть в инструкции). У каждой модели меню свое, пункты отличаются, поэтому универсальной инструкции не существует. Разгон всегда производится путем повышения множителя процессора и/или частоты системной шины, но пункты для этого по названию отличаются.

Какие процессоры можно разогнать

Разгону поддаются не все процессоры. Его поддерживают современные модели Intel Core с буквой К в названии, а также AMD с обозначением Black. Из более старых разгонять можно Intel Core 2 Duo и родственные им модели, а также AMD Athlon и Phenom для сокетов AM2 и AM3. У последних можно также разблокировать ядра (двух-, трех- и четырехъядерные Athlon и Phenom некоторых серий). Но поддерживается не каждая материнская плата ПК , и не всегда разблокированные ядра будут работоспособными (не зря ведь их отключили).

Илон Маск рекомендует:  Что такое код asp adminserver

Таким образом, разгон процессора – это сложная процедура, которая требует подхода со знанием дела и умения находить информацию по разгону для конкретной платы и ЦП. Она подходит опытным пользователям, но для неподготовленных людей может только усугубить проблему.

Разгон процессора ноутбука

У ноутбуков в BIOS нет опций для разгона. Связанно это с тем, что система охлаждения у них подобрана именно под штатное тепловыделение. При его превышении (а разгон приводит к этому) кулер не справится и будет постоянный перегрев. Это может вывести систему из строя. Для разгона ноутбуков существуют программы, такие как SetFSB , SoftFSB и CPUFSB .

Перед тем, как улучшить процессор на ноутбуке с помощью программ, необходимо осознавать все риски. Повышая FSB (частоту системной шины), вы увеличиваете и нагрев компонентов. Поломка, вызванная разгоном, под гарантийное обслуживание не попадает.

Апгрейд

Если ни один способ улучшить производительность процессора не помог – остается только апгрейд. Замена ЦП на новый, более быстрый, позволит ускорить компьютер. К сожалению, улучшить процессор на ноутбуке практически нереально. В розничной продаже нет таких ЦП, а их цена в специализированных магазинах часто «кусается». Кроме того, у многих новых ноутбуков процессор вставляется не в сокет, а напрямую распаян на плате. Заменить его без дорогостоящего профессионального оборудования не получится.


У ПК с этим меньше проблем. Чтобы улучшить процессор – нужно сначала узнать модель своей системной платы и процессора (тот же HWMonitor позволяет сделать это). Затем следует перейти на сайт производителя материнской платы, найти свою модель и посмотреть список поддерживаемых процессоров. Из него нужно выбрать более быструю модель, чем используется сейчас, и заняться ее поиском в магазинах . Замена процессора производится путем снятия кулера, извлечения старого ЦП, установки нового, нанесения термопасты и установки системы охлаждения на место.

Оптимизация для pentium процессора неполное спаривание

10.1 Совершенное спаривание

У PPlain и PMMX есть два конвеера, выполняющих инструкции, которые называются U-конвеер и V-конвеер. В определенных условий можно выполнить две инструкции одновременно, одну в U-конвеере, а другую в V-конвеере. Это практически удваивает скорость. Поэтому имеет смысл перегруппировать ваши инструкции и сделать их спариваемыми.

Следующие инструкции могут находится в любом конвеере.

  • MOV регистр, память или уже заданного числа в регистр или память
  • PUSH регистр или число, POP регистр
  • LEA, NOP
  • INC, DEC, ADD, SUB, CMP, AND, OR, XOR,
  • и некоторые разновидности TEST (смотри главу 26.14)

Следующие инструкции спариваемы только в U-конвеере:

  • ADC, SBB
  • SHR, SAR, SHL, SAL с число в качестве аргумента
  • ROR, ROL, RCR, RCL с единицей в качестве аргумента

Следующие инструкции спариваемы только в V-конвеере:

  • ближний вызовой
  • короткий и ближний переход
  • короткий и ближний условный переход

Все другие целочисленные инструкции могут выполняться только в U-конвеере и не могут спариваться.

Две следующие друг за другом инструкции будут спариваться, если соблюденые следующие условия:

  • Первая инструкция спариваема в U-конвеере, а вторая — в V-конвеере.
  • Вторая инструкция не читает и не пишет из регистра, если пишет первая инструкция.

3. Неполные регистры считаются полными регистрами.

пишут в разные части одного и того же регистра, не спаривается.

4. Две инструкции, пишущие в разные части регистра флагов могут спариваться не смотря на правила 2 и 3.

5. Инструкция, которая пишет в регистр флагов может спариваться с условным переходом несмотря на правило 2.

6. Следующая комбинация инструкций может спариваться несмотря на тот факт, что обе изменяют указатель на стек:

7. Есть ограничения на спаривание инструкций с префиксами. Есть несколько типов префиксов:

  • у инструкций, обращающихся к сегменту, не являющемся сегментом по умолчанию, есть сегментный префикс.
  • у инструкций, использующих 16-ти битные данные в 32-ом режиме или 32-х битные данные в 16-битном режиме, есть префикс размера операнда.
  • у инструкций, использующих 32-х битную адресацию через регистры в 16-ти битном режиме, есть префикс размера адреса.
  • у повторяющихся есть префикс повторения.
  • у закрытых инструкций есть префикс LOCK.
  • у многих инструкций, которых не было на процессоре 8086 есть двухбайтный опкод, чей первый байт равен 0FH. Байт 0FH считается префиксом только на PPlain. Наиболее часто используемые инструкции с этим префиксом следующие: MOVZX, MOVSX, PUSH FS, POP FS, PUSH GS, POP GS, LFS, LGS, LSS, SETcc, BT, BTC, BTR, BTS, BSF, BSR, SHLD, SHRD, и IMUL с двумя операндами и без числового операнда.

На PPlain инструкция с префиксом может выполняться только в U-конвеере, кроме ближних условных переходов.

На PMMX инструкции с префиксами размера операнда, размера адреса или 0FH могут выполняться в любом конвеере, в то время как инструкции с префиксами сегмента, повторения или LOCK могут выполняться только в U-конвеере.

8. Инструкция, в которой используется одновременно адресация со смещение и числовые данные на PPlain не спариваются, на PMMX могут спариваться только в U-конвеере:

(Другая проблема, связанная с подобными инструкциями, выполняющимися на PMMX, заключается в том, что такие инструкции могут быть длинее семи байтов, а это приводит к невозможности раскодировки больше одной инструкции за такт, подробнее это объясняется в главе 12.)

9. Обе инструкции должны быть заранее загружены и раскодированы. Это объяснение в главе 8.

10. Есть специальные правила спаривания для инструкций MMX на PMMX:

  • MMX-сдвиг, инструкции упаковки или распаковки могут выполнять в любом конвеере, но не могут спариваться с другим MMX-сдвигом, инструкциями упаковки или распаковки.
  • MMX-инструкции умножения могут выполняться в любом конвеер, но не могут спариваться с другими MMX-инструкциями умножения. Они занимают 3 такта, и последние 2 такта могут перекрыть последующие инструкции, также как это делают инструкции плавающей запятой (смотри главу 24).
  • MMX-инструкция, обращающаяся к памяти или целочисленным регистрам может выполняться только в U-конвеер и не могут спариваться с не-MMX инструкцией.

10.2 Несовершенное спаривание

Бывают ситуации, когда две спаривающиеся инструкции не будут выполняться одновременно или будут частично рассинхронизированы во времени. Пока обе инструкции не выполняться (каждая в своем конвеере) ни одна другая инструкция не начнет выполняться.

Несовершенное спаривание возникает в следующих случаях:

  • Если вторая инструкция приводит к задержке AGU (глава 9).
  • Две инструкции не могут обращаться к одному и тому двойному слову в памяти одновременно:

Два операнда внутри одного и того же двойного слова, поэтому они не могут выполняться одновременно. Пара займет два такта для выполнения.

Эти два операнда находятся в разных двойных словах, поэтому они прекрасно спариваются и занимают всего один такт.

3. Правило 2 расширяет зону своего действия, если биты 2-4 обоих адресов одинаковы (конфликт банков кэша). Для адресов размеров в двойное слово это означает, что они не разность между обоими адресами не должна делиться на 32.

Спариваемые целочисленные инструкции, которые не обращаются к памяти, требуют один такт для выполнения, кроме неправильно предсказанных переходов. Инструкции MOV, читающие или пишущие в память также занимают один такт, если данные находятся в кэше и правильно выравненны. Нет потери в скорости при использовании сложных способов адресации, такие как смещение и масштабирование.

Спариваемая целочисленная инструкция, которая читает из памяти, делает какие-то вычисления, а затем сохраняет результат в регистрах или флагах, занимает 2 такта (инструкции чтения/модифицирования).

Спариваемая целочисленная инструкция, которая читает из памяти, делает какие-то вычисления, а затем записывает результат обратно в память, занимает 3 такта (инструкции чтения/модифицирования/записи).

4. Если инструкция чтения/модифицирования/записи спаривается с инструкцией чтения/модифицирования или чтения/модифицирования/записи, тогда они спарятся несовершенно.

Количество тактов, которые потребуются для выполнения такой пары, даны в следующей таблице:

B Когда две спаривающиеся инструкции требуют дополнительное время для выполнения из-за неоптимального использования кэша, невыровненности или неправильно предсказанного условного перехода, они будут выполнятся дольше, чем каждая инструкция, но меньше, чем сумма времени, требующаяся на выполнение каждой из них по отдельности.

6. Спариваемая инструкция плавающей запятой и следующая за ней FXCH повлекут несовершенное спаривание, если следующая инструкция не является инструкцией плавающей запятой.

Чтобы избежать несовершенного спаривания, вы должны знать, какие инструкции пойдут в U-конвеер, а какие — в V-конвеер. Вы можете выяснить это, просмотрев свой код и поискав инструкции, которые неспрариваются, или спариваются только в определенном конвеере, или не могут спариваться в силу одного из вышеизложенных правил.

Несовершенное спаривание можно зачастую избежать, реорганизовав свои инструкции.

Здесь две инструкции MOV формируют несовершенную пару, потому что обе обращаются к одной и той же области в памяти, поэтому последовательность займет 3 такта. Вы можете улучшить этот код, реорганизовав инструкции так, чтобы ‘INC ECX’ спаривалась с одной из инструкции MOV.

Пара ‘INC EBX / MOV ECX,[EAX]’ несовершенная, потому что следующая инструкция приводит к задержке AGI. Последовательность занимает 4 такта. Если вы вставите NOP или какую-нибудь другую инструкцию, чтобы ‘MOV ECX,[EAX]’ спаривался с ‘JMP L1’, последовательность займет только три такта.

Следующий пример выполняется в 16-ти битном режима, предполагается,что SP делится на 4:

Инструкции PUSH формируют две несовершенные пары, потому что оба операнда в каждой паре обращаются к одному и тому же слову в памяти. ‘PUSH BX’ могла бы совершенно спариться с PUSH CX (потому что они находятся по разные стороны от границы, отделяющей двойные слова друг от друга), но этого не происходит, потому что она уже спарена с PUSH AX. Поэтому последовательность занимает 5 тактов. Если вы вставите NOP или другую инструкцию, чтобы ‘PUSH BX’ спаривалась с ‘PUSH CX’, а ‘PUSH DX’ с ‘CALL FUNC’, последовательность займет только 3 такта. Другой путь разрешения данной проблемы — это убедиться, что SP не кратен четырем. Правда, узнать это в 16-ти битному режиме довольно сложно, поэтому лучший выход — использовать 32-х битный режим.

Как ускорить процессор, а точнее Windows под него — CPU Control

Как Вы поняли из заголовка, мы поговорим про то как ускорить процессор , а точнее говоря (просто некоторые неопытные пользователи называют системный блок так ;) ) компьютер и Windows .

Т.е, сегодня я решил обновить и дополнить одну из старых и неполных статей по оптимизации, причем обновить не просто, а вставив в неё часть материала одного из уроков нашего курса обучения ;)

Не смотря на то, что многоядерные процессоры (и уж, тем более, многопроцессорные компьютеры) давно вошли в нашу жизнь, далеко не все программы умеют корректно взаимодействовать с несколькими ядрами, а так же грамотно использовать и оптимизировать доступные системные ресурсы Windows и.. ускорить процессор.

Как ускорить процессор (компьютер) — теория

Уже давненько я столкнулся с интересной программой, которая позволяет управлять приоритетом использования ядер процессоров, т.е. фактически распределять нагрузку на то или иное ядро. О ней и пойдет речь в этой небольшой статье.

Вообще говоря, процессор является одним из ключевых, если не самых главных, компонентов, отвечающих за производительность в системе, посему имеет смысл корректно и правильно использовать его возможности.

Глобально, в этом направлении, с точки зрения программной оптимизации есть два пути:

  • В случае с многоядерными процессорами, — это распределение нагрузки по ядрам. Дело здесь в том, что изначально не все процессы могут использовать адекватно все ядра в системе (т.е нет поддержки многоядерности) или корректно занимать те из них, что не заняты обсчетом других приложений и нужд, а посему имеет смысл вручную (или автоматически) разносить приложения на отдельные ядра или группы ядер, для корректного распределения нагрузки и/или ушустрения работы;
  • В случае со всеми процессорами, т.е одноядерными в том числе, — это работа с приоритетами системы. Дело в том, что по умолчанию Windows присваивает всем запускаемым процессам нормальный приоритет, что ставит приложения в равные условия в плане получения процессорных мощностей;
  • Однако, согласитесь, что, скажем, 3D игра и обычный блокнот, – это немного разные приложения и, очевидно, что игре нужно больше ресурсов процессора в реальном времени, т.к находясь в трехмерном приложении Вы вряд ли взаимодействуете с этим самым блокнотом и он Вам не нужен до поры до времени (да особых мощностей процессора блокноту почти не надо, – там той программы то.. раз два и нету). Отсюда, вроде как логично вытекает, что приоритеты у разных приложений должны быть разные (особенно во времена многоядерности то), но на практике это далеко от реальности.

И в том и в другом случае, решить проблему с тем как ускорить процессор (вздохнул), а точнее компьютер и Windows , собственно, помогут программы для того предназначенные.

Про приоретизацию я уже немного говорил в соответствующей статье, а про распределение речь пойдет ниже.

Как ускорить процессор — вводная, скачиваем CPU Control

Что это за распределение нагрузки и как оно выглядит? Говоря простым языком, можно вручную, запустив программку, повесить все системные службы на просчитывание первым ядром, антивирус и фаерволл вторым, браузер и аську третьим и тд и тп.

Подобные манипуляции, бывает повышают производительность системы за счет более адекватного использования процессорных ядер, т.е. в некотором смысле получается мы можем ускорить процессор, т.е получается этакая расширенная насильная поддержка многоядерности.

В этом нам поможет такая программа, как CPU Control . К сожалению, оная несколько устарела и может поддерживать не все процессоры, но для решений 2-4 ядра подойдет вполне. С более многоядреными версиями не факт.

Так же, что печально, но хочется отметить, что имеется поддержка не всех версий процессоров, что, опять же, связано с давностью обновления программы, но, думаю, не мешает всё таки некоторым поэкспериментировать.

Собственно, программа полностью бесплатна, поддерживает русский язык, не требует установки (можно тягать на флешке) и предельно проста в управлении. Владельцам одноядерных процессоров вряд ли принесет какую-то пользу, если только одноядерный процессор не имеет в себе функцию разбиения физического ядра на два логических.

Скачать можно прямо с моего сайта, а именно отсюда. Установка не требуется, просто распакуйте программу.

Как ускорить процессор и компьютер с помощью настроек CPU Control

После запуска видим примерно такую картину:

Где сразу идем на вкладку “ Options ” и задаем галочками “ Автозапуск с Windows ”, “ Минимизировать ”, язык и ставим галочку 4 ядра, если у нас их, собственно, 4 или не ставим, если, собственно, их два.

Настройка CPU Control, чтобы еще сильнее ускорить процессор

Дальше есть несколько путей, а именно:

    • Ручной , т.е когда мы задаем для каждого процесса всё сами, т.е на каком ядре/ах он будет, что называется обрабатываться;
    • Авто , т.е, когда программа сама назначает распределение по ядрам, чтобы ускорить наш процессор;
    • CPU1 , т.е, когда приоритет отдается первому ядру;
    • CPU2 , т.е, когда приоритет отдается второму ядру;
    • И тд.

Последние два нас не интересуют, ибо идея передачи нагрузки куда-то в одно место мне не ясна. Мы как-никак занимаемся оптимизацией, а не наоборот :). Поэтому будем работать с первыми двумя.

Для начала пару слов про » Авто «. Это довольно удобный режим, когда нет особого желания заморачиваться с тонкой настройкой или знаний на эту самую настройку не хватает. Посему можно выбрать этот режим и один из 9 профилей для него, которые, на базе неких правил, распределяют приложения по ядрам.

Так можно получить неплохой прирост производительности без особых заморочек, особенно, если некоторое время повыбирать правильный профиль под Вашу текущую систему.

Второй вариант, как уже говорилось,- это режим «Ручной» . Он более сложен, т.к требует определенного понимания концепции работы системы, приложений и тп.

Перейдя в этот режим, Вы сможете сами распределять процессы по ядрам или группам ядер. Делается это путем выделения одного или нескольких процессов и последующим нажатием правой кнопки мышки. Здесь собственно, CPU и его номер — это номер ядра.

Т.е. если Вы хотите ускорить процессор и повесить процесс на 4 -ое ядро, то выбираете CPU4 , если на 1 -ое и 3 -тье, то CPU 1+3 , и тд. Думаю, что идея ясна. Теперь о том как лучше распределять.

Глобально, имеет смысл растаскивать процессы на группы, а ресурсоёмким приложением выделять все ядра сразу. Т.е, например, фаерволл и антивирус отдать на попечение 3+4 ядер, системные мелкие процессы, а так же небольшие программы, вроде аськи , Punto Switcher и прочую шушеру на 1-ое, игры-фотошоп-прочее-тяжелое на 1+2+3+4 .

Либо, как вариант, попробовать всё повесить на все и посмотреть, что будет.

Как посмотреть результаты ускорения и вообще изменения

Мониторить нагрузку на ядра можно в том же диспетчере задач.

Важно включить в нем мониторинг нагрузки на ядра, что делается по кнопке “ Вид ” — “ Вывод времени ядра ” и “ Вид ” — “ Загрузка ЦП ” — “ По графику на каждый ЦП ”.

В идеале таки делать всё это не в режиме простоя сразу после запуска компьютера, а в режиме загруженной системы, т.е при запущенных ресурсоёмких приложениях, вроде игр, фотошопов или что там у Вас кушает ресурсы.

К слову, вот на 4 -х ядрах даже в автоматическом режиме прирост производительности значительно ощутим, зато на двух почему-то даже в ручную не всегда удается достигнуть мощи.

В общем и целом здесь огромное поле для экспериментов, которое Вам, надеюсь, будет изучить, ибо у каждого своя система, набор программ и всё такое прочее. Поле, кстати, минное, ибо легко можно добиться обратного эффекта вместо оптимизации, но зато как интересно поковыряться :).

Попробуйте использовать разные профили в авторежиме или ручную настройку, дабы добиться максимальной производительности на Вашем компьютере.

Послесловие

В двух словах как-то так. Кто-то конечно скажет, что не стоит всем этим заморачиваться ради сколько-то процентного прироста и плавности работы, — Ваше право.

Я люблю возится с системой и доводить её скорость, удобство и всё такое прочее до новых высот, пусть и не всегда больш и х, но зато б о льших, т.е ускорять процессор хотя бы как-то.

Посмотрим, что получится у Вас. В общем, рекомендую хотя бы попробовать.

Оптимизация для pentium процессора неполное спаривание

Оптимизация кода под процессоры семейства Intel x86 и Intel Pentium

Итак, предположим, что ваша программа готова, но скорость ее работы оставляет желать лучшего. Что же делать? Оптимизировать. Оптимизировать и еще раз оптимизировать (Известный теоретик) :).

Общие рекомендации для всех процессоров


Вообще, когда пишете трехмерное приложение, старайтесь все критичные по времени функции переводить на ассемблер (критичные по времени — значит все ;). Но если вдруг вы не можете переписать их на язык низкого уровня (не хватает времени, терпения, желания, умения и т.д.), то есть несколько видов оптимизации и на высокоуровневых языках.

Использование механизма предварительных вычислений

По возможности, не занимайтесь сложными вычислениями внутри циклов и внутри часто вызываемых функций. Следуйте принципу: никогда не вычисляй то, что можно вычислить заранее. Если внутри программы используются однотипные вычисления с одними и теми же параметрами, то эти вычисления лучше выполнить заранее, присвоив результаты каким-либо глобальным (лучше локальным ;) переменным.

Использование табличных данных

По возможности, результаты всех сложных вычислений лучше свести в таблицы. Например, если вы пользуетесь тригонометрическими функциями (синусами и косинусами, хотя некоторые умудряются и тангенсами ;), то лучше всего на начальном этапе результаты вычисления этих функций занести в таблицу, назвав ее sine или cosine. Результаты лучше хранить в формате с фиксированной точкой. Размер таблицы будет зависеть от дискретности значений углов в вашей программе, иными словами, от того, насколько плавно вы производите вращение/перемещение и иже с ними. Например, если дискретность углов равна 1/2 градуса, то таблица будет состоять из 720 значений (360*2), а размер ее можно определить как MAX_DEGREES:

#define MAX_DEGREES 720

В этом случае, при определении синуса угла ANGLE будем писать так:

Где Ang определяется как

#define Ang(a)((a) * MAX_DEGREES/360)

Инициализацию таблицы можно провести следующим образом:

В этой функции быстродействие не важно, так как она вызывается только один раз при старте программы. Следовательно никто не мешает использовать вам здесь арифметику с плавающей точкой.

Регистровые параметры и переменные

Как вы (наверно ;) знаете, регистровая передача параметров функции работает намного быстрее. Кроме того, если вызываемая функция написана на ассемблере, то использование в ней параметров, передача которых осуществляется через стек, связано с определенными трудностями, заключающимися в локализации этих переменных внутри стека (нахождение смещения внутри стека) с учетом того, что:

А) 4 байта вычитается из стека при вызове функции near

Б) сохранение регистров в стеке. На каждый 32-разрядный регистр из стека также вычитается 4 байта

Если вы работаете в C++ и используете классы, то желательно, чтобы количество передаваемых в функцию параметров не превышало 3, так как первым параметром в регистр EAX всегда передается указатель на класс. В обычном же случае в регистра EAX, EDX, EBX и ECX передаются соответственно первый, второй, третий и четвертый параметры функции.

Неявные операции умножения и деления на константу

При работе с арифметикой одними из самых медленных операций являются умножение и деление. Однако, если операции проводятся над константой, то в ряде случаев этот процесс можно значительно ускорить, использую команды неявного умножения и деления. Покажем, как это делается на простых примерах, где источником и приемником является регистр EAX (то же самое можно проделать с любым регистром общего назначения, причем регистр-источник совсем не должен совпадать с регистром-приемником). Итак

Умножение на 4: lea eax,[eax*4] или просто shl eax,2

Умножение на 5: lea eax,[eax+eax*4]

Умножение на 6: lea eax,[eax*2+eax*4]

Умножение на 7: lea edx,[eax+eax*2] lea eax,[edx=eax*4]

Умножение на 8: lea eax,[eax*8] или shl eax,3

С неявным делением дела обстоят не так благополучно, как с умножением. Делителем при неявном делении может быть число, в двоичном эквиваленте которого только одна единица (кратное двум) — 2, 4, 8, 16 и так далее:

Деление на 2: shr eax,1

Деление на 4: shr eax,2

Деление на 8: shr eax,3

Не пользуйтесь стандартными функциями

Надеюсь, вам не надо объяснять, почему при выводе точки на экран под Windows не надо использовать SetPixel, а под DOS прерывание 10H ;)

По возможности старайтесь не использовать стандартные функции работы с клавиатурой и видео. Также можно некоторые часто используемые библиотечные функции переписать на ассемблер, подогнав под свои нужды, и использовать их как макросы.

Оптимизация «прям в лоб» ;)

Как правило, большую часть времени программа крутится в каких-либо циклах. Поэтому очень актуально уменьшить время выполнения одной итерации. При этом если, например, время одной итерации вы уменьшили на 50 тактов процессорного времени, а всего итераций — 10000 (десять тысяч ;), то в цеом получите выигрыш 10000*50=500000 тактов работы процессора. Ускорение работы цикла можно получить таким образом: если количество итераций — константа, например — 10000, то внутри тела цикла можно последовательно написать, допустим, 5 итераций, а цикл сделать по 2000 (10000/5). Это БУДЕТ работать быстрее, так как ветвления в семействе процессоров х86 вызывают перегрузку очереди команд, что дает некоторое замедление.

Также при работе с циклами старайтесь пользоваться только регистровыми переменными и использовать механизмы предварительных вычислений.

Использование 32-разрядных регистров

При работе в 32-битном режиме процессора размер операнда по умолчанию для процессора равен 32 бита (4 байта). Если вы используете другой размер (например вместо EDX адресуете DX и DL), то код команды становится на один байт длиннее: перед непосредственно командой вставляется «префикс размера операнда» (0x66 или 0xfe). На быстродействие это сильно не влияет, но на результирующий размер кода может оказать непосредственное влияние.

Спаривание целочисленных команд для процессоров Intel Pentium (по материалам demo.design.3D pro gramming FAQ)

Один из основных приемов ускорения для Пентиумов. Дело в том, что у процессоров семейства Intel Pentium есть два конвейера обработки команд, U-pipe и V-pipe. В результате некоторые пары команд могут исполняться одновременно, а это практически удваивает скорость.

Следующие команды могут быть исполнены и в U-pipe и в V-pipe, и при этом могут быть спарены ( с какой-либо другой командой):

mov reg/mem, reg/mem/imm

lea, nop, inc, dec, add, sub, cmp, and, or, xor

некоторые формы test

Следующие команды могут быть исполнены только в U-pipe, но приэтом все-таки могут быть спарены:

shr, sar, shl, sal на заданное число

ror, rol, rcr, rcl на заданное число

Следующие команды могут быть исполнены в любом конвейере, но спарены могут быть только в V-pipe:

near call (близкий вызов)

short/near jump (короткий/близкий переход)

short/near conditional jump (короткий/близкий условный переход)

Все остальные целочисленные команды могут быть спарены только в U-pipe или не могут быть спарены вообще.

Две последовательно идущих команды будут спарены в случае выполнения всех нижеследующих условий. Если хотя бы одно из условий не выполняется, то исполняется только первая команда, вторая (и, возможно, следующая за ней) команда будет исполнена лишь в следующем такте. Вот условия спаривания:

1. Первая команда может быть исполнена и спарена в U-pipe, вторая, соответственно, в V-pipe.

2. Если первая команда записывает что-то в регистр, то вторая команда не может производить чтение/запись из регистра. Причем, в этом условии части регистров считаются за весь регистр (то есть, запись в al/ah расценивается как запись в eax , а запись в cf — как запись в flags ). Пример:

mov eax,1234h / mov ebx,eax — НЕ будут спарены

mov eax,1234h / mov ebx,1234h — будут спарены

inc eax / mov ecx,eax — НЕ будут спарены

mov ecx,eax / inc ecx — будут спарены

mov al,bl / mov ah,0 — НЕ будут спарены

3. Две команды, записывающие что-то в регистр флагов, могут быть спарены, не смотря на условие 2:

shr ebx,4 / inc ebx — будут спарены

4. Команда, записывающая что-то в регистр флагов, может быть спарена с условным переходом, не смотря на условие 2:

cmp eax,2 / ja @@label_bigger — будут спарены

5. Следующие пары команд могут спариваться не смотря на то, что обе команды изменяют esp:

push + push, push + call, pop + pop

6. Существуют ограничения на исполнение команд с префиксом. Префиксы возникают в таких случаях:

-команда, адресующаяся не к сегменту по умолчанию, имеет префикс сегмента (примеры: mov eax,es:[ebx]; mov eax,ds:[ebp])

-команда, работающая с 16-битными операндами в 32-битном режиме или с 32-битными операндами в 16-битном режиме, имеет префикс разрядности операнда (примеры: mov ax,1234 в защищенном режиме; mov ax,word ptr [variable] в защищенном режиме; xor eax,eax в реальном режиме)

-команды, использующая 32-битную адресацию в 16-битном режиме, имеет префикс разрядности адреса (пример: mov ax,[ebx] в реальном режиме)

rep, lock — префиксы (пример: rep stosd)

-многие команды, которых не было на 8086, имеют двухбайтовый код команды, где первый байт равен 0Fh . На процессоре Pentium без MMX этот байт считается префиксом. Наиболее часто встречающиеся команды с префиксом 0Fh: movzx, movsx, push/pop fs/gs, lfs/lgs/lss, setXX, bt/btc/btr/bts/bsf/bsr/shld/shrd, imul с двумя операндами и без операнда-числа (immediate).

На процессоре Pentium без MMX команда с префиксом может исполняться только в U-pipe, исключение — близкие переходы по условию ( conditional near jumps ). На процессоре Pentium с MMX команды с префиксами 0Fh и размера операнда или адреса может исполняться в любом конвейере; но команды с префиксами сегмента, rep или lock (повторения или блокировки шины) могут исполняться только в U-pipe.

7. Команда, в которой одновременно участвует смещение (displacement) и заданное число (immediate) не может быть спарена на процессоре Pentium без MMX и может быть выполнена и спарена только в U-pipe на процессоре Pentium с MMX. Вот примеры:

mov byte ptr ds:[1000],0 ; НЕ спаривается ни с чем

mov byte ptr [ebx+8],1 ; НЕ спаривается ни с чем

mov byte ptr [ebx],1 ; спаривается в U-pipe

mov byte ptr [ebx+8],al ; спаривается в U-pipe

Спаривающаяся команда, которая читает из памяти, считает и записывает результат в регистр или в регистр флагов занимает 2 такта. Спаривающаяся команда, которая читает из памяти, считает и записывает результат обратно в память занимает 3 такта. Примеры таких команд:

add eax,[ebx] ; 2 такта

add [ebx],eax ; 3 такта

Существует также так называемое неполное спаривание (imperfect pairing), когда обе команды выполняются в разных конвейерах, но НЕ одновременно (возможно, частично перекрываясь по времени исполнения), а следующие за ними команды не могут начать исполнение, пока обе команды не закончатся. Такое случается в следующих случаях:

1. Вторая команда вызывает AGI (address generation interlock, блокировка генерирования адреса). Это происходит, если адрес, используемый во второй команде зависит от регистров, измененных в первой команде. Примеры:

add ebx,4 / mov eax,[ebx] ; AGI

mov eax,[ebx+4] / add ebx,4 ; нормально спаривается

add esp,4 / pop esi ; AGI (pop использует esp)

inc esi / lea eax,[ebx+4*esi] ; AGI

2. Две команды одновременно обращаются к одному и тому же двойному слову памяти. Примеры (подразумевается, что esi делится на 4):

mov al,[esi] / mov bl,[esi+1] ; неполное спаривание

mov al,[esi+3] / mov bl,[esi+4] ; нормальное спаривание

3. Две команды одновременно обращаются к адресам, в которых одинаковы биты 2-4 (это вызывает конфликт кэш-банков). Для dword-адресов это значит, что разница между двумя адресами делится на 32. Пример:

mov eax,[esi] / mov ebx,[esi+32000] ; неполное спаривание

mov eax,[esi] / mov ebx,[esi+32004] ; нормальное спаривание

4. Первая команда производит чтение, подсчет и запись одновременно; вторая — чтение и изменение; в этом случае число тактов, требующееся для выполнения пары команд, можно рассчитать по следующей таблице:

«Оптимизация для PENTIUM процессора» — читать интересную книгу автора

ОПТИМИЗАЦИЯ ДЛЯ PENTIUM ПРОЦЕССОРА
**********************************
Права на распространение Ангера Фога, (c) 1996
Перевод Дмитрия Померанцева, (c) 1997 FTS Labs.

0. примечание переводчика
1. введение
2. литература
3. отладка и проверка
4. модель памяти
5. выравнивание
6. кеш
7. блокировка генерации адреса (AGI)
8. спаривание инструкций
9. исполнение кода в цикле
10. неполное спаривание
11. замена сложных инструкций на более простые
12. переходы и ветви
13. префиксы
14. уменьшение длины кода
15. планирование операций с плавающей точкой
16. оптимизация цикла
17. обзор специальных инструкций

18. целые числа вместо чисел с плавающей точкой
19. числа с плавающей точкой вместо целых чисел
20. список целочисленных инструкций
21. список инструкций с плавающей точкой
22. скоростные испытания
23. соображения о других микропроцессорах

0. ПРИМЕЧАНИЕ ПЕРЕВОДЧИКА
=========================
Прежде всего я хочу сказать, что я не являюсь профессиональным переводчиком
и ранее не занимался переводами технической документации. Возможно, где то
в тексте будут встречаться литературные огрехи, но в любом случае —
документация на английском языке из любопытной вещи превратилась во вполне
понятное руководство, пригодное к повседневной работе.

И так, прежде всего несколько неточностей — что бы не загромождать текст
фразами типа: «инструкции, оперирующие с числами с плавающей точкой», я
просто называю их «инструкции с плавающей точкой», справедливо пологая, что
от технического руководства не будут требовать литературных изысков. Подобная
ситуация наблюдается и с целыми числами. Надеюсь, что теперь вы правильно меня
поймете и подобные выражения в тексте не будут вызывать праведный гнев.

В остальном же я старался при переводе сохранить первоначальный смысл текста,
передать его вам без искажений. Пользуйтесь на здоровье.

Илон Маск рекомендует:  Защита от отладчиков
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL