Целевая спецификация c ядер ЦП с параллельной библиотекой задач в. NET? - PullRequest
0 голосов
/ 30 апреля 2020

Я работаю над проектом, там нам нужно реализовать многозадачность для некоторой функциональности. Для этого мы использовали. NET один из лучших API - параллельная библиотека задач (TPL).

Например. код для TPL (взят из здесь )

static void Main()
{
    var options = new ParallelOptions()
    {
        MaxDegreeOfParallelism = 2
    };
    List<int> integerList = Enumerable.Range(0,10).ToList();
    Parallel.ForEach(integerList, options, i =>
    {
        Console.WriteLine(@"value of i = {0}, thread = {1}",
            i, Thread.CurrentThread.ManagedThreadId);
    });

    Console.WriteLine("Press any key to exist");
    Console.ReadLine();
} 

Как мы знаем, мы можем использовать опцию 'MaxDegreeOfParallelism', чтобы установить максимальное количество потоков, которые будут использоваться. Предположим, у нас есть 16 виртуальных виртуальных ядер, я хочу запустить приложение, которое должно работать только с несколькими выбранными ядрами, например, C1, C2, c8, c9. Подскажите пожалуйста как это можно сделать с помощью TPL?

Спасибо, Виджай

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Этот вид микрооптимизации во время выполнения выходит за рамки C#. И это определенно не должно быть жестко закодировано в самой программе. Обычно функции балансировки нагрузки. NET и ОС будут эффективно работать с потоками.

При такой разнице может применяться скорость: https://ericlippert.com/2012/12/17/performance-rant/

Однако вы можете установить такие ограничения в ОС, даже не глядя на приложения. код: https://www.techjunkie.com/restrict-apps-cpu-cores-processor-affinity/ Это больше похоже на то, что вам нужно / нужно использовать.

0 голосов
/ 30 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...