Потоки против процессов: правильны ли визуализации? - PullRequest
0 голосов
/ 07 апреля 2020

У меня нет опыта работы в области компьютерных наук, но я прочитал несколько статей о многопроцессорности и многопоточности и хотел бы знать, правильно ли это.

СЦЕНАРИЙ 1: ОТКЛЮЧЕНИЕ ГИПЕРТРИДИНГА

HYPERTHREADING ENABLED

Допустим, у меня есть 2 ядра, 3 потока «работают» (конкурируют?) На ядро, как показано на рисунке (ГИПЕР-РЕЗЬБА ОТКЛЮЧЕНА). Затем в какой-то момент я делаю снимок и наблюдаю, например, что: Core 1 работает под управлением Thread 3. Core 2 работает под управлением Thread 5.

Верны ли эти объявления (и картинка)?

A) Параллельно выполняется 6 потоков.

B) Параллельно работают 2 потока (3 и 5) (и процессы).

СЦЕНАРИЙ 2: ГИПЕРТРЕЙДИНГ ВКЛЮЧЕН

HYPERTHREADING ENABLED

Допустим, на этот раз я включил многопоточность.

Являются ли эти объявления (и изображение) правильными?

C) В параллельном режиме выполняется 12 потоков.

D) Существует 4 потока (3,5 , 7,12) (и процессы), работающие в 'почти' параллельно, в vcpu?.

E) Есть 2 потока (5,7), выполняющих 'strictlÿ́' параллельно?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Есть несколько вещей, которые не верны (или нереалистичны c) в ваших диаграммах:

  1. Типичный настольный компьютер или ноутбук имеет один набор микросхем процессора на материнской плате. В Intel и аналогичных чипсет состоит из чипа процессора вместе с чипом «северного моста» и чипом «южного моста».

    На компьютере серверного класса материнская плата может фактически иметь несколько чипов ЦП.

  2. Типичный современный чип ЦП будет иметь более одного ядра; например, 2 или 4 для младших микросхем и до 28 (для Intel) или 64 (для AMD) для высокопроизводительных чипов.

  3. Гиперпоточность и VCPU - разные вещи.

    • Гиперпоточность - это запатентованная технология Intel 1 , которая позволяет одному физическому устройству работать в качестве двух логических ядер, работающих параллельно с двумя независимыми потоками инструкций. По сути, физическое ядро ​​имеет два набора регистров; то есть 2 счетчика программ, 2 указателя стека и так далее. Инструкции для обоих потоков команд совместно используют конвейеры выполнения команд, кэши памяти на кристалле и т. Д. Результат net состоит в том, что для некоторых наборов команд (не требующих большого объема памяти) вы получаете значительно лучшую производительность, чем если бы конвейеры команд были выделены одному потоку команд. Операционная система видит каждую гиперпотоку как выделенное ядро, хотя и немного медленнее.

    • Терминология VCPU или виртуального ЦП, используемая в контексте облачных вычислений. На типичном сервере облачных вычислений клиент получает виртуальный сервер, который ведет себя как обычный одноядерный или многоядерный компьютер. В действительности на вычислительном узле обычно будет много таких виртуальных серверов. Некоторое специальное программное обеспечение, называемое гипервизором, обеспечивает доступ к аппаратным устройствам (сетевым интерфейсам, дискам и т. Д. c) и распределяет ресурсы ЦП в соответствии с потребностями. VCPU представляет собой представление ядра виртуального сервера и отображается гипервизором на физическое ядро. (Уловка учета заключается в том, что VCPU обычно перегружены; т. Е. Сумма VCPU превышает количество физических ядер. Это нормально ... если только все виртуальные серверы не заняты одновременно.)

    На вашей диаграмме вы используете термин VCPU, где правильным термином будет Hyperthread.

  4. На вашей диаграмме показано каждое ядро ​​(или HyperTread), связанное с отдельным группа тем. В действительности, отображение между ядрами и нитями является более плавным. Если ядро ​​не используется, операционная система может свободно планировать запуск любого (работающего) потока на нем. (Некоторые операционные системы позволяют вам ie передавать данный поток в указанное c ядро ​​по соображениям производительности. Это редко требуется.)


Ваш наблюдения относительно первой диаграммы верны.

Ваши наблюдения относительно второй диаграммы немного неверны. Как указано выше, гиперпотоки в ядре разделяют конвейеры выполнения. Это означает, что они эффективно выполняются одновременно. Здесь нет «почти параллели». Как я уже говорил выше, проще всего думать о гиперпотоке как о ядре, «работающем немного медленнее».


1 - Intel был не первым компьютером, который смог с этим справиться идея. Например, мэйнфреймы CD C использовали эту идею в 1960-х годах для получения 10 PPU из одного ядра и 10 наборов регистров. Это было до дней конвейерной архитектуры.

0 голосов
/ 07 апреля 2020

Процесс - это экземпляр программы, запущенной на компьютере. ОС использует процессы для максимального использования, поддержки многозадачности, защиты и т. Д. c. Процессы запланированы ОС - время, разделяющее ЦП. Все процессы имеют ресурсы, такие как страницы памяти, открытые файлы и информацию, которая определяет состояние процесса - счетчик программ, регистры, стеки. В CS параллелизм - это способность различных частей или блоков программы, алгоритма или задачи выполняться не по порядку или в частичном порядке, не влияя на конечный результат , «Традиционный процесс» - это когда процесс представляет собой абстракцию ОС для представления того, что необходимо для запуска одной программы. Существует NO параллелизм внутри «традиционного процесса» с одним потоком выполнения. Однако «современный процесс» - это процесс с несколькими потоками исполнения. Поток - это просто поток последовательного выполнения внутри процесса. Между потоками нет защиты, поскольку они совместно используют ресурсы процесса. Многопоточность - это когда одна программа состоит из нескольких различных параллельных действий (потоков выполнения). Есть несколько концепций, которые необходимо различать: многопроцессорность - это когда у нас несколько процессоров. Мультипрограммирование, когда ЦП выполняет несколько заданий или процессов. Многопоточность - это когда ЦП выполняет несколько mhreads на процесс. Так что означает одновременное выполнение двух потоков? Планировщик может запускать потоки в любом порядке и чередовать FIFO или Random. Он может выбрать запуск каждого потока до завершения или отрезка времени большими кусками или маленькими кусками. Параллельная система поддерживает более одной задачи, позволяя всем задачам добиться прогресса. Параллельная система может выполнять более одной задачи одновременно. Однако возможно параллелизм без параллелизма. Однопроцессорные системы создают иллюзию параллелизма за счет быстрого переключения между процессами (ну, на самом деле, планировщики ЦП создают иллюзию). Такие процессы выполнялись одновременно, но не параллельно. enter image description here

enter image description here

Гиперпоточность - это имя Intel для одновременной многопоточности. По сути, это означает, что одно ядро ​​процессора может работать над двумя проблемами одновременно. Это не значит, что процессор может выполнять вдвое больше работы. Только то, что он может обеспечить использование всей своей емкости, решая сразу несколько простых задач. Для вашей ОС каждое реальное кремниевое ядро ​​ЦП выглядит как два, поэтому оно подает каждую работу, как если бы они были отдельными. Поскольку многого из того, что делает процессор, недостаточно для его максимальной работы, гиперпоточность гарантирует, что вы получаете ценность своих денег от этого чипа.

...