我一直在开发一款perl程序,用于处理大量的dna数据。它能输出我需要的内容,但是执行速度比我预期的要慢得多。使用NYTprof分析后,我发现问题主要出在将值相加的循环中。使用inline::C来进行计算能够加速程序吗?或者我应该接受这种速度并继续前进呢?还有其他方法可以提高速度吗?您可以在这里找到我的程序和一个输入文件,以及一个已经填好默认值的可执行文件。
在这里(包括这里)很难得到有用的帮助。我看到你的代码存在各种问题,但与语言选择无关。
使用CPAN。如果你正在解析genbank,则使用一些适当的模块。
你正在使用Perl编写汇编代码,但Perl和你都不太擅长。当你不将参数传递给子程序,而是依靠全局变量时,很难知道发生了什么。 @X1,@ X2,@Y1,@ Y2
是什么意思?
以下内容可能是你的问题:until ($ender - $starter > $tlength) {
(第153行)。根据你的测试案例,它们最初分别为103、1和200,不清楚何时或是否会更改。根据@te
中的内容,它可能永远不会跳出循环;从你的代码中我无法判断。
如果我们知道add
的参数、输入输出不变量以及返回值,将有所帮助。
就这些了。
如果适用的话,我赞同在评论中提到的使用PDL。或者使用针对您问题量身定制的CPAN模块(同样,如果适用)。
我在那段代码中没有看到任何一些明确表示“将我的值相加的循环”;请只展示您正在考虑优化的代码,并最好有足够的结构使其能够运行。
回答您的通用问题,是的,如果您确定性能问题仅限于它实际能为您做的事情,Inline::C可以成为优化的有力工具。在使用它时,请注意从Perl调用您的C代码或反过来调用都是比较昂贵的,因此您必须翻译足够多的代码以将转换次数最小化。
inline::C
了吗?它有效吗? - Mat