4

私が考えている処理は次のとおりです。

  • 何千ものpngファイルがあります
  • それらのそれぞれをロードし、そのピクセルにアクセスする必要があります
  • 各ピクセルのチャネルは何らかの方法で処理され、バイナリ ファイルに書き込まれます。

ImageMagick ラッパーや、C 画像処理バックエンド用の他のラッパーなど、ある種のモジュールを使用することを考えていました。このタスクの実装に Perl を選択した場合、Perl を使用すると速度が低下しますか? Java で記述された (JDK の BufferedImage を使用する) ツールが既にあり、かなり高速です。Perl に同じ速度を期待するのはおかしいでしょうか?

4

4 に答える 4

9

ImageMagick やその他の C ベースの処理ツールを使用している場合、perl がボトルネックになることはほとんどありません。私が見ることができるボトルネック (特に数千のファイルを処理する場合) は次のようになります。

  • ディスク IO 速度
  • メモリアクセス速度
  • ライブラリ アルゴリズムの速度

Perl は、やりたいことを実行するための優れた接着剤になります。遅い部分はまだ遅くなります。速い部分を簡単にすることもできます。:)

また、次の 2 つの最適化ルールを覚えておいてください。

  1. やらないでください。
  2. (専門家のみ: ) まだ実行しないでください。

まとめたら、プロファイラーを実行します。それがあなたの目標になる場合は、以下をチェックしてください。

http://metacpan.org/pod/Devel::NYTProf

Devel::NYTProf は、プロファイリング ツールに関してはほぼ完璧です。スローダウンがどこにあるかを正確に示してくれるので、正しく動作しているという「あたたかみのある」感覚だけではありません...確実にわかります。

于 2010-02-13T22:58:56.980 に答える
4

Perl コードがタイトなループでのメソッド呼び出しに過度に依存していない限り、私はそうは思いません。しかし、実際の画像処理が C バックエンドで行われる場合、Perl はパフォーマンスのボトルネックにはなりません。

于 2010-02-13T21:19:14.730 に答える
3

答えは、Java バージョンでパフォーマンスを制限しているものによって異なります。ファイル I/O (.png 解凍を含む) によって制限されている場合は、Perl に移行しても問題ないでしょう。そうしないと、Perl で各ピクセルを処理するために大幅なパフォーマンス ペナルティを支払う可能性がありますが、C ルーチンを呼び出して画像全体を処理できる場合は、同じくらい高速になる可能性があります ( C および Java ライブラリ)。

簡単に言えば、Perl がピクセルに触れなければならない場合、遅くなります。Perl が画像に触れ、C がピクセルに触れても、おそらく問題ありません。

于 2010-02-13T22:49:26.920 に答える
1

はい、Perl 実装のパフォーマンスは、ピクセル レベルの画像操作では信じられないほどひどいものになると思います。

はい、できますが、Perl のデータ構造はこの種のことには向いていません。ピクセルごとに 1 回の呼び出しを行う必要のないライブラリを使用している場合でも、問題ありません。

于 2010-02-15T13:47:06.313 に答える