Soy un estudiante de ingeniería aeroespacial, y estoy trabajando en un proyecto final de alto nivel. Uno de los modelos matemáticos que estoy desarrollando requiere una cantidad astronómica de datos generados por XFOIL, una popular herramienta aeroespacial utilizada para encontrar los coeficientes de sustentación y resistencia aerodinámica en los perfiles aerodinámicos. (Pero estoy divagando.)¿Cómo puedo hacer que mi script de Perl use múltiples núcleos para procesos secundarios?
Corte al grano: Tengo un script Perl que llama a XFOIL repetidamente con diferentes parámetros de entrada para generar los datos que necesito. Necesito XFOIL para ejecutar 5600 veces, y tal como está ahora mismo, toma alrededor de 100 segundos en promedio por ejecución. Hacer los cálculos, esto significa que tomará alrededor de 6.5 días para completar.
Ahora, tengo una máquina de cuatro núcleos, pero mi experiencia como programador es limitada, y realmente solo sé cómo usar Perl básico. Me gustaría ejecutar 4 instancias de XFOIL a la vez, todas en su propio núcleo. Algo como esto:
while (1){
for (i = 1..4){
if (! exists XFOIL_instance(i)){
start_new_XFOIL_instance(i, input_parameter_list);
}
}
}
Así que el programa está comprobando (o, preferentemente, dormir hasta que una instancia XFOIL la despierte para comenzar una nueva instancia) si cada núcleo está ejecutando XFOIL. Si no, la instancia anterior salió y podemos comenzar una nueva instancia con la nueva lista de parámetros de entrada.
Si alguien tiene alguna idea de cómo se puede lograr esto, házmelo saber. Esto aceleraría significativamente el tiempo que necesito para generar datos y me permitirá trabajar en el proyecto aeroespacial en sí.
¡Gracias por la ayuda!
Me temo que no voy a dar una respuesta completa, pero la versión corta es que definitivamente puede desechar cuatro instancias de la secuencia de comandos perl actual, y luego hacer que cada una de ellas se descuelgue constantemente para ejecutar una secuencia de comandos XFOIL. Sin embargo, al configurar la afinidad del procesador para los procesos resultantes, eso requeriría saber qué sistema operativo está usando. –
¿Estás seguro de que XFOIL no encadena o usa múltiples procesadores para obtener su tiempo de ejecución en aproximadamente 100 segundos en primer lugar? – dlamblin
¿Sería difícil implementar XFOIL en C/Fortran? Si no, entonces sugeriría que lo hicieras. Perl no es exactamente el Speedy Gonzalez de los lenguajes de programación ... – Zaid