Однопоточный процесс выполняется на 2 ядрах

425
agz

В моем четырехъядерном процессоре кажется, что один поток (бесконечный цикл while) выполняется одновременно на 2 ядрах. Почему это? Разве один поток не должен выполняться только на одном ядре?Однопоточный процесс выполняется на 2 ядрах

2
Не говоря уже о том, что средний процесс всегда имеет более одного потока, установите сходство процессов, чтобы ограничить процесс выполнением всех его потоков на одном ядре. ta.speot.is 10 лет назад 0

3 ответа на вопрос

4
Hennes

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

Думайте об этом как телефонный разговор. У вас есть только один телефон * 1, и вам нужно продолжать разговор по телефону * 2 . У вас в офисе четыре человека, каждый из которых способен говорить * 3 . Ничто не мешает вам передать телефон другому человеку во время унитаза.

Обратите внимание, что есть только один человек, выступая в телефон одновременно .


* 1 Телефон - единственный шаг.
* 2 Нужно продолжать говорить, так как он работает бесконечно.
* 3 Четыре человека являются оф. четыре ядра.

Как будут управляться ресурсы? Есть ли необходимость переносить кэш L1 между ядрами? Почему он не работает только на одном ядре, а не на двух ядрах (есть ли преимущество ... кажется, что это совсем наоборот, imo)? agz 10 лет назад 0
1) Какие ресурсы? Не могли бы вы рассказать об этом более конкретно? 2) Именно планировщик в ОС решает, на каком ядре будет запускаться процесс. Обычно они стараются поддерживать один и тот же процесс на одном и том же ядре, чтобы получить выгоду от попаданий в кэш и потенциальных возможностей турбонаддува. 3) [Согласованность кэша] (http://en.wikipedia.org/wiki/Cache_coherence) обрабатывается самим ЦП на архитектуре x86. Вы не указали, что используете x86, но изображение диспетчера задач сильно намекает на окно и, следовательно, обычно на x86. Hennes 10 лет назад 0
Вы делали снимок диспетчера задач на физическом процессоре с 4 логическими ядрами? Hennes 10 лет назад 0
Это ядро ​​2 Quad Q9650, 4 физических ядра и 4 потока agz 10 лет назад 0
«Обычно они пытаются сохранить один и тот же процесс на одном и том же ядре, чтобы извлечь выгоду из обращений к кешу и потенциальных возможностей турбо-повышения». Это то, что я искал. Есть ли конкретная причина, по которой он работает на 2 ядрах? В моей двухъядерной системе тот же процесс выполняется только на одном ядре. agz 10 лет назад 0
У меня нет доступа к источнику планировщика задач Windows или его логике. Поэтому я не могу ответить, что для Windows. Лучшее, что я могу сделать, это * угадай *. Например, драйвер, который имеет сильное предпочтение ядру 0, который протолкнул протектор к другому ядру. Но я повторяю: * Угадай * Hennes 10 лет назад 2
Фактическим преимуществом переключения ядер является температура - при переключении вы не нагреваете одну и ту же область чипа все время. Это также позволит работать на более высокой тактовой частоте, поскольку максимальная температура ниже. gnasher729 9 лет назад 0
Это может быть хорошим моментом для современных процессоров. Хотя, опять же, я не обладаю знаниями о тепловыделении и внутреннем микрокоде, который управляет турбо. Для core2 это не должно иметь значения, поскольку у них нет турбо. Эта функция была представлена ​​в серии Nehalem (Core i7 9x0 и более поздних версий). Hennes 8 лет назад 0
0
harrymc

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

Это совсем не похоже на однопоточный процесс, но больше похоже на 4-поточный процесс. Это требует больше экспертизы.

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

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

Если это просто svchost.exe, это системная служба, которую можно определить. Наиболее вероятно, что процессор будет интенсивно использовать Windows Search.

0
Arbalest

That display in your posting is showing you how much activity is going on for each core but it tells you nothing about which processes/threads are running on which core.

I suspect that as your single threaded program gets it's "time slice" the OS is running it on one core half the time and another core the other half of the time. Maybe it even runs on the other cores some small part of the time too.

As an infinite loop it is using the core fully for the duration of it's time-slice, but any time increment of core activity (in the Task Manager) will represent MUCH MORE than the duration of single time slices.

For further insight as to what is going on, switch to the Processes tab on the Task Manager. On the View Menu, click Select Columns then tick the "Threads" column. Then on the Image name column find your process. Confirm that it is a single thread.

As I sit here with not that much "load" on my XP box there are 662 threads running. My Antivirus is running 78 threads, Firefox is running 45 threads, Dropbox is running 33. Winamp is not playing anything at all right now and it is still running 17 threads. Any increment in the Task Manager display could have had all of those threads on any core.

Похожие вопросы