C++ 如何解决MPI错误与生产者和消费者问题

C++ 如何解决MPI错误与生产者和消费者问题,c++,openmpi,C++,Openmpi,因此,我需要使用开放mpi解决多个生产者和消费者的问题。 编译器说MPI_Ssend中有一个错误,但是在哪里? (id_buffer==4) void function\u productor(int productor\u i) { int b=4; for(无符号整数i=0;i

因此,我需要使用开放mpi解决多个生产者和消费者的问题。 编译器说MPI_Ssend中有一个错误,但是在哪里? (id_buffer==4)

void function\u productor(int productor\u i)
{ 
int b=4;
for(无符号整数i=0;icout这是一个非常基本的错误,从错误消息和文档中可以明显看出()


您有3个进程,但您要发送到第4级(
id\u buffer
)(因此您应该至少有5个进程)。显然,您的接收器选择逻辑失败。

谢谢,对不起,这是我第一次使用mpi,一旦更改了排名,它会给我带来一个新的错误:系统中没有足够的可用插槽来满足我们需要的10个插槽应用程序请求的e:./prodcons2-mu_exe为应用程序请求更少的插槽,或提供更多可用插槽。在这种情况下,从使用简单的发送/接收调用开始。尝试简单,然后进行更复杂的操作。这是一个分配,0到3是生产者ID,4是缓冲区,5到9个消费者使用您提供的代码,这是唯一的t我可以这么说。但一定要从基础开始。以下是完整的代码:
void funcion_productor(int productor_i)
{ 
  int b = 4;
  for ( unsigned int i= 0 ; i < num_items ; i++ )
  {
    // producir valor
    int valor_prod = producir(productor_i);
    // enviar valor
    cout << "Productor " << productor_i << " va a enviar valor " << 
    valor_prod << endl << flush;
    MPI_Ssend( &valor_prod, 1, MPI_INT, id_buffer, 0, MPI_COMM_WORLD );
    }
}