【发布时间】:2015-12-06 09:44:24
【问题描述】:
我正在使用英特尔 TBB 来并行处理处理图像的算法的某些部分。虽然每个像素的处理是依赖于数据的,但在某些情况下,可以并行处理 2 个连续的像素,如下所示。
ProcessImage(image)
for each row in image // Create and wait root task for each line here using allocate_root()
ProcessRow(row)
for each 2 pixel
if(parallel())
ProcessPixel(A) and ProcessPixel(B) in parallel // For testing, create and process 2 tbb::empty_task() here as child tasks
else
ProcessPixel(A)
ProcessPixel(B)
但是,由于此处理速度非常快,因此会产生开销。对于每个输入图像(大小为 512x512),处理时间约为 5-6 ms。 当我实验使用 Intel TBB 作为上面的注释块时,处理成本超过 25 毫秒。
那么有没有更好的方法使用英特尔 TBB 而不会出现开销问题或其他更有效的方法来提高这样简单快速的处理程序的性能?
【问题讨论】:
-
如果它这么快,你为什么关心它有多快?如果答案是“因为我需要处理很多图像”,那么在图像级别(甚至可能是多图像级别)并行化,而不是像素级别。
-
@T.C 不,我只需要改进单个图像。我只是对这种情况下英特尔 TBB 的可能性感到好奇。谢谢。
标签: c++ parallel-processing intel tbb overhead