Как поделиться процессором или оперативной памятью?

21

В сети мы разделяем файл (драйвер диска) или базы данных. Но как мы можем разделить процессор или оперативную память по сети.

MJH
источник
3
Проблема заключается в том, что по сравнению с задержками в масштабе наносекунды между ЦП и ОЗУ сеть работает невероятно медленно!
Phoshi
@Phoshi: даже с учетом задержек, добавляемых сетью, такая настройка может быть быстрее, чем своп на диск.
Писквор
@Piskvor: Но, как вам скажет каждый, дисковый своп - довольно большой удар по производительности!
Фоши
@Phoshi: я согласен - так и есть, и оптимальное решение - «добавить больше физической памяти». Все, что я хочу сказать, это то, что подкачка на быстрое устройство (например, ramdisk) через быструю сеть может все же быть быстрее, чем подкачка на физический диск. Другими словами: это может быть более быстрое устройство подкачки, чем подкачка на физическом носителе, даже если оно будет на много порядков медленнее, чем физическое ОЗУ.
Писквор
1
@Piskvor: Вполне правдоподобно, и даже если вы ошибаетесь, оно точно такого же порядка, так что в худшем случае не будет значительно хуже. Я предполагаю, что, вероятно, просто дешевле иметь больше локальной физической памяти!
Фоши

Ответы:

21

Для этого программа (ы), обращающаяся к ресурсам ЦП / ОЗУ, должна быть специально разработана для доступа к указанным ресурсам. Система, настроенная таким образом, называется кластером, и типичным способом совместного использования ресурсов является протокол, называемый MPI (интерфейс передачи сообщений). Это бесплатная загрузка, и ее использование с Linux может привести к созданию мощного кластера (возможно, даже суперкомпьютера) при минимальных затратах, но, опять же, это бесполезно, если у вас нет программ, специально разработанных для использования преимуществ MPI. Есть несколько хороших кластерных обучающих программ, если вы все еще заинтересованы, вы должны проверить их.

Редактировать:

Я бы порекомендовал учебник здесь, если вы хотите настроить кластер. Я сделал кластер, следуя этому уроку около года назад, и он работал довольно хорошо. Учебное пособие немного старое, поэтому некоторые файлы могут быть не совсем такими, как указано в учебном пособии (иногда файлы перемещаются в других / более новых дистрибутивах Linux), но если вы немного знакомы с Linux, это не должно быть проблемой. В этом руководстве используется более старая версия MPI, но я использовал самую новую версию, и у меня не было проблем, которые не могли быть легко решены. В зависимости от того, что вы делаете, на самом деле может существовать программа, которая может использовать преимущества MPI. Я знаю, что есть несколько программ кодирования видео и обработки чисел, использующих преимущества MPI, которые можно загрузить из универсальных источников.

ubiquibacon
источник
пожалуйста, скажите мне некоторые ссылки.
MJH
1
@ MJH посмотри мой отредактированный ответ.
Ubiquibacon
спасибо. но этот учебник работает на Linux, и я использую Windows.Также, приложение должно писать под MPI и его ограничением.
MJH
3
@MJH Если вы хотите работать с Windows, тогда вам просто нужна библиотека MPI, которая работает с Windows, но концепция та же самая. MPICH работает с Windows, или вы можете построить свой кластер Windows с Windows HPC (имеет встроенную проводимость MPI), если у вас есть какая-то монета, которую можно бросить. Хотя это позволяет вам использовать Windows, вам все равно придется использовать программы, написанные для MPI, но сейчас нет никакого способа обойти это.
убиквибакон
2
Спасибо за этот ответ - похоже, что указанный учебник изменил адрес на uiowa.edu/mihpclab/hpcSystsemTechnicalReport/… ... Cheers!
Сдау
9

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

Что касается разделения процессора, это возможно, но единого стандарта для него нет. Вы не можете просто поделиться им и позволить другому компьютеру занять необходимые ресурсы. Вместо этого вам нужно иметь специально разработанные приложения, которые могут работать на нескольких компьютерах одновременно. Это часто называют распределенными вычислениями и используется некоторыми исследовательскими проектами, такими как SETI @ Home, Einstein @ Home, Climateprediction.net и многими другими.

