Чтобы вычислить произведение между 2 матрицами A и B (размерность nxm) в параллельном режиме, у меня есть следующие ограничения: сервер отправляет каждому клиенту количество строк из матрицы A и количество строк из матрицы B. Это не может быть изменено. Далее клиенты могут обмениваться между собой информацией для вычисления произведения матриц, но они не могут запрашивать у сервера какие-либо другие данные.
Это должно быть сделано максимально эффективно, то есть путем сведения к минимуму количества сообщений, отправляемых между процессами, что считается дорогостоящей операцией, и выполнения небольших вычислений параллельно, насколько это возможно.
Из того, что я исследовал, практически наибольшее количество сообщений, которыми обмениваются клиенты, составляет n ^ 2, если каждый процесс транслирует свои строки всем остальным. Теперь проблема в том, что если я минимизирую количество отправленных сообщений - это будет около log (n) для распределения входных данных - но тогда вычисления будут выполняться только одним процессом или более, но в любом случае это не так. больше не делалось параллельно, что и было основной идеей задачи.
Какой может быть более эффективный алгоритм для вычисления этого произведения?
(Я использую MPI, если это имеет значение).
n
узлов потребуетсяn*n
трафика, и в то же время каждый узел будет производить меньше полезной информации на свой трафик. - person ruslik   schedule 09.12.2010