Constellation Knowledge Network - Preguntas y respuestas sobre Bagua - Descripción general de la comunicación entre pares de mpi4py

Descripción general de la comunicación entre pares de mpi4py

En el artículo anterior, presentamos los métodos combinados de comunicación de envío y recepción en mpi4py. Hasta ahora, hemos dado una breve introducción a los diversos métodos de comunicación punto a punto proporcionados en mpi4py y hemos dado rutinas de uso simples. Demos un resumen de la comunicación punto a punto.

De la introducción anterior, podemos ver que existen muchos modos de comunicación punto a punto, que se pueden dividir en comunicación de bloqueo, comunicación sin bloqueo no repetida y comunicación sin bloqueo repetible. Cada tipo se puede dividir en modos estándar, almacenado en búfer, listo y sincronizado. Para comprender el comportamiento de los distintos modos de comunicación, es clave comprender cómo cada modo utiliza los buffers. En resumen, las características del uso de buffers en cada modo se pueden resumir de la siguiente manera: el envío estándar en realidad usa el buffer predeterminado proporcionado por el entorno MPI; Buffered Bsend es en realidad equivalente a colocar el buffer proporcionado por el entorno MPI en la administración del espacio del usuario; Rsend en realidad equivale a no almacenar en búfer, pero el remitente no puede esperar con anticipación; Ssend sincrónico en realidad equivale a no almacenar en búfer, pero permite esperar. Los principios de funcionamiento de cada modo en modo asíncrono son similares, pero se puede entender que en el entorno MPI, otro hilo realizará la transmisión real del mensaje en segundo plano, comunicándose y sincronizándose con el hilo principal del proceso MPI a través de mecanismos como MPI_Espera* y MPI_Prueba*.

Una cosa que requiere especial atención en la comunicación punto a punto es evitar puntos muertos. Hay muchas razones para el interbloqueo, el más típico es el interbloqueo causado por la contención del búfer, como el siguiente ejemplo:

Los resultados de la ejecución son los siguientes:

En el ejemplo anterior, dos Los procesos se envían y reciben mensajes entre sí al mismo tiempo, pero debido a que los mensajes enviados y recibidos son relativamente pequeños y no exceden la capacidad de búfer predeterminada proporcionada por el entorno MPI, se pueden ejecutar sin problemas. Ahora, intentemos cambiar el recuento del ejemplo anterior a 1024 (o más, según la configuración de su entorno MPI), y los resultados son los siguientes:

Ambos procesos se bloquean durante el envío, porque la operación de envío de ambos procesos comienza antes de la operación de recepción. Cuando la cantidad de datos enviados excede el espacio de búfer predeterminado proporcionado por el entorno MPI, cada proceso tiene que esperar a que la otra parte inicie la operación de recepción y elimine directamente los datos "sobrantes". Sin embargo, debido a que se utiliza el envío bloqueado, las funciones de envío de ambas partes no regresarán antes de recibir, por lo que la acción de recepción no se puede ejecutar. Por lo tanto, ambos procesos se bloquean en el paso de envío porque están esperando recibir y el programa se bloquea.

Para este tipo de punto muerto, la solución es la siguiente:

No enumeraremos estas soluciones una por una. Solo daremos un ejemplo, que consiste en ajustar el orden de ejecución de las declaraciones. para evitar un punto muerto, de la siguiente manera:

Los resultados de la ejecución son los siguientes:

Después de ajustar la declaración, la operación de envío de cada proceso puede coincidir primero con la operación de recepción del otro. parte, y la siguiente comunicación se puede llevar a cabo después de que se complete la transmisión del mensaje. Esto elimina los interbloqueos causados ​​por la contención del búfer.

MPI tiene ciertas regulaciones sobre el orden de ejecución de la entrega de mensajes, pero el entorno MPI no proporciona medidas para garantizar la "imparcialidad", de la siguiente manera:

Lo anterior resume brevemente el punto: punto a punto en la comunicación mpi4py. En el próximo artículo, presentaremos los conceptos básicos de grupos y comunicadores.

上篇: Video en vivo de interpretación de sueños_Video en vivo de interpretación de sueños 下篇: Libertad del Duque Zhou_¿Qué significa libertad del Duque Zhou?
Artículos populares