Можно ли распространять программу MPI (C++) через Интернет, а не внутри кластера локальной сети?
Я написал некоторый код MPI, который работает безупречно на больших кластерах. Каждый узел в кластере имеет одинаковую архитектуру процессора и имеет доступ к сетевой (то есть "общей") файловой системе (так что каждый узел может освобождать фактический двоичный файл). Но рассмотрим этот сценарий:
- У меня в офисе есть машина с двухъядерным процессором (Intel).
- У меня есть машина дома с двухъядерным процессором (AMD).
Обе машины работают под управлением Linux, и обе машины могут успешно компилировать и запускать код MPI локально (т.е. используя 2 ядра).
Теперь можно ли связать две машины вместе с помощью MPI, чтобы я мог использовать все 4 ядра, учитывая разные архитектуры и учитывая тот факт, что нет общих (сетевых) файловых систем?
Если так, то как?
Спасибо, Бен.
2 ответа
Это возможно сделать. Большинство реализаций MPI позволяют вам указать расположение двоичного файла, который будет запускаться на разных машинах. В качестве альтернативы, убедитесь, что он находится на вашем пути на обеих машинах. Поскольку обе машины имеют одинаковый порядок байтов, это не должно быть проблемой. Вы должны будете убедиться, что любые входные данные, которые прочитаны отдельными процессами, доступны в обоих местах.
Есть много сложностей с этим. Вы должны убедиться, что межсетевые экраны между системами позволят запустить процесс и установить связь. Связь между машинами будет намного медленнее, поэтому, если вы кодируете, связь интенсивна или нетерпимость к задержке, вероятно, она будет довольно медленной. Скорее всего, ваше время выполнения на всех 4 ядрах будет больше, чем просто на двух компьютерах.
Нет географического ограничения на то, где расположены процессы. И, как сказал KeithB, нет необходимости иметь общий путь или даже один и тот же двоичный файл на обеих машинах. В зависимости от того, какую реализацию MPI вы используете, вам даже не понадобится тот же порядок байтов.
Вы можете точно указать путь к двоичному файлу на каждой машине, а также иметь два независимых двоичных файла. Однако следует помнить, что программа будет работать медленно, если инфраструктура связи между двумя узлами недостаточно быстра.