Как загрузить двухпроцессорную систему?
Поиск результатов не дал.
Я пробовал использовать семейство ф-й ---AffinityMask. Но работают они как-то странно... Т.е. создаю два потока, назначаю одному маску на первый проц, другому на второй, а суммарная загрузка процессоров (по диспетчеру задач) колеблется в районе 50%. Запукаю второй экземпляр проги, врубаю потоки - загрузка уже 100%, и первая прога даже не снижает скорости.
При этом, если запускать только один поток, то один процессор грузится почти на всю, а второй почти на нуле.
Как приодолеть этот барьер в 50% ????????
Собственно сабж.
Поиск результатов не дал.
Я пробовал использовать семейство ф-й ---AffinityMask. Но работают они как-то странно... Т.е. создаю два потока, назначаю одному маску на первый проц, другому на второй, а суммарная загрузка процессоров (по диспетчеру задач) колеблется в районе 50%. Запукаю второй экземпляр проги, врубаю потоки - загрузка уже 100%, и первая прога даже не снижает скорости.
При этом, если запускать только один поток, то один процессор грузится почти на всю, а второй почти на нуле.
Как приодолеть этот барьер в 50% ????????
????? Можно уточнить - что является целью? Загрузить оба поцессора на 70 -90-100% одной копией программы? Вопрос сам по себе не понятен. В данном случае роль играет какой приоритет у потока - какие задачи он при этом выполняет. Если система может отдать проц в распоряжение потока - она это делает - если процесса два - им выделяются ресурсы на заданных процессорах с учетом их приоритетов. Тот же механизм при запуске второй копии - так как потоков уже 4 + системные потоки - ты и получаешь 100% загрузку.
????? Можно уточнить - что является целью? Загрузить оба поцессора на 70 -90-100% одной копией программы? Вопрос сам по себе не понятен. В данном случае роль играет какой приоритет у потока - какие задачи он при этом выполняет. Если система может отдать проц в распоряжение потока - она это делает - если процесса два - им выделяются ресурсы на заданных процессорах с учетом их приоритетов. Тот же механизм при запуске второй копии - так как потоков уже 4 + системные потоки - ты и получаешь 100% загрузку.
Задача - использовать оба процессора на 100% (или хотябы близко к 100), чтобы увеличить скорость обработки данных. И сделать это нужно одной копией программы.
На данном этапе наблюдается какой-то прям рубеж - 50% ... Сколько бы я потоков не сделал в одном процессе, назначая им различные маски (у процесса маска = 3, т.е. оба процессора должен использовать), преодолеть рубеж не получается :x
ЗЫ: Приоритеты у потоков ставлю низкие (в высоких нет смысла). Задача - обсчет данных, приходящих по сети и отправка результатов.
ЗЫЫ: Тачка - мощный сервак на 2-х процах, и этот рубеж просто клинит! Приходится под буфера больше памяти выделять! Оно вроде и не такая уж и проблема, но все равно!
Задача - использовать оба процессора на 100% (или хотябы близко к 100), чтобы увеличить скорость обработки данных. И сделать это нужно одной копией программы.
На данном этапе наблюдается какой-то прям рубеж - 50% ... Сколько бы я потоков не сделал в одном процессе, назначая им различные маски (у процесса маска = 3, т.е. оба процессора должен использовать), преодолеть рубеж не получается :x
ЗЫ: Приоритеты у потоков ставлю низкие (в высоких нет смысла). Задача - обсчет данных, приходящих по сети и отправка результатов.
ЗЫЫ: Тачка - мощный сервак на 2-х процах, и этот рубеж просто клинит! Приходится под буфера больше памяти выделять! Оно вроде и не такая уж и проблема, но все равно!
Если процесс имеет низкий приоритет то он не сможет загрузить процессор на сто процентов - проблема в том что он не сможет получать проц в пользование на длительное время - даже если никаких задач в данный момент выполнятся не будет.
Просто я не пойму что тебя гложет - если не устраивает производительность потока - то необходимо играться приоритетом если в системе 2 проца - через аффинити выделяешь ему процессор и пусть его терзает с высоким приоритетом.
Если процесс имеет низкий приоритет то он не сможет загрузить процессор на сто процентов - проблема в том что он не сможет получать проц в пользование на длительное время - даже если никаких задач в данный момент выполнятся не будет.
Просто я не пойму что тебя гложет - если не устраивает производительность потока - то необходимо играться приоритетом если в системе 2 проца - через аффинити выделяешь ему процессор и пусть его терзает с высоким приоритетом.
Если источник данных для всех копий программы один, то его пропускная способность будет оределять общую производительность
"Недозагрузка" проистекает из-за того, что прогр. ждет данных напр. с диска или из сети.
Если источник данных для всех копий программы один, то его пропускная способность будет оределять общую производительность
"Недозагрузка" проистекает из-за того, что прогр. ждет данных напр. с диска или из сети.
Проблема оказалась как раз в этом... Синхронизация внутри класса была - сразу и не заметил...
Потом попробовал 2 просто зацикленных потока на разные процы повесить - загрузились оба.
Всем спасибо! :)