作者DrStein (交換關聯)
看板C_and_CPP
標題[問題] 請問如何將OpenMP的程式改為pthread ?
時間Thu Jun 17 19:43:34 2010
原本的程式是這樣(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
→ james732:感謝樓上 XD 06/17 22:20