Распределение задач по процессорам
От: henson Россия http://www.njt-rails.com
Дата: 16.07.07 23:14
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, aik, Вы писали:


aik>>Т.е. натурально, "эти 2 дима — для процессора #1, а эти — для процессора #2"?


AVK>Именно так.


Получается чтобы распараллелить потоки одного процесса на два процессора надо еще и данные копировать? Или один процесс нельзя выполнять на двух процессорах?

26.07.07 12:46: Ветка выделена из темы Два процессора VS Двух ядерный процессор
Автор: MAPCUAHUH
Дата: 16.06.07
— AndrewVK
26.07.07 12:48: Перенесено модератором из 'Железо' — AndrewVK
Re: Распределение задач по процессорам
От: aik Австралия  
Дата: 17.07.07 07:46
Оценка:
Здравствуйте, henson, Вы писали:

aik>>>Т.е. натурально, "эти 2 дима — для процессора #1, а эти — для процессора #2"?

AVK>>Именно так.
H>Получается чтобы распараллелить потоки одного процесса на два процессора надо еще и данные копировать? Или один процесс нельзя выполнять на двух процессорах?

Скорее, нельзя. Но и не надо, на таких машинах обычно _сильно_ больше одного процесса и параллелить на 2 процессора 1 процесс не нужно, а снизить нагрузку на шину памяти очень полезно.
Re: Распределение задач по процессорам
От: TK Лес кывт.рф
Дата: 17.07.07 12:09
Оценка:
Здравствуйте, henson, Вы писали:

H>Получается чтобы распараллелить потоки одного процесса на два процессора надо еще и данные копировать? Или один процесс нельзя выполнять на двух процессорах?


Надо гуглить по ключевому слову NUMA
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Распределение задач по процессорам
От: tartilla  
Дата: 20.07.07 08:36
Оценка:
Здравствуйте, aik, Вы писали:


aik>Скорее, нельзя.


Все можно, только надо выбирать задачи для которых выполняются марковские условия, иначе разговор о возможности и необходимости параллировать процесс теряет смысл... НАХ
ЗЫ Вопросом распаралеливания потоков занимается OS, и стоит заметить она никак им не занимается, кроме как закрепления процесса за ядром или камнем, но прогресс не стоит на месте и в настоящее время существует несколько библиотек позволяющих планировать распараллеливание на уровне кода
ЗЫЫ А вообще если принять производительность ядра и камня одинаковыми, то два камня работать будут быстрее(им нечего делить кроме работы), но не сразу . Короткие задачи для которых время работы с шиной занимает время сравнимое с выполнением всей задачи быстее будут на двухядерном камне, большие вычислительные задачи на одноядерных камнях оставят конкурента далеко "в заде" но в мире одни архитектуры гибнут, другие становятся брендом маркетингового беспредела
Re[3]: Распределение задач по процессорам
От: Вумудщзук Беларусь  
Дата: 20.07.07 10:25
Оценка:
>ЗЫ Вопросом распаралеливания потоков занимается OS, и стоит заметить она никак им не занимается, кроме как закрепления процесса за ядром или камнем, но прогресс не стоит на месте и в настоящее время существует несколько библиотек позволяющих планировать распараллеливание на уровне кода
бред какой-то, если честно... во всяком случае в приведенной форме

во1х, как раз таки ОС и занимается планированием потоков и это атнють не тупая привязка потока к ядру. Более того, есть мнение, что оптимальным в большинстве ситуаций является предоставить планировшику ОС полную свободу действий.

во2х, можно озвучить названия библиотек? даже интересно, неужели кому-то хватило мозгов изобретать велосипед для призявки к процессору в обход ОС (хотя без понятия, как это можно вообще реализовать), когда есть winapi-шные SetProcessAffinityMask, SetThreadAffinityMask, SetThreadIdealProcessor
Homo sum et nihil humani a me alienum puto...
Re[4]: Распределение задач по процессорам
От: tartilla  
Дата: 20.07.07 11:54
Оценка:
Здравствуйте, Вумудщзук, Вы писали:


В>во1х, как раз таки ОС и занимается планированием потоков и это атнють не тупая привязка потока к ядру. Более того, есть мнение, что оптимальным в большинстве ситуаций является предоставить планировшику ОС полную свободу действий.

Ограничим понятие ОС winXP, возьмем машину с двухядерным камнем(или несколькими одноядерными) и запустим что-нибудь "тяжеленькой" с кучей потоков. Пока один юнит надрывается, другой даже в ... ус не дует
Или натурный эксперемент не показатель?
С другими оськами не экспрементировал, если результат другой прошу поделиться

В>во2х, можно озвучить названия библиотек? даже интересно, неужели кому-то хватило мозгов изобретать велосипед для призявки к процессору в обход ОС (хотя без понятия, как это можно вообще реализовать), когда есть winapi-шные SetProcessAffinityMask, SetThreadAffinityMask, SetThreadIdealProcessor


я имел ввиду это . Надеюсь мы говорим об одном и том же
>в обход ОС
Речь шла не об этом, а о подсказках OC кого куда и о правомерности этих действий.
Re[5]: Распределение задач по процессорам
От: The Lex Украина  
Дата: 23.07.07 00:31
Оценка:
Здравствуйте, tartilla, Вы писали:

T>Здравствуйте, Вумудщзук, Вы писали:



В>>во1х, как раз таки ОС и занимается планированием потоков и это атнють не тупая привязка потока к ядру. Более того, есть мнение, что оптимальным в большинстве ситуаций является предоставить планировшику ОС полную свободу действий.

T>Ограничим понятие ОС winXP, возьмем машину с двухядерным камнем(или несколькими одноядерными) и запустим что-нибудь "тяжеленькой" с кучей потоков. Пока один юнит надрывается, другой даже в ... ус не дует
T> Или натурный эксперемент не показатель?
T>С другими оськами не экспрементировал, если результат другой прошу поделиться

А у меня на проге которая не умеет "кучу потоков" оба "юнита" загружены наполовину — и общий показатель в Win Task Manager — 50% для этой проги...

А вот ежели явно ей Affinity на "юнит" прописать — то тут уж она заданный "юнит" и грузит.

Многопоточные — молча занимают 70-80% "общего проца" — при этом в графиках загруженности каждого юнита все те же 70-80%.

T>Речь шла не об этом, а о подсказках OC кого куда и о правомерности этих действий.


Подозреваю у тебя aka "драйвер процессора" кривой или криво настроенный.
Голь на выдумку хитра, однако...
Re[5]: Распределение задач по процессорам
От: Вумудщзук Беларусь  
Дата: 24.07.07 06:46
Оценка:
>Ограничим понятие ОС winXP, возьмем машину с двухядерным камнем(или несколькими одноядерными) и запустим что-нибудь "тяжеленькой" с кучей потоков. Пока один юнит надрывается, другой даже в ... ус не дует
эээ, запустим (вчера фото фиксил):
— Capture One Pro
— Neat Image из-под PS
— (ну и до кучи) WinRar

все 3 загружают проц (E6400) на 85-95%. При этом NI и WR не импортируют указанные функции винды, то есть винда сама раскидывает потоки по процессорам. Ещё вещьдоки нужны?

>я имел ввиду это . Надеюсь мы говорим об одном и том же

а, ну так есть ещё OpenMP в самой студии (правда, не юзал, деталей не знаю)...
Homo sum et nihil humani a me alienum puto...
Re[6]: Распределение задач по процессорам
От: tartilla  
Дата: 24.07.07 15:47
Оценка:
Здравствуйте, Вумудщзук, Вы писали:


В>все 3 загружают проц (E6400) на 85-95%. При этом NI и WR не импортируют указанные функции винды, то есть винда сама раскидывает потоки по процессорам. Ещё вещьдоки нужны?

Есть мнение о смешивание понятий потока и приложения .
ЗЫ Если бы винда не смогла раскидать процессы по ядрам, то это был бы крах маркетинговой политики Intel, или MS как ваятеля ОС .
Re[7]: Распределение задач по процессорам
От: Вумудщзук Беларусь  
Дата: 25.07.07 06:28
Оценка:
>Есть мнение о смешивание понятий потока и приложения .
>ЗЫ Если бы винда не смогла раскидать процессы по ядрам, то это был бы крах маркетинговой политики Intel, или MS как ваятеля ОС .
хде/какое смешение ? факт почти 100% проца говорит о том, что винда раскидала _потоки_ по ядрам, чего собственно от неё и ожидалось
Homo sum et nihil humani a me alienum puto...
Re[8]: Распределение задач по процессорам
От: tartilla  
Дата: 26.07.07 08:31
Оценка: -1
Здравствуйте, Вумудщзук, Вы писали:


В>хде/какое смешение ?

