Comience con Intel Trace Analyzer and Collector
Comience con Intel® Trace Analyzer and Collector
Utilice este documento de introducción y un seguimiento recopilado previamente file para recorrer un análisis básico de rendimiento de MPI con Intel® Trace Analyzer and Collector.
Intel Trace Analyzer and Collector ayuda a explorar la eficiencia de uso de la interfaz de paso de mensajes (MPI) e identificar puntos de acceso de comunicación, cuellos de botella de sincronización y equilibrio de carga. Para obtener más información sobre el producto, consulte la página del producto Intel Trace Analyzer and Collector.
Descargar Intel Trace Analyzer and Collector
- como parte de Intel® oneAPI HPC Toolkit
- como una herramienta independiente
Prerrequisitos
- Antes de ejecutar Intel Trace Analyzer and Collector, asegúrese de haber instalado la última biblioteca Intel® MPI y el compilador Intel® oneAPI DPC++/C++ o el compilador Intel® Fortran.
- Esto establece las variables de entorno necesarias para los compiladores, Intel MPI Library e Intel Trace Analyzer and Collector, y estará listo para rastrear sus aplicaciones.
- Para obtener más información, consulte: Requisitos del sistema del kit de herramientas Intel® oneAPI HPC.
Comprender el flujo de trabajo
- Rastree su aplicación
- Analiza las funciones MPI más activas
- Identificar interacciones problemáticas
- Mejore el rendimiento de su aplicación reemplazando la función que causa problemas
Rastree su aplicación MPI
Generar un rastro file para recopilar registros de eventos para el siguiente análisis de comportamiento de la aplicación.
- Configure el entorno para iniciar Intel® Trace Analyzer and Collector ejecutando el script setvars desde el director de instalación de oneAPI
NOTA
De manera predeterminada, Intel Trace Analyzer and Collector se instala en /opt/intel/oneapi/itac para Linux* OS y Program Files (x86)\Intel\oneAPI\itac\latest para el sistema operativo Windows*.
En Linux:
$ fuente /opt/intel/oneapi/setvars.sh
En Windows:
“C:\Program Files (x86)\Intel\oneAPI\setvars.bat” - Ejecute su aplicación MPI y genere un seguimiento con la opción -trace.
En Linux:
$ mpirun -trace -n 4 ./poisson_sendrecv.single
En Windows:
Compile la aplicación y recopile el rastro.
Para el compilador Intel oneAPI DPC++/C++, ejecute:
> mpiicc -trace poisson_sendrecv.single.c
Para Intel Fortran Compiler, ejecute:
> mpiifort -trace poisson_sendrecv.single.f
Este example genera un seguimiento (stf*) para asampla aplicación poisson_sendrcv.single MPI - Abra el .stf generado file con Intel Trace Analyzer con Intel Trace Analyzer and Collector.
En Linux:
$ rastreador ./ poisson_sendrecv.single.stf
En Windows:
analizador de trazas poisson_sendrecv.single.stf
NOTA
Para fines de prueba, puede descargar un seguimiento recopilado previamente file poisson_sendrecv.single.stf para el poisson utilizado en este documento y ábralo con Intel Trace Analyzer and Collector.
El .stf file se abre en la página de resumen view, que representa información general sobre el rendimiento de su aplicación:NOTA Para obtener más información sobre la funcionalidad Intel Trace Analyzer and Collector, consulte Más información.
Analice las funciones MPI más activas
Analice el comportamiento de una aplicación MPI, encuentre cuellos de botella e identifique la serialización para encontrar formas de mejorar el rendimiento de la aplicación.
- Desde la página de resumen, abra la línea de tiempo del evento view haciendo clic en Continuar > Gráficos > Cronología de eventos para un análisis profundo de las principales funciones de MPI.
El gráfico muestra las actividades de procesos individuales a lo largo del tiempo.
El trabajo de la aplicación es iterativo, donde cada iteración consta de una parte computacional y comunicaciones MPI. - Identifique una sola iteración para enfocarse y acercarla arrastrando el mouse sobre el intervalo de tiempo requerido:
el rastro view muestra la sección dentro de la traza que seleccionó. El gráfico de línea de tiempo de eventos muestra los eventos que estaban activos durante la iteración seleccionada.
- Las barras horizontales representan los procesos con las funciones llamadas en estos procesos.
- Las líneas negras indican mensajes enviados entre procesos. Estas líneas conectan los procesos de envío y recepción.
- Las líneas azules representan operaciones colectivas, como operaciones de transmisión o reducción.
- Cambiar a Flat Profile (A) para ver más de cerca las funciones que se ejecutan en el punto de tiempo que usted (seleccionó en la línea de tiempo del evento).
- Desagrupar funciones MPI para analizar la actividad del proceso MPI en su aplicación.
Para hacer esto, haga clic con el botón derecho en Todos los procesos > Grupo MPI (B) en Flat Profile y elija DesagruparMPI. Esta operación expone las llamadas MPI individuales. - Analice los procesos que se comunican con sus vecinos directos utilizando MPI_Sendrecv al comienzo de la iteración. por ejemploampen:
- a. En la Sample, el intercambio de datos MPI_Sendrecv tiene un cuello de botella: el proceso no intercambia datos con su siguiente vecino hasta que se completa el intercambio con el anterior. Los cronogramas del evento view muestra este cuello de botella como una escalera.
- b. El MPI_Allreduce al final de la iteración resincroniza todos los procesos; por eso este bloque tiene el aspecto de escalera inversa.
- Identificar la serialización, utilizando la función Profile y Mensaje Profile views.
- a. Abra los gráficos al mismo tiempo:
En la Función Profile gráfico, abra la pestaña Equilibrio de carga. - Vaya al menú Gráficos para abrir un Message Profile.
- b. En la pestaña Equilibrio de carga, expanda MPI_Sendrecv y MPI_Allreduce. El equilibrio de carga indica que el tiempo dedicado a MPI_Sendrecv aumenta con el número de proceso, mientras que el tiempo de MPI_Allreduce disminuye.
- C. Examine el Mensaje Profile Gráfico hasta la esquina inferior derecha.
El código de color de los bloques indica que los mensajes que viajan de un rango superior a un rango inferior necesitan proporcionalmente más tiempo, mientras que los mensajes que viajan de un rango inferior a un rango superior revelan un tipo de patrón par-impar débil:
- a. Abra los gráficos al mismo tiempo:
Los resultados del análisis comparativo muestran que no existen patrones de intercambio complejos en la aplicación, el intercambio se realiza únicamente con procesos vecinos. La información será esencial para el paso Mejorar el rendimiento de su aplicación cambiando las comunicaciones para optimizar el modelo de comunicación de la aplicación.
Identificar comunicaciones desequilibradas
Observe su aplicación en las circunstancias ideales y compare la traza original file con el idealizado para aislar interacciones problemáticas.
- Crear un idealizado file:
- a. Seleccione Avanzado > Idealización o haga clic en el
(Idealización) botón de la barra de herramientas.
- b. Compruebe los parámetros de idealización en el cuadro de diálogo Idealización (traza ideal file nombre y rango de tiempo para la conversión).
- C. Haga clic en Iniciar para idealizar su trazo.
- a. Seleccione Avanzado > Idealización o haga clic en el
- Compare la traza original con la traza idealizada:
- a. Seleccione Avanzado > Diagrama de desequilibrio o haga clic en el
(Diagrama de desequilibrio) botón de la barra de herramientas.
- b. En el cuadro de diálogo Diagrama de desequilibrio, haga clic en Abrir otro File , navegue hasta la traza idealizada y selecciónela.
- C. En la ventana Diagrama de desequilibrio, haga clic en el botón Modo total y seleccione Modo de ruptura.
- a. Seleccione Avanzado > Diagrama de desequilibrio o haga clic en el
Puede ver que MPI_Sendrecv es la función que consume más tiempo. El peso de desequilibrio se muestra en
color claro y comprende alrededor del 10% para la función MPI_Sendrecv. Este es el tiempo que pasan los procesos esperándose unos a otros.
Mejore el rendimiento de su aplicación cambiando las comunicaciones
- Mejore el rendimiento de la aplicación MPI cambiando el bloqueo por comunicaciones sin bloqueo.
En su código, reemplace el serial MPI_Sendrcv con comunicación sin bloqueo: MPI_Isend y MPI_Irecv. por ejemploample: fragmento de código original:
// intercambio de límites
intercambio vacío(para* p, grilla* gr){
int i, j;
MPI_Estado estado_100, estado_200, estado_300, estado_400;
// enviar la primera fila
MPI_Send(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD); MPI_Recv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD,
&estado_100);
// envía la última fila
MPI_Send(gr->x_new[gr->lrow], gr->lcol+2, MPI_DOUBLE, gr->up, 200, MPI_COMM_WORLD);
MPI_Recv(gr->x_nuevo[0], gr->lcol+2, MPI_DOUBLE, gr->abajo, 200, MPI_COMM_WORLD, &status_200);
Utilice la comparación Intel Trace Analyzer view para comparar la aplicación serializada con la revisada
// copia la columna izquierda a las matrices tmp
if(gr->izquierda != MPI_PROC_NULL){
gr->x_nuevo[i][gr->lcol+1] = right_col[i]; columna_derecha[i] = gr->x_nuevo[i][gr->lcol];
// enviar a la derecha
MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
if(gr->izquierda != MPI_PROC_NULL)
{
MPI_Recv(left_col, gr->lrow+2, MPI_DOUBLE, gr->left, 400, MPI_COMM_WORLD,&status_400); for(i=0; i< gr->fila+2; i++
{
gr->x_nuevo[i][0] = columna_izquierda[i];
}
}
Fragmento de código actualizado
solicitud MPI_Request[7];
// enviar la primera fila
MPI_Isend(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD, &req[0]);
MPI_Irecv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD, &req[1]);
…..
MPI_Waitall(7, requerido, MPI_STATUSES_IGNORE);
Una vez corregido, la única iteración de la aplicación revisada se verá como el siguiente ejemploampen: - Utilice la comparación Intel Trace Analyzer view para comparar la aplicación serializada con la revisada. Compara dos trazas con la ayuda de la Comparación View, ir a View > Comparar. La comparación View se parece a:
en la comparación View, puede ver que el uso de la comunicación sin bloqueo ayuda a eliminar la serialización y a disminuir el tiempo de comunicación de los procesos.
NOTA Para obtener más información sobre el rendimiento a nivel de nodo de su aplicación, consulte la documentación de las herramientas respectivas: Intel® VTune™ Profiler Análisis de código MPI y análisis de aplicaciones Intel® MPI utilizando Intel® Advisor.
Más información
Explore los siguientes recursos para obtener más información sobre Intel Trace Analyzer and Collector.
Avisos y exenciones de responsabilidad
- Las tecnologías Intel pueden requerir la activación de hardware, software o servicio habilitado.
- Ningún producto o componente puede ser absolutamente seguro.
- Sus costos y resultados pueden variar.
- © Corporación Intel. Intel, el logotipo de Intel y otras marcas de Intel son marcas comerciales de Intel Corporation o sus subsidiarias. Otros nombres y marcas pueden reclamarse como propiedad de terceros.
- Este documento no concede ninguna licencia (expresa o implícita, por impedimento legal o de otro modo) sobre ningún derecho de propiedad intelectual.
- Los productos descritos pueden contener defectos de diseño o errores conocidos como erratas que pueden hacer que el producto se desvíe de las especificaciones publicadas. Las erratas caracterizadas actuales están disponibles a pedido.
- Intel renuncia a todas las garantías expresas e implícitas, incluidas, entre otras, las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción, así como cualquier garantía que surja del curso del desempeño, el curso de la negociación o el uso en el comercio.
Documentos / Recursos
![]() |
intel Introducción a Intel Trace Analyzer and Collector [pdf] Guía del usuario Primeros pasos con Intel Trace Analyzer and Collector, Primeros pasos con Intel, Trace Analyzer and Collector, Collector |