Схема вычислений для уравнения Лапласа
Здесь я напишу о том, как была устроена схема вычислений в моих экспериментах. На машине клиента каждая подзадача будет разделена на подзадачи. После чего задачи распределяются по решателям. Каждая задача будет передана на решатель соответствующий ей. Некоторые подзадачи не будут никуда отправлены, т.к. будут вычисляться на машине клиента.
Следующим этапом является запуск сервера. Это отдельная программа, предназначенная для обмена данными между решателями. Поскольку не всегда удаётся разделить вычисления так, чтобы каждый решатель мог обрабатывать данные независимо от обработки других решателей, то возникает необходимость в подобного рода программе.
Программу-сервер предпочтительно запускать на компьютере, доверенном клиенту, а так же имеющем достаточную ширину канала для доступа в интернет. Лучше всего, если сервер будет запущен на машине клиента, которая так же производит вычисления подзадачи.
Применительно для метода конечных разностей, который используется для решения уравнения Лапласа, решатели будут обмениваться с сервером перехлёстами и максимальным значением невязки. Перехлёсты предаются файлами. Эти файлы содержат числа — значения столбца или строчки подматрицы смежных с граничными столбцом или строкой соответственно. Поскольку именно эта часть подматрицы данного решателя является граничной в подматрицах некоторых других решателей. Максимальное значение невязки передаётся числом с плавающей точкой двойной точности.
Следует отметить, что не каждый решатель пересылает свои данные на сервер. Если какой-либо решатель запущен на кластере, а его подобласть окружена подобластями решателей, так же запущенными на этом кластере, то обмен перехлёстами и отклонениями осуществляется на самом кластере, не выходя за его пределы. Подразумевается, что для этого используются технология MPI. Благодаря этому уменьшается нагрузка на сервер и ускоряется обмен данных между решателями, т. к. обмен файлами внутри одного кластера существенно быстрее обмена файлами через интернет.
После запуска сервера запускаются все решатели. Каждый решатель получает доступ лишь к одной доступной только ему подзадаче и выполняет свои действия над ней. Для метода конечных разностей решатель просчитает некоторое количество итераций над подматрицей, после чего будет запущена процедура синхронизации. Синхронизация, как и было описано выше, проходит посредством обмена перехлестами между другими решателями с помощью сервера или через MPI. Затем проанализировав значение критерия завершения, решатель либо сохраняет результат в файл и завершается, либо, обновив граничные элементы матрицы значений, продолжает расчёт. Схема вычислений представлена ниже.