Чтобы объяснить причину, по которой Hyper Threading помогает, требуется некоторое объяснение того, что это такое, и, в свою очередь, как ресурсы распределяются в процессоре.
Фон
Традиционный многоядерный процессор разделяет очень мало с точки зрения внутренних ресурсов между ядрами. В большинстве старых случаев только кэш L3 (и, возможно, L4, если он существовал) был распределен между ядрами, все остальное было уникальным для каждого ядра. Из-за того, как работают компьютеры, это приводит к тому, что большинство частей ядра фактически не используются каждой выполняемой на нем инструкцией.
Именно с этой неэффективностью можно столкнуться с гиперпоточностью. Общая идея заключается в том, что, разделяя многие ресурсы между двумя (или более) ядрами, вы можете выполнить почти одинаковый объем работы, используя гораздо меньше места (и мощности). Ограничением этого является, конечно, то, что вы не можете по-настоящему запустить 100% от того, что вы могли бы на процессоре с количеством физических ядер, равным сколь угодно большему количеству потоков у вас.
Вероятно, стоит отметить, что Hyper Threading - это не то же самое, что Symmetric MultiThreading, предоставляемый некоторыми другими архитектурами ЦП (POWER, SPARC и (возможно) чипами AMD Ryzen). SMT намного ближе к классическому многоядерному дизайну и не страдает от большинства проблем, которые делает Hyper Threading.
Итак, если вы не можете просто запустить что-либо на всех ядрах, для чего именно это нужно?
Ну, на самом деле это сложно сказать. Чтобы получить максимально возможную выгоду, вам на самом деле нужно сгруппировать подобный код в пары потоков, которые совместно используют ресурсы внутри ЦП), но даже в этом случае трудно быть уверенным, действительно ли Hyper Threading сильно поможет. Некоторые старые операционные системы вообще не делали такого типа группировки, и результаты по-прежнему считаются ярким примером фразы «патологически плохой». Более новые системы делают некоторый уровень группировки, но это все еще не идеально.
Тяжелые задачи ввода / вывода (например, веб-серверы и базы данных) на самом деле имеют тенденцию извлекать выгоду, по крайней мере, из Hyper Threading, но насколько они будут полезны, зависит именно от того, что они делают, и это один из немногих случаев, когда имеет достаточно четкое преимущество.
Однако достаточно хорошо известно, какие типы рабочих нагрузок хуже работают с SMT. Практически все, что требует использования всех ядер ЦП при 100% нагрузке, вряд ли получит большую пользу от SMT. На чипах HT он иногда будет работать медленнее, чем при отключенном HT. В некоторых других реализациях это может улучшать или не улучшать вещи или ухудшать их, в зависимости от того, что делается (например, микросхемы SPARC хорошо справляются с такими рабочими нагрузками, если они не выполняют действительно глубоко вложенные вызовы функций).
Хорошо, так что с этим Arma 3?
Как упомянуто выше, Hyper Threading может очень плохо повлиять на вашу производительность, если вы не группируете вещи разумно на каждом ядре. Логика, необходимая для такой группировки, обычно специфична для определенного программного обеспечения. Вышеупомянутый переключатель для Arma 3 просто контролирует, включена эта логика или нет. Теперь, что касается того, почему это не автоопределение, я не совсем уверен (не трудно понять, используется ли Hyper Threading или нет).