
Mi publicación a continuación se cerró (creo que de manera bastante injusta) en StackOverflow, de ahí que la vuelva a publicar aquí.
Pregunta original: ¿Cómo puedo utilizar varias computadoras para crear un entorno más rápido? Tengo unas 12 computadoras con 4GB cada una y 2GHz cada una. Necesito ejecutar una transformación de datos que requiere mucho tiempo y me gustaría utilizar la potencia combinada de estas máquinas. Todos ejecutan el servidor Win2003.
Básicamente tenemos una gran cantidad de archivos de vídeo que necesitamos transformar para que nuestros analistas puedan realizar sus análisis. El problema se complica por el hecho de que no puedo contarles más sobre el proyecto.
Publicación original:https://stackoverflow.com/questions/1126710/es-es-posible-crear-una-computadora-más rápida-desde-muchas-computadoras
Respuesta1
Lo que usted pregunta es el meollo de una cuestión importante en la informática actual. Los núcleos de procesamiento individuales no van a ser mucho más rápidos, por lo que necesitamos que los programadores comiencen a escribir código que descomponga los problemas más grandes en problemas más pequeños que puedan procesarse en paralelo en varias computadoras.
Respuesta corta para usted: si su software de procesamiento le permite dividir los trabajos y ejecutarlos en paralelo, hágalo. Si no es así, hable con las personas que lo escribieron para que lo modifiquen para que funcione de una manera más paralela.
La mecánica de enviar los datos a las computadoras individuales, iniciar tareas paralelas, asegurarse de que los trabajos realmente terminen y recuperar los datos es en gran medida lo que hace el software de administración de clústeres que otros carteles mencionan. AllásonHay algunos problemas no triviales involucrados, pero en general el software de gestión de clústeres trata sobre la programación de trabajos y la gestión de recursos. El software de administración de clústeres no se encarga de realizar el trabajo paralelo; eso es lo que tendrá que hacer su "software de procesamiento".
No hay "magia" que puedas lanzar a un grupo de varias computadoras para hacerlas "actuar como" una única máquina más rápida. No saldrá de esto sin tener un software diseñado para aprovechar múltiples procesadores desde el principio.
Respuesta2
Para combinar la potencia de procesamiento de varias máquinas, querrá ejecutar algún tipo de software de agrupación en clústeres, a menudo llamado computación o clúster informático. Algunos ejemplos de aplicaciones que pueden hacer esto son:
Sin embargo, se trata de piezas de software complicadas; crear un clúster utilizable de alto rendimiento es un trabajo complicado y potencialmente costoso y no debe emprenderse a la ligera. También necesitará un software especial que pueda ejecutarse en un clúster para realizar su trabajo. No se puede simplemente conectar un grupo de computadoras con Windows y crear mágicamente un clúster e instalar un grupo estándar de aplicaciones de Windows en él.
Respuesta3
Un grupo de computadoras funciona bien cuando se puede decir...
¿Puedo hacer que alguien se siente frente a cada computadora y resuelva parte del problema? ¿Eso acelerará las cosas? En otras palabras, ¿se puede dividir el problema en partes que sean básicamente independientes?
Dado que describe el problema como "una gran cantidad de archivos de video para transformar", sí, esto funcionaría en un clúster.
Microsoft tiene software de agrupación en clústeres del que no sé nada. Podría ser el camino a seguir.
Probablemente más fácil sería:
Dedique una computadora como maestra. Todos los demás son clientes.
Coloque todos sus archivos de video en este maestro en una carpeta.
Cree una carpeta compartida por cliente y haga que cada cliente monte esa carpeta compartida.
Los clientes ejecutan algún lenguaje de scripting de Windows (perl funcionaría) que se activa de vez en cuando y, si hay algo en la carpeta compartida, le cambia el nombre a work_yourfilenamehere y ejecuta su transformación. Cuando termina, le cambia el nombre a done_yourfilename aquí. De lo contrario, espere unos 60 segundos.
La computadora maestra ejecuta un script que busca en cada una de las carpetas compartidas. Si no tienen nada, coloque un archivo para transformarlo. Si tienen un archivo llamado done_yourfilename aquí, muévalo a la carpeta Listo. Repita hasta que no quede nada en la carpeta maestra.
Básicamente, todos los clientes deben mantenerse lo más ocupados posible, y cada cliente debe tomarse el tiempo que necesite para transformar cada archivo.
Respuesta4
La respuesta a tu pregunta dependeen gran partesobre el software que está utilizando para "transformar" estos archivos de vídeo y lo que eso implica.
Adobe After Effects tiene una especie de modo de agrupación que llaman "renderizado en red", pero no es una solución ideal. (La última vez que lo revisé implicó renderizar su video en unimaginar secuencia, que luego presumiblemente debería recombinarse en un vídeo para su uso)
Esa idea básica es dividir la película en partes y hacer que una PC diferente funcione en cada parte:
Debería haber algunas herramientas de codificación de video de línea de comandos que tengan opciones para procesar solo un cierto rango de fotogramas; esto podría automatizar la división.
Cada fragmento se puede copiar a una carpeta compartida diferente (nuevamente, es bastante fácil de automatizar)
Cada una de las PC de su "granja" buscará en una de estas carpetas compartidas un vídeo fuente para transformar. (Es muy fácil suponiendo que el software que realiza la transformación tenga una función para "observar una carpeta", pero probablemente se podría preparar un archivo por lotes/script de shell para esto)
Sin conocer la naturaleza de la "transformación" del vídeo, qué software está utilizando o el nivel de scripting/programación a su disposición, será imposible hacer más comentarios.