Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как загрузить двухпроцессорную систему?

4.8K
27 января 2006 года
Jump
128 / / 09.11.2005
Собственно сабж.

Поиск результатов не дал.

Я пробовал использовать семейство ф-й ---AffinityMask. Но работают они как-то странно... Т.е. создаю два потока, назначаю одному маску на первый проц, другому на второй, а суммарная загрузка процессоров (по диспетчеру задач) колеблется в районе 50%. Запукаю второй экземпляр проги, врубаю потоки - загрузка уже 100%, и первая прога даже не снижает скорости.
При этом, если запускать только один поток, то один процессор грузится почти на всю, а второй почти на нуле.
Как приодолеть этот барьер в 50% ????????
1
28 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Jump
Собственно сабж.

Поиск результатов не дал.

Я пробовал использовать семейство ф-й ---AffinityMask. Но работают они как-то странно... Т.е. создаю два потока, назначаю одному маску на первый проц, другому на второй, а суммарная загрузка процессоров (по диспетчеру задач) колеблется в районе 50%. Запукаю второй экземпляр проги, врубаю потоки - загрузка уже 100%, и первая прога даже не снижает скорости.
При этом, если запускать только один поток, то один процессор грузится почти на всю, а второй почти на нуле.
Как приодолеть этот барьер в 50% ????????


????? Можно уточнить - что является целью? Загрузить оба поцессора на 70 -90-100% одной копией программы? Вопрос сам по себе не понятен. В данном случае роль играет какой приоритет у потока - какие задачи он при этом выполняет. Если система может отдать проц в распоряжение потока - она это делает - если процесса два - им выделяются ресурсы на заданных процессорах с учетом их приоритетов. Тот же механизм при запуске второй копии - так как потоков уже 4 + системные потоки - ты и получаешь 100% загрузку.

4.8K
28 января 2006 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by kot_
????? Можно уточнить - что является целью? Загрузить оба поцессора на 70 -90-100% одной копией программы? Вопрос сам по себе не понятен. В данном случае роль играет какой приоритет у потока - какие задачи он при этом выполняет. Если система может отдать проц в распоряжение потока - она это делает - если процесса два - им выделяются ресурсы на заданных процессорах с учетом их приоритетов. Тот же механизм при запуске второй копии - так как потоков уже 4 + системные потоки - ты и получаешь 100% загрузку.



Задача - использовать оба процессора на 100% (или хотябы близко к 100), чтобы увеличить скорость обработки данных. И сделать это нужно одной копией программы.

На данном этапе наблюдается какой-то прям рубеж - 50% ... Сколько бы я потоков не сделал в одном процессе, назначая им различные маски (у процесса маска = 3, т.е. оба процессора должен использовать), преодолеть рубеж не получается :x

ЗЫ: Приоритеты у потоков ставлю низкие (в высоких нет смысла). Задача - обсчет данных, приходящих по сети и отправка результатов.
ЗЫЫ: Тачка - мощный сервак на 2-х процах, и этот рубеж просто клинит! Приходится под буфера больше памяти выделять! Оно вроде и не такая уж и проблема, но все равно!

1
30 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Jump
Задача - использовать оба процессора на 100% (или хотябы близко к 100), чтобы увеличить скорость обработки данных. И сделать это нужно одной копией программы.

На данном этапе наблюдается какой-то прям рубеж - 50% ... Сколько бы я потоков не сделал в одном процессе, назначая им различные маски (у процесса маска = 3, т.е. оба процессора должен использовать), преодолеть рубеж не получается :x

ЗЫ: Приоритеты у потоков ставлю низкие (в высоких нет смысла). Задача - обсчет данных, приходящих по сети и отправка результатов.
ЗЫЫ: Тачка - мощный сервак на 2-х процах, и этот рубеж просто клинит! Приходится под буфера больше памяти выделять! Оно вроде и не такая уж и проблема, но все равно!


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

2.4K
03 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by kot_
Если процесс имеет низкий приоритет то он не сможет загрузить процессор на сто процентов - проблема в том что он не сможет получать проц в пользование на длительное время - даже если никаких задач в данный момент выполнятся не будет.
Просто я не пойму что тебя гложет - если не устраивает производительность потока - то необходимо играться приоритетом если в системе 2 проца - через аффинити выделяешь ему процессор и пусть его терзает с высоким приоритетом.



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

"Недозагрузка" проистекает из-за того, что прогр. ждет данных напр. с диска или из сети.

4.8K
04 февраля 2006 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by dinasok51
Если источник данных для всех копий программы один, то его пропускная способность будет оределять общую производительность

"Недозагрузка" проистекает из-за того, что прогр. ждет данных напр. с диска или из сети.



Проблема оказалась как раз в этом... Синхронизация внутри класса была - сразу и не заметил...

Потом попробовал 2 просто зацикленных потока на разные процы повесить - загрузились оба.

Всем спасибо! :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог