У меня есть большая научная вычислительная задача, которая очень хорошо распараллеливается с SMP, но на слишком мелком уровне, чтобы ее можно было легко распараллелить с помощью явной передачи сообщений. Я хотел бы распараллелить его в адресных пространствах и физических машинах. Возможно ли создать планировщик, который будет распараллеливать уже многопоточный код на нескольких физических компьютерах при следующих условиях:
- Код уже является многопоточным и может довольно хорошо масштабироваться в конфигурациях SMP.
- Тот факт, что не все потоки выполняются в одном и том же адресном пространстве или на одной физической машине, должен быть прозрачным для программы, даже если в некоторых случаях это приводит к значительному снижению производительности.
- Вы можете предположить, что на всех задействованных физических машинах работают операционные системы и процессоры с двоично-совместимой архитектурой.
- Такие вещи, как блокировки и атомарные операции, могут быть медленными (с задержкой в сети и всем остальным), но они должны «просто работать».
Редактирует:
- Меня интересует только пропускная способность, а не задержка.
- Я использую язык программирования D и почти уверен, что готового решения нет. Меня больше интересует, осуществимо ли это в принципе, чем конкретное консервированное решение.