我的工作假设 MPI 进程从头到尾都在单独和唯一的数据上运行,即使在同一台机器上也是如此。但是我的代码,我希望每个 MPI 进程都有一个全局对象:
class global { // the class };
extern global obj;
global obj;
int main( int argc, char * argv[] ) {
MPI_Init();
// determine rank
std::cout << rank << " global object is at " << &obj << std::endl;
MPI_Finalize();
}
使用 -np 2,结果:
0 global object is at 0x620740
1 global object is at 0x620740
这可能是分段错误或其他错误的来源,其中两个 MPI 进程正在同一台机器上访问相同的内存地址以获取其自己的全局对象?
编辑:我应该提到,我的意图中的“全局”不是所有 MPI 进程的全局,而是每个单独的 MPI 进程中的全局。