2

У меня в начале 2011 года Quad Core i7 Mac. Из-за гиперпоточности многие программы сообщают о 8 "ядрах". Если бы я написал программу, которая выполняется параллельно, мог бы я запустить 8 экземпляров этой программы или только 4?

Я могу запустить столько потоков, сколько захочу, но буду ли я видеть, как 4 или 8 экземпляров программы выполняются параллельно?

1 ответ1

4

Процессор Intel Core i7 имеет 4 физических ядра, но каждое ядро может одновременно вводить до 2 потоков, отображая в общей сложности 8 потоков для операционной системы в виде «доступных логических процессоров».

В действительности одно ядро может обрабатывать только один поток за раз, но у него есть специальные механизмы организации очередей / синхронизации / планирования, позволяющие двум потокам одновременно находиться на разных этапах "конвейера". Это позволяет процессору завершить 2 потока раньше, чем если бы он обрабатывал только один поток за раз. Поскольку оба потока совместно используют один и тот же конвейер, выигрыш в производительности, очевидно, не будет в 2 раза. Большинство тестов дают преимущество в диапазоне от 10% до 50% в зависимости от типа выполняемых инструкций.

В ответ на ваш вопрос, если вы запустите 4, 8 или 16 экземпляров вашей программы, все они будут «запущены», но инструкции для каждого из них будут поставлены в очередь в зависимости от того, сколько доступно THREADS. Как только вы выйдете за пределы количества доступных ФИЗИЧЕСКИХ ЯДЕР (например, 5 или более), производительность снизится, поскольку любые потоки за пределами базы 4 будут совместно использовать физическое ядро ЦП.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .