草庐IT

MPI_ERR_BUFFER

全部标签

c++ - MPI程序的段错误

我正在用C++编写一个使用MPI的程序。我的代码的简化版本是#include#include#include#include#defineRNumber3000000//Numberofloopstogousingnamespacestd;classLObject{/*Somethinghere*/public:voidFillArray(long*RawT){/*Doessomething*/for(inti=0;i程序编译正常,但在执行时给出了段错误。消息是===============================================================

c++ - 从序列化数据中查找 Protocol Buffer 消息类型

我有一些二进制数据,它是通过序列化一个谷歌ProtocolBuffer类获得的。我如何在运行时找出为其序列化数据的类。例如,假设我有一个类abc。我把这个类abc序列化成二进制数据。有没有什么方法可以验证这个二进制数据是通过序列化classabc,而不是其他一些类获得的?另外,如果我用xyz类的parse方法解析这个abc类的二进制数据,我怎么知道解析是否成功。 最佳答案 protobuf不包含在线路上的任何类型信息(除非您自己在protobuf外部这样做)。因此,您不能严格验证-这实际上是一件好的事情,因为这意味着类型是可互换和兼

c++ - MVAPICH 在 MPI_Send 上挂起大于急切阈值的消息

在c++/mpi(mvapich)中有一个简单的程序,发送一个float类型的数组。当我使用MPI_Send、MPI_Ssend、MPI_Rsend时,如果数据的大小超过急切阈值(在我的程序中为64k),则在调用MPI_Send期间我的程序挂起。如果数组小于阈值,程序运行正常。源代码如下:#include"mpi.h"#include#includeintmain(intargc,char*argv[]){intmype=0,size=1;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&mype);MPI_Comm_size(MP

c++ - MPI - 随着进程数量的增加没有加速

我正在编写程序来测试数字是否为素数。一开始我计算分配给每个进程的数字,然后将这个数量发送给进程。接下来,执行计算并将数据发送回保存结果的进程0。下面的代码有效,但是当我增加进程数时,我的程序不会加速。在我看来,我的程序不能并行运行。怎么了?这是我在MPI的第一个项目,因此欢迎任何建议。我使用mpich2,并在IntelCorei7-950上测试我的程序。主要.cpp:if(rank==0){intworkers=(size-1);readFromFile(path);intelements_per_proc=(N+(workers-1))/workers;intrest=N%eleme

c++ - MPI非阻塞调用后的障碍,没有簿记?

我正在做一堆MPI_Iallreduce非阻塞通信。我已将这些Iallreduce调用添加到我的代码中的几个不同位置。每隔一段时间,我想暂停并等待所有Iallreduce调用完成。具有MPI_Request簿记功能的版本1——有效:MPI_Requestrequests[];MPI_Iallreduce(...,requests[0]);...MPI_Iallreduce(...,requests[n-1]);for(inti=0;i但是,我在一个相当大的代码库中工作,我不想编写额外的代码来跟踪所有这些MPI_Request对象。我想执行以下操作:版本2没有MPI_Request簿记—

c++ - 什么相当于 MPI 中的套接字编程的 select()?

在套接字编程中,我们有select()允许我们同时检查多个套接字的功能。我想知道MPI库中是否也有这样的功能?在以下代码的第一个for循环中,我将多个非阻塞发送和接收请求从一个节点发送到每个其他节点。在第二个for循环中,我不想按顺序等待每个节点,而是想开始处理首先发送其数据的节点的数据。我想知道有什么办法吗?for(id=0;id根据给定的答案,我尝试修改我的代码,但在运行时我仍然遇到段错误。请帮我找出错误。for(id=0;id 最佳答案 最接近的等价物是MPI_Waitsome,您提供一个请求列表,它会在至少一个请求完成后立即

c++ - Direct3D11(C++) : Updating Texture coordinates in constant buffer?

我正在尝试使用Direct3D制作一个相当基本的2D引擎。我制作了一个LoadImage()函数,它将图像的所有相当静态的行为存储在一个对象中。(着色器、顶点缓冲区、采样器等)我计划在常量缓冲区中使用矩阵定位顶点。但是,我还想有一个DrawImage()函数,它有一个参数来告诉纹理的哪一部分应该被绘制(剪裁),所以我必须更新纹理坐标。由于顶点缓冲区已经预定义,我想知道是否有一种方法可以通过发送到顶点着色器的常量缓冲区来更新纹理坐标?我希望我的问题足够清楚,如果您有任何疑问,请查看下面的代码。boolGameManager::GMLoadImage(Image*pImage,constc

c++ - 带有 Protocol Buffer 的 RPC

我正在尝试使用ProtocolBuffer和zeromq制作rpc。这是我的原型(prototype)文件:messageSearchRequest{requiredstringquery=1;}messageSearchResponse{repeatedResultresult=1;}messageResult{requiredstringurl=1;optionalstringtitle=2;repeatedstringsnippets=3;}serviceSearchService{rpcSearch(SearchRequest)returns(SearchResponse);}

c++ - MPI 中发送消息数量未知时,如何接收?

我正在用MPI编程。我想发送一些东西到另一个处理器并在那里接收它,但我不知道我会发送多少消息。事实上,发送到另一个处理器的消息数量取决于我在程序中读取的文件,所以我不知道我应该在另一端写多少接收。我应该使用哪种方法和哪种功能? 最佳答案 您仍然可以使用发送和接收,但您还需要添加一种新的消息,告诉接收进程不会有新消息。通常这是通过使用不同的标签发送来处理的。所以你的程序看起来像这样:if(sender){while(data_to_send==true){MPI_Send(data,size,datatype,receiving_ra

c++ - D3D11_BUFFER_SRV - 如何使用它?

在DirectX11中,在为缓冲区创建着色器资源View时;我们必须填写D3D11_BUFFER_SRV结构。结构如下:typedefstructD3D11_BUFFER_SRV{union{UINTFirstElement;UINTElementOffset;};union{UINTNumElements;UINTElementWidth;};}D3D11_BUFFER_SRV;我似乎找不到任何文档来说明我应该使用每个union中的哪个字段以及何时使用,甚至找不到它们的真正含义。MSDN页面(http://msdn.microsoft.com/en-us/library/window