Почему некоторые программы не сбалансированы по нагрузке даже при наличии нескольких ядер?

432
Nav

Пока VTune Analyzer работал на блейд-сервере с 8 ядрами, я наблюдал процент использования процессора mpstat -P ALL 1.

mpstat показал мне, что VTune занимает 100% одного ядра, в то время как все остальные ядра простаивают.

Почему это происходит? Разве ОС (RHEL Server 5.2) не должна автоматически распределять нагрузку между ядрами? То же самое произошло, когда я попытался запустить MATLAB (даже после включения поддержки многопоточности в настройках MATLAB).

PS: я разработчик. Не системный администратор. Поэтому чувствовал, что лучше спросить здесь, а не на сервере.

0
Программное обеспечение, которое вы используете, может не использовать несколько ядер параллельно. Что касается MATLAB, может быть, есть некоторые аспекты, которые нельзя распараллелить? Daniel Beck 13 лет назад 1

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

3
Majenko

Операционная система распределяет потоки по ядрам.

Процесс состоит из одного или нескольких потоков.

Процесс, имеющий только один поток, может работать только на одном ядре. Процесс с двумя потоками может выполняться на одном или двух ядрах. Процесс с 500 потоками может работать на любом количестве ядер (скажем, 125 потоков на ядро ​​для четырехъядерного ядра).

Так что все дело в процессе.

Это будет работать только на одном ядре:

for(i=0; i<1000; i++) { do_something_intensive(); } 

Принимая во внимание, что это более дружественное ядро

pthread_create(pth1,&do_something_intensive,attr,&args); pthread_create(pth1,&do_something_else_intensive,attr,&args); 

Например.

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