| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Чтобы тред рабол только на втором процессоре |
| Автор: fray 30.10.2008, 16:10 |
| Как сказать треду чтобы он работал только на втором проце. В двух процессорной системе. FreeBsd amd64 Core Duo ? Спасибо. |
| Автор: HappyLife 30.10.2008, 16:22 |
| По-моему это не тебе решать, а оси. |
| Автор: fray 30.10.2008, 16:24 | ||
да а как заставить ? Ну или хотя бы рекомендовать... Просто будет очень не хорошо если первый проц будет загружен под 100 а второй отдыхать.. фря 6.2 |
| Автор: Lazin 30.10.2008, 16:37 |
| в винде есть функции SetThreadAffinityMask, SetThreadIdealProcessor, которые делают то, что нужно ТС-у, так-что наверняка можно |
| Автор: fray 30.10.2008, 16:39 | ||
Круто но Венда не мой случай, мне как бы это на фряхе делается ... |
| Автор: J0ker 30.10.2008, 16:53 |
| OpenMP попробуйте |
| Автор: Lazin 30.10.2008, 17:04 | ||
нагуглил,
то или нет не знаю |
| Автор: fray 30.10.2008, 17:32 |
| Спасибо за ссылки, а можно это же, но применительно к pthreads ? А то лень знаете ли |
| Автор: MAKCim 30.10.2008, 22:51 |
не то, т. к Linux specific во FreeBSD cpuset_setaffinity()/cpuset_getaffinity() http://fxr.watson.org/fxr/source/sys/cpuset.h?v=FREEBSD7#L182 Добавлено через 6 минут и 51 секунду нету |
| Автор: xvr 31.10.2008, 10:29 | ||||||
А ты предпочитаешь, что бы под 100% был загружен второй, а отдыхал первый? ОС сама должна разруливать процессоры, что бы их равномерно загрузить (если конечно есть чем)
|
| Автор: fray 31.10.2008, 14:02 | ||||||||||
У меня два потока в программе, и оба они весят на одном проце, 50.0% idle CPU 99.9%, система двух процессорная если бы работало на двух процах то было бы 120% что-то вроде того, как мне кажется. Ну не врубается умный шедуллер. Добавлено через 5 минут и 28 секунд
А можно пример создания треда и примениния дл него cpuset_setaffinity() |
| Автор: xvr 31.10.2008, 18:06 | ||||||||||
Похоже умный шедулер не вкурсе, что у тебя 2 thread'а. Я не знаю, как реализован pthread в BSD, но похоже не очень |
| Автор: MAKCim 31.10.2008, 18:40 |
| вообще говоря, привязка к конкретным процессорам/ядрам, обычно только снижает производительность, т. к шедулер обязан будет держать процесс в остановленном состоянии в то время, когда может быть доступен процессор/ядро, не входящий/ее в его affinity маску |
| Автор: J0ker 1.11.2008, 04:06 |
IMHO так не бывает - уровень привилегий обычных программ недостаточен для переключения контекста |
| Автор: xvr 1.11.2008, 09:35 | ||
Бывает, в первых версиях pthread на Linux именно так и было. Собственно контекст ПРОЦЕССА не переключался, библиотека выделяла под каждый thread свое пространство в памяти процесса и переключала thread'ы просто путем записи в esp и eip. Для системы это просто был один процесс и никаких thread'ов |
| Автор: MAKCim 1.11.2008, 11:41 |
добавлю а кванты времени регулировались таймерами и сигналами |