Sono uno studente di ingegneria aerospaziale e sto lavorando a un progetto di capstone senior. Uno dei modelli matematici che sto sviluppando richiede una quantità astronomica di dati generati da XFOIL, un popolare strumento aerospaziale utilizzato per trovare i coefficienti di portanza e resistenza sui profili aerodinamici. (Ma sto divagando.)Come posso fare in modo che il mio script Perl usi più core per i processi figli?
Tagliare all'inseguimento: Ho uno script Perl che richiama ripetutamente XFOIL con diversi parametri di input per generare i dati di cui ho bisogno. Ho bisogno di XFOIL per eseguire 5600 volte, e così com'è ora ci vogliono circa 100 secondi in media per corsa. Facendo i conti, questo significa che ci vorranno circa 6,5 giorni per completare.
Ora, ho una macchina quad-core, ma la mia esperienza come programmatore è limitata, e so solo come usare il Perl di base. Mi piacerebbe eseguire 4 istanze di XFOIL alla volta, tutte sul proprio nucleo. Qualcosa di simile a questo:
while (1){
for (i = 1..4){
if (! exists XFOIL_instance(i)){
start_new_XFOIL_instance(i, input_parameter_list);
}
}
}
Così il programma sta controllando (o, preferibilmente, dormire fino un'istanza Xfoil la sveglia per iniziare una nuova istanza) se ogni nucleo è in esecuzione XFoil. Altrimenti, l'istanza precedente è stata chiusa e possiamo avviare una nuova istanza con la nuova lista di parametri di input.
Se qualcuno ha qualche idea di come questo possa essere raggiunto, per favore fatemelo sapere. Ciò velocizzerebbe significativamente il tempo necessario per generare dati e mi consentirà di lavorare sul progetto aerospaziale stesso.
Grazie per l'aiuto!
Ho paura che non ho intenzione di fornire una risposta completa, ma la versione corta è che puoi sicuramente sborsare quattro istanze dell'attuale script perl, quindi ognuna di esse è costantemente distribuita per eseguire uno script XFOIL. Tuttavia, impostando l'affinità del processore per i processi risultanti, è necessario conoscere il sistema operativo che si sta utilizzando. –
Sei sicuro che XFOIL non usi thread o altrimenti usi più processori per ottenere il tempo di esecuzione a circa 100 secondi? – dlamblin
Sarebbe difficile implementare XFOIL in C/Fortran? Se no, allora ti suggerirei di provarci. Perl non è esattamente il Speedy Gonzalez dei linguaggi di programmazione ... – Zaid