作者sorryChen (陈扬和)
看板Programming
标题Re: C++ OpenMP 多CPU同时处理可能的问题
时间Wed May 19 11:51:26 2010
Sorry还是没有懂 外面3G/64M=47的回圈 是什麽意思
平均每个bucket 47个count但不一定阿..
里面是说 每个CPU负责一种bucket? 是这样吗
而且我後来大概算了一下 如果每个CPU count的cycle是同步的话
平均的collision大概是四百多个..假设少算四百多个也没关系的话
不设mutex 会有什麽关系吗 可能有大问题是说 一个CPU已经把counter加很多了
另一个CPU有可能把他归零是这样吗
※ 引述《sorryChen (陈扬和)》之铭言:
: 感谢回覆 可是我没有看懂耶 外面64个回圈不用OpenMp然後里面才用??
: 然後里面才用 可以在指点一下吗?
: 有人建议我说 说不定一个CPU负责 一部分的counter 可能会比叫快
: 这样虽然每个CPU都要把整个array读一次
: 但是可能就不用只需要cache 一部分counter 到cache..
: ※ 引述《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] ++;
: : }
: : 如果用openMP平行时 其实只要在for loop 加一行annotation
: : 但可能会发生刚好两个CPU同时要算到一个counter会可能出错
: : 但因为有64M个counter 所以刚好算到同一个机会很低 而且其实如果差异不大
: : 其实也还可以
: : 请问有人有类似的经验吗 有人说假设有16个CPU就设16 * 64M个 CPU的counter
: : 最後在加起来 这个要 4G memory..可能还ok
: : 另外设semaphore..好像会慢很多 但可能是我设的不好
: : 另外就是 假设有冲突 不知道会发生什麽是 就是有counter少加了而以吗
: : 如果只要算个大概就好 可以直接去并行吗 还是会memory有错
: : 其实错没关系 但其实我比较希望多加儿不是少加 有什麽算法或programming上得技巧
: : 可以解决这个问题吗
: ※ 引述《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] ++;
: : }
: : 如果用openMP平行时 其实只要在for loop 加一行annotation
: : 但可能会发生刚好两个CPU同时要算到一个counter会可能出错
: : 但因为有64M个counter 所以刚好算到同一个机会很低 而且其实如果差异不大
: : 其实也还可以
: : 请问有人有类似的经验吗 有人说假设有16个CPU就设16 * 64M个 CPU的counter
: : 最後在加起来 这个要 4G memory..可能还ok
: : 另外设semaphore..好像会慢很多 但可能是我设的不好
: : 另外就是 假设有冲突 不知道会发生什麽是 就是有counter少加了而以吗
: : 如果只要算个大概就好 可以直接去并行吗 还是会memory有错
: : 其实错没关系 但其实我比较希望多加儿不是少加 有什麽算法或programming上得技巧
: : 可以解决这个问题吗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 204.140.140.37