2013-11-15 4 views
4

Теперь я изучаю параллельные вычисления и алгоритмы. Я немного запутался в терминах concurrent execution и simultaneous execution.Разница между параллелизмом и одновременным?

В чем разница между этими условиями? Когда мы должны использовать concurrent и когда мы должны использовать simultaneous в параллельных вычислениях?

ответ

7

Одновременное выполнение заключается в использовании нескольких ресурсов (ядер, потоков HW и т. Д.) Для одновременного выполнения нескольких задач. Задачи не должны взаимодействовать каким-либо образом, например, у вас могут быть два разных приложения, работающих на двух разных ядрах.
Искусство проектирования системы для одновременного выполнения нескольких задач может иметь дело с одновременным выполнением. Гиперпоточность, например. также называется «SMT» - одновременная многопоточность, поскольку она связана с возможностью одновременного запуска двух потоков с их полным контекстом на одном ядре (это подход Intels, у AMD есть немного другое решение, см. Difference between intel and AMD multithreading)

Параллельность - это термин, находящийся на более высоком уровне абстракции, относящийся к миру ОС, это свойство среды выполнения, в которой у вас есть несколько задач, которые могут выполняться в заданный временной интервал, где у вас нет контроль над порядком или даже чередование, в котором они выполняются. На самом деле не имеет значения, они работают одновременно на нескольких ядрах или на одном ядре с некоторым механизмом преемственности и некоторым алгоритмом планирования. Важно то, что такой параллелизм заставляет вас проектировать свои задачи таким образом, чтобы гарантировать правильность (особенно если они взаимодействуют или обмениваются данными). Если задача спроектирована правильно (с надлежащей блокировкой, барьерами, семафорами и чем-то, что гарантирует правильный поток данных), и ОС выполняет свою работу должным образом (например, сохранение состояний при переключении контекста или очистка кэшей и удаление TLB), тогда может работать с любой формой исполнения модели «под капотом».

Поскольку вы имеете в виду параллельные алгоритмы, правильный термин для вас - это, вероятно, параллельное выполнение.

Есть довольно много примеров в этой теме (с дополнительными ссылками на источники - Я не буду копировать его здесь, чтобы избежать плагиата :) - Concurrency vs Parallelism - What is the difference?

+0

Мне нравится эта answer.But до сих пор у меня есть сомнения , Можете ли вы подробнее остановиться на этом: «... Одновременная многопоточность, поскольку она связана с возможностью одновременного запуска двух потоков с их полным контекстом в одном ядре ...». Я имею в виду, возможно ли, чтобы 2 потока выполнялись точно в одно и то же время на одном ядре. –

+0

@ShirgillAnsari, то есть концепция одновременной многопоточности. Аппаратное обеспечение дублирует некоторые компоненты (логические регистры и элементы архитектурного состояния), разделяет другие (например, некоторые из очередей) и разделяет остальные (кеши, предиктора, массивы случайных распределений). Реализации могут отличаться для каждого ЦП, но некоторые из них могут позволить вам выдавать и передавать инструкции из нескольких контекстов в каждом цикле, в то время как другие могут осуществлять арбитраж между ними в каждом цикле, но инструкции из разных контекстов будут по-прежнему сосуществовать в конвейере вместе, без необходимости для контекстного переключателя. – Leeor

+0

Вы сказали: «Одновременное выполнение - это использование нескольких ядер». По моему мнению, ваш ответ предполагает, что одновременное выполнение невозможно в одном ядре. Я прав? –

Смежные вопросы