首页 > 解决方案 > 如何解决 MPI_Ssend 与生产者和消费者问题有关的错误

问题描述

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

错误描述

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 );
    }
}

标签: c++openmpi

解决方案


这是一个非常基本的错误,从错误消息和文档 ( https://www.mpich.org/static/docs/v3.2/www3/MPI_Ssend.html ) 中可以明显看出。

您有 3 个进程,但您正在发送到排名 4 ( id_buffer)(因此您应该至少有 5 个进程)。显然,您的接收器选择逻辑失败。


推荐阅读