→ 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