我是航空航天工程專業的學生,我正在做一個高級頂尖項目。我正在開發的數學模型之一需要XFOIL生成的天文數據量,XFOIL是一種流行的航空航天工具,用於查找翼型上的升力和阻力系數。 (但我正在離題)如何讓我的Perl腳本爲子進程使用多個內核?
切入正題:我有一個Perl腳本,它使用不同的輸入參數反覆調用XFOIL來生成我需要的數據。我需要XFOIL運行5600次,目前它每次運行平均需要大約100秒。做數學,這意味着它將需要大約6.5天才能完成。
現在,我有一個四核機器,但我作爲程序員的經驗是有限的,我真的只知道如何使用基本的Perl。我想一次運行4個XFOIL實例,都是在他們自己的核心上。事情是這樣的:
while (1){
for (i = 1..4){
if (! exists XFOIL_instance(i)){
start_new_XFOIL_instance(i, input_parameter_list);
}
}
}
所以在程序檢查(或最好睡覺,直到XFOIL例如將其喚醒,開始一個新的實例),如果每一個內核的運行XFOIL。如果不是,則退出前一個實例,我們可以使用新的輸入參數列表啓動一個新實例。
如果任何人有任何想法如何實現,請讓我知道。這將大大加快我需要生成數據的時間,並讓我在航天項目本身上工作。
感謝您的幫助!
我怕我不打算提供一個完整的答案,但短版是你可以肯定地分離當前perl腳本的四個實例,然後讓每個實例運行一個XFOIL腳本。但是,爲處理結果設置處理器親和力 - 這將需要知道您正在使用的操作系統。 – 2009-12-25 18:53:16
您確定XFOIL不會線程或以其他方式使用多個處理器,以使其運行時間首次達到大約100秒? – dlamblin 2009-12-25 19:18:05
難以將XFOIL實現到C/Fortran中嗎?如果不是,那麼我建議你去做。 Perl並不完全是編程語言的Speedy Gonzalez ... – Zaid 2009-12-25 19:43:19