私は、大量の DNA を処理するための perl プログラムに取り組んでいます。必要なものを正確に出力しますが、NYTprof を使用するよりもはるかに時間がかかります。主な問題領域を絞り込んで、値を一緒に追加するループにしました。inline::C を使用して計算を行うと、プログラムが高速になりますか、それとも速度を受け入れて先に進む必要がありますか? 速度を改善する別の方法はありますか?ここに私のプログラムとそれが実行する入力、およびデフォルト値がすでに入力された実行可能ファイルがあります。
2 に答える
ここで役立つヘルプが得られる可能性はほとんどありません(これも含まれます)。私はあなたのコードにさまざまな問題を見ることができますが、言語の選択とは関係ありません。
CPANを使用します。genbankを解析している場合は、適切なモジュールを使用してください。
あなたはPerlでアセンブリを書いていますが、Perlもあなたもそれが得意ではありません。パラメータをサブルーチンに渡さず、代わりに至る所でグローバルに依存している場合、何が起こっているのかを知ることはほぼ不可能です。どういう
@X1, @X2, @Y1, @Y2
意味ですか?以下が問題である可能性があります:(
until ($ender - $starter > $tlength) {
行153)。テストケースによると、これらは103、1、および200から始まり、いつ変更されるか、または変更されるかどうかは明確ではありません。何が入っているかに応じて@te
、ループから抜け出す場合と出ない場合があります。私はあなたのコードからはわかりません。add
のパラメーター、in-out不変条件、およびそれが返すものを正確に知っていれば、役に立ちます。
私が得たのはそれだけです。
該当する場合は、コメントで作成された PDL の推奨事項を 2 番目に使用します。または、問題に合わせた CPAN モジュールの使用 (該当する場合)。
そのコードには、「私の値を一緒に追加するループ」のように明確に見えるものは何もありませんでした。最適化を検討しているコードだけを示してください。理想的には、実際に実行するのに十分な構造だけを示してください。
したがって、一般的な質問に一般的に答えるには、はい、パフォーマンスの問題が実際にできることだけに限定されていると確信している場合、Inline::C は最適化のための便利なツールになる可能性があります。それを使用する際には、Perl から C コードを呼び出す、またはその逆の呼び出しは自明ではないことに注意してください。そのため、遷移を最小限に抑えるために十分なコードを C に変換する必要があります。