Чому мій процесор не працює з максимальним потенціалом, навіть коли моя програма (яка використовує ресурси CPU) відстає?


30

Чому мій процесор ніколи не збільшується навіть тоді, коли моя програма, яка з'їдає 40% процесора (але 30 - 40% процесора все ще залишається в режимі очікування), будучи млявою?

Чи означає це:

  1. Є спосіб змусити процесор працювати на 100%
  2. ЦП виробляються саме так, і єдине, що я можу зробити - це придбати нове обладнання.
  3. Обмеження полягає в застосуванні, і відставання не покращиться навіть при кращому процесорі. (Якщо припустити, що програма ідеальна, я запитую, чи програмне забезпечення працює таким чином?)
  4. Щось ще.

4
Я розумію, на що потрапляє ОП, я зневажаю, як коли працює антивірусне чи вінне оновлення, воно повністю втрачає мою систему, максимізуючи це одне ядро ​​.... залишаючи решту з них робити що? Я закінчую сидіти 12 хвилин, поки не зможу повернутися до роботи.

10
Будь-яка програма, яка максимізує навіть один із кількох спільних ресурсів у комп'ютері (процесор, накопичувач, пам'ять або мережа), може зробити всю систему повільною, незважаючи на те, що решта спільних ресурсів не має невикористаної ємності.
Я кажу, відновіть Моніку

78
Я програмую вже 25 років. І можу вас запевнити - це не змова. Рідко можна зустріти програми, де процесор є вузьким місцем, більшість часу програми чекають на інші речі, такі як жорсткий диск, оперативна пам'ять або мережа.
Контанго

10
Припустимо, ви робите якусь обчислювальну роботу - робите податки, скажімо. Якщо ви робите нульову роботу, поки ви чекаєте надходження поштових форм на пошту, тоді ви будете робити нульову роботу довгий-довгий час. Легкі програми часто погано написані; вони блокують потік інтерфейсу користувача на операціях з високою затримкою, таких як дисковий або мережевий IO, які не мають нічого спільного з процесором, і тому процесор простоює, а додаток не відповідає. Отримати швидший процесор не допоможе; що швидше приведе вас до блокування операцій з високою затримкою .
Ерік Ліпперт

3
@TwistyImpersonator: Це хороша аналогія для багатопотокових програм з високим вмістом. Іноді ми бачимо, що багатопотокова програма працюватиме повільніше на більш швидкому процесорі, оскільки процесор отримує більше потоків у заблокованому стані швидше, ніж повільніший процесор. Якби завтра кожному водієві в Нью-Йорку було надано автомобіль на 10 разів швидше, час у дорогу не покращиться . Вони погіршаться.
Ерік Ліпперт

Відповіді:


94

Ви, ймовірно, використовуєте однопотокові програми, які можуть збільшити максимум одне ядро ​​CPU. Оскільки 100% одного ядра становить менше 100% від ємності багатоядерного процесора, загальне використання процесора не досягає 100%.

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


24
Через перемикання ви побачите лише розподілене використання, яке підсумовує використання одного ядра. В основному додаток використовує саме одне ядро, але воно стрибає між ядрами, тому кожне в середньому дорівнює 1 / n.
серпня 1717 року

62
Я б також сказав, що можливо, що процесор насправді не є вузьким місцем.

16
Я тумано згадую, що карликова фортеця, як відомо, зловмила одне ядро ​​на 100%, тому він почав відщеплювати інші шматочки до другої нитки, що призводить до того, що "основна" нитка заблокована на 100%, а "фонова" нитка зависла близько 20-60%. Що стосується чотирьохядерного ядра, це ... 30-40%.
Mooing Duck

3
Не забудьте режим Turbo на процесорах. Taskmanager не враховує це при обчисленні відсотка навантаження. На моєму i5-4570S я часто бачу навантаження близько 30%. Це одне ядро ​​(25%) з регулярними 2,9 ГГц з турбонаддувом до 3,4 ГГц. 25 * 3,4 / 2,9 - це майже 30%. З більшим розкидом між нормальною та турбо-частотою ми можемо вищити.
Sunzi

7
@AytAyt - Я б пішов на крок далі і сказав, що це не просто можливо, це майже певно . Якщо додаток OP не робить чисте читання чисельності (або використовує спін-блокування скрізь), насправді досить важко завантажувати процесор навіть з багатопотоковою програмою. Будь-який диск або мережевий ввод-вивід залишать непрацюючі цикли, і зважаючи на те, що ОП згадує про "відстаючий" додаток, мабуть, існує певна мережева комунікація.
aroth

