看板 C_and_CPP 關於我們 聯絡資訊
原本的程式是這樣(OpenMP版本): #pragma omp parallel { int id = omp_get_thread_num(); if(numThread -1 == id ) height = Height - (Height/numThread)*(numThread-1) ; else height = (Height/numThread); int shift = nSrcWidth*(nSrcHeight/numThread)*(id); SomeImageProcessingFunction(Src + shift ,Width, height*PIXELSIZE, Dst); }/*#pragma omp parallel */ 簡單講就是:若這為雙核CPU,一張圖拿來,強制 A核做上半部,B核做下半部,這在電腦沒有做其他事時是極何理的。 與同事討論後,同事說可以用pthread,讓OS自己去分配執行任務的 核是誰。 也就是說,假若A核在忙,B核很閒,則影像處理的兩部份都會被OS 交給B核做。 爬了爬文還有網上找不到資料,發現還真不好入手。。 對pthread完全不熟,那請問我要怎修改原本的程式為pthread呢? 謝謝大大幫忙。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.158.204
DrStein:囧,程式有錯,在SomeImageProcessingFunction該改為: 06/17 19:45
DrStein:SomeImageProcessingFunction(Src + shift ,Width, 06/17 19:46
DrStein: height*PIXELSIZE, Dst+ shift); 06/17 19:46
godman362:OpenMP不是可以設section分配給不同thread嗎? 06/17 19:57
godman362:還是說一定要改成pthread啊? 06/17 19:57
DrStein:我意思是,交給os分配工作給那個thread作 06/17 20:00
DrStein:而不是像上面,寫死成平均分配給每個core 06/17 20:01
akasan:openMP也是弄成thread阿XD? 06/17 20:55
akasan:強制那兩個字的的觀念是哪弄來的阿 06/17 20:57
james732:有沒有什麼資料是在講OpenMP的底層實作呢? 06/17 21:49
Dannvix:這篇? http://gcc.gnu.org/onlinedocs/libgomp.pdf 06/17 22:18
james732:感謝樓上 XD 06/17 22:20