我一直在研究一个 perl 程序来处理大量的 dna。它准确地输出了我需要的东西,但是它比我想要使用 NYTprof 花费的时间要长得多,我已经缩小了主要问题区域,将我的值加在一起的循环。会使用 inline::C 进行数学运算使我的程序更快还是我应该接受速度并继续前进?还有其他方法可以提高速度吗?这是我的程序和它将运行的输入以及已输入默认值的可执行文件。
2 回答
您不太可能在这里获得有用的帮助(包括在内)。我可以看到您的代码存在各种问题,与语言选择无关。
使用 CPAN。如果您正在解析 genbank,请使用一些适当的模块。
您正在用 Perl 编写程序集,而 Perl 和您都不是很擅长那个。当您不将参数传递给子例程时,几乎不可能知道发生了什么,而是在整个地方都依赖全局变量。什么
@X1, @X2, @Y1, @Y2
意思?以下可能是您的问题:(
until ($ender - $starter > $tlength) {
第 153 行)。根据您的测试用例,这些以 103、1 和 200 开头,尚不清楚它们何时或是否更改。根据 中的内容@te
,它可能会或可能不会脱离循环;我只是无法从您的代码中分辨出来。如果我们确切地知道 的参数是什么
add
、输入输出不变量以及它返回什么,那将会有所帮助。
这就是我得到的。
如果适用,我支持 PDL 在评论中提出的建议。或者使用针对您的问题量身定制的 CPAN 模块(再次,如果适用)。
在该代码中,我没有看到任何看起来像“将我的值加在一起的循环”这样的东西。请只显示您正在考虑优化的代码,理想情况下,它周围有足够的结构来实际运行它。
因此,一般地回答您的一般问题,是的,如果您确定您的性能问题仅限于它实际上可以为您做的事情,那么 Inline::C 可以成为一个有用的优化工具。在使用它时,请注意从 Perl 调用您的 C 代码(反之亦然)非常昂贵,因此您必须将足够的代码翻译成 C 以最小化转换。