Tag: mpi

openMPI在服务器集群上运行期间无限期等待?

我已成功在服务器和计算机之间设置密码减去ssh。 有一个简单的openMPI程序在单台计算机上运行良好。 但是,不幸的是,当我在群集上尝试这个时,我都没有得到密码提示(因为我已经设置了ssh授权),也没有执行正在向前发展。 Hostfile看起来像这样, # The Hostfile for Open MPI # The master node, ‘slots=8’ is used because it has 8 cores localhost slots=8 # The following slave nodes are single processor machines: gautam@pcys13.grm.polymtl.ca slots=8 gautam@srvgrm04 slots=160 我在群集上运行hello world MPI程序, int main(int argc, char *argv[]) { int numprocs, rank, namelen; char processor_name[MPI_MAX_PROCESSOR_NAME]; double t; MPI_Init(&argc, […]

为什么这个MPI代码执行不正常?

我正在努力创造一个“Hello,world!” 在(开放)MPI中应用,使每个过程按顺序打印出来。 我的想法是让第一个进程在完成时向第二个进程发送消息,然后在第二个到第三个进程发送消息,等等: #include #include int main(int argc,char **argv) { int rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); // See: http://mpitutorial.com/mpi-send-and-receive/ if (rank == 0) { // This is the first process. // Print out immediately. printf(“Hello, World! I am rank %d of %d.\n”, rank, size); MPI_Send(&rank, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); } else […]

如何在MPI中发送具有每个处理器变体的2Darrays

我试图在根0上采用随机生成的数组,稍微随机地改变它,并将每个变体发送到另一个处理器。 这是我到目前为止的代码: #include “stdio.h” #include “stdlib.h” #include “mpi.h” #include “math.h” int main(int argc, char **argv) { int N = 32; int dim = 3; float a = 10.0; int size, rank, i, j, k, q; float **C; float rijx, rijy, rijz, rij, Vij, E=0; float stepsize = 0.05; double Start_time, End_time, Elapse_time; MPI_Status status; MPI_Init(&argc, […]

如何访问和打印在MPI工作人员中分发的完整向量?

如何从MPI中的单个线程访问全局向量? 我正在使用一个库 – 特别是一个ODE求解器库 – 名为CVODE(SUNDIALS的一部分)。 该库与MPI一起使用,因此多个线程并行运行。 它们都运行相同的代码。 每个线程将一个数据“旁边”发送给它。 但我希望其中一个线程(rank = 0)在某些点打印出数据的状态。 该库包含函数,以便每个线程可以访问自己的数据( 本地向量 )。 但是没有方法可以访问全局向量。 我需要在特定时间输出所有方程的值。 为此,我需要访问全局向量。 任何人都知道如何获取MPI向量中的所有数据(如果可能,使用CVODE)? 例如,这是我的代码,每个线程运行 for (iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) { flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL); if(check_flag(&flag, "CVode", 1, my_pe)) break; if (my_pe == 0) PrintData(t, u); } … static void PrintData(realtype t, […]

非阻塞点对点通信中发送模式对MPI开销的影响

我想确定MPI中非阻塞点对点通信的开销。 有一些基准可用(如Sandia MPI Micro-Benchmark Suite或OSU微基准测试 ),但由于某些原因,他们不区分MPI提供的发送模式(标准,就绪,缓冲,同步)和仅使用标准模式。 MPI报告指出 在此模式下,由MPI决定是否缓冲传出消息。 MPI可以缓冲传出消息。 在这种情况下,发送调用可以在调用匹配的接收之前完成。 另一方面,出于性能原因,缓冲区空间可能不可用,或者MPI可能选择不缓冲传出消息。 在这种情况下,发送呼叫将不会完成,直到匹配的接收已发布,并且数据已移至接收方。 我认为将消息写入缓冲区可能与将消息直接发送到接收器(可能物理上很远,通过低带宽连接等连接)具有不同的性能。 所以我的问题是,我的假设是否是错误的,缓冲发送和就绪发送之间从来没有任何显着的性能差异(如果是,为什么) – 或者这些基准是否只是忽略了这些可能的差异(如果是,为什么) 。

带散射集合的MPI矩阵乘法

我正在尝试使用C中的MPI进行矩阵乘法,我们必须做一个顺序和一个并行版本的版本。 我的并行版本没有给出正确的答案,我不知道为什么。 我想我没有向流程发送正确的通信,但我不能确定。 教授刚刚查看了不同的发送/接收/收集等消息,但没有真正详细介绍……我已经看到很多不同的例子,但没有完成,没有使用分散/聚集。 如果有人可以看看我的代码,并告诉我,如果有任何东西突然出现,我会很感激。 我很确定我的问题在于分散/收集消息或c矩阵的实际计算。 #define N 512 #include #include #include #include #include #include “mpi.h” print_results(char *prompt, float a[N][N]); int main(int argc, char *argv[]) { int i, j, k, rank, size, tag = 99, blksz, sum = 0; float a[N][N], b[N][N], c[N][N]; char *usage = “Usage: %s file\n”; FILE *fd; double elapsed_time, start_time, end_time; […]

MPI意外输出

我正在阅读和练习教程中的MPI程序。 在那里,我看到了一个寻找流程等级的例子。 但同样的例子是在我的机器上给出不同的输出(Ubuntu 10.04)..这是程序 #include #include main(int argc, char **argv) { int ierr, num_procs, my_id; ierr = MPI_Init(&argc, &argv); /* find out MY process ID, and how many processes were started. */ ierr = MPI_Comm_rank(MPI_COMM_WORLD, &my_id); ierr = MPI_Comm_size(MPI_COMM_WORLD, &num_procs); printf(“Hello world! I’m process %i out of %i processes\n”, my_id, num_procs); ierr = MPI_Finalize(); } […]

MPI基本示例不起作用

我试图理解以下示例的含义: #include “mpi.h” #include int main(int argc, char *argv[]) { int numtasks, rank, dest, source, rc, count, tag = 1; char inmsg, outmsg = ‘x’; MPI_Status Stat; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numtasks); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) { dest = 1; source = 1; rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); rc = MPI_Recv(&inmsg, […]

C MPIarrays搜索(MPI_Scatter分段故障)

我的MPI代码一直在运行所有非主任务的分段错误。 #include “mpi.h” #include #include int main(int argc, char* argv[]) { int list_size = 1000 int threads; int th_nums; int slice; int index; char* the_array[list_size]; char* temp_array[list_size]; char str_to_search[10]; FILE *in = fopen(“inputfile”, “r”); char parse[10]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &threads); MPI_Comm_size(MPI_COMM_WORLD, &th_nums); if (threads == 0) { // if master task fgets(parse, 10, in); slice […]

在C中使用MPI的分段错误错误?

所以我需要在C中使用MPI并行实现向量加法函数。不幸的是,当我运行它时,它打印了许多内存位置的痕迹,然后是这条消息: ================================================================================== = BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES = PID 2419 RUNNING AT hbaum-pc = EXIT CODE: 6 = CLEANING UP REMAINING PROCESSES = YOU CAN IGNORE THE BELOW CLEANUP MESSAGES =================================================================================== YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Aborted (signal 6) This typically refers to a problem with your application. Please […]