PLINQ и логические процессоры

Конфигурация моей системы следующая: Процессор Intel(R) Core(TM) i7-3820QM @ 2,70 ГГц, 2694 МГц, 4 ядра, 8 логических процессоров

Вы можете заметить, что моя машина имеет 4 ядра и 8 логических процессоров.

Если я собираюсь использовать запрос PLINQ, чтобы воспользоваться преимуществами параллелизма, могу ли я указать 7 для WithDegreeOfParallelism, чтобы запрос использовал преимущества всех логических процессоров, создавая один поток для каждого логического процессора. ?


person wonderful world    schedule 30.01.2014    source источник


Ответы (1)


  1. Вам не нужно сообщать PLINQ, сколько у вас логических процессоров. Он уже знает (используя Environment.ProcessorCount) и соответствующим образом оптимизирует запрос. Намерение WithDegreeOfParallelism состоит в том, чтобы контролировать то, что PLINQ не знает, например, если ваш код в основном I/O интенсивен, а не CPU интенсивен.
  2. Вы можете сделать это, если настаиваете.
  3. Если у вас 8 процессоров, зачем вам ограничиваться 7?
person i3arnon    schedule 30.01.2014
comment
Чтобы ответить на ваш третий вопрос, не имеет значения 7 или 8. Я просто оставил одно, если другие приложения будут голодать. - person wonderful world; 31.01.2014
comment
@wonderfulworld в этом нет необходимости. У ваших потоков есть временной интервал для запуска, и ОС беспокоится о голодании. вы должны использовать ресурсы, которые он вам дает, насколько это возможно. Поэтому, если ваш код интенсивно использует ЦП, оставьте его равным 8 (по умолчанию в PLINQ), если он интенсивно использует ввод-вывод, вам, вероятно, потребуется более высокое число. - person i3arnon; 31.01.2014
comment
Спасибо. Я понимаю, что операции с привязкой к ЦП должны быть параллельны, но не IO. Я ошибся? - person wonderful world; 31.01.2014
comment
@wonderfulworld Операции, связанные с ЦП, становятся быстрее, когда вы добавляете ядра, а операции ввода-вывода в основном нет. Это означает, что вы не должны выполнять больше операций, связанных с процессором, чем ваши ядра, но вы можете выполнять больше операций ввода-вывода (при условии, что они асинхронны). - person i3arnon; 31.01.2014
comment
@ I3arnon И до тех пор, пока операция, связанная с вводом-выводом, может использовать преимущества параллелизма. Например, чтение с диска обычно становится медленнее при увеличении количества потоков. - person svick; 02.02.2014