49

Ви не вказали свою ОС. Тож відповідь буде загальним, як.

Заявки можуть бути обмежені різними причинами. Вузьке місце може бути:

  • ЦП
    • низька швидкість
    • програми з однопоточним / низьким потоком (не здатні використовувати всі ядра / потоки)
  • I / O
    • пропускна здатність диска
    • затримка диска
    • пропускна здатність мережі
    • затримка мережі
  • пам'ять
    • ємність
    • перемикання
    • затримка
    • недостатній кеш
    • місцевість (NUMA)
    • міняючи місцями

І є більше причин, які не такі поширені.

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


9
Також: Відеокарта має окремий графічний процесор, введення / виведення та пам'ять, будь-яке з них також може бути проблемою.
Mooing Duck

2
@MooingDuck Щоправда, але це, як правило, проблема лише в тому випадку, якщо програма, про яку йдеться, насправді використовує графічний процесор (тобто 3D-гру або додаток CUDA / OpenCL або щось подібне.)
reirab

13

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

Я не говорю про тонку, майже непомітну кількість пилу, а про великі грудочки або навіть килимки, які перешкоджають нормальному потоку повітря. Я бачив теплові раковини, які в основному мали над собою фільтр, який був пилом, а не власне фільтром. Це блокує дуже значну кількість повітря від коли-небудь охолодження процесора. Видалення такого пилу, як правило, вгамує вентилятори миттєво та дозволить вашим компонентам довше виживати. Тепло вбило багато комп’ютера, якого я попросив виправити.

Ідучи разом із ідеєю виходу тепла, ви також можете спробувати кращу термічну пасту. Білий cr @ p, з яким складається більшість процесорів, схожий на термопасту Юго. Я використовую Arctic Silver, але є і кращі речі, ніж це. Arctic Silver - це приблизно Porche (використовуючи шкалу рейтингу автомобіля), але там є різновиди Ferrari та суперкар.

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

Ще одна річ, яка може сповільнити ваш процесор - це GPU. Якщо ви використовуєте інтенсивні графічні ігри або утиліти (наприклад, CAD), ваш графічний процесор може стримувати ваш процесор. Отримати кращу відеокарту, можливо, варто щось подивитися. Також неправильна правильна картка може стримувати вас. Ігрові картки (як правило) не розроблені для роботи з CAD, а також картками робочих станцій, і картки робочих станцій (як правило) також не будуть грати дуже добре. Деякі так, але більшість - ні.

Як згадував @Jaroslav Kucera, це може бути пов'язано з диском. Чимало ударів HD (s) може сповільнити ваш шлях. Я звичайно запускаю кілька дисків. Один, призначений для ОС та інших програм для програмного забезпечення, файлів сторінок Windows, особистих файлів тощо. Крім того, не потрібно так сильно турбуватися про резервне копіювання особистих даних у разі відмови ОС, наявність кількох HD-дисплеїв значно поширює навантаження. Одночасне читання та запис на один і той же диск може серйозно уповільнити HD. Використання SHD може пом'якшити це, але не повністю. Відомо, що програмне забезпечення Photoshop та редагування відео дуже важко вражає HD. Читання з одного HD, а потім вихід на другий HD - це шлях. Це також допомагає жити вашим HD-дискам. Я також активно прохолоджую свої HD-диски. Я не вбив жорсткий диск, оскільки я поставив на них вентилятор і радіатор +15 років тому. Google їм, вони дешева страховка.

Вірите чи ні, ваш БП може також сповільнювати вас. Якщо у вас недостатньо енергії (або ваш блок живлення старий або дешевий, переоцінений, китайський POS), у вас можуть виникнути проблеми з продуктивністю. Я переконався з перших рук, що дивні ОС видає невмілий PSU. Ви шукаєте напругу та ампер, тому переконайтесь, що вони відповідають специфікаціям блоку живлення, якщо ви йдете цим маршрутом, а також переконайтеся, що вони відповідають чи перевищують ваші потреби в електроенергії. Якщо ваші компоненти загалом 500 Вт, а ви даєте їм навіть 475, це погано. Я рекомендую подолати свої вимоги приблизно на 20%, так що ваш PSU старіє (і падає енергія), а інші компоненти старіють (і вимагають потужної сили), ви не зациклюєтеся на тому, щоб купувати новий блок живлення так швидко.

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

І, AFAIK, немає ніякого способу змусити комп'ютер використовувати 100% процесора. Процесор і ОС знають, що їм потрібно робити, і справді добре працюють на своїй роботі. :-) Я не думаю, що ще ніхто не придумав спосіб змусити подати процесор, щоб він працював на 100%, коли вважаєш, що це повинно. Принаймні, не без годування її зайвими барахлами, щоб відсоток "виглядав добре".

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

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


1
+1 - вказує на можливість того, що програма може повіситись на максимізований GPU.
Я кажу, відновіть Моніку

6
Я забув згадати, куріння біля комп'ютера - одна з найгірших речей, яку ти можеш зробити. Це залишає неприємний, грубий і огидний (не можу підкреслити, що достатньо) помаранчевий липкий безлад, який неможливо прибрати. Пил стає задиркою і її неможливо очистити. Можливо, ви зможете зняти це з масляною ванною з автозапчастинами або звуковою водяною банею, але я ніколи не переживав цю проблему. Навіть прибирання справи - це зусилля в марності.
computercarguy

2
Просто з точки зору розробника, процесор буде робити все, що вам скаже. Якщо це не зафіксовано на 100%, це тому, що ваша програма очікує на те, щоб відбутися інші речі (IO диска, мережа, введення користувача, системні повідомлення тощо). Якщо у вас є щось для ЦП, він автоматично використовуватиме 100% (припускаючи багатопотокове додаток), щоб зробити те, що потрібно вашій програмі - вам не доведеться "змушувати" використовувати 100% або розблокувати його чи щось.
JPhi1618

2
@ JPhi1618: Ви забуваєте тепло. Незалежно від того, що ви скажете йому робити, якщо процесор перегріється, він запускає роботу на набагато менше 100%.
Mooing Duck

9
@ JPhi1618 Процесори usulallt пригнічуються шляхом зменшення їх частоти (розблокування), тому замість роботи на, скажімо, замість 3,0 ГГц вони працюють на частоті 2,0 ГГц. Таким чином, термічно заповнений процесор все ще може повідомити про 100% навантаження, оскільки кожен "робочий слот" зайнятий, просто менше "робочих прорізів" в одиницю часу.
el.pescado

3

Це можуть бути налаштування енергозбереження в біографії або в операційній системі. Багато сучасних процесорів та материнських плат мають налаштування, що дозволяють центральному процесору бути більш економічним при використанні електроенергії (особливо це стосується ноутбуків, які хочуть, щоб батарея працювала). Можливо, ви можете вимкнути таке налаштування, але переконайтеся, що знаєте, що ви робите, оскільки поряд із налаштуваннями зазвичай є інші речі, які можуть впливати на функціональність комп'ютера іншими важливими способами.


2

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

  • Перевірте темпи - Intel та AMD як вниз, коли вони нагріваються, і це проявляється заїканнями та шипами.
  • Не роби з цим багато .... приклади:
    1. Веб-перегляд
    2. Електронна пошта
    3. Найбільш прості ігри
    4. Я майже гарантую, що ваша проблема - це одне чи всі наступні дії, починаючи вгорі:
  • Отримайте SSD
  • Отримайте SSD
  • Отримайте свою ОС на SSD та перемістіть звичайні дані на традиційний накопичувач із кількома ТБ. Windows потребує більшого доступу до своїх локальних файлів, ніж будь-що.
  • Боназай приятель?
  • Тримайте всі диски принаймні на 10%. NTFS - це файлова система журналу, і продуктивність знижується на повну потужність накопичувача.
  • Вам потрібен накопичувач NVMe / SSD для вашого накопичувача ОС якомога швидше (так, я повторив це знову). Продуктивність дивовижна, і вона стосується другої частини цього ... Основний роздрібний продавець продавав накопичувачі Samsung 961 NMVe 512 Гб за 300 доларів сьогодні, що достатньо для нормального використання.
  • Windows 10 - це важкий графічний процесор. Недорога спеціальна відеокарта може зняти навантаження і з пам'яті, і з процесора. Ви все ще можете використовувати APU у поєднанні з відеокартою, але ви збережете деяку оперативну пам’ять, а VRAM, як правило, набагато швидше.
  • Процесори нижчого числа ядер також пов'язані з пам'яттю. Якщо ви подивитеся на i7, вони працюють у чотирьох банках DDR у чотирьох банках. Мікросхемами Epyc AMD буде 8-канальний DDR5 з 64 ядрами. Не допомагає. Нарешті, і я не можу наголосити на цьому достатньо, скидайте гроші на стільки оперативної пам’яті, скільки займе ваша машина. У мене є 32 ГБ і купую ще 32 пізніше цього року. Windows робить щось подібне до супервибору, дещо новіше, що стискає пам'ять в оперативній пам’яті, яка не використовується, тому програми та дані можна просто розпакувати при необхідності. В якості іншого прикладу я запускаю Linux VM для розробки, виділяючи 6/12 ядер і 16 ГБ оперативної пам’яті, і після першого завантаження з SSD він запускається через ~ 3 секунди. Цього дня процесор вважається дуже дешевим завдяки таким оптимізаціям ...

