7

Современные языки программирования обеспечивают параллелизм и механизмы параллелизма как граждан первого класса для своих пользователей. Я понимаю, как программируются параллельные алгоритмы, и можно представить себе, как два потока на многоядерном процессоре могут работать параллельно.Как возможен параллелизм на одном потоке/ядре?

Тем не менее, большинство этих платформ также поддерживают параллельные процессы в одном потоке.

  • Связаны ли эти процессы параллельно?
  • Как на уровне сборки могут выполняться две разные процедуры одновременно на одном потоке?

ответ

6

TLTR; : параллельность (в смысле true одновременное выполнение) на одном, не гиперпоточном ядре процессора, НЕВОЗМОЖНО.


Оборудование (< - РЕДАКТИРОВАТЬ) Paralellism может быть достигнуто на нескольких уровнях. Заказанный уменьшающейся зернистостью:

  1. мульти-хоста
  2. многопроцессорных
  3. многоядерный
  4. мульти-темы ("Hyper-Threading", т.е. "НТ") (EDIT: Я добровольчества опустить случай векторизованных compuations где несколько АЛУ может быть приводимый одним и тем же ядром)

Ваш вопрос относится к управлению двух программных потоков в случаях 3. (в случае, если HT недоступен/отключен) или 4.

  • В обоих случаях процессы фактически НЕ запускаются параллельно. Пользователь имеет впечатление одновременности из-за чрезвычайно быстрых переключателей контекста, выполняемых на уровне ЦП, которые, как правило, выделяют, последовательно физическое ядро ​​(соответственно время), на одну или другую программную нить

  • В обоих случаях случаях эти процедуры просто не выполняются одновременно, а последовательно

относительная приоритетность каждого из этих 2 процедуры могут быть установлены на различных операционных систем на «приоритет» вы даете процесс, который будет обрабатываться планировщиком ОС, который, в свою очередь, будет выделять процессорное время.

HTH.

Чтобы выполнить тесты, чтобы лучше понять эту тему, вы можете захотеть «слияния cpu» Google. Это позволит вам запустить двухпоточный процесс на одном физическом ядре многоядерного процессора и время, затрачиваемое каждым из потоков, при изменении их приоритета и т. Д.

+0

(4) смешивает две разные вещи. HT - это аппаратная поддержка, позволяющая быстро переключаться между двумя потоками (поэтому, если один поток ожидает данных из памяти, другой может взять на себя). есть также (5), которые являются «простыми» потоками на программном уровне. как 4, так и 5 не являются «истинными» потоками, где операции происходят параллельно, но (4) значительно приближаются, поскольку некоторые операции (или частичные операции) могут возникать параллельно с другим гиперпотоком. например, выборка памяти для одной гиперпотоки может происходить, пока выполняется другая. –

+0

@adrew cooke: спасибо за уточнение списка. Я намеренно не включил (5) в список именно потому, что это «программный» параллелизм, поэтому вы правы (и я изменяю начальную запись): я только перечислял «аппаратные» типы параллелизма. –

+0

-1: Все современные процессоры обеспечивают параллелизм на уровне команд. См. Мой ответ. –

1

Да, это параллелизм в каждом потоке, и вы получаете его бесплатно, независимо от того, какой язык программирования вы используете (хотя количество параллелизма может варьироваться).

Это называется instruction-level parallelism.Детали довольно сложны и различаются между различными микро-архитектурами процессора.

Computer Architecture: A Quantitative Approach - блестящая книга, которая включает в себя главу о параллелизме на уровне инструкций, а в примерах книги рассказывается, как рационально думать о технике.

Заканчивать следующие ссылки для получения дополнительной информации:

http://en.wikipedia.org/wiki/Superscalar

http://en.wikipedia.org/wiki/Instruction_pipelining

http://en.wikipedia.org/wiki/Out-of-order_execution