[英]Intel Tbb overhead issue
我使用Intel 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毫秒。 當我在上面實驗性地使用Intel TBB作為注釋塊時,處理過程要花費25毫秒以上。
那么,有沒有更好的方法來使用英特爾TBB而不產生開銷問題,或者采用其他更有效的方法來提高像這樣的簡單快速處理程序的性能?
TBB不會為調用並行算法增加如此大的開銷(〜20ms)。 我的猜測(由於未提供具體細節)是與以下之一有關:
parallel_for
一次調用可能不足以創建所有線程) 因此,使用TBB進行性能測量的建議是僅考慮總時間以進行足夠長的計算序列,這將隱藏初始化開銷。
當然,正如建議的那樣,首先在外層平行進行。 TBB為此提供了足夠的不同模式,包括tbb::parallel_pipeline
和tbb::flow::graph
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.