
Мой пост ниже был (я думаю, довольно несправедливо) закрыт на StackOverflow, поэтому я перепостил его здесь.
Исходный вопрос: Как использовать несколько компьютеров для создания более быстрой среды? У меня около 12 компьютеров с 4 ГБ памяти и 2 ГГц каждый. Мне нужно запустить некоторое трудоемкое преобразование данных, и я хотел бы использовать объединенную мощность этих машин. Все они работают под управлением сервера Win2003.
По сути, у нас есть большое количество видеофайлов, которые нам нужно преобразовать, чтобы наши аналитики могли провести свой анализ. Проблема осложняется тем, что я не могу рассказать вам больше о проекте.
Оригинальный пост:https://stackoverflow.com/questions/1126710/возможно-ли-создать-более-быстрый-компьютер-из-многих-компьютеров
решение1
То, о чем вы спрашиваете, является сутью главного вопроса в вычислительной технике сегодня. Отдельные ядра обработки не станут намного быстрее, поэтому нам нужны программисты, которые начнут писать код, который разбивает большие проблемы на более мелкие, которые можно обрабатывать параллельно на нескольких компьютерах.
Короткий ответ для вас: если ваше программное обеспечение для обработки позволяет вам разбивать задания и запускать их параллельно, то делайте это. Если нет, то поговорите с людьми, которые его написали, чтобы они переделали его для работы в более параллельном режиме.
Механизм передачи данных на отдельные компьютеры, запуск параллельных задач, обеспечение фактического завершения заданий и возврат данных — это многое из того, что делает программное обеспечение для управления кластером, о котором упоминают другие авторы.являютсянекоторые нетривиальные проблемы, но в целом программное обеспечение управления кластером касается планирования заданий и управления ресурсами. Программное обеспечение управления кластером не занимается фактическим выполнением параллельной работы — это то, что должно будет сделать ваше «программное обеспечение обработки».
Нет никакой "магии", которую можно применить к группе из нескольких компьютеров, чтобы заставить их "вести себя как" одна более быстрая машина. Вы не выберетесь из этого без программного обеспечения, которое изначально создано для использования преимуществ нескольких процессоров.
решение2
Чтобы объединить вычислительную мощность нескольких машин, вам понадобится запустить некое кластерное программное обеспечение, часто называемое вычислительным кластером. Вот несколько примеров приложений, которые могут это сделать:
Однако это сложные части программного обеспечения, создание пригодного к использованию высокопроизводительного кластера — сложная и потенциально дорогая работа, и к ней не следует относиться легкомысленно. Вам также понадобится специальное программное обеспечение, которое может работать на кластере для выполнения вашей работы. Вы не можете просто соединить вместе несколько компьютеров Windows и волшебным образом создать кластер, а также установить на нем стандартный набор приложений Windows.
решение3
Кластер компьютеров работает хорошо, когда можно сказать...
Могу ли я попросить кого-то сесть за каждый компьютер и выполнить часть задачи, и ускорит ли это процесс? Другими словами, можно ли разбить задачу на части, которые в принципе независимы?
Учитывая, что вы описываете проблему как «большое количество видеофайлов для преобразования», да, это сработает на кластере.
У Microsoft есть кластерное ПО, о котором я ничего не знаю. Это может быть выходом.
Наверное, было бы проще:
Выделите один компьютер в качестве главного, все остальные — клиенты.
Поместите все ваши видеофайлы на этом мастере в папку.
Создайте общую папку для каждого клиента и попросите каждого клиента смонтировать эту общую папку.
Клиенты запускают какой-то скриптовый язык Windows (подойдет Perl), который просыпается время от времени, и если что-то есть в общей папке, переименовывает это в work_yourfilenamehere и запускает ваше преобразование. Когда все сделано, оно переименовывается в done_yourfilenamehere. Если нет, просто подождите около 60 секунд.
Главный компьютер запускает скрипт, который просматривает каждую из общих папок. Если в них ничего нет, то поместите один файл для преобразования. Если у них есть файл с именем done_yourfilenamehere, то переместите его в папку done. Цикл, пока в главной папке ничего не останется.
По сути, все клиенты должны быть максимально заняты, и каждый клиент должен тратить столько времени, сколько ему нужно, на преобразование каждого файла.
решение4
Ответ на ваш вопрос зависитво многомо программном обеспечении, которое вы используете для «преобразования» этих видеофайлов, и что это влечет за собой.
В Adobe After Effects есть своего рода режим кластеризации, который они называют «сетевой рендеринг», но это не идеальное решение. (В последний раз, когда я проверял, он включал рендеринг вашего видео напредставьте последовательность, который затем, вероятно, необходимо будет объединить в видео для вашего использования)
Основная идея заключается в том, чтобы разбить фильм на части и заставить отдельный компьютер работать с каждой частью:
Должны быть какие-то инструменты командной строки для кодирования видео, которые имеют опции для обработки только определенного диапазона кадров; это могло бы автоматизировать разделение.
Каждый фрагмент можно скопировать в отдельную общую папку (опять же, это довольно легко автоматизировать)
Каждый из ПК в вашей «ферме» будет просматривать одну из этих общих папок в поисках исходного видео для преобразования. (Очень просто, если предположить, что программное обеспечение, выполняющее преобразование, имеет функцию «просмотра папки», но для этого, вероятно, можно было бы подготовить пакетный файл / скрипт оболочки)
Не зная характера «трансформации» видео, используемого вами программного обеспечения или уровня имеющихся в вашем распоряжении навыков написания сценариев/программирования, невозможно будет давать дальнейшие комментарии.