看板 C_and_CPP 關於我們 聯絡資訊
大家好 我想請問兩個問題 1.我目前寫了一個程式 可是都沒有用到thread等多工的概念 可以從XP的工作管理員發現 兩顆CPU都有在運作 兩個的計算量是差不多大的 然後總共的CPU使用率約八十 想請問 是因為OS將我的程式的運算量自動分配到兩個core上嗎? 2.在OpenMP上 我可以指定某個thread在core1跑 另外一個thread在core2上跑嗎? 如果可行的話 可以請板友分享一下關鍵字嗎? 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 136.152.170.123 ※ 編輯: hoson 來自: 136.152.170.123 (03/17 05:36)
hoson:抱歉 標題錯了 應該是openMP 03/17 05:36
LPH66:大寫 T 可以改外面的標題 03/17 07:03
LPH66:我沒記錯的話 OpenMP 會自動生成分工的程式碼 03/17 07:04
LPH66:所以如果你有用到讓它平行化的指令(如#pragma omp parallel) 03/17 07:04
LPH66:它是會幫你分配沒錯的 03/17 07:04
LPH66:而指定某 thread 在哪個 core 上跑我就不清楚了 03/17 07:05
^^^^ 感謝L大 我的想法是 while(1) { function_a: ........... function_b: ........... } function a與 function b 各在不同的core跑 不知道OpenMP是否可行... ※ 編輯: hoson 來自: 136.152.170.123 (03/17 07:38)
james732:你舉的例子是可以做到的 我猜是用 section 來做 03/17 08:39
hayden0828:用omp_get_thread_num()來做switch的參數就可以了 03/17 09:07
^^^ 感覺用SECTION比較可以作? 想請問h大 omp_get_thread_num 怎麼跟swtich一起用? 感覺omp_get_thread_num是回傳哪個thread的值?
hoson:感謝樓上 那另外 第一個問題有人知道嗎? 03/17 11:00
manchester77:我也很好奇,如果是用assembly來寫呢? 03/17 11:20
※ 編輯: hoson 來自: 65.84.238.27 (03/17 12:15)
callisto2:第一個問題, 不會自動拆成兩個 thread, 你可以用 03/17 12:43
callisto2:cpu affinity 把process pin 在同一顆 cpu 上看看變化 03/17 12:44
hoson:感謝! 那有可能單支thread在不同cores之間跳來挑去運算嗎? 03/17 12:47
hoson:問過學長之後 好像真的是這樣@@ 03/17 13:06
hoson:有人用過openMP作過affinity嗎? 03/17 13:06
james732:單隻thread通常會被OS排在同一顆CPU,為了快取效率考量 03/17 14:50
co1e945:這裡就有在windows上對thread設affinity的範例了.. 03/17 17:58
co1e945:他是把t1綁c1,t2綁c2依此類推. 但設affinity通常不見得有 03/17 17:59
co1e945:幫助. 因為affinity主要是避免換core時,private cache要跟 03/17 17:59
co1e945:著搬的問題,或是如果cache被清掉,miss rate會提高.. 03/17 18:00
co1e945:但除非你的的程式都是計算非常少I/O,而且計算的locality高 03/17 18:00
co1e945:不然affinity反而可能讓效能變低. 因為本來scheduler就偏 03/17 18:01
co1e945:向不把thread搬core跑,但如果有空閒的CPU就會移過去.. 03/17 18:02
co1e945:在有I/O的時候,CPU就容易空下來.所以thread大於core數,且 03/17 18:03
co1e945:有I/O, affnity反而不好. 03/17 18:03
co1e945:對了,thread其實通常大於core數.因為你的系統不是只有你 03/17 18:04
co1e945:的這隻程式.. 03/17 18:04
hoson:感謝樓上!! 我會在試試看哪種效率比較高 感謝 03/18 01:45