是否值得使用inline :: C来加速数学运算

时间:2011-07-05 19:54:29

标签: perl optimization performance inline-c

我一直致力于处理大量dna的perl程序。它输出正是我需要的东西但是它比我想要使用NYTprof需要更长的时间我已经缩小了主要问题区域,将我的值加在一起的循环。会使用inline :: C进行数学计算,使我的程序更快,还是应该接受速度并继续前进?还有另一种提高速度的方法吗? here是我的程序,它将运行的输入以及已输入默认值的可执行文件。

2 个答案:

答案 0 :(得分:3)

你不太可能在这里得到有用的帮助(包括在内)。我可以看到你的代码存在各种问题,而且没有一个与语言的选择有关。

  1. 使用CPAN。如果您正在解析genbank,请使用一些an appropriate module

  2. 你在Perl中编写程序集,Perl和你都不是很擅长。当你不将参数传递给子程序时,几乎不可能知道发生了什么,而是依赖全局的全局变量。 @X1, @X2, @Y1, @Y2是什么意思?

  3. 以下可能是您的问题:until ($ender - $starter > $tlength) {(第153行)。根据您的测试用例,这些开始时分别为103,1和200,并且不清楚它们何时或是否发生变化。取决于@te中的内容,它可能会或可能不会退出循环;我无法从你的代码中辨别出来。

  4. 如果我们确切地知道add的参数,进出的不变量以及它返回的内容,将会有所帮助。

  5. 这就是我得到的全部。

答案 1 :(得分:0)

如果适用,我会在评论中提出PDL的建议。或者使用针对您的问题量身定制的CPAN模块(如果适用的话)。

在那段代码中,我没有看到任何看起来像“将我的值加在一起的循环”的东西;请显示您正在考虑优化的代码,理想情况是它周围有足够的结构来实际运行它。

因此,为了回答您的一般性问题,是的,如果您确定您的性能问题仅限于它实际可以为您做什么,那么Inline :: C可以是一个有用的优化工具。在使用它时,请注意从Perl调用C代码或反之亦然非常昂贵,因此您必须将足够的代码转换为C以最小化转换。