- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个更大的程序,但我在 MPI_Gather 上遇到了困难。
我编写了一个最小的示例代码,请参见下文。
program test
use MPI
integer :: ierr, rank, size
double precision, allocatable, dimension(:) :: send, recv
call MPI_Init(ierr)
call MPI_Comm_size(MPI_COMM_WORLD, size, ierr)
if (ierr /= 0) print *, 'Error in MPI_Comm_size'
call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)
if (ierr /= 0) print *, 'Error in MPI_Comm_size'
allocate(send(1), recv(size))
send(1) = rank
call MPI_Gather(send, 1, MPI_DOUBLE_PRECISION, &
recv, 1, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD)
print *, recv
call MPI_Finalize(ierr)
end program test
当(有 2 个节点)时,我得到以下错误输出。
[jorvik:13887] *** Process received signal ***
[jorvik:13887] Signal: Segmentation fault (11)
[jorvik:13887] Signal code: Address not mapped (1)
[jorvik:13887] Failing at address: (nil)
[jorvik:13888] *** Process received signal ***
[jorvik:13888] Signal: Segmentation fault (11)
[jorvik:13888] Signal code: Address not mapped (1)
[jorvik:13888] Failing at address: (nil)
[jorvik:13887] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x36150) [0x7f6ab77f8150]
[jorvik:13887] [ 1] /usr/lib/libmpi_f77.so.0(PMPI_GATHER+0x12d) [0x7f6ab7ebca9d]
[jorvik:13887] [ 2] ./test() [0x4011a3]
[jorvik:13887] [ 3] ./test(main+0x34) [0x401283]
[jorvik:13887] [ 4] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f6ab77e376d]
[jorvik:13887] [ 5] ./test() [0x400d59]
[jorvik:13887] *** End of error message ***
[jorvik:13888] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x36150) [0x7f0ca067d150]
[jorvik:13888] [ 1] /usr/lib/libmpi_f77.so.0(PMPI_GATHER+0x12d) [0x7f0ca0d41a9d]
[jorvik:13888] [ 2] ./test() [0x4011a3]
[jorvik:13888] [ 3] ./test(main+0x34) [0x401283]
[jorvik:13888] [ 4] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f0ca066876d]
[jorvik:13888] [ 5] ./test() [0x400d59]
[jorvik:13888] *** End of error message ***
我做错了什么? MPI 肯定已安装并在我正在使用的计算机上运行。
最佳答案
最大的问题是您没有在对 MPI_Gather
的调用中包含最后一个参数 ierr。医生说
All MPI routines in Fortran (except for MPI_WTIME and MPI_WTICK) have an additional argument ierr at the end of the argument list.
除此之外,我的建议是始终坚持良好实践:不要为变量使用内部函数名称,例如 size
。
program test
use MPI
integer :: ierr, rank, nProc
double precision, allocatable, dimension(:) :: send, recv
call MPI_Init(ierr)
if (ierr /= 0) print *, 'Error in MPI_Init'
call MPI_Comm_size(MPI_COMM_WORLD, nProc, ierr)
if (ierr /= 0) print *, 'Error in MPI_Comm_size'
call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)
if (ierr /= 0) print *, 'Error in MPI_Comm_size'
allocate(send(1), recv(nProc))
send(1) = rank
call MPI_Gather(send, 1, MPI_DOUBLE_PRECISION, &
recv, 1, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, ierr)
if (ierr /= 0) print *, 'Error in MPI_Gather'
print *, recv
call MPI_Finalize(ierr)
end program test
关于fortran - MPI_Gather 在最基本的代码中给出了 seg 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756900/
我在每个处理器(假设 3 个处理器)的本地数组(名为 lvotes)上都有一个值,每个处理器的第一个元素都存储一个值,即: P0 : 4 P1 : 6 p2 : 7 现在,使用 MPI_Gather,
我正在使用 MPI_Scatter 和 MPI_Gather 实现矩阵乘法。如果进程数平均分为矩阵行数和列数,我的代码就可以正常工作。但是,当它们不均匀划分时,它会在 MPI_Gather 上崩溃。这
#include #include int main(int argc,char * argv[]) { int rank,size,m; int ar
我是第一次使用 MPI_Gather 并遵循了一些示例,但出于某种原因,我每次调用它时都会遇到段错误。相关代码在这里: //Get the top N matches for each nod
我有两个 MPI 进程。每个进程都有一个相同大小的数组。我想将两个数组合并为一个双倍大小的数组。我应该使用哪个 mpi 接口(interface)? 例如,我有两个数组: 我想让他们进入排名 0: 我
我需要在我的矩阵乘法程序中使用 MPI_Gather 函数,但最近几天遇到了问题。 因此,我单独使用 gather 函数编写了一个简单的 MPI 程序,并一直试图让它运行……为此,我引用了“Peter
N 是 4,N_glob 也是。它恰好大小相同。 p 为 4。 下面是一小部分代码: float **global_grid; float **gridPtr; lengthSubN = N/pSqr
我有这个并行高斯消除代码。调用 MPI_Gather 函数调用时会发生段错误。我知道如果没有为两个缓冲区正确分配内存,这样的错误可能会增加。但是我看不出内存管理代码有什么问题。 有人可以帮忙吗? 谢谢
这是来自 MPI_Gather 2D array 的后续问题.这是情况: id = 0 has this submatrix |16.000000| |11.000000| |12.000000| |
我尝试使用 MPI_Gather 发送以下数据结构: struct set { int nbits; char bits[]; }; 问题是我无法收集上述结构的所有项目,只能收集第一
我正在尝试使用 MPI_Gather 收集结构数组。我使用 MPI_Type_contigulous 创建了一个结构“Final”的派生数据类型“mystruct”(每个元素都是 double )。然
我有一个主进程和更多从进程。我希望每个从进程向主进程发送一个整数,所以我想我应该使用 MPI_Gather 收集它们。但不知怎的,它不起作用,我开始认为 MPI_Gather 与 MPI_Send 不
我正在尝试编写 MPI C 代码,该代码重复执行计算并将其结果保存到单个数组中,以降低输出频率。下面的示例代码(var 的大小,200,足以满足正在使用的 CPU 数量): #include #in
我尝试编写“查找素数”代码。但是 MPI_Gather 函数无法获取“c”的值(素数)。即使我声明其他数组也不起作用。我的代码源有什么问题?当我删除 MPI_Gather 函数的部分时,效果很好。我是
所以我想做的是将输入字符串“HELO”打印为“HEELLLOOOO”到目前为止,我已经想出了这段代码 #include #include #include int main(int argc,
我试图让每个进程计算总和,然后将总和发送回根进程。 但是, printf("\nSUMS[%d] = %d",i,sums[i]); 行打印出的总和与 printf("中打印的总和不同\n我是进程 %
我正在尝试将数据传递给MPI_Gather。我按如下方式分配内存: float *phie, *phitemp; MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_C
我正在尝试使用 OpenMPI 为我的本科高级项目构建一个多进程光线追踪器,以便我可以在我学校的 super 计算机上运行它。 我已经到了代码可以正常编译和运行的地步,直到我到达该行 MPI_Gath
我在 C 语言的 MPI 代码中遇到问题。 我想我创建了一个很好的算法来处理二维数组的双循环。但是,当我尝试使用 MPI_Gather 从进程中收集数据时,出现段错误。这是代码: #define NN
在 MPI 聚集和分散中,发送和接收有两个计数。我检查了文档,发现两者应该具有相同的值。 Ex:- 在 MPI_Gather() 中,send_count 和 receive_count 的大小都应该
我是一名优秀的程序员,十分优秀!