Почему мой ЦП не работает с максимальным потенциалом, даже если мое приложение (использующее ресурсы ЦП) отстает?

30

Почему мой ЦП никогда не достигает максимума, даже если мое приложение, которое потребляет 40% ЦП (но 30-40% ЦП все еще не работает), из-за задержки?

Означает ли это, что:

  1. Есть способ заставить процессор работать на 100%
  2. Процессоры изготавливаются таким образом, и единственное, что я могу сделать, это купить новое оборудование.
  3. Ограничение связано с приложением, и отставание не улучшится даже при улучшенном процессоре. (Если предположить, что приложение идеально, то я спрашиваю, работает ли программное обеспечение таким образом?)
  4. Что-то другое.
Нху Тай Сань Нгуен
источник
4
Я понимаю, к чему ведет OP, я презираю, как при запуске обновления для антивируса или Windows он полностью перегружает мою систему, максимизируя это одно ядро ​​... оставляя остальным что делать? Я сижу в течение 12 минут, пока не смогу вернуться к работе.
10
Любое приложение, которое использует максимум одного из нескольких общих ресурсов компьютера (ЦП, хранилище, память или сеть), может замедлить работу всей системы, несмотря на то, что оставшиеся общие ресурсы имеют неиспользованную емкость.
Я говорю Восстановить Монику
78
Я программирую в течение 25 лет. И я могу заверить вас - это не заговор. Редко можно найти приложения, в которых узким местом является центральный процессор, большую часть времени приложения ждут других вещей, таких как жесткий диск, оперативная память или сеть.
контанго
10
Предположим, вы выполняете некоторую вычислительную работу - выплачиваете налоги, скажем так. Если вы выполняете нулевую работу, ожидая получения налоговых форм по почте, то вы будете выполнять нулевую работу в течение долгого времени. Отстающие приложения часто плохо написаны; они блокируют поток пользовательского интерфейса при выполнении операций с высокой задержкой, таких как дисковые или сетевые операции ввода-вывода, которые не имеют никакого отношения к ЦП, поэтому ЦП не используется, а приложение не отвечает. Получение более быстрого процессора не помогает; это просто ускоряет блокировку операций с высокой задержкой .
Эрик Липперт
3
@TwistyImpersonator: Это хорошая аналогия для многопоточных программ с высокой конкуренцией. Иногда мы видим, что многопоточная программа будет работать медленнее на более быстром CPU, потому что CPU переводит больше потоков в заблокированное состояние быстрее, чем медленный CPU. Если бы завтра каждому водителю в Нью-Йорке давали в 10 раз быстрее, время в пути не улучшилось бы . Им станет хуже.
Эрик Липперт

Ответы:

94

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

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

Я говорю Восстановить Монику
источник
24
Из-за переключения вы увидите только распределенное использование, суммирующее использование одного ядра. По сути, приложение использует ровно одно ядро, но оно перемещается между ядрами, поэтому каждое из них составляет в среднем 1 / n.
Aganju
62
Я бы также сказал, что вполне возможно, что процессор не является узким местом.
16
Я смутно припоминаю, что Dwarf Fortress, как известно, ограничивает одно ядро ​​на 100%, поэтому он начал разбивать другие биты на второй поток, что привело к тому, что «основной» поток заблокировался на 100%, а «фоновый» поток колебался на 20-60%. На четырехъядерном ядре это ... 30-40%.
Mooing Duck
3
Не забудьте турбо-режим на процессорах. Taskmanager не учитывает это при расчете процента загрузки. На моем i5-4570S я часто вижу нагрузку около 30%. То есть одно ядро ​​(25%) с обычным турбонаддувом 2,9 ГГц до 3,4 ГГц. 25 * 3,4 / 2,9 - это почти 30%. Чем выше спред между нормальной и турбо частотой, тем выше.
Sunzi
7
@AytAyt - я бы пошел дальше и сказал, что это не просто возможно, это почти наверняка . Если приложение OP не выполняет чисто сжатие чисел (или использует спин-блокировки везде), на самом деле довольно сложно полностью загрузить процессор, даже с многопоточной программой. Любой дисковый или сетевой ввод / вывод будет оставлять циклы простоя, и, учитывая, что OP упоминает о «запаздывающем» приложении, кажется вероятным, что в игре есть какая-то сетевая связь.
17
49

Вы не указали свою ОС. Так что ответ будет обычным как.