В основном программы работают таким образом, что существует один центральный сервер, который распределяет работу, которую необходимо выполнить. Компьютеры в сети загружают рабочие блоки с центрального компьютера и обрабатывают их. После этого центральный компьютер получает результаты от клиентов и объединяет их в единый результат. Таким образом, компьютеры «разделяют» ресурсы ЦП и ОЗУ по сети. Недостатком этого является то, что программы должны создаваться таким образом, чтобы они работали по сети, и в настоящее время распределенные вычисления не достаточно популярны среди обычного использования компьютера, поэтому его поддерживают лишь небольшое количество специализированных программ. С другой стороны, он обычно используется в научных целях, поскольку дешевле получить большое количество персональных компьютеров или игровых приставок 3, чем получить доступ к мэйнфреймовому компьютеру.

AndrejaKo
источник
является ли программное обеспечением для использования моего приложения в моей сети без необходимости во внешнюю сеть (напр я хочу рендеринг файла, что мой PC делает это в 7 дней, но я разделяю это к моей сети и рендеринг сокращения на 1 день?!.?
MJH
@MJH К сожалению, я не слышал ни о каких программах, которые могли бы это сделать для рендеринга.
AndrejaKo
1
Разделять рамдиски бессмысленно, правда? Вы получаете волатильность оперативной памяти с медлительностью сетевого хранилища
Путешественник Geek
1
@AndrejaKo Для прямого транскодирования видео я не слышал ни о чем (но некоторые, занимающиеся поиском в Google, я нашел один или два проекта в альфа / бета, которые делают). Однако для 3D-рендеринга я не видел программы 3D-рендеринга с 90-х годов, которая не поддерживает сетевой рендеринг .
Скотт Чемберлен
5

есть ли программное обеспечение для совместного использования моего приложения в моей сети? без необходимости использования чужой сети! (например, я хочу рендерить файл, чтобы мой компьютер рендерил это за 7 дней, но я делюсь этим с моей сетью и сокращаю рендеринг до 1 дня? - MJH 12 марта 11 в 1:19

Вы столкнулись с проблемой XY , вам не следует спрашивать «как я могу поделиться компьютерами cpu и ram accros», а «как я могу использовать несколько компьютеров, чтобы ускорить рендеринг при использовании ZZZZZ?»

Это сильно зависит от того, какое программное обеспечение вы используете и что вы рендерите ( транскодируете ли вы видео или рендеринге 3D-модели / видео?).

Чтобы привести несколько примеров, бесплатное 3D-программное обеспечение Blender поддерживает распределенный рендеринг, где вы можете иметь несколько компьютеров, работающих вместе, для генерации одного выхода. Если вы занимаетесь рендерингом видео, вы нашли быстрый проект MediaEncodingCluster с открытым исходным кодом, который позволяет вам рендерить видео и аудио файлы, используя несколько компьютеров.

Скотт Чемберлен
источник
5

Единственная известная мне операционная система, которая позволяет совместно использовать ЦП / ОЗУ, это plan9. Там вы можете экспортировать / монтировать практически все, что угодно. Это не значит, что спектакли хорошие, конечно.

Генрих Шпиндельн
источник
0

Было бы неплохо поделиться cpu / ram для задач по сети. В настоящее время мы все еще привязаны к старым представлениям о том, чтобы хранить программы в поле, где что-то происходит, но мы можем позволить нескольким процессорам на одной машине получать доступ к одному и тому же фрагменту кода. У нас есть один метод (по крайней мере), который делает что-то вроде этого. java на веб-страницах работает с использованием как сервера, так и клиента, но он по-прежнему заблокирован сервер-клиентским способом (где сервер хранит большую часть данных). То, что нам нужно, чтобы иметь возможность назначать задачи компьютерам почти так же, как мы делаем, когда у нас несколько процессоров (за исключением машины, которая выполняет работу, для которой должны быть назначены программный фрагмент и фрагмент данных. Это, тем не менее, увеличивает нагрузку на сеть). если сами задачи не имеют простой характер и могут привести к образованию новых узких мест. Мне нравится идея, где это "

k9dog
источник