【发布时间】:2012-08-30 01:21:04
【问题描述】:
我有一个处理大图像的内核(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
有人能解释一下为什么我会得到这些结果吗?
【问题讨论】:
-
我们能看到你的内核吗(不一定是所有的内核,而是输入、输出、带有循环的一般结构等......)?这里没有什么可做的。
-
我将尝试制作一个演示问题的最小示例。
-
您是否尝试过将偏移量对齐到 64?任何未对齐的东西都会影响 GPU 性能。
-
非常有趣!会试试的。
-
你可以访问 CL 内核的程序集吗?
标签: performance opencl