【发布时间】:2013-12-20 10:02:52
【问题描述】:
给定 p 个处理器,每个处理器都有一个唯一的输入大小 i,其中每个输入都是一个唯一的数字。每个处理器都有一个整数范围。
目标:让每个处理器的范围内只有整数
目前在以下情况下遇到问题。 每个处理器都希望导出不在其范围内的值
- 每个处理器将不在其输入范围内的值存储在存储桶溢出中
- 每个处理器 p,广播溢出的大小,
- 获取溢出大小的总和,包括本地溢出大小,并创建一个 total_overflow_size 数组
- 现在每个处理器都将使用 MPI_Alltoallv 广播其存储桶
- 广播桶现在存储在 globalBucket 数组中
这是我正在使用的MPI_ALLTOALLV 电话:
int *local_overflow = &overflow;
//buckets = local buckets <- contains values not in local range, size of local overflow.
//globalBucket <- size of all overflows from all processors
//offset = Sum of all rank-1 processor's overflow.
MPI_Alltoallv(&buckets,local_overflow,off,MPI_INTEGER,
&globalBucket,offest,local_overflow,
MPI_INTEGER,MPI_COMM_WORLD);
我相信我的问题在于适当地偏移值,对应于第 3 和第 7 个参数。
目标是,例如,如果处理器 0 的存储桶大小为 5,处理器 1 的存储桶大小为 12,我希望 proc 0 的存储桶占用数组中的前 5 个空间,而 proc 1 的存储桶占用globalBucket 中接下来的十二个。
我收到诸如
之类的错误消息*** Process received signal ***
*** Process received signal ***
Signal: Segmentation fault (11)
Signal code: Address not mapped (1)
Failing at address: 0xc355bb0
*** Process received signal ***
Signal: Segmentation fault (11)
Signal code: Address not mapped (1)
Failing at address: 0x1733ae0
MPI_ALLTOALLV 是一个不常见的电话,更多信息请访问:http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Alltoallv.html
编辑:我已经正确计算了我的偏移量 -> 所有先前处理器等级的值,我现在收到与上述相同的错误。
【问题讨论】:
标签: c++ c mpi dynamic-arrays