Как кластеризовать два рабочих стола Ubuntu Linux для запуска программы?
Предыстория: Для некоторых друзей из местного учебного заведения я написал программу на Java, которая имитирует рост кристалла в микроклеточной матрице как параллельную программу, которая реализует 100 000 итераций МонтеКарло, каждая из которых состоит из 14 240^2 шагов. Впервые реализованный в 2-х измерениях, он способен поддерживать матрицу размером до 14,240x14,240, каждая ячейка является байтом, и связанные структуры данных для поддержки алгоритмов для вычисления областей зерен и т. Д.
Программа была написана в виде 4 параллельных потоков, которые используют четырехъядерный процессор (100%), причем каждый поток выполняет 1/4 число шагов, а потоки "рекомбинируют" в конце 14 240^2/4 испытаний и запускают следующая итерация, где я разветвляю новые темы. Доступ к общей матрице и т. Д. Контролируется с помощью synchronize
ключевое слово, и 4 потока контролируются для закрытия с помощью семафора.
Кроме того, я построил для них аппаратное обеспечение - процессор Intel Core i5 2500K, с 16 ГБ ОЗУ, двойным разделением на Windows (для их использования) и Linux - для моего тестирования.
Проблема: Эти друзья теперь хотят, чтобы я попытался помочь в написании трехмерной версии, и готовы уступить матрице размером 10 000x10 000x10 000.
Моя идея: Очевидно, что одна машина не сможет справиться с этим. Можно ли использовать кластер из двух-трех таких машин? Если да, может кто-нибудь подсказать мне о реализации с открытым исходным кодом, бесплатной, мета-программной или Java-реализации, которая может выполнять JVM на этих узлах, а затем запустить эту программу?
На одной машине я могу коснуться только матрицы 400x400x400. Я готов переписать код таким образом, чтобы каждый квадрант матрицы обрабатывался в отдельном кластере с каждым испытанием квадранта, но мне нужно знать, как выполнять программу одновременно на разных машинах и как синхронизировать вычисления.
Я остаюсь благодарен за любое предложение или идею.
1 ответ
MPI, вероятно, где вы должны начать. Интерфейс передачи сообщений очень распространен при создании кластеров.