Каковы веские причины в наши дни устанавливать сходство потоков, а не оставлять это на усмотрение ОС?

Ища ответы здесь на «сходство с потоками», я вижу большой интерес к этому, но мало оправданий для этого, за исключением, возможно, получения стабильных результатов QueryPerformanceTimer.

Предполагая современную ОС и современную машину класса рабочих станций/серверов с 2-4 сокетами и современными 4-6-ядерными процессорами, какие веские причины могут быть у кого-то, кто думает, что они знают лучше, чем планировщик своей ОС? Есть ли в реальном мире ситуации, когда лучше взять под контроль аффинити к рекламе? Какие преимущества производительности можно продемонстрировать?

В последний раз, когда я где-то видел действительно хороший аргумент в пользу установки сходства потоков (например, он был подкреплен конкретными результатами, показывающими реальные и значительные улучшения в производительности системы), это был какой-то неясный способ сделать это с драйверами устройств Win2K. Но я не видел ничего подобного в течение многих лет, поэтому, когда кто-то говорит мне, что им нужно контролировать сходство потоков (но не почему), в эти дни я настроен глубоко скептически... но мне любопытно показать обратное.


person timday    schedule 05.08.2011    source источник
comment
Гиперпоточность, msdn.microsoft.com/en-us/magazine/cc300701. aspx#S11 Он вернулся в i7.   -  person Hans Passant    schedule 05.08.2011
comment
Хорошо, хороший момент: в старые добрые времена ОС без поддержки гиперпоточности на процессорах с гиперпоточностью было, безусловно, мудро, например, убедиться, что два потока вашего приложения не будут работать с гиперпоточностью на одном физическом ядре, в то время как ядро ​​рядом дверь сидела там недоиспользованной. Но операционные системы в наши дни мудры в отношении HT и не позволяют этому случиться.   -  person timday    schedule 08.04.2012


Ответы (5)


Основная причина в том, что у вас есть что-то, что сильно зависит от кэширования. Планировщик ОС не обязательно учитывает это в той степени, в которой вам хотелось бы.

person Jerry Coffin    schedule 05.08.2011
comment
Итак, какую процентную разницу в производительности я могу ожидать от контроля сходства в таком приложении по сравнению с неконтролируемым, оставьте это на усмотрение ОС? Меня не полностью убеждают эти аргументы кэширования; кеши могут либо переворачиваться за ничтожную долю кванта планировщика ОС, либо распределяться между ядрами. Может на многосокетной машине? - person timday; 19.02.2012
comment
@timday: самое большое улучшение, которое я лично видел, было чуть менее 2: 1, но это был довольно необычный случай. На каждое улучшение, которое вообще улучшилось, вероятно, было как минимум пять, которые я вообще не мог улучшить или даже не мог добиться такой же хорошей производительности, как если бы оставил это на усмотрение ОС (и, конечно, это по-прежнему включает только те, где Я подумал, что мог бы сделать что-то хорошее). - person Jerry Coffin; 19.02.2012

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

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

person Ruud van Gaal    schedule 14.12.2011
comment
Есть ли у вас конкретные доказательства (т.е. количественные измерения) преимуществ этого? (например, время выполнения с контролем сходства потоков и без него). - person timday; 19.02.2012

В ядре ОС и иногда в драйверах режима ядра вам необходимо выполнить одно и то же действие на каждом процессоре (например, обновить системный регистр). Вы можете сделать это в цикле в одном потоке, изменяя сходство на каждой итерации.

person Alexey Frunze    schedule 18.02.2012
comment
Хороший пример; Я сам видел подобный код (на самом деле он содержал ошибки: он выполнялся в основном потоке и не мог восстановить привязку ко всем ЦП после того, как это было сделано, в результате чего последующий фрагмент кода, который ожидал порождения потоков для всех ЦП, был ограничивается запуском их всех на одном процессоре! Однако я больше думал об общих проблемах с производительностью, чем о подобных аппаратных вещах. - person timday; 19.02.2012

Для настольных компьютеров это совершенно не нужно.

Но я вижу несколько приложений, где это могло бы помочь. Например, кешу ЦП нравится, если приложение, работающее на нем, не меняется.

Другая возможность: у вас есть критическая задача — вы выделяете ей весь ЦП, а остальные задачи используют остальные ЦП.

Или наоборот: у вас есть несколько задач с низким приоритетом, вы помещаете их все на один ЦП, а затем оставляете остальные свободными для более важных задач (использование приоритета процесса даст вам большую часть этого преимущества без привязки, но я могу себе представить некоторую нагрузку на память). случаи, когда это не так).

person Ariel    schedule 05.08.2011
comment
Как и в случае с комментариями по другим вопросам: количественные доказательства, пожалуйста! Я также очень сомневаюсь в использовании сходства потоков в качестве замены собственной системы приоритетов планировщика ОС (вариант использования, который на самом деле связан с обсуждениями, которые вызвали этот вопрос). На самом деле я замечаю, что программисты Windows, кажется, испытывают большое недоверие к механизмам процессов/приоритетов Windows (которые, кажется, уходят корнями в опыт еще во времена NT4/Win2K) и всегда, кажется, очень стремятся навязать самостоятельные решения, используя сродство потоков или межпотоковое взаимодействие. -поточные сигнальные механизмы. Программисты Linux доверяют своей ОС. - person timday; 19.02.2012

Я бы согласился, что в большинстве ситуаций лучше оставить процессору, чтобы он разобрался с этим. Тем не менее, насколько я видел, наиболее распространенная причина для привязки потоков — это когда вам нужна хорошая зависимость от кеша. В системах с несколькими ЦП, когда конкретный ЦП кэширует что-то индивидуально для себя, и если то же самое было кэшировано в каком-то другом ЦП, я полагаю, что это может автоматически стать недействительным на другом ЦП. Таким образом, если конкретный поток продолжает менять процессоры, на которых он выполняется, то частота попаданий в кэш будет слишком низкой. Так что в этом случае, я думаю, программисту имеет смысл лучше разбираться в сходствах COU. Я также думаю, что приведенное выше замечание Ариэля о том, что критическая задача постоянно получает процессор, не ограничивая другие процессы с низким приоритетом, также имеет смысл.

person Gargi Srinivas    schedule 18.02.2012