Многоядерное использование, потоки, пулы потоков

Если вы посмотрите официальную документацию в пакете R igraph - https://igraph.org/r/doc/strength.html

вы обнаружите, что веса именуются:

«Вектор веса. Если график имеет атрибут« край веса », то он используется по умолчанию. Если график не имеет атрибута« весовой край »и этот аргумент равен NULL, тогда предупреждение дается и степень называется. "

Но также:

https://igraph.org/r/doc/edge_attr.html

объясняет, что ребра заданы как весовой атрибут

9
задан Tall Jeff 11 January 2009 в 21:25
поделиться

2 ответа

Когда новый поток порожден, каков алгоритм для присвоения потока к конкретному ядру?

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

В Windows я полагаю, что расположенный по приоритетам самым высоким образом поток/процесс всегда выбирается для выполнения. (Таким образом, если у Вас будет один процесс, работающий в высоком приоритете в одножильной системе, то тот процесс потенциально выполнит 100% времени, исчерпав ресурсы любой процесс. Конечно, это только применяется, если тот процесс никогда не блокируется, который маловероятен в реальном мире.

И конечно, потому что современная ОС, такая как Windows сложна, существует намного больше к нему. Определенные процессы время от времени являются проявленным предпочтительным отношением, но как показывает опыт, Windows будет всегда выбирать первоочередные процессы (который является, почему Вы могли в значительной степени заморозить свой компьютер путем отдавания процессу приоритета "в реальном времени" назад в одножильные дни),

В соответствии с Linux, ниже расположенные по приоритетам процессы регулярно планируются также, просто не как часто.

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

Потоки перемещены от одного ядра до другого в течение их времени жизни?

Конечно. Предположите, что у Вас есть три потока, работающие на dualcore системе. Покажите мне справедливое расписание, которое не включает регулярно движущиеся потоки между ядрами.

Мой заключительный вопрос, который является в основном повторным использованием вышеупомянутого, о классе ThreadPool.NET, который обрабатывает вещи как.BeginInvoke и такой. Этот класс делает какой-либо этот материал? В противном случае, почему не, или должен он? Какой материал? Планирование потоков и выбор ядер для работы? Нет, пул потоков является просто механизмом для многократного использования потоков для muliple задач, вместо того, чтобы иметь необходимость создать новый поток для каждой задачи и затем закрыть ее впоследствии.

Есть ли любой способ настроить эту обработку, вид намека на операционную систему что этот конкретный поток

Это - то, для чего приоритет потока/процесса. Если у Вас есть поток, который должен получить много процессорного времени, даже когда существует другое интенсивное ЦП выполнение потоков, повышает приоритет потока. Но обращаться с осторожностью. Обычно, нет многого интенсивного ЦП выполнения потоков, что означает, что даже в нормальном приоритете, Вы получите 99,9% процессорного времени. Как я сказал, Windows планирует выше расположенные по приоритетам потоки очень настойчиво, поэтому только повысьте приоритет, если Вы действительно имеете в виду это.

18
ответ дан 4 December 2019 в 08:53
поделиться

В дополнение к превосходному и всестороннему ответу jalf имейте в виду, что "Параллельные Расширения" (который должен включиться в.NET 4.0) имеет много кода, выделенного выделению работы (от очередей) к ядрам равномерно, включая кражу работы и потенциально самородки как забота, какое ядро является "самым близким" к памяти, в которой находится работа.

Таким образом с.NET 4.0, с помощью вещей как Parallel.For и т.д. необходимо получить многое из этого бесплатно. И в целом, ОС достаточно умна, что она просто работает от представления постороннего. jalf предоставил много подробной информации о том, что происходит под капотом, но большую часть времени Вам не нужен этот уровень детализации, если Вы не сглаживаете некоторые проблемы производительности с очень потоковым кодом.

6
ответ дан 4 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: