草庐IT

MPI_Recv

全部标签

c++ - zmq-cpp : recv() waits for data despite ZMQ_DONTWAIT being set

我正在尝试使用ZMQ_DONTWAIT标志通过ZeroMQ实现非阻塞接收方法,但是recv()的行为就像在没有标志的情况下被调用:autostart=std::chrono::steady_clock::now();autohave_data=sock_->recv(&reply,ZMQ_DONTWAIT);autoduration=std::chrono::duration_cast(std::chrono::steady_clock::now()-start).count();std::coutsock_是一个zmq::socket_t实例化为REQ套接字。在这种情况下,have_

c++ - 如何中断正在等待 recv 函数的线程?

这个问题在这里已经有了答案:Howtoexitablockingrecv()call?[duplicate](2个答案)关闭7年前。我有一个卡在recv函数上的套接字监听器:size_trecvLen=recv(sock,buf,512,0);我想通过打断它来终止这个线程。MSDN说:WhenissuingablockingWinsockcallsuchasrecv,Winsockmayneedtowaitforanetworkeventbeforethecallcancomplete.Winsockperformsanalertablewaitinthissituation,whic

c++ - MPI_Recv - 如何确定计数?

假设我有一个包含2个进程的MPI程序,等级0和等级1。inti[20],j[20],temp,size;在排名为0的进程中,我有for(temp=0;temp假设排名为1的进程执行//Atthispoint,sizeisdeclared,butnotassignedanyvalue.MPI_Recv(j,size,MPI_INT,0,1,MPI_COMM_WORLD):cout我的问题是,在上面的语句中,是否需要声明“size”?或者MPI_Recv是否以某种方式“知道”它正在接收15个元素,并自动设置size=15?如果未定义大小,代码会发生什么情况?基本上,我的问题是,我向具有不同

c++ - 共享内存线程和 MPI 之间的主要区别?

虽然我一直在研究pthreads、OpenMP、intelTBB和一般线程,但我仍然不明白像OpenMP这样的消息传递接口(interface)实现与经典线程库之间的主要区别是什么,目前还不清楚对我来说。假设为线程池编写所有样板代码对我来说不是问题,而且我使用的是C++,这两种技术之间的区别归结为......?我还对在网络上使用线程操作同时将任务分配给所有连接的机器感兴趣。现在我也没有考虑OpenMP/OpenMPI支持的平台数量方面的限制。因为我想了解这两个概念是如何工作的。 最佳答案 “经典”线程共享线程之间的所有内存。这是相当

c++ - 打开 MPI "Hello, World!"未编译

这是一个简单的MPI“Hello,World!”程序。#include#includeintmain(intargc,char**argv){intsize,rank;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&size);MPI_Comm_rank(MPI_COMM_WORLD,&rank);printf("SIZE=%dRANK=%d\n",size,rank);MPI_Finalize();return(0);}但是,它似乎没有编译:UndefinedfirstreferencedsymbolinfileMPI::Dat

c++ - 我可以在 MPI 并行代码中抛出异常吗?

这些是我在为应该使用MPI(在C++中)并行运行的算法设计错误处理时遇到的一些一般性问题:异常是否在并行执行的代码中起作用?行为是否已定义?它们是如何工作的?不同的实现方式是否有所不同?这是好的做法-还是我应该使用返回码? 最佳答案 在理想情况下,您可以使用它们来完成您的要求。我所说的“理想世界”是指您可以选择MPI实现并能够自己管理它(而不是说服集群所有者为您重新配置它)。异常的最小配置将包括:--with-exceptions标志,可能还有一些。我最常使用LAM,默认情况下禁用异常。我相信这也是其他实现的默认设置。它们的工作方式

c++ - MPI_Scatter 和 MPI_Bcast 之间的区别

谁能解释一下MPI_Scatter和MPI_Bcast之间的区别?(除此之外任何进程都可以使用MPI_Scatter进行广播并且只有root可以使用MPI_Bcast)在哪些情况下我应该使用第一个而不是另一个? 最佳答案 MPI_Bcast()向所有人发送相同的数据,而MPI_Scatter()向每个进程发送输入数组的一部分。MPI_Bcast()与MPI_Reduce()相反,MPI_Scatter()与MPI_Gather()相反。像thisone这样的小计划是不言自明的。而且MPI_Scatter()和MPI_Bcast()都

windows - 无法让 cabal 在 Windows 上找到 haskell-mpi 的 mpi 库

Thisquestionisunlikelytohelpanyfuturevisitors;itisonlyrelevanttoasmallgeographicarea,aspecificmomentintime,oranextraordinarilynarrowsituationthatisnotgenerallyapplicabletotheworldwideaudienceoftheinternet.Forhelpmakingthisquestionmorebroadlyapplicable,visitthehelpcenter。9年前关闭。问题已解决!按照Dons发布的说明进行

c++ - 使用 Winsock 读取所有信息时结束 "recv()"循环

我在winsock的recv()循环中遇到问题。我试图在iResult==0时终止循环,但是,循环仅在套接字关闭时结束。它似乎卡在iResult等于0的最后一个recv()处。那么关于如何有效终止循环的任何想法?我的最终目标(无论iResult==0与否;也许我做错了)是在读取所有发送的信息后停止循环。这是循环。do{iResult=recv(socket,recvbuf,BUFLEN-1,0);if(iResult>0){//Nullbyte:)//Removethatgarbage>:(recvbuf[iResult]='\0';printf("Recvbuf:%s\n\n\niR

c++ - 能否仅对 recv() 函数使套接字成为非阻塞的?

我希望能够在不阻塞的情况下调用recv(),所以我想让它成为非阻塞的,但我不希望它在发送数据时是非阻塞的。那么一个socket是不是只有recv()函数才能变成非阻塞的,还是阻塞/非阻塞模式会影响所有的socket函数? 最佳答案 对于Windows,您可以使用ioctlsocket()将套接字设置为非阻塞模式。不幸的是,这些设置适用于套接字上的所有操作。因此,对于您的情况,您必须在接收和发送之间切换。记录:对于Linux,您可以在recv()中使用MSG_DONTWAIT标志调用参数。单个调用将是非阻塞的。