簡體   English   中英

線程化會影響Raspberry Pi上的圖像處理性能嗎?

[英]Will threading affect image processing performance on Raspberry Pi?

我從事有關自動駕駛汽車的項目。 在此項目中,使用C ++中的Opencv 4.0在Raspberry Pi(型號3B)上進行了實時視頻處理。 車輛前部還有距離傳感器,該傳感器與休閑障礙物的距離較遠。 任務是在1米之內有障礙物的情況下停下汽車。

為了實現此任務,我在編程結構中采用了線程。 我將圖像處理設計為主螺紋,並將距離傳感器測量設計為側螺紋。 我擔心的是這種結構是否會影響圖像處理速度。 你有什么主意嗎? 另外我不知道主線程是否使用Raspberry Pi的4個內核? 如果是這樣,是否會在結構拆分核心中引入線程,將其作為3進行圖像處理,將1作為距離傳感器測量?

我對此感到困惑。 可以在下面的代碼段中看到我頭腦中的設計(請注意,主線程無限循環):

int measuredDistance;
int distanceThreshold = 1; // 1 meter

void * sensor_thread(void * threadid) {
   // measure distance
   // update measuredDistance 
}

int main () {
   while(1){
      // do image processing
      if (measuredDistance < distanceThreshold)
         stopTheCar();
   }
}

首先,您必須要解決一個問題,可以將其分解為多個子問題。 圖像處理就是這樣的問題。 對您有好處,您可以考慮拆分問題。

您的系統一次可以執行多於1個線程的情況-多核,多線程或超線程或任何其他情況。 如果我對您的理解正確,Pi一次最多可以處理4個線程。 很好,您已准備好使用多線程程序。

回答您的問題:主線程是否使用所有4個內核? 基本上沒有,主線程只有一個線程,它在一個內核上運行。 您的測量線程將在另一個內核上運行。

因此,您想將圖像處理分成多個線程。 當您僅將圖像處理放入主線程的一個額外線程中時,您幾乎看不到任何改進。 您必須將圖像分成多個部分,並至少放入兩個線程中。 我建議一種通用方法,在該方法中可以輕松更改線程數,因此您可以嘗試一下最快的設置。

簡而言之,您不能期望我們提供明確的答案。 這取決於您的實現和系統,它還需要做什么以及數據存儲的位置……等等等等……但是,如果您讀了一些好書並明智地選擇了實現方法,圖像處理,我希望性能有所提高。

如果您擅長估算,則可以使用數學方法。 這在LINK中有更詳細的解釋。

並行化公式:

S(n) = 1/( (1-P) + P/n )
  • S(n)是理論上的加速
  • P是可以並行化的算法分數
  • n是CPU線程數

這基本上就是說,通過使用n個內核,程序可以看到的加速量取決於程序有多少是串行的(只能在單個CPU內核上運行)以及有多少並行(可以是在多個CPU內核之間拆分)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM