Notavelmente, MPI_Ibarrieré uma rotina muito útil. Por exemplo, você pode entregar uma rodada não estruturada de mensagens para grupos que não sabem quantas mensagens receber enviando com MPI_Issend(sim, um uso raro de envio síncrono) e inserindo um ciclo de alternância MPI_Testall(para ver se os envios foram concluídos) e MPI_Iprobe(para processar mensagens recebidas). Quando os envios são concluídos, você publica MPI_Ibarriere alterna o teste da barreira e procura as mensagens recebidas. Torsten Hoefler tem um artigo sobre isso, onde ele prova a otimização da comunicação, consulte o Algoritmo 2: http://unixer.de/publications/img/hoefler-dsde-protocols.pdf
Observe que uma barreira não garante que as mensagens ponto a ponto ou outros coletivos não bloqueados sejam postados antes da conclusão da barreira. Se você deseja que eles sejam concluídos, verifique se eles foram concluídos antes de lançar a barreira. Como Bill diz, (o bloqueio) MPI_Barrieré incorreto / desnecessário na maioria dos casos. Uma exceção está se comunicando através de canais laterais, como o sistema de arquivos.
Embora não exista uma maneira de desempenho semelhante para simular MPI_Ibarriercom o MPI-2, o MPICH2 fornece MPIX_Ibarrierno ramo 1.5 (atual). As redes de fornecedores geralmente oferecem suporte a essas operações, portanto as implementações de fornecedores (geralmente derivadas do MPICH2) precisam apenas de uma interface. Assim que seus patches passarem para 1,5, MPI_Ibarriere outros coletivos sem bloqueio devem ser suportados. O ramo de desenvolvimento Open MPI possui uma implementação MPI_Ibarrierbaseada na libNBC.