Добрый день. Сегодня хотелось бы разобрать, что такое потоки в процессоре. Те самые, о функциях и возможностях которых большинство и не догадывается, однако любят хвастаться остальным.
Если провести сравнение процессоров разных поколений, то можно заметить одну интересную тенденцию: многопоточность – штука полезная и здорово повышает суммарную производительность системы.
Начнем с того, что каждый современный процессор построен на физических ядрах с определенной частотой. Допустим, 1 ядро имеет тактовую частоту в 3 ГГц, т.е. может выполнить 3 млрд вычислительных операций за секунду (такт). Но современные ОС (Windows, Linux, MacOS) запускают более 3 млрд процессов, т.е. пользователь начинает сталкиваться с таким понятием как прерывание: ЦП физически не успевает обрабатывать все сразу и начинает переключаться на самые приоритетные задачи.
Логика здесь элементарная: присмотреться к многоядерным и многопоточным решениям. Разгон не дает линейного прироста в производительности, иначе такие гиганты как Intel и AMD выпускали бы процессоры на 5-6 и более ГГц.
Польза от повышения частоты есть, но она нивелируется увеличенным энергопотреблением и сокращением срока службы ЦП.
Одноядерный против многоядерного процессора
Во-первых, нам нужно прояснить разницу между одноядерным процессором и многоядерным процессором? Проще говоря, одноядерный процессор сможет обрабатывать только одну программу за раз. Однако, когда вы запускаете несколько программ одновременно, то одноядерный процессор разделит все программы на небольшие части и одновременно будет выполняться с квантованием времени, как вы можете видеть на приведенном ниже рисунке.
Выполнение процесса: одноядерный процессор
Производительность ЦП будет зависеть от количества ядер на машине и скорости, с которой отдельные ядра могут выполнять инструкции. Таким образом, если ваш веб-сайт загружается медленно и у вас одноядерный процессор, возможно, стоит приобрести выделенный сервер с многоядерным процессором или обновить тарифный план хостинга. В настоящее время этот тип процессоров используется редко, потому что нам нужна высокая вычислительная мощность для решения наших проблем в кратчайшие сроки.
В отличие от одноядерной обработки, это способ, которым вычислительные задачи делятся на части, а многоядерный процессор (несколько ядер ЦП) выполняет каждую подзадачу одновременно, как вы можете видеть на рисунке ниже:
Выполнение процесса: многоядерный процессор
Это также известно как параллельное выполнение, потому что все подзадачи выполняются параллельно, и это то, сколько задач может быть обработано одновременно. Все современные процессоры, используемые в коммерческих целях, должны иметь многоядерные процессоры, чтобы выполнять задачи в более короткие сроки.
Типы многопоточной обработки
Как мы уже говорили в начале, у всех нас есть концепция, что многопоточная обработка — это просто распараллеливание процессов (то есть выполнение нескольких задач одновременно), но на самом деле все немного сложнее, и существуют разные типы. многопоточная обработка.
Множественные «крупнозернистые» нити
Простейший тип многопоточности возникает, когда поток выполняется до тех пор, пока он не будет заблокирован событием, которое обычно создает блокировку с большой задержкой. Такой сбой может быть вызван нехваткой кеша, который должен обращаться к памяти вне кристалла, что может занять сотни циклов процессора для возврата данных. Вместо того, чтобы ждать разрешения сбоя, процессор переключит выполнение на другой поток, который уже был готов к запуску, и только когда данные из предыдущего потока будут получены, они будут возвращены в список готовых к запуску потоков.
Концептуально это похоже на совместную многозадачность, используемую в операционных системах реального времени, в которой задачи добровольно отказываются от времени выполнения процессора, когда им нужно дождаться какого-либо события. Этот тип многопоточности известен как «блочная» или «крупнозернистая».
Многопоточность с чередованием
Целью этого типа многопоточной обработки является снятие всех блокировок зависимостей данных с конвейера выполнения. Поскольку один поток относительно независим от других, меньше шансов, что инструкции на стадии конвейера потребуется вывод предыдущей инструкции в том же канале; Концептуально это похоже на превентивную многозадачность, используемую в операционной системе, и аналогией может быть то, что временной интервал, предоставляемый каждому активному потоку, составляет один цикл ЦП.
Конечно, этот тип многопоточной обработки имеет главный недостаток, заключающийся в том, что каждый этап конвейера должен отслеживать идентификатор потока инструкции, которую он обрабатывает, что снижает его производительность. Кроме того, поскольку в конвейере одновременно выполняется больше потоков, общие ресурсы, такие как кеш, должны быть больше, чтобы избежать ошибок.
Параллельная многопоточность
Самый продвинутый тип многопоточности применяется к процессорам, известным как суперскаляры. В то время как типичный суперскалярный ЦП выдает несколько инструкций из одного потока в каждом цикле ЦП, при одновременной многопоточной обработке (SMT) суперскалярный процессор может выдавать инструкции из нескольких потоков в каждом цикле. Признавая, что любой поток имеет ограниченный уровень параллелизма на уровне инструкций, эта многопоточность пытается использовать параллелизм, доступный для нескольких потоков, для уменьшения потерь, связанных с неиспользуемыми пространствами.
Чтобы различать другие типы многопоточной обработки SMT, часто используется термин «временная многопоточная», чтобы указать, когда однопоточные инструкции могут выполняться одновременно. Реализации этого типа включают DEC, EV8, Intel HyperThreading Technology, IBM Power5, Sun Mycrosystems UltraSPARC T2, Cray XMT, а также микроархитектуры Bulldozer и Zen от AMD.
Поток против многопоточности
Поток – это единый последовательный поток управления в программе, который позволяет выполнять несколько действий в рамках одного процесса. Однако однопоточные процессы основаны на выполнении программ (или инструкций) в одной последовательности. Проще говоря, один поток похож на одну команду, которая выполняется за раз.
Читать Надежное и быстрое копирование с помощью этих копировальных аппаратов Top Flash Drive
Большинство производителей процессоров используют метод одновременной многопоточности (SMT), чтобы гарантировать, что один процессор может запускать несколько потоков. Многопоточность похожа на многозадачность, при которой одновременно выполняется несколько потоков, а возможность многопоточности управляет многочисленными запросами одного и того же пользователя без открытия нескольких копий программ, запущенных на компьютере.
Технология Hyper-threading
Вы наверняка слышали или догадались из вышесказанного, что чем больше в процессоре ядер и гигагерц, тем он быстрее обрабатывает задачи, которые вы ему даете. Это правда. Но не только ядра влияют на производительность, если речь идет о продуктах бренда Intel.
Компания изобрела технологию под названием «Hyper-threading» (полное — hyper-threading technology, HT либо HTT), которое переводится на русский язык как гиперточность. Она разработана для процев, основанных на микроархитектуре NetBurst.
HT отсутствует в устройствах линейки Core 2, в том числе «Duo» и «Quad». Схожая технология с таким же наименованием внедрена в продуктах Core i3, «i7» и нескольких «i5», а также в некоторые модели серий Itanium и Atom.
Пользовательские потоки против потоков ядра
Потоки пользовательского уровня – это потоки на стороне пользователя, которые обрабатываются как однопоточный процесс, поскольку ядро не знает об этих типах потоков. Эти потоки намного быстрее, чем потоки уровня ядра, потому что не требует синхронизации ядра.
Потоки уровня ядра управляются операционной системой напрямую, и в области приложения нет кода управления потоками. Любое приложение можно запланировать многопоточным, и ядро выполняет его планирование на поточной основе. По сравнению с потоками пользовательского уровня, эти потоки медленнее создаются и управляются.
Введение
Производительность всегда была и остается одной из главных характеристик процессоров. Она постоянно растет по мере освоения микроэлектронной промышленностью новых технологических рубежей. Кроме того, не полагаясь только на достижения технологии, разработчики процессоров вводят в них разнообразные архитектурные и структурные усовершенствования, среди которых важное место занимает параллелизм вычислений во всех его проявлениях: суперскалярности (superscalarity), многопоточности (multithreading), многоядерности (multicore) и мультипроцессорности (multiprocessing). В универсальных высокопроизводительных процессорах все эти подходы максимально совмещаются. Однако уровни параллелизма взаимозависимы, и на практике из-за их взаимного влияния приходится искать разумные компромиссы. Критерии для поиска таких компромиссов во многом зависят от назначения и области применения процессора. Одной из таких областей, предъявляющей специфические требования к параллелизму вычислений, является сетевая инфраструктура, в которой давно укоренились и продолжают с успехом использоваться интегрированные сетевые процессоры (ИСП).
Качественный анализ взаимосоотношения таких широко применяемых форм распараллеливания вычислений в процессорах как многопоточность и многоядерность позволяет выявить специфические с точки зрения этих форм особенности ИСП и оценить предпочтительные для них направления развития параллелизма вычислений.
Ядро против потоков
Вопрос о том, что более эффективно – потоки или ядра – определяется путем измерения производительности процессора. Вы можете протестировать оба метода самостоятельно, запустив одну и ту же программу (ту, которая использует и потоки, и ядра) на каждом типе ЦП, который у вас есть на вашем компьютере. Конечно, программы, использующие оба метода, должны совместно использовать ресурсы ЦП. Если у вас есть ЦП настольного компьютера и ноутбук, вы можете обнаружить, что ЦП ноутбука будет работать лучше, чем ЦП настольного компьютера из-за большего количества ядер. Однако при тестировании пользовательского приложения на двухъядерном ЦП вы заметите разницу в производительности между двумя машинами.
Параметры | Основной | Потоки |
Определение | Ядро ЦП – это физический аппаратный компонент. | Поток – это виртуальный компонент, который используется для управления задачами. |
Процесс | ЦП обращается ко второму потоку только в том случае, если информация, отправленная первым потоком, ненадежна. | Несколько вариантов взаимодействия ЦП с несколькими потоками. |
Развертывание | Это может быть достигнуто с помощью операции чередования. | Выполняется за счет использования нескольких процессоров ЦП |
Выгода | ЦП увеличивает объем работы, выполняемой за раз. | Потоки минимизируют затраты на развертывание и увеличивают количество откликов графического интерфейса. |
Использовать | Он использует переключение контента. | Потоки используют несколько процессоров для управления различными процессами. |
Блоки обработки | Для правильной работы требуется один процессор. | Для выполнения любой задачи требуется несколько процессоров. |
Ограничения | Потребляйте больше энергии при увеличении нагрузки | В случае одновременного выполнения нескольких процессов мы можем ощутить координацию между ОС, ядром и потоками. |
Пример | Он может выполнять несколько приложений одновременно. | Запуск поисковых роботов в кластере. |
Вместо итогов
Практика показывает, что современный универсальный ПК должен иметь в своем распоряжении как минимум 4 ядра/8 потоков, чего будет достаточно для большинства задач, связанных с обработкой данных. Хотя варианты из серии 6/12 выглядят более обещающими по той причине, что стоят они не намного дороже, а пользы от них больше.
В качестве «золотой» середины можем предложить свежий вариант модели, построенный на обновленной архитектуре Zen2. Он отлично справляется с играми, программами, распараллеливанием и обработкой данных, при этом отлично гонится(одним словом — стал популярным (появился в июле 2019)).
Надеемся, что вы почерпнули для себя полезную информацию, которая пригодится при подборе процессора для будущей системы. Следите за дальнейшими обновлениями, чтобы не пропустить новые статьи об анатомии ЦП.
С уважением Андрей Андреев
Заключительные слова
Если вы планируете в ближайшее время купить выделенную машину, возможно, вам стоит подумать о компромиссе между потоками и ядрами или потоками. Конечно, вы хотели бы получить что-то более эффективное с учетом объема данных и трафика веб-сайтов, которые вы планируете разместить на выделенном сервере.
Вы можете обнаружить, что приложение, использующее большое количество ядер, может одновременно выполнять несколько задач без каких-либо зависаний или задержек. Но предположим, что используемая система предназначена для очень простых приложений или однопоточных приложений. В этом случае желательно, чтобы вы выбрали более простой аппаратный компонент более низкого уровня для достижения лучших результатов.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.