Страницы

Поиск по вопросам

суббота, 6 октября 2018 г.

Количество ядер процессора

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


Ответ

Стоит. Если система может выполнять одновременно 2 потока, а вы будете запускать, к примеру, 4, то лишние 2 потока не добавят эффективности. Если же система может выполнять больше потоков, чем вы создадите, то вы потеряете в эффективности - вычислительные ресурсы (оставшиеся ядра cpu) будут простаивать. Если задача распараллеливается - ее нужно распараллеливать настолько, насколько это возможно. Конечно, о здравом смысле тоже не стоит забывать. При увеличении количества потоков рано или поздно будет достигнута та ситуация, когда накладные расходы станут соизмеримыми (или превысят) чистое время вычислений.

Комментариев нет:

Отправить комментарий