【发布时间】:2018-02-15 16:22:34
【问题描述】:
我正在使用 MPI 解决 PDE。为此,我将 2D 域分解为不同的单元格(每个单元格的大小为“xcell,ycell”,xcell = size_x_domain/(number of X subdomains) 和 ycell = size_y_domain/(number of Y subdomains)。
所以,我正在使用number of processes = (number of X subdomains)*(number of Y subdomains) 运行代码
相对于顺序版本的好处是我在代表子域的每个进程之间进行通信。
下图说明了我对 8 个进程的细分(X 为 2 个子域,Y 为 4 个子域):
(xs,xe) 表示单元格的x_start 和x_end,
(ys,ye) 代表单元格的y_start 和y_end
我想知道是否必须在x(i,j) 数组中设置i 作为行索引 和j 作为列索引?
将第一个索引放在 row 上,将第二个索引放在 column 上是否是一般规则? (例如,在 C、Fortran 和 Matlab 语言或更多语言中)
感谢您的帮助。
【问题讨论】:
-
in
x(i,j)i始终是行,j始终是列。 “Fortran 是主要列”意味着在内存中x(1,0)在x(0,0)旁边。另一方面,C 是 row major,这意味着在real x[2][2]中,x(0,1)在内存中紧挨着x(0,0)。 -
-@GillesGouaillardet 好的,那么我该怎么做才能解决我定义的 Fortran 和 row_type 问题?当您说“在 x(i,j) 中 i 始终是行而 j 始终是列”时,您是在谈论 C 和 Fortran 语言吗?
-
正确,这里的“always”是指C和Fortran
标签: mpi ipc fortran90 contiguous