Comience con Intel Trace Analyzer and Collector

Primeros pasos con el producto 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

  1. Rastree su aplicación
  2. Analiza las funciones MPI más activas
  3. Identificar interacciones problemáticas
  4. 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.

  1. 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”
  2. 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
  3. 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:Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-1Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-2NOTA 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.

  1. 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.
  2. Identifique una sola iteración para enfocarse y acercarla arrastrando el mouse sobre el intervalo de tiempo requerido:Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-3el 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.
  3. 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).Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-4
  4. 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.
  5. Analice los procesos que se comunican con sus vecinos directos utilizando MPI_Sendrecv al comienzo de la iteración. por ejemploampen:Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-5
    • 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.
  6. 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:Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-6

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.

  1. Crear un idealizado file:
    • a. Seleccione Avanzado > Idealización o haga clic en elPrimeros pasos con Intel-Trace-Analyzer-and-Collector-fig-7 (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.
  2. Compare la traza original con la traza idealizada:
    • a. Seleccione Avanzado > Diagrama de desequilibrio o haga clic en el Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-8(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.

Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-9

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

  1. 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:Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-10
  2. 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:Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-11en 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.Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-12Primeros pasos con Intel-Trace-Analyzer-and-Collector-fig-13

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

Referencias

Deja un comentario

Su dirección de correo electrónico no será publicada. Los campos obligatorios están marcados *