Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата(HappyLife @ 30.10.2008,  16:22)
По-моему это не тебе решать, а оси.

да а как заставить ? Ну или хотя бы рекомендовать... Просто будет очень не хорошо если первый проц будет загружен под 100 а второй отдыхать.. фря 6.2

Автор: Lazin 30.10.2008, 16:37
в винде есть функции SetThreadAffinityMask, SetThreadIdealProcessor, которые делают то, что нужно ТС-у, так-что наверняка можно smile 

Автор: fray 30.10.2008, 16:39
Цитата(Lazin @ 30.10.2008,  16:37)
в винде есть функции SetThreadAffinityMask, SetThreadIdealProcessor, которые делают то, что нужно ТС-у, так-что наверняка можно smile

Круто но Венда не мой случай, мне как бы это на фряхе делается ...

Автор: J0ker 30.10.2008, 16:53
OpenMP попробуйте

Автор: Lazin 30.10.2008, 17:04
нагуглил,
Код

#include <sched.h>
sched_setaffinity
sched_getaffinity

то или нет не знаю

Автор: fray 30.10.2008, 17:32
Спасибо за ссылки, а можно это же, но применительно к pthreads ?  А то лень знаете ли  smile 

Автор: MAKCim 30.10.2008, 22:51
Цитата(Lazin @  30.10.2008,  17:04 Найти цитируемый пост)
то или нет не знаю 

не то, т. к Linux specific

во FreeBSD cpuset_setaffinity()/cpuset_getaffinity()
http://fxr.watson.org/fxr/source/sys/cpuset.h?v=FREEBSD7#L182

Добавлено через 6 минут и 51 секунду
Цитата(fray @  30.10.2008,  17:32 Найти цитируемый пост)
но применительно к pthreads ?

нету

Автор: xvr 31.10.2008, 10:29
Цитата(fray @ 30.10.2008,  16:24)
Цитата(HappyLife @ 30.10.2008,  16:22)
По-моему это не тебе решать, а оси.

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

А ты предпочитаешь, что бы под 100% был загружен второй, а отдыхал первый? ОС сама должна разруливать процессоры, что бы их равномерно загрузить (если конечно есть чем)

Цитата

фря 6.2
Без разницы. Если у тебя программа с thread'ами она должна равномерно расползтись на оба кора.

Автор: fray 31.10.2008, 14:02
Цитата(xvr @ 31.10.2008,  10:29)
Цитата(fray @ 30.10.2008,  16:24)
Цитата(HappyLife @ 30.10.2008,  16:22)
По-моему это не тебе решать, а оси.

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

А ты предпочитаешь, что бы под 100% был загружен второй, а отдыхал первый? ОС сама должна разруливать процессоры, что бы их равномерно загрузить (если конечно есть чем)

Цитата

фря 6.2
Без разницы. Если у тебя программа с thread'ами она должна равномерно расползтись на оба кора.

У меня два потока в программе, и оба они весят на одном проце, 50.0% idle CPU 99.9%, система двух процессорная если бы работало на двух процах то было бы 120%  что-то вроде того, как мне кажется. Ну не врубается умный шедуллер.

Добавлено через 5 минут и 28 секунд
Цитата(MAKCim @ 30.10.2008,  22:51)
Цитата(Lazin @  30.10.2008,  17:04 Найти цитируемый пост)
то или нет не знаю 

не то, т. к Linux specific

во FreeBSD cpuset_setaffinity()/cpuset_getaffinity()
http://fxr.watson.org/fxr/source/sys/cpuset.h?v=FREEBSD7#L182

Добавлено @ 22:58
Цитата(fray @  30.10.2008,  17:32 Найти цитируемый пост)
но применительно к pthreads ?

нету

А можно пример создания треда и примениния дл него cpuset_setaffinity()  smile 

Автор: Lazin 31.10.2008, 14:33
Цитата(fray @  31.10.2008,  14:02 Найти цитируемый пост)
У меня два потока в программе, и оба они весят на одном проце, 50.0% idle CPU 99.9%, система двух процессорная если бы работало на двух процах то было бы 120%  что-то вроде того, как мне кажется. Ну не врубается умный шедуллер.

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

Автор: xvr 31.10.2008, 18:06
Цитата(fray @ 31.10.2008,  14:02)
Цитата(xvr @ 31.10.2008,  10:29)
Цитата(fray @ 30.10.2008,  16:24)
Цитата(HappyLife @ 30.10.2008,  16:22)
По-моему это не тебе решать, а оси.

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

А ты предпочитаешь, что бы под 100% был загружен второй, а отдыхал первый? ОС сама должна разруливать процессоры, что бы их равномерно загрузить (если конечно есть чем)

Цитата

фря 6.2
Без разницы. Если у тебя программа с thread'ами она должна равномерно расползтись на оба кора.

У меня два потока в программе, и оба они весят на одном проце, 50.0% idle CPU 99.9%, система двух процессорная если бы работало на двух процах то было бы 120%  что-то вроде того, как мне кажется. Ну не врубается умный шедуллер.

Похоже умный шедулер не вкурсе, что у тебя 2 thread'а. Я не знаю, как реализован pthread в BSD, но похоже не очень  smile Он случайно thread'ы делает не через библиотеку без поддержки ядра?

Автор: MAKCim 31.10.2008, 18:40
вообще говоря, привязка к конкретным процессорам/ядрам, обычно только снижает производительность, т. к шедулер обязан будет держать процесс в остановленном состоянии в то время, когда может быть доступен процессор/ядро, не входящий/ее в его affinity маску

Автор: J0ker 1.11.2008, 04:06
Цитата(xvr @  31.10.2008,  18:06 Найти цитируемый пост)
Он случайно thread'ы делает не через библиотеку без поддержки ядра? 

IMHO так не бывает - уровень привилегий обычных программ недостаточен для переключения контекста

Автор: xvr 1.11.2008, 09:35
Цитата(J0ker @ 1.11.2008,  04:06)
Цитата(xvr @  31.10.2008,  18:06 Найти цитируемый пост)
Он случайно thread'ы делает не через библиотеку без поддержки ядра? 

IMHO так не бывает - уровень привилегий обычных программ недостаточен для переключения контекста

Бывает, в первых версиях pthread на Linux именно так и было. Собственно контекст ПРОЦЕССА не переключался, библиотека выделяла под каждый thread свое пространство в памяти процесса и переключала thread'ы просто путем записи в esp и eip. Для системы это просто был один процесс и никаких thread'ов  smile 


Автор: MAKCim 1.11.2008, 11:41
Цитата(xvr @  1.11.2008,  09:35 Найти цитируемый пост)
просто путем записи в esp и eip

добавлю
а кванты времени регулировались таймерами и сигналами  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)