Для объединения мощностей компьютеров

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Топология локальной сети звезда имеет вид

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

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

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

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

    Источник

    Как объединить мощность нескольких компьютеров под управлением одной Linux системы?

    В офисе валяется куча ненужных, рабочих системных блоков. Вот я и решил объединить их в единую вычислительную сеть, а по сути в обычный компьютер управляемый единой ОС, но представляющий собой 3+ системных блока. Итог: Мне нужно что бы 5+ коробок работала как одна, при этом я не хочу управлять каждым серваком отдельно, моя цель единая машина состоящая физически из нескольких под управлением одной системы. Что она будет делать? Да что угодно, хоть пусть будет web сервером с ip в интернете или просто рабочей станцией Ubuntu или fedora

    5 ответов 5

    Ответ сводится к тому, что Вам необходимо создать кластер компьютеров под управлением какой-либо Linux-like OS.

    Вот несколько готовых решений:

    Описывать весь процесс в ответе особого смысла нет. Думаю, мой ответ вам полезен.

    Эта статья про «кластер убунту» лишь говорит о написании парралельной программы на языке Fortran (господи прости) с использованием нескольких серверов, а никак не про объединение ресурсов разных серверов в одну linux систему.

    @Dillinger è morto , не, но вторая статья то полезна — MOSIX действительно позволяет сделать кластер: в простом виде — перекидывать некоторые процессы на другую машину, и выполнять их там. Конечно до «объединения» мощности далековато — то есть это не совсем эффективно, но работает, факт. Первая конечно не по теме)

    В таком виде — в котором вы спрашиваете: решения будут неэффективными. Системы из множества компьютеров(серверов) делаются отдельно, под каждую задачу свои, мало того программы — для работы которых и создаётся такая система — тоже пишутся именно под определённые системы серверов.

    Называются они «высоконагруженные системы», и их создание/использование — это очень дорогой процесс, который называется «масштабирование». Крупнейшие примеры таких систем — социальные сети: например работу VK обеспечивает 10к машин, но сравнимых по мощности с домашним компьютером(как утверждают владельцы). Да и сам StackOverflow конечно работает не на одном сервере.

    Если вам действительно интересно масштабирование: то стоит на крутом уровне освоить системное администрирование, docker, а также почитать лирику на тему хайлода https://ruhighload.com/scale

    Мне нужно что бы 5 коробок работала как одна, при этом я не хочу управлять каждым серваком отдельно, моя цель единая машина состоящая физически из нескольких под управлением одной системы

    @Gybernaty тогда попробуйте mosix — из другого ответа. Или это классическая задача сисадмина — сделать систему серверов: например один сервер выделяется под БД, один под кеш, один под файловое хранилище — а на центральном сервере делаются правильное проксирование портов, алиасы, редиректы.

    обычно решения строятся от задачи, а не от платформы

    что конкретно вы хотите делать?

    из личного опыта — анализ логов на биллинге, и ретарификация: делал ручным шардингом на уровне приложения (скрипты на Python), на пачке списанных десктопов, аккаунте на конторском IBM eServer, и паре десктопов под windows.

    если у вас межсоединения на древнем 100mbit ethernet, а не как минимум 1G (не говоря уж о спецжелезе типа Infiniband) — дешевле будет пойти в магазин, купить самую поганую материнку и набить ее памятью под завязку, съэкономите на дорогом быстром 1G свитче и энергопотреблении

    ваш вариант конфигурации может быть эффективен только в одном случае: все параллельные потоки полностью независиммы, и каждый блок задачи польностью влазит в ОЗУ и ресурсы одного узла, неплохо решаются вычислительные задачи с полным отсутствием зависимостей в архитектуре «одна нода — один расчетный блок»

    с другой стороны, в качестве кластерной рабочей станции подобная утилизация вполне интересная и имеет право на жизнь, и может оказаться выигрышным вариантом: на рабочей станции активно не более 2-3 тяжелых задач, остальные ресурсы тратятся на хранение гигабайтных вкладок в браузере, текстовые редакторы и редкие пробежки утилит по файловой системе

    Linux реализаций похоже нет:

    так что решение задачи в оригинальной постановке сводится по факту к освоению системного программирования в полном объеме: написать аналог ядра Linux обеспечивающий весь необходимый функционал DOS, адаптировать базовые библиотеки в т.ч. из поставки копиляторов GNU (libc, libatomic, gomp. ) и пересобрать всю систему до состояния, когда сможет работать весь компплект ПО который вы используете

    возможно более простым решением может оказаться написание слоя виртуализации: переписать только слой всех системных библиотек, который использует ваше прикладное ПО, с реализацией функционала distributed POSIX поверх обычных дистрибутивов, поставленных на каждый узел, или гипервизоров (желаю много весеслья с исходниками Xen и libgcc/libstdc++ 😎

    с практической точки зрения:

    • ищите задачи с минимальным объемом обмена данными между потоками, и
    • пишите свое ПО: смотрите в сторону готовых распределенных платформ для веб/микросервисов, требующие для работы минимальных ресурсов
    • перетаскивайте бизнес-процессы в вашей конторе на веб-технологии, чтобы можно было раздать хилое железо юзерам в качестве терминалов/запускалок браузеров

    к сожалению, насколько знаю бесплатных реализаций распределенного Smalltalk не существует, а то бы в первую очередь посоветовал его — как вариант, искать библиотеки для программирования на распределенном обмене сообщениями между объектами для mainstream языков

    Источник

Оцените статью
Adblock
detector