Подделка единого адресного пространства - PullRequest
0 голосов
/ 24 мая 2010

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

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

Правки:

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

Ответы [ 3 ]

0 голосов
/ 24 мая 2010

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

0 голосов
/ 24 мая 2010

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

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

0 голосов
/ 24 мая 2010

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

...