我使用英特尔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毫秒。 当我通过实验性地将英特尔TBB用作上面的注释块时,处理成本超过25毫秒。
那么有没有更好的方法使用英特尔TBB而没有开销问题或其他更有效的方法来提高像这样的简单快速处理程序的性能?