Re: C++ OpenMP 多CPU同時處理可能的問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 7 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章