2015-08-24 49 views
0

這是一個關於如何編寫代碼開羅考慮到性能更一般的問題。開羅性能洞察力/油漆

是什麼給了更好的性能

  1. 讓你的線條/地區的/ ...,比中風/填充/油漆
  2. 讓1項如一個盒子衝程/填充/油漆和做直到他們全部完成。

或者沒有顯著差異?或者也許只是爲了繪畫而不是筆畫/填充?這取決於繪製物品的數量嗎?

一個真實世界的例子(高級別代碼),計算ABC很簡單:

save cr 
set_source_color cr rgb1 
loop 100 times 
    do calculations abc 
    draw box 
end loop 
fill cr 
restore cr 

set_source_color cr rgb2 
loop 100 times 
    do calculations abc 
    draw arc 
end loop 
fill cr 
restore cr 

set_source_color cr rgb3 
loop 100 times 
    do calculations abc 
    draw rectangle 
end loop 
fill cr 
restore cr 

loop 100 times 
    do calculations abc 

    set_source_color cr rgb1 
    draw box 
    fill cr 

    set_source_color cr rgb2 
    draw arc 
    fill cr 

    set_source_color cr rgb3 
    draw rectangle 
    fill cr 
end loop 

當然,這僅適用於如果所有的箱子EC​​T具有相同的顏色。否則,必須使用選項2。

這意味着作爲一個更普遍的問題,給出的例子僅僅是一個例證,使我的示例場景清晰。不要猶豫,深入解答/技術。

+0

您在窗口或內存圖像上渲染嗎?你執行哪種「繪圖」操作? – Youka

+0

到窗口,X11(linux) – iami

回答

1

當您在窗口上繪製,大部分繪製操作發生在GPU,我想對你CPU計算。每個處理單元都取決於操作,吞吐量和處理時間。爲避免等待太多同步,您應該將計算和繪圖混合在一起,讓這些單元並行工作。

在像面爲目標的情況下,一切都發生在CPU,但內部多線程可能會導致在並行渲染流水線爲好。

我建議使用第一種方法。

+0

我認爲循環和abc計算的開銷不會超過增益?一般來說。 – iami

+0

目前爲止沒有。這些循環甚至可能會展開,至少是部分展開,以及與我不知道的單個計算相比,組合計算的成本有多高。最後,編譯器優化了很多代碼,但他並沒有深入開羅。 – Youka