Приложения могут быть ограничены по разным причинам. Узкое место может быть в:

  • Процессор
    • низкая скорость
    • однопоточные приложения (не могут использовать все ядра / потоки)
  • I / O
    • пропускная способность диска
    • задержка диска
    • пропускная способность сети
    • задержка сети
  • объем памяти
    • вместимость
    • throuthput
    • задержка
    • недостаточно кеша
    • местность (NUMA)
    • обменивать

И есть еще причины, которые не так часто встречаются.

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

Ярослав Кучера
источник
9
Кроме того: Видеокарта имеет отдельный графический процессор, ввод / вывод и память, любая из них также может быть проблемой.
Mooing Duck
2
@MooingDuck Верно, но это, как правило, будет проблемой, только если рассматриваемое приложение на самом деле использует графический процессор (то есть 3D-игру, приложение CUDA / OpenCL или что-то в этом
роде
13

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

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

Придерживаясь идеи теплового вопроса, вы также можете попробовать более качественную термопасту. Большинство белых процессоров CR @ P похоже на Yugo из термопасты. Я использую Arctic Silver, но есть вещи лучше, чем это, даже. Арктическое Серебро о Порше (используя автомобильную шкалу оценки), но есть варианты Феррари и суперкара там.

Процессоры имеют тенденцию замедляться при перегреве. Это физическая вещь, а также «самосохранение», запрограммированное во многих процессорах. Я не знаю, будет ли он отображать 100% в диспетчере задач или 40% (как вы видите), но это может привести к значительному замедлению, пока процессор пытается дать радиатор и вентилятор " наверстать."

Еще одна вещь, которая может замедлить ваш процессор - это графический процессор. Если вы используете интенсивные графические игры или утилиты (например, CAD), ваш графический процессор может сдерживать ваш процессор. Возможно, стоит взглянуть на лучшую видеокарту. Кроме того, использование неправильной правильной карты может сдерживать вас. Игровые карты (как правило) не предназначены для работы как с САПР, так и с картами рабочих станций, и карты рабочих станций (как правило) тоже не очень хорошо играют. Некоторые делают, но большинство нет.

Как отметил @Jaroslav Kucera, это может быть связано с диском. Удар HD (ы) много может замедлить вас вниз. Я обычно запускаю несколько дисков. Один предназначен для операционной системы, а другой - для программного обеспечения, файла подкачки Windows, личных файлов и т. Д. Помимо того, что вам не нужно сильно беспокоиться о резервном копировании личных данных в случае сбоя ОС, наличие нескольких жестких дисков значительно увеличивает рабочую нагрузку. Чтение и запись на один и тот же диск одновременно могут серьезно замедлить работу HD. Использование СХД может смягчить это, но не полностью. Фотошоп и программное обеспечение для редактирования видео, как известно, сильно бьют по HD. Чтение с одного HD с последующим выводом на 2 HD - это то, что нужно. Это также помогает жизни ваших HD. Я также хожу с активным охлаждением на моих HD. Я не убивал жесткий диск с тех пор, как на них положил вентилятор и радиатор +15 лет назад. Google их, они дешевая страховка.

Хотите верьте, хотите нет, но ваш блок питания тоже может вас тормозить. Если у вас недостаточно мощности (или ваш блок питания старый или дешевый, с переоценкой, китайский POS), у вас могут возникнуть проблемы с производительностью. Я видел из первых рук, что может сделать странная ОС, и что может сделать нестабильный блок питания. Вы ищете как напряжение, так и усилители, поэтому убедитесь, что все они соответствуют характеристикам блока питания, если вы идете по этому пути, а также убедитесь, что они соответствуют или превышают ваши потребности в электроэнергии. Если ваши компоненты имеют мощность 500 Вт, а вы даете им даже 475, это плохо. Я рекомендую удовлетворять ваши требования примерно на 20%, так как, когда ваш блок питания стареет (и падает мощность), а остальные компоненты стареют (и требуют небольшую мощность), вы не застряли, покупая новый блок питания так быстро.

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

И, AFAIK, нет никакого способа заставить ваш компьютер использовать 100% процессора. Процессор и ОС знают, что им нужно делать, и обычно хорошо справляются со своей работой. :-) Я не думаю, что кто-то еще нашел способ заставить процессор загружать его на 100%, когда вы считаете, что это нужно. По крайней мере, без добавления дополнительного мусора, чтобы процент «хорошо выглядел».

