Мой вопрос касается того, как проблема распараллеливания нескольких сумм должна решаться в MPI. А именно, предположим, что кто-то хочет вычислить следующее количество
где, например, для двух переменных вы можете иметь
, где я выбрал произвольную функцию для ясности. (надеюсь)
Каков наилучший способ разделения переменных между процессами? Я знаю, как распараллелить одну сумму
путем деления суммы на p
процессов с некоторым локальным индексом, а затем путем сложения всех вместе с MPI_Reduce();
в конце.
Проблема с несколькими суммами состоит в том, что для суммы в x1 нужны все возможные значения всех других переменных x2 ... xN, поэтому я не могу просто разделить суммы на блоки разных процессов, так как все блоки нужны всем другие. Наивно кажется, что только одна сумма может быть распараллелена.
Однако, если бы можно было связать разные суммы между процессами так, чтобы суммы на x2 ... xN могли быть отправлены на сумму на x1, и наоборот, возможно, все суммы можно было бы распараллелить. Может ли это быть реализовано на практике без создания серьезных узких мест? Есть ли лучший способ?
Надеюсь, этот вопрос в приемлемой форме, я спрашиваю о том, как к проблеме следует подойти теоретически.