我如何完成所有进程,然后使用 MPI 在 C 中进行串行工作?
How do I do finish all processes and then do serial work in C using MPI?
我已经使用 MPI 编写了一个多线程 C 程序来查找二维字符数组中的回文。我启动了 4 个线程。现在所有线程都完成后,我想杀死线程并继续串行工作?我如何实现这一目标?代码看起来像这样:
int main(int argc, char *argv[]) {
// define some varibles
int foo;
// Kick off parallel work
MPI_Init (&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 0) {
// some work ...
}
if (rank == 1) {
// some work ...
}
if (rank == 2) {
// some work ...
}
if (rank == 3) {
// some work ...
}
MPI_Finalize();
// Here I want to print some results AFTER all threads are finished. E.g deallocate memory etc
printf("Found: %d", foo);
return 0;
}
您对 MPI 的工作原理感到困惑。 MPI 不使用线程,它使用独立的进程。每个进程执行整个主程序。*因此,如果您只希望一个进程执行工作,则可以在该代码周围设置条件 if (i_am_working_process)
。
*footnote: 该标准实际上允许不同的模型,但实际上这是真的。
我已经使用 MPI 编写了一个多线程 C 程序来查找二维字符数组中的回文。我启动了 4 个线程。现在所有线程都完成后,我想杀死线程并继续串行工作?我如何实现这一目标?代码看起来像这样:
int main(int argc, char *argv[]) {
// define some varibles
int foo;
// Kick off parallel work
MPI_Init (&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 0) {
// some work ...
}
if (rank == 1) {
// some work ...
}
if (rank == 2) {
// some work ...
}
if (rank == 3) {
// some work ...
}
MPI_Finalize();
// Here I want to print some results AFTER all threads are finished. E.g deallocate memory etc
printf("Found: %d", foo);
return 0;
}
您对 MPI 的工作原理感到困惑。 MPI 不使用线程,它使用独立的进程。每个进程执行整个主程序。*因此,如果您只希望一个进程执行工作,则可以在该代码周围设置条件 if (i_am_working_process)
。
*footnote: 该标准实际上允许不同的模型,但实际上这是真的。