Можно ли объединить вычислительную мощность 2 компьютеров?

14

Вот несколько вопросов, я бы хотел, чтобы вы меня просветили.

  1. Можно ли объединить вычислительную мощность 2 компьютеров?
  2. Как это сделать?
Верн Анчета
источник
7
1) Конечно. 2) С огромным трудом.
Даниэль Р Хикс

Ответы:

11

Непрозрачно, когда работающая программа может каким-то образом использовать второй компьютер для выполнения кода, поскольку они логически разделены, и процессор не может обмениваться данными или получать доступ к памяти друг друга.

Это не значит, что вы не можете объединить вычислительную мощность:

  1. Определенное программное обеспечение может иметь компоненты, которые могут выполняться на других машинах, например, сворачивание белка, SETI @ home. Они, как правило, специализированные, то есть вы не можете запустить Excel и сказать ему использовать другой компьютер для вычислений.
  2. Если вы выполняете задачи с интенсивным использованием процессора, вы можете использовать дополнительный компьютер для их запуска, например, кодирование / перекодирование видеопотока.

Если вы хотите каким-либо образом использовать дополнительный компьютер, крайне важно иметь возможность удаленного управления. Два способа сделать это через некоторый вид удаленного доступа (RDP, VNC) или альтернативно что-то вроде синергии +.

mindless.panda
источник
1
Скажем, например, у меня есть 4 ГБ ОЗУ на моем ноутбуке и 4 ГБ на моем ПК. Позволит ли RDP виртуально запускать програн с 8 ГБ ОЗУ?
TGamer
5

Одна из моих наиболее часто используемых строк - Да и Нет!

Да, это возможно - для определенных приложений, которые предназначены для работы таким образом. (Обычно известный как кластер - Дальнейшее чтение здесь )

Нет, невозможно (по крайней мере, насколько я знаю) взять два готовых компьютера, «связать» их вместе и получить объединенную память, вычислительную мощность и все остальное.

Уильям Хилсум
источник
1
@ ~ шарлатан, да, и я сказал для некоторых приложений ... Поскольку вопрос был помечен Windows-7, я предположил, что он имел в виду ежедневный компьютер с любой готовой программой .... В любом случае - кластеры Beowulf не требуют специально написанные заявления? ... Я не эксперт, никогда не пользовался им, но я быстро прочитал beowulf.org/overview/index.html (особенно два последних абзаца)
Уильям Хилсум
извините, удалил мой предыдущий комментарий после перечитывания и заметил, что вы уже связаны с концепцией кластеризации. Beowulf разработаны на основе готовых компонентов и являются одним из способов «связать» несколько систем вместе, но вы правы, что они не работают для программ, которые специально не предназначены для них.
шарлатан-кихот
4

Это очень возможно! Но, судя по простоте вашего вопроса, я предполагаю, что вы хотели бы просто запустить программу, которая волшебным образом сделает ваш компьютер в два раза быстрее, что невозможно.

Вы должны понимать, что при запуске программы она поддерживает свое состояние, провоцируя ЦП перемещать память между регистрами жесткого диска, ОЗУ и ЦП, а также адреса различных компонентов (таких как видеокарты или сетевые карты). Проблема с использованием процессора с другого компьютера в том, что ему нужен доступ к той же памяти. А поддержание зеркального отображения памяти вашего компьютера на другом компьютере требует таких больших накладных расходов, что это легко побеждает цель добавления другого компьютера для повышения производительности :)

Но тип вещей, которые можно разделить между несколькими компьютерами, - это рендеринг изображений или некоторые математические вычисления, которые могут работать независимо.

Nippysaurus
источник
3

Если вам нужен способ объединения вычислительных мощностей двух ПК в один, самый простой способ сделать это - настроить их оба в качестве хостов виртуальных машин с использованием программного обеспечения, такого как VMWare ESXi (предупреждаем, что для этого потребуется устройство с совместимым оборудованием) и создание группы ресурсов или кластера и создание виртуальной машины, которая использует ресурсы обоих компьютеров. Это НЕ даст вам полной скорости в 2 раза (вы потеряете ресурсы из-за виртуализации) и является ограниченным решением из-за вероятных требований совместимости, но это самый «правильный» ответ на ваш вопрос. Виртуальная машина будет работать как один ПК с вычислительной мощностью обоих хостов минус накладные расходы, необходимые для поддержки виртуализации.

Джордж Спайсленд
источник
Боюсь, что общение между хозяевами станет узким местом.
Гроностай
1
Да, связь между хостами может быть узким местом, это является частью накладных расходов. Негигабитные сети были бы основным виновником этого, но, учитывая дешевую и плодовитую гигабитную доступность, я не чувствую, что это особенно наказывает. Однако это верно для всей сетевой распределенной обработки, и виртуальная машина является гораздо более удобным сценарием со значительно меньшими сложностями, чем удаленные вызовы процедур и пользовательские приложения, предназначенные для (которые должны быть в любом случае) сетевых распределенных вычислений.
Джордж Спайсленд
2

Я согласен с другими ответами:

  • Если у вас огромная многослойная рабочая книга Excel, и вы хотите иметь возможность запускать Excel в два раза быстрее (обновление формул и сценариев, запуск макросов и т. Д.), Вам не повезло.
  • Если у вас есть пользовательское приложение, которое легко разбить на разделы, например, найти квадратный корень каждого целого числа от 1 до 1 000 000, вам будет легко разбить проблему на части и распределить их.
  • Если у вас есть специальное приложение, такое как вычисление первых 1 000 000 цифр π (pi), вы сможете это сделать, если вы достаточно хорошо понимаете проблемное пространство.

Если вы говорите о разработке программного обеспечения для работы в распределенной (с несколькими компьютерами) среде, вот несколько советов:

  • Используйте удаленные вызовы процедур (RPC) . Так же, как вы можете сделать хост файловым сервером или веб-сервером, RPC позволяют вам сделать машину, по сути, сервером ЦП. Концептуально у вас будет один главный компьютер, который будет RPC-клиентом, и он будет вызывать библиотечные функции, которые будут прозрачно выполняться на сервере. В своей простейшей форме эта архитектура не даст вам никакого выигрыша в производительности, поскольку в любой момент будет работать только один процессор. Однако в асинхронной модели клиент может запустить удаленную процедуру на сервере, а затем выполнять другие действия во время работы сервера.
  • Используйте язык, разработанный для параллельной обработки, такой как Unified Parallel C (UPC) . Это расширение языка C с возможностями для распределенных данных и одновременного выполнения. Ссылки:
Скотт
источник