Когда вы видите 40%, а не целое число деление 100% (например, 25%, 33% или 50%), я чувствую, что это не единственная проблема с многопоточностью. Может быть, но это не то, куда уходит мой разум. +1 к @Twisty Impersonator за то, что поднял его прямо сейчас.

Удачи в попытках понять это! Я потратил несколько дней, пытаясь выяснить подобные вещи, но в итоге заменил большую часть мужества как «последнее средство».

computercarguy
источник
1
+1 за указание на возможность того, что приложение может зависнуть на перегруженном графическом процессоре.
Я говорю Восстановить Монику
6
Я забыл упомянуть, курение возле вашего компьютера - одна из худших вещей, которые вы можете сделать. Это оставляет неприятный, грубый и отвратительный (не могу не подчеркнуть это достаточно) апельсиновый липкий беспорядок, который не может быть убран. Пыль становится засохшей и ее невозможно очистить. Возможно, вам удастся снять его с помощью масляной ванны с автозапчастями или звуковой водяной бани, но я никогда не сталкивался с этой проблемой. Даже чистка корпуса - это тщетное усилие.
computercarguy
2
Просто с точки зрения разработчика, процессор будет делать все, что вы скажете. Если оно не достигло 100%, то это потому, что ваша программа ожидает, что произойдет что-то другое (дисковый ввод-вывод, сеть, ввод пользователя, системные сообщения и т. Д.). Если у вас есть что-то для процессора, он будет автоматически использовать 100% (при условии многопоточного приложения), чтобы выполнить то, что нужно вашей программе - вам не нужно «заставлять его» использовать 100% или разблокировать его или что-то еще.
JPhi1618
2
@ JPhi1618: Ты забыл тепло. Независимо от того, что вы скажете ему делать, если процессор перегревается, он будет работать на скорости, намного меньшей 100%.
Mooing Duck
9
@ JPhi1618 Процессоры обычно сокращаются путем масштабирования их частоты (разгон), поэтому вместо того, чтобы работать, скажем, вместо 3,0 ГГц, они работают на 2,0 ГГц. Таким образом, процессор с термическим управлением может по-прежнему сообщать о 100% нагрузке, так как каждый «рабочий слот» занят, просто меньше «рабочих слотов» доступно в единицу времени.
el.pescado
3

Это могут быть настройки энергосбережения в BIOS или операционной системе. Многие современные процессоры и материнские платы имеют настройки, позволяющие ЦПУ быть более экономичным при использовании электроэнергии (особенно это касается ноутбуков, которые хотят работать от батареи). Вы, вероятно, можете отключить такую ​​настройку, но убедитесь, что вы знаете, что делаете, поскольку рядом с настройкой обычно есть другие вещи, которые могут влиять на функциональность компьютера другими важными способами.

mathreadler
источник
2

Я регулярно использую 100% ресурсов при выполнении задач рендеринга и математики. Я проверю, что гиперпоточность достигнет высокого уровня 100%, а порядок инструкций имеет большое значение. Intel и AMD имеют большое количество оборудования, предназначенного для переупорядочения команд, чтобы заполнить как можно больше ядер выполнения. Если вы получаете 30% на современной машине, вы можете

  • Проверьте Temps - Intel и AMD оба разогнались, когда они нагреваются, и это показывает как заикания и всплески.
  • Не делать много с этим .... примеры:
    1. Просмотр веб-страниц
    2. Эл. адрес
    3. Самые простые игры
    4. Я почти гарантирую, что ваша проблема - одно или все из следующего, начиная с верхней части:
  • Получить SSD
  • Получить SSD
  • Загрузите свою ОС на твердотельный накопитель и перенесите обычные данные на традиционный мультибайтный диск. Windows требует больше доступа к своим локальным файлам, чем что-либо еще.
  • Боназай Бадди?
  • Держите все диски на емкости не менее 10%. NTFS - это файловая система с журналированием, и производительность снижается по мере заполнения диска.
  • Вам нужен диск / SSD NVMe для вашего диска ОС как можно скорее (да, я сказал это снова). Производительность поразительна, и она продолжается во второй части этого ... Крупный ритейлер продавал диски Samsung 961 NMVe 512 Гб за 300 долларов, что вполне достаточно для обычного использования.
  • Windows 10 тяжелая для графического процессора. Дешевая выделенная видеокарта может снять нагрузку как с памяти, так и с процессора. Вы по-прежнему можете использовать APU в сочетании с видеокартой, но сэкономите немного оперативной памяти, а VRAM обычно намного быстрее.
  • Процессоры с меньшим количеством ядер также связаны с памятью. Если вы посмотрите на i7s, все они работают с четырехканальной DDR в 4 банках. Чипы AMD Epyc будут 8-канальными DDR5 с 64 ядрами. Не помогает Наконец, и я не могу подчеркнуть это достаточно, выложите деньги на столько оперативной памяти, сколько займет ваша машина. У меня есть 32 ГБ, и я покупаю еще 32 в этом году. Windows делает нечто похожее на superfetch, немного новее, который сжимает память в ОЗУ, которая не используется, поэтому программы и данные могут быть просто разархивированы при необходимости. В качестве другого примера я использую виртуальную машину Linux для разработки, выделил 6/12 ядер и 16 ГБ оперативной памяти, и после первой загрузки с SSD она запускается через ~ 3 секунды. Процессоры в наши дни считаются очень дешевыми из-за таких оптимизаций ...

