5

そのため、C++/cli 画像処理ライブラリに取り組んでおり、コードを最適化しようとしています。基本的に、画像の System::Drawing::Bitmap が渡されます。これをディスクに書き込み、複雑な分析を実行して、分析結果を返す必要があります。処理を高速化するために、イメージを並行してディスクに書き込むことができると考えました (私のアルゴリズムはイメージを変更しません)。ただし、私はスレッドをあまり扱っていないので、これを行う最善の方法について意見を求めたいと思いました。

string ProcessImage(System::Drawing::Bitmap ^bmp, System::String^ targetFile)
{
    bmp->Save(targetFile);
    System::Drawing::Bitmap^ bmp8 = BitmapConvertPixelFormat(bmp, 8); //<-- a function I wrote which converts the 32bpp I am passed into an 8bpp one
    string results = Analyze(bmp8); //<--- takes a good bit of time
    return results;
}

考えを教えてください。前もって感謝します!

4

3 に答える 3

7

I/O 要求を処理するために毎回機械ヘッドを回転させる必要があるため、単一の機械ディスクとの間で並行して書き込み/読み取りを行うことはお勧めできません。そのため、複数のスレッドを使用すると、不必要にディスクが跳ね返り、オーバーヘッドが発生します。

少しベンチマークを試すことはできますが、単一のスレッドを使用して順次書き込むことに頼る必要があるのではないかと思います。

于 2012-04-20T22:04:10.093 に答える
3

ディスク書き込みを別のスレッドにキューイングするのは良い考えのように思えますが、ディスクごとに 1 つのライター スレッドのみにキューイングすることで、遅いディスク書き込みがそれを妨げることなく複雑な分析を実行できるようにします。

于 2012-04-20T22:27:43.740 に答える
1

それだけの価値がある場合は、Parallel HDF5の使用方法を理解するために時間を費やすことができます。並行してファイルに書き込むことができます。

于 2013-08-15T16:50:30.390 に答える