Во-первых, вы должны знать, что этот подход будет ввести три уровня латентности для любой связи между узлами: память
- GPU на машине 1 к основной памяти на машине 1
- Основная память на машине 1 в основную память на машине 2
- Основная память на машине 2 к памяти GPU на машине 2
хороший первый шаг будет сделать некоторые задней части расчетов диапазонахарактеристик к д etermine, если скорость, которую вы увеличиваете, разделив проблему между несколькими машинами, перевешивает задержку, которую вы вводите.
После того, как вы уверены, что подход является тем, за которым вы хотите следовать, тогда вам очень важно реализовать это правильно. Обратите внимание, что в настоящее время библиотеки CUDA или OpenCL от NVIDIA станут для вас лучшими выборами, поскольку они позволят вам получить доступ к графическому процессору для вычисления, не связав его с X-сеансом. Как только реализация OpenCL ATI поддерживает GPU, это также должно быть жизнеспособным вариантом.
Поскольку у вас уже есть реализация рабочего GPU, вот основные шаги, которые вы должны следовать:
- Определите, как обновить алгоритм факторизации для поддержки обработки отдельных узлов
- Настройки обмена данных между N компьютеров (я замечаю, что вы выбрали MPI для этого)
- Настройте операцию рассеяния, которая разделит проблему ввода между вычислительными узлами
- Настройте обмен данными между машиной и ее графическим процессором
- Настройка операции сбора, который будет собирать результаты из узлов в одном узле