Исходный вопрос: как я могу использовать несколько компьютеров для создания более быстрой среды? У меня около 12 компьютеров по 4 ГБ и 2 ГГц каждый. Мне нужно выполнить трудоемкое преобразование данных, и я хотел бы использовать совокупную мощность этих машин. Все они работают под управлением Win2003 server.
В основном у нас есть большое количество видеофайлов, которые нам нужно преобразовать, чтобы наши аналитики могли провести свой анализ. Проблема усложняется тем, что я не могу больше рассказать о проекте.
Исходное сообщение: https://stackoverflow.com/questions/1126710/is-it-possible-to-create-a-faster-computer-from-many-computers
То, о чем вы спрашиваете, лежит в основе главного вопроса сегодняшних вычислений. Отдельные ядра обработки не станут намного быстрее, поэтому нам нужно, чтобы программисты начали писать код, который разбивает большие проблемы на более мелкие, которые можно обрабатывать параллельно на нескольких компьютерах.
Короткий ответ для вас: если ваше программное обеспечение для обработки данных позволяет вам разделять задания и запускать их параллельно, сделайте это. Если это не так, поговорите с людьми, написавшими это, о том, чтобы они переделали его для работы в более параллельной манере.
Механизм передачи данных на отдельные компьютеры, запуск параллельных задач, проверка фактического завершения работы и возврат данных - это многое из того, что делает программное обеспечение для управления кластером, о котором упоминают другие плакаты. Там являются возникают некоторые нетривиальные проблемы, но в целом программное обеспечение для управления кластером предназначено для планирования заданий и управления ресурсами. Программное обеспечение для управления кластером на самом деле не справляется с параллельной работой - это то, что должно будет делать ваше «программное обеспечение для обработки».
Нет никакого «волшебства», которое можно было бы бросить в группу из нескольких компьютеров, чтобы заставить их «действовать как» одна более быстрая машина. Вы не выберетесь из этого, не имея программного обеспечения, созданного для использования преимуществ нескольких процессоров.
Чтобы объединить вычислительную мощность нескольких машин, вам нужно будет запустить какое-то программное обеспечение для кластеризации, часто называемое вычислительным или вычислительным кластером. Вот несколько примеров приложений, которые могут это сделать:
Однако это сложные части программного обеспечения, создание пригодного для использования высокопроизводительного кластера - сложная и потенциально дорогостоящая работа, и к ней нельзя относиться легкомысленно. Вам также понадобится специальное программное обеспечение, которое может работать в кластере для выполнения вашей работы. Вы не можете просто соединить кучу компьютеров с Windows вместе и волшебным образом создать кластер и установить на нем стандартный набор приложений Windows.
Кластер компьютеров работает хорошо, когда вы можете сказать ...
Могу ли я попросить кого-нибудь сесть за каждый компьютер и заняться частью проблемы, и ускорит ли это процесс? Другими словами, можно ли разбить проблему на части, которые в основном независимы?
Учитывая, что вы описываете проблему как «большое количество видеофайлов для преобразования», да, это сработает в кластере.
У Microsoft есть программное обеспечение для кластеризации, о котором я ничего не знаю. Это может быть путь.
Наверное, проще было бы:
Выделите один компьютер мастером. Все остальные - клиенты.
Поместите все свои видео файлы на этот мастер в папку.
Создайте общую папку для каждого клиента и пусть каждый клиент подключит эту общую папку.
Клиенты запускают некоторый язык сценариев Windows (будет работать Perl), который периодически просыпается, и, если что-то находится в общей папке, переименовывает его в work_yourfilenamehere и запускает ваше преобразование. Когда это будет сделано, он переименовывает его в done_yourfilename здесь. Если нет, просто подождите около 60 секунд.
Главный компьютер запускает сценарий, который просматривает каждую из общих папок. Если в них ничего нет, то поместите один файл для преобразования. Если у них есть файл с именем done_yourfilename здесь, переместите его в папку done. Повторяйте, пока в основной папке ничего не останется.
По сути, все клиенты должны быть максимально заняты, и каждый клиент должен уделять столько времени, сколько ему нужно, для преобразования каждого файла.
Это возможно, но для создания кластера потребуется немало усилий. Трудно сказать больше без дополнительной информации
Ответ на ваш вопрос зависит во многом о программном обеспечении, которое вы используете для «преобразования» этих видеофайлов, и о том, что это влечет за собой.
Adobe After Effects имеет своего рода режим кластеризации, который они называют «сетевой рендеринг», но это не идеальное решение. (в прошлый раз, когда я проверял, это включало рендеринг вашего видео на представьте последовательность, который, по-видимому, необходимо будет повторно объединить в видео для вашего использования)
Основная идея состоит в том, чтобы разделить фильм на части и заставить разные ПК работать с каждым фрагментом:
Должны быть некоторые инструменты кодирования видео из командной строки, которые позволяют обрабатывать только определенный диапазон кадров; это может автоматизировать разделение.
Каждый фрагмент можно скопировать в другую общую папку (опять же, довольно легко автоматизировать)
Каждый компьютер в вашей «ферме» будет смотреть в одну из этих общих папок для преобразования исходного видео. (Очень просто, если предположить, что программное обеспечение, выполняющее преобразование, имеет функцию "наблюдения за папкой", но, вероятно, для этого можно было бы настроить командный файл / сценарий оболочки)
Не зная природу «преобразования» видео, какое программное обеспечение вы используете или уровень написания сценариев / программирования в вашем распоряжении, будет невозможно комментировать дальше.
то, что вы «создаете», не «более быстрый компьютер», а кластер. который представляет собой не что иное, как группу компьютеров, используемых вместе.
IOW, вам нужно создать некоторую программу, которая запускается на каждом из ваших компьютеров и выполняет часть проблемы.
В вашем конкретном случае вам нужно преобразовать много файлов. если каждый файл можно преобразовать независимо от других, это почти легко: распределить их по машинам и поместить их все для преобразования их собственных файлов.
Как говорили другие, это зависит от того, что вы пытаетесь сделать, и насколько просто выполнять параллельно.
Закон Амдала и закон Густафсона описать степень ускорения, поскольку выполнение распределяется между большим количеством процессоров.
Вы рассматривали Hadoop? Используя Hadoop, вы можете запускать пакетное задание, подобное вашему, на нескольких машинах.
Большинство самых больших компьютеров на планете представляют собой большие кластеры из множества отдельных узлов, каждый из которых часто является стандартным сервером.
Видеть http://www.top500.org/, а именно разбивка по архитектуре: http://www.top500.org/stats/list/33/archtype.