Весь цей матеріал здається зайвим, поки я не застряг при складанні 70-мільйонного файлового проекту або збільшення масштабних файлів гігантської камери на 17 "x26" x600 dpi при 16-бітовому кольорі. Навіть при 100-відсотковому використанні ресурси є настільки надмірними, що ви не отримаєте сповільнення. Напередодні ночі я зрозумів, що у мене два завантажені машини та Вовк 2 разом із 2 IDE (я відволікаюсь, позов мене) і не помічаю уповільнення. Це близько 1500 доларів США, BTW, нічого особливого, і найбільш повільно купується протягом багатьох років. Половина - це одна з Radeon RX64, тому що моїй відеокарті було 6 років. Величезна різниця у візуалізації та ін. Оновлення, швидше за все, отримає більше використання вашої апаратури, ніж припускати, що ви отримаєте 30% використання.

Якби я кинув жорсткий диск 5400 об / хв у цю машину для ОС, він би працював як загальне лайно.

TL; DR - це здається, що ви зараз пов'язані з процесором. Витратьте пару сотень на щонайменше 256 ГБ SSD для ОС, 8 ГБ оперативної пам’яті, ігрову карту нижнього кінця та комп’ютер триватимуть роки. Цей вижив протягом 6 років, перш ніж я нарешті зробив процесор і Mobo оновився, і я складав цілий комплект крос-компіляторів близько 25 разів на день зі старою передачею.

Зателефонуйте мені на надмірність, але я не рекомендую 8 карт Tesla чи нічого. :-) Робіть незначні оновлення, коли зможете, і я думаю, що ви вирішите багато цих проблем. Я робив роки тому, додавши SSD до системи Q6600 і спостерігаючи продуктивність втричі.


1

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

Поширена річ, яка не помічається - це фізичні ядра порівняно з "гіперточеними ядрами". Hyperthreading досконалий у багатьох коротких завданнях із вузькими місцями, крім CPU. Для завдань із обмеженим процесором з обмеженим процесором ви все ще обмежені вашим числом фізичних ядер, що, як правило, становить половину вашої кількості гіпертрезованих ядер. У абсолютно гіршому випадку ваш менеджер завдань може показувати лише 50% використання, оскільки він рахує гіперточені ядра у своїх графіках, якщо насправді ваші фізичні ядра можуть бути на 100% використання. Як правило, ви б показали більше, ніж це, оскільки ваша операційна система зможе використовувати гіперточення для інших непов'язаних завдань.


Чи не означатиме "правильне багатопотокове" означати наявність потоку з роботою для кожного логічного ядра, а не для кожного фізичного ядра? Якщо ви виконуєте щільний цикл на кожному логічному ядрі, диспетчеру завдань слід звітувати на 100% із гіперточенням. AFAIK, "відсоткове використання" в диспетчері завдань ґрунтується на кількості часу, про який йдеться, перебуває в стані запуску і планується на логічному ядрі, а не обов'язково, скільки часу було фактично, скажімо, робити щось на ALU . ОС, мабуть, навіть не знала цього (лише мікрокод процесора.)
reirab

1
"Звичайний" машинний код використовує лише 2 - 3 з 6 або більше портів інструкцій на сучасних процесорах. Не кажучи вже про всі стояки трубопроводу, спричинені помилками гілки та кешу. Hyperthreading допомагає заповнити ці прогалини. Це майже завжди виграш, щоб використовувати його. Деякі типи коду не справляються з ним, як, наприклад, кодування / декодування відео чи сильно оптимізована математика матриці. Але це незвично.
Зан Лінкс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.