Re: C++ OpenMP 多CPU同時處理可能的問題

看板Programming作者 (ggg)時間15年前 (2010/05/23 14:53), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/7 (看更多)
※ 引述《sorryChen (陳揚和)》之銘言: : 我有一個很大的array大概是 3G 個數(其實是Human Genome) : 我想要用多個CPU同時bucket這些數到 64 million個 bucket : 一個簡單的sudo code 大概是這樣 : int array[3G]; : int counters[64M]; : for( int i = 0; i < 3G; i++) { : counter[array[i] % 64M] ++; : } : 請問有人有類似的經驗嗎 有人說假設有16個CPU就設16 * 64M個 CPU的counter : 最後在加起來 這個要 4G memory..可能還ok counter[array[i]%64M] ++; 就是根據 array[i] 對 64M 的餘數當索引, 對counter[索引]加一計數; 各別算時餘數的索引可能會都相同, 就有同時 update 同一個 counter[索引] 的問題. 如同有人建議的. 假如先把 array[3G] 先分割為 array [16, 3G/16]組, 每 個 cpu 編號為 j, 各別處理 array [j,k], k=1, 3G/16 , 但所存的 counter 為 counter[j, 索引], 索引= array[k]%64M , k=1, 3G/16 那就是各cpu j 去各組 array[j,k] update 各自的 counter[j, 索引] , 然後 再針對各個索引把分放對應於 cpu j 各處, 屬同一索引對應的16 組 counter 值累加就得同一索引的累計結果. 2-dim array 可用 j*64M + k = i 來對 array[i]直接存取. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.4.12
文章代碼(AID): #1B-D3RFs (Programming)
文章代碼(AID): #1B-D3RFs (Programming)