Действительно ли возможно, что однопоточная программа выполнена одновременно больше чем на одном ядре процессора?

То, когда я запускаю однопоточную программу, которую я записал на своем четырехъядерном Intel i, видит в Windows Task Manager, что на самом деле все четыре ядра моего ЦП более или менее активны. Одно ядро более активно, чем другие три, но существует также действие по тем. Нет никакой другой программы (besided ядро ОС, конечно) выполнения, которое было бы вероятно для этого activitiy. И когда я закрываю свою программу все действие весь, ядра раскрываются для близкого обнуления. Все оставляют, немного "шума" на ядрах, таким образом, я вполне уверен, все видимое действие происходит прямо или косвенно (как вызов системных стандартных программ) из моей программы.

Действительно ли возможно, что ОС или сами ядра пытаются сбалансировать некоторый код или выполнение на всех четырех ядрах, даже это не многопоточная программа? У Вас есть какие-либо ссылки, это документирует эту технику?

Некоторый infos к программе: это - консольное приложение, записанное в QT, Диспетчер задач указывает, что только один поток работает. Возможно, QT использует потоки, но я не использую сигналы или слоты, ни любой GUI.

Ссылка на снимок экрана Диспетчера задач: http://img97.imageshack.us/img97/6403/taskmanager.png

Этим вопросом является агностик языка и не связанный с QT/C++, я просто хочу знать, делают ли Windows или Intel для балансировки также однопоточного кода всех ядер. Если они делают, как эта техника работает?

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

Править

Вы знаете, что какие-либо инструменты делают лучший анализ единственных и/или многопоточных программ, чем плохой Windows Task Manager?

6
задан WolfgangP 5 January 2010 в 19:45
поделиться

7 ответов

[

]Однопоточный процесс в любой момент времени будет выполняться только на одном ядре.[

] [

]Но операционная система может переносить поток с одного ядра на другое. В то время как операционная система будет пытаться удерживать поток на одном и том же ядре, если последнее ядро, на котором выполнялся поток, занято, а другое ядро свободно, операционная система может мигрировать поток.[

]
10
ответ дан 8 December 2019 в 17:22
поделиться
[

] Инструмент, который вы хотите сделать более глубокий анализ, чем Task Manager, называется perfmon (perfmon.exe) - это пользовательский интерфейс для захвата и графического отображения счетчиков производительности, какой инструмент Windows. Вы можете использовать его для мониторинга различной информации как на системном уровне, так и на уровне каждого процесса; научитесь любить его - это один из лучших друзей разработчика.[

] [

][]http://technet.microsoft.com/en-us/library/bb490957.aspx[][

]
2
ответ дан 8 December 2019 в 17:22
поделиться
[

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

].
0
ответ дан 8 December 2019 в 17:22
поделиться
[

] В какой версии Windows, XP и раньше есть ужасный планировщик потоков, который на самом деле перепрыгивает однопотоковую задачу из ядра в ядро. И под Windows (как и под любой другой ОС) есть десятки, если не сотни непользовательских программ, запущенных одновременно, независимо от того, что Вы думаете, что ВЫ запустили, что может объяснить всю эту активность[

].
1
ответ дан 8 December 2019 в 17:22
поделиться

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

0
ответ дан 8 December 2019 в 17:22
поделиться

Лучший диспетчер задач Windows - sysinternals process explorer.

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

Какую Windows вы используете? XP ? Seven ?

Если вы используете XP, попробуйте Seven, ядра лучше управляются.

0
ответ дан 8 December 2019 в 17:22
поделиться

Я использую Windows 7 x64 Home Premium и процессор Intel i7 920, и однопоточные программы переключаются с ядра на ядро, поэтому я не вижу, насколько это лучше по сравнению с XP.

7 распознает HT (Hyper Threading) и не планирует выполнение нескольких задач для одного ядра ЦП, что, вероятно, является единственным преимуществом 7 по сравнению с XP. У меня долго не было многоядерного процессора с XP, поэтому не уверен, учитывала ли XP HT.

0
ответ дан 8 December 2019 в 17:22
поделиться
Другие вопросы по тегам:

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