El type map
es un concepto importante, pero la confusión en MPI. Me gustaría una rutina para mostrar o imprimir un mapa de tipos para mí.
Por ejemplo (tomado del estándar MPI-3),
MPI_TYPE_CREATE_RESIZED(MPI_INT, -3, 9, type1)
resultados en el typemap
{(lb_marker, -3), (int, 0), (ub_marker, 6)}.
Use ese tipo nuevamente:
MPI_TYPE_CONTIGUOUS(2, type1, type2)
y el typemap es
{(lb_marker, -3), (int, 0), (int,9), (ub_marker, 15)}
Me gustaría una forma de mostrar ese mapa de tipos automáticamente.
Ciertamente, uno podría usar MPI_Type_get_contents
y MPI_Type_get_envelope
descender recursivamente hasta golpear los tipos incorporados. Esto es más bien un dolor gigante y hubiera pensado que existirían 20 años en alguna herramienta para hacer esto por mí.
Algunas herramientas que son prometedoras, pero que no funcionan del todo:
Encontré MPImap desde ~ 2001 aquí . Primero, necesita ser actualizado para Tcl / TK moderno, parcheado para corregir algunos errores de memoria y después de hacerlo; obtienes una GUI que no responde. En cambio, estoy buscando una biblioteca / rutina a la que pueda llamar en tiempo de ejecución.
MPIDU_Datatype_deubg
es una rutina de volcado de tipos interna específica de MPICH. No muestra el mapa de tipos (sí muestra la representación del bucle de datos, nuevamente cerrar)Una vez hubo un depurador llamado XMPI que enumera entre sus características la capacidad de mostrar un mapa de tipo MPI. Este depurador parece ser específico de LAM-MPI y no hace uso de get_contents / get_envelope.
MPI_Datatype
, busca una función que devuelva una cadena de la forma{(type, displacement), (type, displacement), ..}
que describe la estructura de dicho tipo de datos?Respuestas:
Como dijo Rob Latham , no hay buenas soluciones preexistentes. Con la ayuda de los enlaces proporcionados por tim , creé esta función disponible en Github . Tomé su ejemplo para la prueba contigua + cambio de tamaño ( aquí ) y la salida es
Con esta función solo tienes que hacer
printMapDatatype(mydatatype)
. Espero que esto sea lo que estabas buscando.Aquí está la función, por si acaso:
fuente