В чем разница между многоядерным и параллельным программированием - PullRequest
4 голосов
/ 21 марта 2011

Может ли кто-нибудь помочь мне, я работаю над презентацией и хотел бы немного рассказать о - «Разница между многоядерным и параллельным программированием», я немного погуглил, но не нашел много хороших описаний, любая помощь приветствуется!:)

Спасибо,

Имон

Ответы [ 5 ]

4 голосов
/ 21 марта 2011

Параллельный (происходит или существует одновременно) подразумевает, что другой код МОЖЕТ выполняться в одном и том же цикле. Это означает, что возможно может происходить параллельно, если доступно несколько процессоров или процессор с несколькими ядрами, и программа создана правильно. Простое добавление потоков не означает одновременного выполнения.

Причина, по которой я говорю МОЖЕТ и , возможно , заключается в том, что в любое время отдельным потокам программ необходимо совместно использовать энергозависимое / изменяемое состояние, другие потоки, которым необходим доступ к этому состоянию, не могут продолжать выполнение и придется ждать своей очереди, чтобы получить доступ к этому состоянию, и все снова начнет происходить последовательно.

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

Параллельное программирование очень сложно сделать корректно с изменяемым общим состоянием.

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

Вы также можете заставить однопоточные программы появляться одновременно в многоядерной / многопроцессорной системе, если они могут одновременно работать с независимыми диапазонами входных данных. Пример: однопоточная программа 3D-рендеринга может на двухъядерной машине запускать 2 отдельных экземпляра: первый рендеринг всех нечетных кадров, а второй рендеринг всех четных кадров. Пока они не пытаются использовать какие-либо изменяемые ресурсы.

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

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

2 голосов
/ 21 марта 2011

Параллельное программирование является более широким - оно просто относится к написанию программного обеспечения, которое будет работать «одновременно», то есть: одновременно будет происходить больше чем одна вещь.

«Многоядерное» программирование на самом деле относится к определенному подмножеству параллельного программирования, в котором вы нацеливаетесь на несколько доступных ядер ЦП на конкретной машине. Это наиболее распространенная форма параллельного программирования (обычно один процесс выполняется на одном компьютере), но все же только одна форма параллельного программирования.

1 голос
/ 07 января 2012

Параллельное программирование относится к операциям, которые кажутся перекрывающимися, и в первую очередь касается сложности, возникающей из-за недетерминированного потока управления.Количественные затраты, связанные с параллельными программами, обычно являются как пропускной способностью, так и задержкой.Параллельные программы часто связаны с вводом-выводом, но не всегда, например, параллельные сборщики мусора полностью загружены на процессор.Педагогическим примером параллельной программы является веб-сканер.Эта программа инициирует запросы на веб-страницы и принимает ответы одновременно, когда результаты загрузок становятся доступными, накапливая набор страниц, которые уже были посещены.Поток управления является недетерминированным, поскольку ответы не обязательно принимаются в одном и том же порядке при каждом запуске программы.Эта характеристика может сильно затруднить отладку параллельных программ.Некоторые приложения принципиально параллельны, например, веб-серверы должны одновременно обрабатывать клиентские соединения. Erlang , F # асинхронные рабочие процессы и библиотека Scala Akka , возможно, являются наиболее многообещающими подходами к высококонкурентному программированию.

Многоядерное программирование является частным случаем параллельного программирования.Параллельное программирование касается операций, которые перекрываются для конкретной цели повышения пропускной способности.Сложности параллельного программирования можно избежать, сделав поток управления детерминированным.Как правило, программы порождают наборы дочерних задач, которые выполняются параллельно, а родительская задача продолжается только после завершения каждой подзадачи.Это делает параллельные программы намного проще для отладки, чем параллельные программы.Сложной частью параллельного программирования является оптимизация производительности по таким вопросам, как гранулярность и коммуникация.Последнее по-прежнему является проблемой в контексте многоядерных процессоров, поскольку перенос данных из одного кэша в другой сопряжен со значительными затратами.Плотное матрично-матричное умножение является педагогическим примером параллельного программирования, и его можно эффективно решить с помощью алгоритма «разделяй и властвуй» Стразена и параллельно атакуя подзадачи. Cilk , пожалуй, является наиболее перспективным подходом для высокопроизводительного параллельного программирования на многоядерных процессорах, и он был принят как в многопоточных строительных блоках Intel , так и в параллельной библиотеке задач Microsoft (в .NET 4).

1 голос
/ 10 мая 2011

На высоком уровне, многоядерный является атрибутом чипа процессора в вашем компьютере. Многоядерный означает, что он имеет несколько процессорных ядер. Существует несколько типов многопроцессорных компьютеров: суперкомпьютеры старого стиля с тысячами компьютеров, подключенных через Ethernet, системы с более чем процессорами (например, 2 Pentium 4) и современные многоядерные системы, в которых каждый процессор имеет несколько процессорных ядер 9like Intel i7). Третий тип часто называют многоядерным чип-мультипроцессором (CMP).

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

  1. Параллельные программы могут работать на одном или нескольких ядрах.
  2. Параллельные программы могут использоваться на любом типе мультипроцессора, который я упомянул выше.

Итак, подведем итог:

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

1 голос
/ 21 марта 2011

Вы можете выполнять параллельное программирование на машине, которая имеет только одно ядро ​​ЦП.Операционная система создает иллюзию того, что одновременно работает более одного потока, и быстро переключается между ними.

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

...