[問題] 想請問多核的概念以及openMP

看板C_and_CPP作者 (林老師賣的冰淇淋)時間15年前 (2010/03/17 05:35), 編輯推噓2(2027)
留言29則, 7人參與, 最新討論串1/3 (看更多)
大家好 我想請問兩個問題 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)

03/17 05:36, , 1F
抱歉 標題錯了 應該是openMP
03/17 05:36, 1F

03/17 07:03, , 2F
大寫 T 可以改外面的標題
03/17 07:03, 2F

03/17 07:04, , 3F
我沒記錯的話 OpenMP 會自動生成分工的程式碼
03/17 07:04, 3F

03/17 07:04, , 4F
所以如果你有用到讓它平行化的指令(如#pragma omp parallel)
03/17 07:04, 4F

03/17 07:04, , 5F
它是會幫你分配沒錯的
03/17 07:04, 5F

03/17 07:05, , 6F
而指定某 thread 在哪個 core 上跑我就不清楚了
03/17 07:05, 6F
^^^^ 感謝L大 我的想法是 while(1) { function_a: ........... function_b: ........... } function a與 function b 各在不同的core跑 不知道OpenMP是否可行... ※ 編輯: hoson 來自: 136.152.170.123 (03/17 07:38)

03/17 08:39, , 7F
你舉的例子是可以做到的 我猜是用 section 來做
03/17 08:39, 7F

03/17 09:07, , 8F
用omp_get_thread_num()來做switch的參數就可以了
03/17 09:07, 8F
^^^ 感覺用SECTION比較可以作? 想請問h大 omp_get_thread_num 怎麼跟swtich一起用? 感覺omp_get_thread_num是回傳哪個thread的值?

03/17 11:00, , 9F
感謝樓上 那另外 第一個問題有人知道嗎?
03/17 11:00, 9F

03/17 11:20, , 10F
我也很好奇,如果是用assembly來寫呢?
03/17 11:20, 10F
※ 編輯: hoson 來自: 65.84.238.27 (03/17 12:15)

03/17 12:43, , 11F
第一個問題, 不會自動拆成兩個 thread, 你可以用
03/17 12:43, 11F

03/17 12:44, , 12F
cpu affinity 把process pin 在同一顆 cpu 上看看變化
03/17 12:44, 12F

03/17 12:47, , 13F
感謝! 那有可能單支thread在不同cores之間跳來挑去運算嗎?
03/17 12:47, 13F

03/17 13:06, , 14F
問過學長之後 好像真的是這樣@@
03/17 13:06, 14F

03/17 13:06, , 15F
有人用過openMP作過affinity嗎?
03/17 13:06, 15F

03/17 14:50, , 16F
單隻thread通常會被OS排在同一顆CPU,為了快取效率考量
03/17 14:50, 16F

03/17 17:58, , 17F

03/17 17:58, , 18F
這裡就有在windows上對thread設affinity的範例了..
03/17 17:58, 18F

03/17 17:59, , 19F
他是把t1綁c1,t2綁c2依此類推. 但設affinity通常不見得有
03/17 17:59, 19F

03/17 17:59, , 20F
幫助. 因為affinity主要是避免換core時,private cache要跟
03/17 17:59, 20F

03/17 18:00, , 21F
著搬的問題,或是如果cache被清掉,miss rate會提高..
03/17 18:00, 21F

03/17 18:00, , 22F
但除非你的的程式都是計算非常少I/O,而且計算的locality高
03/17 18:00, 22F

03/17 18:01, , 23F
不然affinity反而可能讓效能變低. 因為本來scheduler就偏
03/17 18:01, 23F

03/17 18:02, , 24F
向不把thread搬core跑,但如果有空閒的CPU就會移過去..
03/17 18:02, 24F

03/17 18:03, , 25F
在有I/O的時候,CPU就容易空下來.所以thread大於core數,且
03/17 18:03, 25F

03/17 18:03, , 26F
有I/O, affnity反而不好.
03/17 18:03, 26F

03/17 18:04, , 27F
對了,thread其實通常大於core數.因為你的系統不是只有你
03/17 18:04, 27F

03/17 18:04, , 28F
的這隻程式..
03/17 18:04, 28F

03/18 01:45, , 29F
感謝樓上!! 我會在試試看哪種效率比較高 感謝
03/18 01:45, 29F
文章代碼(AID): #1Bd_cinY (C_and_CPP)
文章代碼(AID): #1Bd_cinY (C_and_CPP)