Все эти вещи кажутся излишними, пока я не застрял при компиляции файлового проекта 70 Кб или не увеличил масштаб гигантских необработанных файлов камеры до 17 "x26" x600 точек на дюйм при 16-битном цвете. Даже при 100% использовании ресурсы настолько излишни, что вы не получите замедления. Однажды вечером я понял, что у меня есть две виртуальные машины и Wolf 2, загруженные вместе с двумя IDE (я отвлекся, подаю в суд), и не заметил замедления. Это машина стоимостью ~ 1500 долларов, ничего особенного, и самая медленная, купленная за эти годы. Половина из них - одна из Radeon RX64, потому что моей видеокарте было 6 лет. Огромная разница в рендере и тому подобное. Обновление, скорее всего, позволит вам более эффективно использовать оборудование, чем предполагать, что 30% использования - это все, что вы получите.

Если бы я бросил жесткий диск 5400 об / мин в эту машину для ОС, он бы работал как полная чушь.

TL; DR звучит так, как будто вы сейчас связаны с процессором. Потратьте пару сотен как минимум на 256 ГБ SSD для ОС, 8 ГБ оперативной памяти и более низкую плату для геймеров, и компьютер прослужит долгие годы. Этот оставался в живых в течение 6 лет, прежде чем я наконец выполнил обновление процессора и Mobo, и я собирал весь пакет кросс-компиляторов примерно 25 раз в день на старом оборудовании.

Назовите меня излишним, но я не рекомендую 8 карт Теслы или что-то еще. :-) Делайте небольшие обновления, когда вы можете, и я думаю, что вы решите многие из этих проблем. Я сделал это несколько лет назад, добавив SSD к системе Q6600 и наблюдая за производительностью в три раза.

JimmyShinny
источник
1

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

Обычная вещь, которую упускают из виду, это физические ядра, а не «многопоточные». Гиперпоточность превосходит многие короткие задачи с узкими местами, кроме процессора. Для узко замкнутых задач с узкими местами в ЦП вы все равно ограничены количеством физических ядер, которое, как правило, вдвое меньше количества ядер с гиперпоточностью. В абсолютно худшем случае ваш диспетчер задач может показывать только 50% использования, потому что он подсчитывает гиперпоточные ядра на своих графиках, тогда как в действительности ваши физические ядра могут использоваться на 100%. В общем, вы бы показали больше, чем это, поскольку ваша операционная система сможет использовать гиперпоточность для других не связанных задач.


источник
Разве «правильная многопоточность» не будет означать наличие потока с работой для каждого логического ядра, а не для каждого физического ядра? Если вы выполняете жесткий цикл на каждом логическом ядре, диспетчер задач должен сообщать 100% с гиперпоточностью. AFAIK, «процент использования» в диспетчере задач основан на количестве времени, в течение которого рассматриваемый поток находился в состоянии выполнения и планировался на логическом ядре, а не обязательно на количестве времени, которое он фактически выполнял, скажем, что-то на ALU , ОС, вероятно, даже не знала бы об этом (только микрокод процессора).
reirab
1
«Обычный» машинный код использует только 2-3 из 6 или более портов команд на современных процессорах. Не говоря уже о всех остановках конвейера, вызванных ошибками ветвления и кэша. Гиперпоточность помогает заполнить эти пробелы. Это почти всегда выигрыш, чтобы использовать его. Некоторые типы кода не справляются с этим, например, кодирование / декодирование видео или математическая математика с высокой степенью оптимизации. Но это необычно.
Zan Lynx