Подделка единого адресного пространства

У меня есть большая научная вычислительная задача, которая очень хорошо распараллеливается с SMP, но на слишком мелком уровне, чтобы ее можно было легко распараллелить с помощью явной передачи сообщений. Я хотел бы распараллелить его в адресных пространствах и физических машинах. Возможно ли создать планировщик, который будет распараллеливать уже многопоточный код на нескольких физических компьютерах при следующих условиях:

  1. Код уже является многопоточным и может довольно хорошо масштабироваться в конфигурациях SMP.
  2. Тот факт, что не все потоки выполняются в одном и том же адресном пространстве или на одной физической машине, должен быть прозрачным для программы, даже если в некоторых случаях это приводит к значительному снижению производительности.
  3. Вы можете предположить, что на всех задействованных физических машинах работают операционные системы и процессоры с двоично-совместимой архитектурой.
  4. Такие вещи, как блокировки и атомарные операции, могут быть медленными (с задержкой в ​​сети и всем остальным), но они должны «просто работать».

Редактирует:

  1. Меня интересует только пропускная способность, а не задержка.
  2. Я использую язык программирования D и почти уверен, что готового решения нет. Меня больше интересует, осуществимо ли это в принципе, чем конкретное консервированное решение.

person dsimcha    schedule 24.05.2010    source источник
comment
подробнее пожалуйста: операционная система, окружение, язык программирования и т.д. Насколько допустима задержка?   -  person mdma    schedule 24.05.2010
comment
Заголовок вопроса мне читается как распределенная общая память, а в пункте 2 говорится, что общего адресного пространства нет, т.е. распределенной памяти. Вам нужна общая память? Если да, требует ли пункт 2, чтобы потоки знали об окружающей среде?   -  person stephan    schedule 03.06.2010


Ответы (3)


Моя первая мысль — использовать Apache Hadoop. Он обеспечивает распределенное хранение и распределенные вычисления. Вы можете синхронизировать процессы, используя файлы в качестве замков.

person mdma    schedule 24.05.2010

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

person Jeremy Friesner    schedule 24.05.2010

Поскольку ваш пункт 2 предполагает, что вы можете жить с некоторым снижением производительности, вы можете рассмотреть гибридный подход: SMP на отдельных машинах, передача сообщений между машинами. Я не знаком с D, поэтому не могу дать конкретных советов. Кроме того, я видел неоднозначные отзывы о гибридном подходе для OpenMP+MPI, но он может подойти вам и вашему приложению.

РЕДАКТИРОВАТЬ: Возможно, вы захотите поискать в Google «разделенное глобальное адресное пространство», которое, кажется, довольно точно описывает желаемый вами подход. Как и раньше, у меня нет советов по использованию D для этого.

person High Performance Mark    schedule 24.05.2010