ilostmyid2 Ответов: 2

Как заставить потоки использовать все процессоры?


я создаю поток в своем приложении C++ Windows с помощью _beginthread. но все потоки работают на одном ядре, ядро, по-видимому, работает основной поток. как я могу заставить _beginthread устранить этот барьер и попросить ОС отправлять потоки по всем процессорам?

Что я уже пробовал:

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

Philippe Mori

Мы не знаем, что вам ответить... Недостаточно кода или информации, чтобы мы знали, что вы делаете неправильно.

2 Ответов

Рейтинг:
1

OriginalGriff

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


ilostmyid2

я думаю, что не смог бы описать свою проблему хорошо. виртуальная машина vmware расположена на двухпроцессорном xeon, каждый из которых имеет 8 ядер. нет высокой загрузки процессора. машине назначено 10 процессоров, по 5 ядер от каждого процессора. когда я запускаю 10 потоков одновременно, я вижу, что только первый процессор участвует в моем процессе и потоках, в то время как все ядра другого процессора простаивают.

Dave Kreskowiak

Проблема в VMWare. Темы в гостевой ОС не отображаются темы в принимающей о/С. Вы можете сделать так, чтобы гостевой O/S enitre отображался только как один поток в Хосте O/S.

Нет, вы не имеете никакого контроля над этим.

А компонент VMWare - это очень важная часть информации, которая должна была быть включена в ваш первоначальный вопрос.

Рейтинг:
1

KarstenK

Баланс нагрузки-это задача операционной системы, но вы должны скомпилировать свой код как многопоточный. И все связанные библиотеки также должны поддерживать эту функцию.

Прочитайте Документация Microsoft для некоторых деталей.

Переключение потоков на разных ядрах является "дорогостоящим", поэтому не стоит его применять. Лучшие способы оптимизации-это продуманная архитектура и чистый программный поток, то есть доступ к ресурсам. ;-)