Недостающее “Сравнение Параллельной обработки API”. Как я выбираю библиотеку Multi-threading?

Я использую фразы Parallel Processing & Multi Threading попеременно, потому что я чувствую, что нет никакого различия между ними. Если я неправ, исправьте меня.

Я не про в Параллельной обработке. Я знаком с и использовал потоки.NET и Потоки POSIX. Не что иное как это.

Я просто просматривал архивы ТАК на многопоточности и удивленный видеть, что существует столько библиотек для Много Поточной обработки.

http://en.wikipedia.org/wiki/Template:Parallel_computing перечисляет вниз API известных (я не уверен, существуют ли какие-либо другие), Библиотеки Многопоточности.

  1. Потоки POSIX
  2. OpenMP
  3. PVM
  4. MPI
  5. UPC
  6. Intel Threading Building Blocks
  7. Повышение. Поток
  8. Глобальные массивы
  9. Очарование ++
  10. Cilk
  11. Co-массив Фортран
  12. CUDA

Кроме того, я удивлен видеть, что http://en.wikipedia.org/wiki/Comparison_of_Parallel_Computing_Libraries_ (API) отсутствует.

До настоящего времени я никогда не был ситуацией, где я должен выбрать между этими библиотеками. Но, Если я сталкиваюсь с одной такой ситуацией.

  1. Как я должен выбрать тот?
  2. Что такое Профессионалы и Недостатки этих библиотек?
  3. Почему у нас есть столько библиотек для того, чтобы приняться за решение единственной проблемы?
  4. Какой является лучшим?

6
задан claws 25 February 2010 в 22:17
поделиться

6 ответов

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

Правильный IPC осуществляется с помощью соответствующих средств связи, таких как разъемы. Совместное использование памяти никогда не является способом.

-121--3787320-

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

from django import db

db.reset_queries()

См. также:

  • «Отладка утечки памяти Джанго с помощью TrackRefs и Guppy» Микко Охтамаа:

    Джанго следит за всеми запросами цели отладки (connection.queries). Этот список сбрасывается в конце HTTP-запроса. Но в автономном режиме нет запросы. Так что нужно вручную сброс в список запросов после каждого рабочий цикл

  • «Почему Джанго утекает память?» в Django FAQ - он рассказывает оба об установке DEBUG в значение False , что всегда важно, и об очистке списка запросов с помощью db.reset _ queries () , важна в таких приложениях, как ваша.

-121--2594516-

[1] Правильный выбор параллельной библиотеки зависит от типа целевой параллельной машины : (1) машины общей памяти (т.е. многоядерной) и (2) машины распределенной памяти (т.е. Cell, Grid computing, CUDA). Также необходимо определить, какую модель параллельного программирования требуется использовать : (1) многопоточные приложения общего назначения, (2) параллелизм на уровне петель, (3) расширенный параллелизм, например конвейер, (4) параллелизм на уровне данных.

Во-первых, модель общей памяти представляет собой просто многопоточное программирование в качестве адресного пространства для всех вычислительных ядер (например, многопроцессорных микросхем и симметричных многопроцессорных процессоров). Нет необходимости явно обмениваться данными между потоками и процессами. OpenMP, Cilk, TBB все для этого домена.

Модель распределенной памяти использовалась в качестве основной модели параллельного программирования для суперкомпьютеров, где каждая отдельная машина (т.е. адресное пространство не является общим) подключена через плотную сеть. MPI - самая известная для него модель программирования. Однако эта модель все еще существует, особенно для CUDA и Cell-программирования, где адресное пространство памяти не является общим. Например, CUDA разделяет память ЦП и память графического процессора. Необходимо явно передать данные между памятью ЦП и памятью графического процессора.

Далее необходимо рассмотреть модель параллельного программирования . Потоки POSIX предназначены для многопоточного программирования общего назначения (например, высокоопоточных веб-серверов). Однако OpenMP очень специализирован для параллелизма на уровне цикла, чем общий API потока POSIX/Win32. Это упрощает резьбовую вилку и соединение. Intel TBB поддерживает параллелизм на уровне задач, включая петли и конвейеры. Существует еще один параллелизм, который можно использовать: data -параллелизм уровня. Для этой проблемы GPGU лучше, чем CPU, поскольку GPGPU специализируется на параллельных рабочих нагрузках данных. Существует также модель программирования, называемая потоковой обработкой.

[2] Я уже ответил выше.

[3] Просто. Существует множество различных моделей параллельного/параллельного программирования и различных параллельных машин. Итак, это не одна проблема; В параллельном/параллельном программировании существует так много вспомогательных проблем, которые не могут быть решены суперединой моделью программирования.

[4] Это зависит. Серьезно.

9
ответ дан 8 December 2019 в 14:42
поделиться

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

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

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

1
ответ дан 8 December 2019 в 14:42
поделиться

.NET 4.0 будет иметь некоторую параллельную поддержку сборки: http://code.msdn.microsoft.com/ParExtSamples

0
ответ дан 8 December 2019 в 14:42
поделиться

Многопоточность - это способ достижения "параллельной обработки" на подходящем компьютере (несколько процессоров/ядер) и современной операционной системе. Но "параллельная обработка" также может быть осуществлена на кластере машин "без общего доступа", которые обмениваются данными через какую-либо сеть (ethernet для копеек и myrinet или dolphin для богатых исследовательских групп/компаний) - где каждый компьютер может иметь один процессор и запускать один пользовательский поток большую часть времени.

2
ответ дан 8 December 2019 в 14:42
поделиться

Правильный выбор зависит от целевой архитектуры.

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

Также обратите внимание, что варианты выбора не обязательно являются взаимоисключающими. В аспирантуре я написал программу, которая использовала MPI для связи между узлами суперкомпьютера и использовал потоки pthread, чтобы воспользоваться преимуществами SMP на каждом узле. Это не редкость в научных вычислениях.

1
ответ дан 8 December 2019 в 14:42
поделиться
  • mpi - это передача сообщений, а не многопоточный интерфейс

  • pvm заменяется mpi для большинства целей

  • cilk не работает для большинства целей

  • UPC, Co-array Fortran, глобальные массивы не являются многопоточными библиотеками , они предназначены для работы с распределенной памятью

  • cuda для устройств, сильно отличающихся от обычных процессоров.

  • OpenMP может быть ограничивающим, если вы работаете вне вычислительной алгебры / приложений.

  • Потоки POSIX де-факто являются стандартом для UNIX, я не уверен насчет Windows

  • boost.thread - это универсальная объектно-ориентированная оболочка для базовых библиотек

  • не широко используется за пределами вычислительной химии / биологии

  • Блоки Intel имеют множество функций, но это сложная библиотека для использования

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

3
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: