开发者

would it be worth it to use inline::C to speed up math

开发者 https://www.devze.com 2023-03-17 17:36 出处:网络
i have been working on a perl program to process large amounts of dna. It outputs exactly what i need however it takes much longer than i would like using NYTprof i have narrowed down the major p开发者

i have been working on a perl program to process large amounts of dna. It outputs exactly what i need however it takes much longer than i would like using NYTprof i have narrowed down the major p开发者_运维知识库roblem areas to be the loop that adds my values together. would using inline::C to do the math make my program faster or should i accept the speed and move on? is there another way to improve the speed? here is my program and an input it would run as well as an executable with the default values entered already.


It's unlikely you'll get useful help here (this included). I can see various problems with your code, and none have to do with the choice of language.

  1. use CPAN. If you're parsing genbank, then use some an appropriate module.

  2. You're writing assembly in Perl, and neither Perl nor you are very good at that. It's near impossible to know what's going on when you don't pass parameters to subroutines, instead relying on globals all over the place. What do @X1, @X2, @Y1, @Y2 mean?

  3. The following might be your problem: until ($ender - $starter > $tlength) { (line 153). According to your test case, these start by being 103, 1, and 200, and it's not clear when or if they change. Depending on what's in @te, it might or might not ever get out of the loop; I just can't tell from your code.

  4. It would help if we knew, exactly, what are the parameters to add, the in-out invariants, and what it is returning.

That's all I got.


I second the recommendation of PDL made in a comment, if it's applicable. Or the use of a CPAN module tailored to your problem (again, if applicable).

I didn't see anything that looked unambiguously like "the loop that adds my values together" in that code; please, show just the code you are considering optimizing, ideally with just enough structure around it to actually run it.

So to answer your generic question generically, yes, Inline::C can be a useful tool for optimization if you are certain your performance problem is limited to what it actually can do for you. In using it, be aware that invoking your C code from Perl or vice versa is non-trivially expensive, so you have to have enough code translated to C to minimize the transitions.

0

精彩评论

暂无评论...
验证码 换一张
取 消