Как возможен параллелизм на одном потоке / ядре?

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

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

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

2 ответов


TLTR; : параллелизм (в смысле true simultanenous выполнение) на одном, не гиперпространственном ядре процессора, невозможно.


оборудование (

  1. многоузловых
  2. Multi-процессор
  3. многоядерные
  4. multi-threads ("Hyper-Threading", т. е. " HT") (Edit: я voluntarity опустить в случае векторизованных compuations, где несколько Алу может быть действие тем же ядром)

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

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

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

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

HTH.

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


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

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

Компьютерная Архитектура: Количественный Подход является блестящей книгой, которая включает в себя главу на уровне инструкций параллелизм и примеры из книги учат рациональному мышлению в области инженерии.

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

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

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

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