Позволю себе напомнить фразу
В>все 3 загружают проц (E6400) на 85-95%.
Дык 3 потока или процесса?
Как только запуском одного приложения , в котором не используются приведенные выше по ветке расширения (типа "еще openMP" ), у вас получится загрузить ваш E6400 на 100% или хотябы на 60% обязательно расскажите.
ЗЫ можете сравнить быстродействие 4-х гиговового камня и вашего(2x2), забавные результаты должны получиться для одного, двух и трех приложений.(а при сравнении с результами элементарных подходов ТМО? , без применения хитрых дисциплин обслуживания на основе анализа предполагаемого времени выполнения задачи, что вообще невероятно для рассмативаемой конфигурации )
ЗЗЫ Корень проблемы в диспетчере задач, он "кванты" кому нарезает? процессу или потокам( = нитям = thread-ам)?
Re[9]: Распределение задач по процессорам
От: Вумудщзук Беларусь  
Дата: 26.07.07 09:56
Оценка:
T>Дык 3 потока или процесса?
каждая из трёх указанных прог, будучи запущенной, загружает проц на 85-95%.

T>Как только запуском одного приложения , в котором не используются приведенные выше по ветке расширения (типа "еще openMP" ), у вас получится загрузить ваш E6400 на 100% или хотябы на 60% обязательно расскажите.

а какая разница, используется расширение или нет, если с точки зрения винды любой процесс — это лишь 1 или несколько потоков, которым нужно раздавать время?

но я попробую загрузить...

>ЗЗЫ Корень проблемы в диспетчере задач, он "кванты" кому нарезает? процессу или потокам( = нитям = thread-ам)?

выделяется-то потокам, хотя бы потому, что процесс — не исполняемая.. ммм... сущность.
Homo sum et nihil humani a me alienum puto...
Re: Распределение задач по процессорам
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 26.07.07 10:41
Оценка:
Здравствуйте, henson, Вы писали:

H>Здравствуйте, AndrewVK, Вы писали:


AVK>>Здравствуйте, aik, Вы писали:


aik>>>Т.е. натурально, "эти 2 дима — для процессора #1, а эти — для процессора #2"?


AVK>>Именно так.


H>Получается чтобы распараллелить потоки одного процесса на два процессора надо еще и данные копировать? Или один процесс нельзя выполнять на двух процессорах?


Можно. Такие системы, как тут описаны — случай NUMA — доступ в память, которая ближе к другому процессору, возможен, но дороже (задействуется ещё какой-то промежуточный мост). Поэтому шедулер, заточенный под NUMA, в случае обнаружения такой конфигурации увеличивает коэффициент "притяжения" процесса к предыдущему процессору (чтобы процесс, раз возникнув на каком-то из процессоров, по возможности оставался на нём же), а при переезде — старается перенести (сразу или постепенно) память процесса в другой пул (который ближе к этому процессору).

В случае нескольких нитей одного процесса картина сложнее — эффективность немного теряется за счёт того, что исполнять приходится обоим процессорам, и второму надо немного "дальше" тянуться. Поэтому как только есть возможность загрузить другой процессор другим процессом (а не нитью) — шедулер старается сделать именно так.

Вот если бы вообще не было общей памяти между блоками (что типично для систем более чем на 64 процессора или для кластерных решений; хотя это и есть случай кластера) — тогда начинается уже совсем иное программирование, основанное на асинхронной передаче сообщений.
The God is real, unless declared integer.
Re[10]: Распределение задач по процессорам
От: tartilla  
Дата: 26.07.07 13:46
Оценка:
Здравствуйте, Вумудщзук, Вы писали:

В>каждая из трёх указанных прог, будучи запущенной, загружает проц на 85-95%.

Честно говоря, я слегка в растеренности . У меня ни одна "прога" больше 50 не жрет . С какой стороны копать даже и не придумаю.

В>любой процесс — это лишь 1 или несколько потоков

В>выделяется-то потокам, хотя бы потому, что процесс — не исполняемая.. ммм... сущность.
т.е. чем больше в приложении потоков, тем больше процессорного времени ей перепадает? Или есть зависимость от принадлежности к процессу?
Re: Распределение задач по процессорам
От: Maxim S. Shatskih Россия  
Дата: 26.07.07 17:45
Оценка:
H>Получается чтобы распараллелить потоки одного процесса на два процессора надо еще и данные копировать? Или один процесс нельзя выполнять на двух процессорах?

Можно, никаких ограничений на это нет. И зачастую дает огромный выигрыш.

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

