大きな画像を処理するカーネルがあります (OpenCL 1.1、データ型は image2d_t)。この画像の特定の領域のみを処理したい場合があります。明らかな解決策は、グローバル ワーク オフセットを使用することです。これによりパフォーマンスが向上することを期待していますが、これまでのところ、ゼロ以外のオフセットで実行時間が悪化するだけです!
// Image is 4096x4096 pixels. Local work size is 8x8.
//
// Example A:
globalWorkSize = { 4096, 4096 };
globalWorkOffset = { 0, 0 };
// Execution time is 38 seconds
//
// Example B:
globalWorkSize = { 3296, 3296 };
globalWorkOffset = { 400, 400 };
// Execution time is 58 seconds <------------------ ?!
//
// Example C: Cropped image @ 3296x3296 pixels
globalWorkSize = { 3296, 3296 };
globalWorkOffset = { 0, 0 };
// Execution time is 28 seconds
なぜ私がこれらの結果を得たのか誰か説明してもらえますか?