gpt4 book ai didi

c++ - 多线程 MPI 进程突然终止

转载 作者:行者123 更新时间:2023-11-28 08:30:20 26 4
gpt4 key购买 nike

我正在编写一个 MPI 程序 (Visual Studio 2k8 + MSMPI),它使用 Boost::thread 为每个 MPI 进程生成两个线程,但遇到了一个问题,我无法追踪。

当我运行程序时:mpiexec -n 2 program.exe,其中一个进程突然终止:

job aborted:
[ranks] message

[0] terminated

[1] process exited without calling finalize

---- error analysis -----

[1] on winblows
program.exe ended prematurely and may have crashed. exit code 0xc0000005


---- error analysis -----

我不知道为什么第一个进程突然终止,也不知道如何追查原因。即使我在所有操作结束时将零级进程置于无限循环中,也会发生这种情况……它会突然死掉。我的主要功能如下所示:

int _tmain(int argc, _TCHAR* argv[])
{
/* Initialize the MPI execution environment. */
MPI_Init(0, NULL);

/* Create the worker threads. */
boost::thread masterThread(&Master);
boost::thread slaveThread(&Slave);

/* Wait for the local test thread to end. */
masterThread.join();
slaveThread.join();

/* Shutdown. */
MPI_Finalize();
return 0;
}

masterslave 函数在结束前做了一些任意的工作。我可以确认主线程至少已到达其操作的末尾。从属线程始终是执行中止之前未完成的线程。使用 print 语句,似乎从属线程实际上并没有遇到任何错误……它很高兴地继续前进,只是在崩溃中被淘汰了。

那么,有没有人有什么想法:
a) 可能是什么原因造成的?
b) 我应该如何调试它?

非常感谢!

编辑:

发布主/从函数的最小版本。请注意,该程序的目标纯粹是为了演示目的……所以它没有做任何有用的事情。本质上,主线程向另一个 MPI 进程的从线程发送一个虚拟有效负载。

void Master()
{
int myRank;
int numProcs;
MPI_Comm_size(MPI_COMM_WORLD, &numProcs);
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

/* Create a message with numbers 0 through 39 as the payload, addressed
* to this thread. */
int *payload= new int[40];
for(int n = 0; n < 40; n++) {
payload[n] = n;
}

if(myRank == 0) {
MPI_Send(payload, 40, MPI_INT, 1, MPI_ANY_TAG, MPI_COMM_WORLD);
} else {
MPI_Send(payload, 40, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD);
}

/* Free memory. */
delete(payload);
}

void Slave()
{
MPI_Status status;
int *payload= new int[40];
MPI_Recv(payload, 40, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);

/* Free memory. */
delete(payload);
}

最佳答案

您必须使用线程安全版本的 mpi 运行时。阅读 MPI_Init_thread

关于c++ - 多线程 MPI 进程突然终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com