Преамбула :
При правильной изоляции данных можно достичь результатов параллельных вычислений без полного набора данных на каждой машине.
Возьмем, к примеру, следующий цикл:
for (int i = 0; i < m[].length; i++)
{
for (int j = 0; j < m[i].length; j++)
{
m[i][j]++;
}
}
И дана матрица следующего расположения:
j=0 j=1 j=2
i=0 [ ] [ ] [ ]
i=1 [ ] [ ] [ ]
i=2 [ ] [ ] [ ]
Параллельные конструкции существуют так, что столбец J может быть отправлен на каждый компьютер, а отдельные столбцы вычисляются параллельно. Трудная часть распараллеливания возникает, когда у вас есть циклы, содержащие зависимости.
for (int i = 0; i < m[].length; i++)
{
for (int j = 0; j < m[i].length; j++)
{
//For obvious reasons, matrix index verification code removed
m[i][j] = m[i/2][j] + m[i][j+7];
}
}
Очевидно, что цикл, подобный приведенному выше, становится чрезвычайно проблематичным (обратите внимание на матричные индексаторы.) Но существуют методы для развертывания циклов такого типа и создания эффективных параллельных алгоритмов.
ОТВЕТ
Возможно, Google разработал решение для вычисления собственного значения без сохранения копии матрицы на всех подчиненных компьютерах. -Или- Они использовали что-то вроде Монте-Карло или какой-то другой Алгоритм аппроксимации для разработки "достаточно близкого" вычисления.
На самом деле, я бы сказал, что Google сделает все возможное, чтобы любые вычисления, необходимые для их алгоритма PageRank, были максимально эффективными. Когда вы работаете с такими машинами, как , и , (обратите внимание на кабель Ethernet), вы не можете передавать большие наборы данных (100 гигабайт), поскольку это невозможно из-за ограничений оборудования. товарных карт NIC.
С учетом вышесказанного Google умеет удивлять сообщество программистов, и их реализация может быть совершенно иной.
постамбула
Некоторые хорошие ресурсы для параллельных вычислений включают OpenMP и MPI . Обе параллельные реализации подходят для параллельных вычислений с очень разными парадигмами, некоторые из которых проистекают из машинной реализации (кластер или распределенные вычисления).