我是航空航天工程专业的学生,我正在做一个高级顶尖项目。我正在开发的数学模型之一需要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