Когда я запустил этот код с помощью GCC,Почему при запуске этого C-кода возникает переход в ядро процессора?
$ cat eatup.c
#include<stdio.h>
#include<stdlib.h>
int main() {
int i = 0;
while(1) {
i++;
}
}
$
график CPU пошел, как это:
Я не знаю, почему есть крест в использовании ядра процессора.
Я начал работать на подъем слева от 40 знака, то первоначально core2 использования выросло до 100%, но через некоторое время было переключатель и Core1 использование пошло на 100%.
Любые последующие прогоны не воспроизвели ситуацию. Все, что я получаю одной Возвышение
Это может быть немного ОС зависимую (планирование процессов на ядрах), но есть что-нибудь, что могло бы объяснить, почему переключатель произошло (как показано в первой Скриншот)? Какие-нибудь догадки?
Оказывается, эти переключатели не так редко. Вот скриншот System Monitor только после загрузки (Ubuntu 10,04)
Это правильно. Обратите внимание, что большинство планировщиков ОС будут пытаться поддерживать процесс на одном и том же ядре, когда это возможно, чтобы использовать кеши, связанные с одним ядром. Вот почему в вашем первом графике он переключается и остается включенным. Но, с другой стороны, планировщик должен быть готов переместить процесс в другое ядро. Рассмотрим процессы с интенсивным использованием процессора A, B, C, работающие на ядрах 1, 2, 1. Если процесс B заканчивается, вы определенно хотите, чтобы планировщик переместил один из A или C на ядро 2. –
За пределами контрольных точек очень мало случаи, когда ограничение того, какие ядра используются, является хорошей идеей. Я бы просто не сделал этого, не будучи уверенным, что это необходимо. Даже тогда я бы сравнил с этим оба пути, чтобы убедиться, что неожиданных побочных эффектов не было. – RBerteig
@RBerteig: Мне никогда не приходилось делать это в реальной жизни. Может быть, просто для того, чтобы проницательно относиться к другим тем, что процесс эффективно однопоточный. – 2010-09-26 20:47:33