草庐IT

MPI_Recv

全部标签

c - recv() 在多线程环境中不会被信号中断

我有一个线程位于阻塞的recv()循环中,我想终止(假设这不能更改为select()或任何其他异步方法)。我还有一个信号处理程序可以捕获SIGINT并且理论上它应该使recv()返回错误并且errno设置为EINTR.但事实并非如此,我认为这与应用程序是多线程的事实有关。还有另一个线程,同时等待pthread_join()调用。这里发生了什么?编辑:好的,现在我通过pthread_kill()从主线程显式地将信号传递给所有阻塞的recv()线程(这导致相同的全局SIGINT信号处理程序已安装,尽管多次调用是良性的)。但recv()调用仍未畅通。编辑:我已经编写了一个重现该问题的代码示例

linux - Recv-Q 和 Send-Q 的使用

netstat输出中的Recv-Q和Send-Q列有什么用?我如何在现实场景中使用它?在我的系统上,两列始终显示为零。这是什么意思? 最佳答案 来self的手册页:Recv-QEstablished:Thecountofbytesnotcopiedbytheuserprogramconnectedtothissocket.Listening:SinceKernel2.6.18thiscolumncontainsthecurrentsynbacklog.Send-QEstablished:Thecountofbytesnotackno

memory - MPI Fortran 代码 : how to share data on node via openMP?

我正在编写一个已经使用MPI的Fortan代码。现在,我面临一种情况,一组数据增长得非常大,但每个进程都相同,所以我希望每个节点只将它存储在内存中一次,并且一个节点上的所有进程都访问相同的数据。为每个进程存储一次会超出可用RAM。是否有可能使用openMP实现类似的目标?每个节点的数据共享是我唯一想要的,不需要其他每个节点的并行化,因为这已经通过MPI完成。 最佳答案 如果仅用于共享数据block,则无需实现混合MPI+OpenMP代码。你实际上要做的是:1)将世界通信器分成跨越同一主机/节点的组。如果你的MPI库实现了MPI-3.

c++ - 在 C 中处理来自 recv() TCP 的部分返回

我一直在阅读Beej'sGuidetoNetworkProgramming获取TCP连接的句柄。在其中一个示例中,简单TCP流客户端的客户端代码如下所示:if((numbytes=recv(sockfd,buf,MAXDATASIZE-1,0))==-1){perror("recv");exit(1);}buf[numbytes]='\0';printf("Client:received'%s'\n",buf);close(sockfd);我已将缓冲区设置为小于我发送的总字节数。我不太确定如何获得其他字节。我是否必须循环recv()直到收到'\0'?*注意在服务器端我也在实现他的sen

c++ - 将超时设置为 recv 函数

我使用recv函数从套接字读取。当没有可供阅读的数据时,我遇到了问题。我的程序刚刚停止。我发现我可以使用select函数设置超时。但是看起来超时会影响select函数本身,并且select之后的recv仍然会不连续地等待。fd_setset;structtimevaltimeout;FD_ZERO(&set);/*cleartheset*/FD_SET(s,&set);/*addourfiledescriptortotheset*/timeout.tv_sec=SOCKET_READ_TIMEOUT_SEC;timeout.tv_usec=0;intrv=select(s,&set,N

c++ - 如何使用 MPI_Type_create_subarray?

很明显,它的论点是:intMPI_Type_create_subarray(intndims,intarray_of_sizes[],intarray_of_subsizes[],intarray_of_starts[],intorder,MPI_Datatypeoldtype,MPI_Datatype*newtype);但是,我无法理解此方法如何接收我们要拆分的原始数组以及它返回新子数组的位置(因为此方法应返回一个整数)。换句话说,我只是想看看这个方法在C++中的简单实现,我在网上找不到。 最佳答案 MPI_Type_create

c++ - 使用 MPI 通过命令行传递参数

我正在使用MPI调用来使用c++在多个进程上运行一个过程。我的Main函数中的前几行如下所示:intmain(intargc,char*argv[]){intcomm_sz;intmy_rank;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&comm_sz);MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);x=atoi(argv[4]);y=atoi(argv[5]);现在当我使用执行和运行我的程序时mpiexec-n1program1010我希望为x和y分配值10和10,因为它们是传递的第4和第5

c++ - 共享内存、MPI 和排队系统

我的unix/windowsC++应用程序已经使用MPI进行了并行化:作业被拆分到N个cpus中,每个block并行执行,非常高效,非常好的速度扩展,作业做得很好。但有些数据在每个流程中重复出现,并且由于技术原因,这些数据不能轻易地通过MPI进行拆分(...)。例如:5Gb静态数据,为每个进程加载完全相同的数据可以在MPI中分布的4Gb数据,使用的CPU越多,每个CPU的RAM越小。在4CPU作业中,这意味着至少需要20Gb的RAM负载,大部分内存都“浪费”了,这太糟糕了。我正在考虑使用共享内存来减少整体负载,“静态”block每台计算机只会加载一次。所以,主要问题是:是否有任何标准的

c++ - 通过 MPI 发送和接收二维数组

我要解决的问题如下:我在大型二维矩阵中计算的C++串行代码。为了优化这个过程,我希望分割这个大的2D矩阵并使用MPI在4个节点(比如)上运行。节点之间发生的唯一通信是在每个时间步结束时共享边值。每个节点与其邻居共享边数组数据A[i][j]。基于对MPI的阅读,我有以下方案要实现。if(myrank==0){for(i=0tox)for(y=0toy){C++CODEIMPLEMENTATION....MPI_SEND(A[x][0],A[x][1],A[x][2],Destination=1.....)MPI_RECEIVE(B[0][0],B[0][1]......Sender=1.

mule - docker 骡服务器 curl : (56) Recv failure: Connection reset by peer

这可能只是我对Docker的菜鸟知识,但我无法让网络正常工作。我正在尝试通过pr3d4t0r/mule存储库运行Mule服务器。我可以运行它,热插拔应用程序,但我可以访问它。我可以在没有Docker的情况下运行本地服务器,并且它可以完美运行。但当我尝试使用Docker时却不是这样。当我尝试执行简单的curl命令时,我得到“curl:(56)Recvfailure:Connectionresetbypeer”curlhttp://localhost:8090/Sven我尝试通过-P和分别通过-p8090:8090公开端口,但没有成功。当docker运行时,它会阻塞端口(我尝试同时运行Do