Скажу лишь — выигрыш от раскидывания работы на число ворк-айтемов, равное числу процессоров, в пределах одного процесса, бывает, и большой.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[4]: Распределение задач по процессорам
От: Maxim S. Shatskih Россия  
Дата: 26.07.07 17:48
Оценка:
В>во1х, как раз таки ОС и занимается планированием потоков и это атнють не тупая привязка потока к ядру. Более того, есть мнение, что оптимальным в большинстве ситуаций является предоставить планировшику ОС полную свободу действий.

Ни в одной реально серьезной ситуации с высокими требованиями по производительности это не так. Подсказывать кернелу приходится очень активно, и приоритетами, и affinity, и подсказки меняются по ходу execution flow. Можно, конечно, этого не делать, получишь проигрыш в десятки процентов (до двух раз).

Кернел рассчитан на эдакие generic задачи, т.е. задачи без высоких требований к таковой производительности, где не надо выжимать максимум из имеющегося процессора и disk IO.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[9]: Распределение задач по процессорам
От: Maxim S. Shatskih Россия  
Дата: 26.07.07 17:56
Оценка:
С задачей оптимальной загрузки процессоров при куче работающего софта, чтобы не получалось так, что ready queue выросла, а процессор(а) в idle — кернел как раз справляется сам, и хорошо.

Он не справляется без подсказок с оптимизацией на производительность одной конкретной задачи, сочетающей в себе disk IO (планирование disk IO вообще только в Висте появилось) и процессор, и все в больших количествах.

Если запущена 1 однотредовая программа, и она не простаивает на disk IO, то будет 50% на каждом из 2 ядер. Чтобы сделать "под сотню на каждом" — как минимум программа должна быть многотредовая.

T>ЗЗЫ Корень проблемы в диспетчере задач, он "кванты" кому нарезает? процессу или потокам( = нитям = thread-ам)?


Кванты работают только при 100% нагрузке процессора, если нить сама так и не отдала управление waitом за все протяжение кванта. Если загрузка меньше 100% — то работает семантика wait/signal, ибо quantum end не наступает никогда и ни у кого.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[11]: Распределение задач по процессорам
От: Maxim S. Shatskih Россия  
Дата: 26.07.07 18:09
Оценка: 11 (2)
OpenMP — декларативная (#pragma) многонитевость и локи, портабельная между ОС. На винде реализована в виде автогенерации кода, который зовет нужные Win32 вызовы.

T>т.е. чем больше в приложении потоков, тем больше процессорного времени ей перепадает? Или есть зависимость от принадлежности к процессу?


Да не считает никто там с такой точностью, сколько времени выделить.

Квант — это _ограничение для самого худшего случая_, если нить так заработалась процессором, что так и не позвала никакой wait ни из какого контектса (например, из IopSynchronousServiceTail в ожидании завершения IRP_MJ_READ) за весь квант. Естественно, это 100% загрузки процессора.

Длина кванта (и приоритет тоже) увеличивается для нити, владеющей окном переднего плана в GUI, но только тогда, когда в контрол-панели стоит Optimize for: Applications (а не Background Services). Забыл, как это зовется в реестре — Win32PrioritySeparation, кажется.

Еще есть starvation prevention. Это означает — если нить была готова к исполнению в течение чего-то типа целой секунды, но так и не позвалась на процессор, ее туда зовут силой, даже пересиливая приоритеты. Перерисовка урывками нижележащих окон, когда программа-владелец вернего окна зациклилась — делается именно по этим "пинкам".

Что у нас есть в политике там. Есть приоритеты. При наличии нескольких нитей, ничего не ждущих и к исполнению готовых, зовется на процессор та, у кого приоритет выше. Остальные — голодают, пока приоритетная нить не начнет чего-то ждать, не завершится или пока не сработает starvation prevention, описанный выше.

Голодающие нити — это ready queue, ее видно perfmonом, если она сильно растет при 100% нагрузке на процессор(а) (особенно в SQLных серверах баз данных) — повод к апгрейду на новый камень/камни.

Еще есть ideal processor. При выборах нити на исполнение на процессор те нити, у которых явно задан идеальный процессор, и _это не наш процессор_ — получают пенальти.

Affinity — понятно, даже не пенальти, а вообще запрет бегать на таких-то процессорах.

Еще есть last used processor. Работает так же, как ideal, но эта оценка происходит уже после оценки по ideal. Цель — уменьшить засирание кэшей.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[11]: Распределение задач по процессорам
От: BulatZiganshin  
Дата: 26.07.07 18:27
Оценка:
T>Честно говоря, я слегка в растеренности . У меня ни одна "прога" больше 50 не жрет . С какой стороны копать даже и не придумаю.

rar, 7-zip
Люди, я люблю вас! Будьте бдительны!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.