作者sorryChen (陈扬和)
看板Programming
标题C++ OpenMP 多CPU同时处理可能的问题
时间Mon May 17 02:49:13 2010
我有一个很大的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] ++;
}
如果用openMP平行时 其实只要在for loop 加一行annotation
但可能会发生刚好两个CPU同时要算到一个counter会可能出错
但因为有64M个counter 所以刚好算到同一个机会很低 而且其实如果差异不大
其实也还可以
请问有人有类似的经验吗 有人说假设有16个CPU就设16 * 64M个 CPU的counter
最後在加起来 这个要 4G memory..可能还ok
另外设semaphore..好像会慢很多 但可能是我设的不好
另外就是 假设有冲突 不知道会发生什麽是 就是有counter少加了而以吗
如果只要算个大概就好 可以直接去并行吗 还是会memory有错
其实错没关系 但其实我比较希望多加儿不是少加 有什麽算法或programming上得技巧
可以解决这个问题吗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 143.48.10.57
※ 编辑: sorryChen 来自: 143.48.10.57 (05/17 02:49)
1F:→ dryman:counter不适合用openMP 140.112.46.31 05/17 17:57
2F:推 dryman:也许你可以分组,分成两个回圈 140.112.46.31 05/17 18:00
3F:→ dryman:一个是以64个为单位跑的回圈,没用openMP 140.112.46.31 05/17 18:01
4F:→ dryman:在这里面的回圈则是同时处理64M的 140.112.46.31 05/17 18:01
5F:→ dryman:这样就不会打架了 140.112.46.31 05/17 18:02