Menú
Está libre
registrarse
el principal  /  Educación / Compiladores Intel.

Compiladores de Intel.

¡No eres un esclavo!
Un curso educativo cerrado para niños Elite: "True Clipment of the World".
http://noslave.org.

Wikipedia Material - Enciclopedia gratis

Compilador Intel C ++
Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).
Un tipo
Autor

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Desarrollador
Desarrolladores

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Escrito en

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Interfaz

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Sistema operativo
Idiomas de interfaz

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Primera edición

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Plataforma de hardware
Ultima versión
Candidato de lanzamientos

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Versión beta

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Versión alfa

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Versión de prueba

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Formatos de archivo legibles

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Formatos de archivo creados

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

condición

Error de LUA en el módulo: Wikidata en la cadena 170: Intento de índice del campo "Wikibase" (un valor NIL).

Licencia

Principales características:

  • Vectorización para SSE, SSE2, SSE3, SSE4

El compilador admite el estándar OpenMP 3.0 para escribir programas paralelos. También contiene una modificación OpenMP llamada Cluster OpenMP, con la que puede ejecutar aplicaciones escritas de acuerdo con OpenMP en clústeres utilizando MPI.

El compilador de Intel C ++ utiliza Frontand (parte del compilador involucrado en el análisis sintáctico del programa compilado) desde el grupo de diseño de Edison. El mismo Frontand es utilizado por los compiladores SGI MIPSPRO, COMEAU C ++, Portland Group.

Este compilador se usa ampliamente para compilar los puntos de referencia de la CPU de especificación.

Hay 4 series de productos de Intel que contienen el compilador:

  • Edición profesional de Intel C ++ Compiler
  • Kit de herramientas Intel Cluster (Edición del compilador)

Las desventajas de la versión de Linux del compilador incluyen incompatibilidad parcial con las extensiones de GNU del idioma SI (compatible con el compilador GCC), que puede causar problemas al compilar algunos programas.

Opciones experimentales

Se publicaron las siguientes opciones de compilador experimental:

  • Edición del prototipo Intel STM Compiler el 17 de septiembre de 2007. Software de soporte de memoria transaccional (STM). Lanzado para Linux y Windows, solo para IA-32 (procesadores X86);
  • Intel Colecciones concurrentes para C / C ++ 0.3 de septiembre de 2008. Contiene mecanismos que facilitan la escritura de programas paralelos de C ++.

Banderas básicas

Ventanas Linux, MacOSX Descripción
/ Od. -O0 Deshabilitar la optimización
/ O1. -O1 Optimizar para minimizar el tamaño del archivo ejecutable.
/ O2. -O2. Optimizar para aumentar la velocidad. Se incluyen cierta optimización.
/ O3. -O3. Habilitar toda optimización de O2. También realiza la optimización de ciclos intensivos.
/ OIP. -OP. Incluir la optimización de parche de interposición
/ Oipo. -Oipo. Habilitar la optimización de intercelace global
/ Qxo. -xo. Permitir el uso de extensiones SSE3, SSE2 y SSE para procesadores de producción de cualquier empresa.
/ Rápido. -Rápido. "Modo rápido." Equivalente a las opciones "/ O3 / Qipo / QxHost / NO-PREC-DIV" en Windows y "-O3 -PO -PO -STATIC -XHOST -NO-PREC-DIV" en Linux. Nota, la bandera "-xost" significa optimización para el procesador en el que se está ejecutando el compilador.
/ Qprof-gener -Prof_gen. Crea una versión instrumental del programa que recopilará el perfil de ejecución.
/ Qprof-use -Profuso Use la información del perfil desde el inicio del programa recopilado con la bandera PROF_GEN.

Escriba un comentario sobre el artículo "Intel C ++ Compiler"

Notas

ver también

Enlaces

Un extracto caracterizando el compilador Intel C ++.

Y también, ella volvió a ver la última vez para ver la lupa blanca ... su cónyuge y un amigo fiel que nunca pudo olvidar. En su corazón ella lo perdonó. Pero, a su gran arrepentimiento, no podía traerle el perdón de Magdalena ... Entonces, como ves, Isidor, las grandes fábulas cristianas sobre "All-Diading" es solo una mentira para los niños para que los creyentes ingenuos les permitan crear Cualquier malvado, sabiendo que lo que harían, finalmente serían perdonados. Pero puedes perdonar solo el perdón verdaderamente decente. Una persona debe entender que, para cualquier mal acompañado, tiene que responder ... y no delante de un Dios misterioso, sino delante de él, obligándose a sufrir severamente. Magdalene no perdonó a Vladyko, aunque lo respetó profundamente y lo amó sinceramente. Así como ella no nos perdonó y todos nosotros por la terrible muerte de Radomir. Después de todo, fue lo mejor que entendió todo, podríamos ayudarlo, podría salvarlo de la muerte cruel ... pero no quería. Teniendo en cuenta la culpa de los wiltos blancos demasiado cruel, lo dejó a vivir con esta falla, no por un minuto sin olvidarla ... ella no quería darle un ligero perdón. Nunca la vimos más. Cómo nunca vimos a sus hijos. A través de uno de los Caballeros de su Templo, nuestro Maggdalene le entregó la respuesta a Vladyka en su solicitud de regresar a nosotros: "El sol se eleva en un día dos veces ... la alegría de su mundo (Radomir) nunca le devolverá, como No vuelvo a ti y yo ... encontré mi fe y mi verdad, están vivos, tuyos, muertos ... Haz a tus hijos, te amaban. Nunca te perdonaré su muerte mientras estaba vivo. Y deja que tus vinos permanezcan contigo. Tal vez algún día ella le traerá luz y perdón ... pero no de mí ". El jefe del Maulana de John no fue llevado a Matera por la misma razón, ninguno de los Caballeros del Templo quería regresar a nosotros ... los perdimos, cuántos otros se perdieron, que no querían entender y llevar a nuestras víctimas. ... que sea tan igual que tú, le queda, condenando a nosotros.
¡Tuve una cabeza! .. Como una sedienta, apagando tu eterno conocimiento famoso famoso, absorbé con avidez el flujo de información increíble, con benevado, cariño generosamente por el norte ... ¡y quería mucho más! .. Quería saber todo a la final. ¡Era un sorbo de agua dulce en el dolor chamuscado y problemas de dispensación! Y no pude emborracharme de ninguna manera ...
- ¡Tengo miles de preguntas! Pero no quedaba tiempo ... ¿Qué debo hacer, norte? ..
- ¡Pregunte, Isidor! .. Pregunte, intentaré responderte ...
- Dígame, el norte, por qué me parece que en esta historia, ¿cómo se unieron dos historias de vida, trenzadas de eventos similares, y se presentan, cómo son la vida de una persona? O estoy equivocado?
- Eres absolutamente correcto, Isidor. Como le dije anteriormente, "el mundo fuerte de esto", que creó una historia falsa de la humanidad ", puso" a la verdadera vida de Cristo a la verdadera vida pasada del profeta judío Joshua (Josué), quien vivió una una. y hace medio años (desde la historia del norte). Y no solo lo suyo, sino también a su familia, sus familiares y sus seres queridos, sus amigos y seguidores. Después de todo, es en la esposa del profeta Josué, los judíos Mary, hubo una hermana de marzo y el hermano Lázar, la hermana de su madre, María Jacob, y otras personas que nunca han estado cerca de Radomir y Magdalina. Así como no estaba cerca de ellos y "Apóstoles" de otras personas, Paul, Mateo, Peter, Luke y el resto ...
Fue la familia del profeta Josué que se movió hace uno y medio mil años en Provenza (que se llamaba Galia (Transalpine Gaul), en la ciudad griega Massia (actual Marsella), ya que Massia en ese momento era "Gates" entre Europa. y Asia, y fue la forma más fácil para todos "perseguidos" para evitar la persecución y los problemas.

Compiladores Intel C ++ y Biblioteca Fortran y MKL

Junto con los compiladores de GNU estándar para Linux, en los clústeres del complejo computacional NIVC, INTEL C ++ y los compiladores de Fortran están instalados. En la actualidad (a principios de 2006), los compiladores de la versión 9.1 están instalados en todos los clústeres. Esta página está dedicada a la descripción de las opciones y configuraciones más importantes de estos compiladores, así como sus principales diferencias de los compiladores de GNU. La página se enfoca principalmente en usuarios de grupos de NIVZ MSU, pero puede ser útil para otros usuarios de habla rusa. No hay preguntas relacionadas con la compilación para la plataforma IA-64.

También en todos los clusters es la biblioteca Intel. Biblioteca de matemáticas del kernel (MKL) versión 8.0.2. La biblioteca se encuentra en el directorio / usr / mkl. Llamamos la atención sobre el hecho de que el catálogo de LIB está disponible 32, 64 y subdirectorios EM64T. En el clúster de ANT, debe usar las bibliotecas del subdirectory EM64T, y en los otros grupos, desde el subdirectorio 32. Toda la documentación y los ejemplos necesarios se pueden obtener en el directorio / USR / MKL / DOC.

¿Qué requieren nuevos compiladores?

La necesidad de nuevos compiladores se originó principalmente, a) para apoyar la programación en Fortran 90, así como b) para la optimización más poderosa del programa en Fortran, que proporciona un compilador G77 utilizando una transmisión en el idioma C y luego la compilación utilizando GCC.

Estos requisitos también satisfacen los compiladores de PGI (Portland Group), pero la compañía de desarrolladores se negó a suministrarlos a Rusia.

¿Cómo utilizar?

Los compiladores de Intel se llaman usando comandos. iCC. (C o C ++) iCPC. (C ++) y ifart (Fortran 77/90). Los comandos MPICC, MPICC y MPIF77 para compilar y montar programas MPI también están configurados para usar los compiladores de Intel.

La capacidad de usar los compiladores de GNU utilizando MPIGCC, MPIG ++ y MPIG77 (Fortran 90 no es compatible).

Archivos de entrada

Predeterminado, archivos de extensión .cpp y .cxx se consideran los textos de origen en C ++, archivos con expansión .c.c. - Los textos de origen en el idioma SI, y el compilador de ICPC también compila los archivos. C Como textos de origen en C ++.

Archivos con extensiones. .F., .ftn y .por Reconocido como textos de origen en un lenguaje de Photoman, con una forma fija de grabación y archivos .fp y .F. Además, pasó por el preprocesador del lenguaje FORTRAN. Archivos con extensión .f90. Se consideran los textos iniciales de Fortran 90/95 con una forma libre de grabación. De una manera explícita, puede especificar una forma fija o libre de grabación de FORDRA-PROGRAGE utilizando opciones. -FI. y -Fr. respectivamente.

Archivos con extensión .s.s. Reconocido como el código en el lenguaje del ensamblador para IA-32.

Características de los compiladores de Intel.

Aquí le damos las características de los compiladores de Intel, ya que son declarados por el desarrollador en el manual del usuario con algunos de nuestros comentarios.

  • Optimización significativa
    Aparentemente, aquí está destinado a optimizar el código a un nivel alto, es decir,. En primer lugar, varias conversión de ciclos que casi todos los compiladores hacen con mayor o menos éxito.
  • Optimización de cálculos de puntos flotantes.
    Aparentemente, en primer lugar, en primer lugar, el uso máximo de los comandos implementados en el nivel de hardware.
  • Optimización de interposición
    esos. Optimización global de todo el programa, en contraste con la optimización convencional, que afecta solo al código de funciones específicas.
  • Optimización del perfil
    esos. Posibilidad de conducir un programa en modo de prueba, recoja los datos de tiempo para el paso de aquellos u otros fragmentos de código dentro de las funciones de uso frecuente, y luego use estos datos para optimizar
  • Soporte del sistema de comando SSE en los procesadores Pentium III
    nota: los comandos SSE2 son más intereses para las tareas de computación, es decir, Equipos vectoriales sobre números reales de 64 bits, pero solo son compatibles con los procesadores Pentium 4, que a nuestra disposición aún no están
  • Vector automático
    esos. De nuevo, usando comandos SSE y SSE2 insertados por compilador automático
  • Soporte OpenMP para programación de sistemas SMP
    Nota: El clúster recomienda usar ventajosamente la interfaz MPI; El uso generalizado de OpenMP en el clúster no se asume y tales experimentos aún no se han realizado; Pero probablemente tenga sentido usar bibliotecas (Blas et al.), Paralelizado para la memoria general.
  • Posición de datos
    esos. Aparentemente, utilizando los comandos preestablecidos de la memoria a la memoria caché de datos, que se necesitará después de un tiempo
  • Código "Despacho" para varios procesadores.
    esos. la capacidad de generar código para varios procesadores en un archivo ejecutable, lo que permite los beneficios de los últimos procesadores lograr el mayor desempeño en ellos, al tiempo que mantiene la compatibilidad binaria de los programas con procesadores anteriores; En nuestro grupo aún no es relevante, porque Solo se utilizan procesadores Pentium III, y se supone que no debe transmitir y funcionar en otras máquinas compiladas en el clúster.

Compiladores de opciones principales

Los más interesantes, por supuesto, son las opciones para optimizar el código. La mayoría de las opciones son comunes a los compiladores de C ++ y Fortran. Más descripción detallada Opciones en manuales de usuario en inglés.

Niveles de optimización
OpciónDescripción
-O0.Desactiva la optimización
-O1 o -O2.Optimización básica para la velocidad. Inserción en línea de las funciones de la biblioteca está deshabilitada. Para el compilador de C ++, estas opciones proporcionan la misma optimización, para la opción de compilación de Fitran -O2 es preferible, porque Incluye todavía promoción de ciclos.
-O3.Optimización más poderosa, incluidas las conversiones de ciclos, elección de datos, utilizando OpenMP. Es posible que algunos programas no se garanticen un mayor rendimiento en comparación con -O2.. Tiene sentido usar con las opciones de vectorización. -Xkk. y -Xww.
-Nroll [n]Incluye la promoción de los ciclos a n veces.
Optimización para un procesador específico.
OpciónDescripción
-TPP6.Optimización para Penitum Pro, Pentium II y Pentium III Procesadores
-TPP7Optimización para los procesadores Penitum 4 (esta opción está habilitada de forma predeterminada para el compilador en IA-32)
-Xm.Generación de código utilizando extensiones MMX específicas para procesadores Pentium MMX, Pentium II y posteriores
-Xkk.Generación de código utilizando extensiones SSE específicas para los procesadores Pentium III
-XwwGeneración de código utilizando extensiones SSE2 específicas para los procesadores Pentium 4
Optimización de interposición
-Incluye la optimización de interdactura dentro de un solo archivo. Si especifica la opción -P_no_inlining, Las inserciones en línea están desconectadas.
-OPOIncluye optimización interdistante entre diferentes archivos.
Optimización utilizando perfiles
-Prof_gen.Generado código de "perfilado" que se utilizará para perfilar, es decir, Recopilación de datos sobre la frecuencia de paso de ciertos asientos en el programa.
-ProfusoLa optimización se basa en los datos obtenidos durante la fase de formación. Tiene sentido usar con la opción de optimización de interclaras. -OPO.
Paralelización para sistemas SMP.
-OPENMPSe incluye soporte OpenMP 2.0.
-ParaleloIncluye la paralelización automática de los ciclos.

Actuación

De acuerdo con los resultados de la prueba de la CPU2000 SPEC, publicados en el servidor ixbt.com, los compiladores de la versión 6.0 de Intel en casi todas partes fueron mejores que los compiladores de GCC 2.95.3, 2.96 y 3.1, y PGI versión 4.0.2. Estas pruebas se realizaron en 2002 en una computadora con el procesador Pentium 4 / 1.7 GHz y RedHat Linux 7.3.

De acuerdo con los resultados de las pruebas realizadas por Polyhedro, el compilador Intel Fortran, la versión 7.0, casi en todas partes resultó ser mejor que otros compiladores de Fortran 77 para Linux (Absoft, GNU, LAHEY, NAG, NAS, PGI). Solo en algunas pruebas, el compilador Intel pierde ligeramente los compiladores ABSOFT, NAG y LAHEY. Estas pruebas se llevaron a cabo en un procesador Pentium 4 / 1.8 GHz y Mandrake Linux 8.1.

Intel versión 9.1 Los compiladores también superen los compiadores de GCC y muestran el rendimiento comparable a Absoft, PathScale y PGI.

Le agradeceremos a los usuarios y lectores que nos enviarán datos sobre el efecto de la selección del compilador (GCC o Intel) y las opciones de optimización para la velocidad de trabajo en sus tareas reales.

Bibliotecas

SI Language Compiler utiliza la biblioteca de tiempo de ejecución diseñada como parte del proyecto GNU ( libc.a.).

Las siguientes bibliotecas se suministran con el compilador Intel C ++:

  • libcprts.a. - Biblioteca de Dinkumware de Dinkumware C ++ Dinkumware C ++.
  • libcxa.a. - Biblioteca de tiempo de ejecución adicional para el desarrollo de Intel C ++.
  • libimf.a. - La biblioteca de funciones matemáticas del desarrollo de Intel, que incluye implementaciones optimizadas y de alta precisión de funciones trigonométricas, hiperbólicas, exponenciales, especiales, complejas y otras (para obtener detalles, consulte la lista de funciones).
  • libirc.a. - Perfil de soporte de tiempo de ejecución (PGO) y código "Despachando" dependiendo del procesador (ver arriba).
  • libguide.a. - Implementando OpenMP.

Esta lista enumera las bibliotecas estáticas, pero para la mayoría de ellos también hay dinámicas, es decir. Conectado durante las opciones de inicio ( .entonces).

Junto con el compilador Fitran, se suministran las siguientes bibliotecas: libcepcf90.a., libiepcf90.a., libintrins.a., libf90.A.También usando Libimf.a Funciones matemáticas biblioteca.

Montaje de archivo ejecutable.

La conexión de la biblioteca es posible estática (durante el ensamblaje) o dinámica (durante el inicio del programa). El enfoque dinámico le permite reducir el tamaño del archivo ejecutable, le permite separar la misma copia de la biblioteca en la memoria, pero para esto debe instalar en cada nodo donde se lanzarán los programas, un conjunto completo de bibliotecas dinámicas utilizadas .

Por lo tanto, si instaló el compilador de Intel en su máquina con Linux y desea ejecutar los archivos ejecutables recopilados en otras máquinas, entonces necesita o usar un ensamblaje estático (lo que es más fácil) o copiar a estas máquinas bibliotecas de Intel dinámicas (generalmente de El directorio Tipo / Opt / Intel Directorio / Compilador70 / IA32 / LIB) a uno de los directorios enumerados en el archivo /etc/ld.so.conf, además de tener cuidado de que se instalan el mismo conjunto de bibliotecas dinámicas Dynamic GNU / Linux. en estas máquinas.

De forma predeterminada, todas las bibliotecas de desarrollo de Intel (excepto LIBCXA.SO) están conectadas estáticamente, y todas las bibliotecas del sistema de Linux y las bibliotecas de GNU están conectadas dinámicamente. Usando la opción -Estático Puede forzar al colector (Editor de enlace) para conectar estáticamente todas las bibliotecas (que aumentará la cantidad de archivo ejecutable) y usar la opción -i_dynamic Puede conectar dinámicamente todas las bibliotecas de desarrollo de Intel.

Al conectar bibliotecas adicionales utilizando la opción TIPO -Libeleboard Puede que tenga que usar la opción. -LineryPara establecer el camino donde se publican las bibliotecas.

Con opciones -BSTATAL. y -Bdynamic Puede configurar explícitamente la conexión dinámica o estática de cada una de las bibliotecas especificadas en la línea de comandos.

Usando la opción -C. El conjunto del archivo ejecutable está deshabilitado y solo se realiza la compilación (generación del módulo de objeto).

Compartiendo módulos en fortaleza y si

Para compartir módulos escritos en idiomas Fortran y SI, debe coordinar los nombres de los procedimientos en los módulos de objetos, transmitir parámetros, así como el acceso a las variables globales si hay tal.

De forma predeterminada, el compilador Intel Fortran traduce los nombres de los procedimientos al registro inferior y agrega un subrayado al final del nombre. El compilador C nunca cambia los nombres de las funciones. Por lo tanto, si queremos del módulo en Fitran, llame a la función o el procedimiento FNNAME implementado en C, luego en el módulo en SI, debe ser referido como FNNAME_.

El compilador de Fitran admite la opción -Nus [nombre de archivo]Lo que le permite deshabilitar la adición de subrayos a los nombres internos de los procedimientos. Si se especifica el nombre del archivo, esto se realiza solo para los nombres de procedimientos enumerados en el archivo especificado.

De forma predeterminada, en la fortaleza, los parámetros se transmiten por referencia, y en el C siempre es el valor. Por lo tanto, al llamar al procedimiento de FORTRANS, debemos transmitir los punteros a las variables correspondientes que contienen los valores de los parámetros reales como parámetros. Al escribir una función que debe llamarse desde el módulo en FORTRAN, debemos describir los parámetros formales como los punteros de los tipos correspondientes.

En los módulos en la SI, es posible usar bloques comunes definidos dentro de módulos en Fortran (más sobre esto, consulte la Guía del usuario de Intel Fortran Compiler, Capítulo Mezcla C y Fortran).

Compartiendo los compiladores de Intel y GCC

Los módulos de objetos en el idioma SI, obtenidos por el compilador Intel C ++, son compatibles con los módulos obtenidos por el compilador de GCC y la biblioteca GNU para el idioma C. Por lo tanto, estos módulos se pueden compartir en un programa recopilado utilizando comandos ICC o GCC, pero para conectar correctamente las bibliotecas de Intel, se recomienda usar ICC.

El compilador Intel admite una serie de extensiones de idioma SI no estándar utilizadas dentro del proyecto GNU y son compatibles con el compilador GCC (pero no todas, para más detalles, consulte aquí).

La compatibilidad de los módulos de objetos en C ++ y los idiomas de FORTRAN en el manual del usuario no se dice, aparentemente, no es compatible.

Normas de apoyo

El compilador Intel C ++ 7.0 para el compilador de Linux es compatible con ANSI / ISO (ISO / IEC 9899/1990). Es posible instalar una estricta compatibilidad con el inicio ANSI C ( -ansi.) o un dialecto ANSI c extendido ( -Xa). Al usar la opción -C99.

  • Manuales del compilador HTML (disponibles en "Online" en nuestro servidor, pero se requiere un soporte de idioma Java)
    • Guía del usuario del compilador de Intel C ++.
    • Guía de usuario de Intel Fortran Compiler.
  • Manuales completos en idioma en Inglés En formato PDF (se requiere Acrobat Reader, necesita descargar archivos PDF a su computadora)
    • Manual del usuario del compilador Intel C ++: Guía del usuario de Intel C ++ Compiler (1.3 MB, 395 páginas).
    • Intel Fortran: Manual del usuario de Intel Fortran Compiler: Guía del usuario de Intel Fortran Compiler (1.1 MB, 285 páginas).
    • Directorio del programador en FORTRAN: Referencia de Intel Fortran Programmer (7 MB, 566 páginas).
    • Directorio de la biblioteca de Fortran: Intel Fortran Bibliotecas Manual de referencia (9,5 MB, 881 Página).
  • Guía del depurador de la aplicación Intel.
  • Compiladores de comparación en pruebas de SPEC CPU2000 (Artículo en ixbt.com en ruso).
  • El sitio web de Polyhedron presenta los resultados de una comparación de varios compiladores.
  • La introducción de finales de 2003, Intel presentó una versión 8.0 de su colección de compiladores. Los nuevos compiladores están diseñados para mejorar el rendimiento de las aplicaciones que se ejecutan en servidores, computadoras de escritorio y sistemas móviles (computadoras portátiles, teléfonos móviles y computadoras de bolsillo) según los procesadores Intel. Es agradable observar que este producto se ha creado con la participación activa de los empleados del Centro Nizhny Novgorod Intel en el desarrollo del software Intel y los especialistas de Sarov.

    La nueva serie incluye compiladores Intel para los idiomas C ++ y FORTRAN para Windows y Linux, así como los compiladores de Intel para el idioma C ++ para Windows CE .NET. Los compiladores se centran en sistemas basados \u200b\u200ben los siguientes procesadores Intel: Intel Itanium 2, Intel Xeon, Intel Pentium. 4, procesadores con Intel Personal Internet Client Architecture Architecture para teléfonos móviles y PC y PC y el procesador Intel Pentium M para PC móviles (componente de tecnología Intel Centrino para PC móviles).

    En el compilador Intel Visual Fortran para Windows, se implementa una tecnología de compilación de nueva generación para soluciones de computación de alto rendimiento. Conecta la funcionalidad del idioma Visual Fortran (CVF) de Compaq y la mejora del rendimiento que ha sido posible gracias a las tecnologías de optimización de compilación y el código de Intel Corporation genera, y simplifica el problema de transferir el código fuente desarrollado por CVF a la VISUAL INTEL VISUAL Medio ambiente FORTRAN. En este compilador, las funciones de CVF se implementan por primera vez tanto para sistemas Intel de 32 bits como para sistemas basados \u200b\u200ben los procesadores de la familia Intel Itanium que operan en el entorno de Windows. Además, este compilador le permite implementar las funciones del idioma de CVF en los sistemas que ejecutan Linux según los procesadores Intel de 32 bits y los procesadores de familia Intel Itanium. En 2004, está previsto que lleve una versión extendida de este compilador: el compilador Intel Visual Fortran Compiler Professional Edition para Windows, que incluirá la biblioteca de bibliotecas IMSL Fortran 5.0, desarrollada por Visual Numerics, Inc.


    "Los nuevos compiladores también admiten futuros procesadores Intel, conocidos por el nombre de Prescott CODENAME, que proporcionan nuevos equipos para aumentar el rendimiento de los gráficos y videos, así como otras herramientas de productividad. También apoyan nueva tecnología MOBILE MMX (TM), lo mismo que aumenta el rendimiento de las aplicaciones gráficas, de sonido y video para teléfonos móviles y Pocket PC, señalada por el Director de COLA del Centro de Desarrollo Intel en Nizhny Novgorod, Alexey Lockers. - Estos compiladores proporcionan a los desarrolladores de aplicaciones un complejo unificado de herramientas instrumentales para construir nuevas aplicaciones para redes inalámbricas Basado en la arquitectura Intel. Los nuevos compiladores de Intel también admiten la tecnología Hyper-Threading Intel y la especificación sectorial de OpenMP 2.0, que define el uso de directivas de alto nivel para administrar los flujos de instrucciones en aplicaciones.

    Entre las nuevas herramientas incluidas en los compiladores - Fondos Código Intel. Cobertura y priorización de la prueba de Intel. Juntos, estos fondos le permiten acelerar el desarrollo de aplicaciones y mejorar su calidad al mejorar el proceso de prueba. software.

    Herramienta de cobertura de código Durante la aplicación, la aplicación proporciona información completa sobre el uso de la lógica de la aplicación y la ubicación de las secciones utilizadas en el código fuente de la aplicación. Si se realizan cambios a la aplicación o si esta prueba no le permite verificar la parte de la aplicación que está interesada en el desarrollador, la priorización de la prueba le permite verificar el funcionamiento de la sección seleccionada. código de software.

    Los nuevos compiladores de Intel se producen en diferentes conjuntos de recortes de $ 399 a $ 1499. Se pueden comprar hoy en Hoy en Intel o revendedores en todo el mundo, la lista de la cual se encuentra en el sitio. http://www.intel.com/software/products/reseller.htm#russia..

    Soporte de procesador de presscott

    El soporte de procesador Intel Pentium 4 (Prescott) en la octava versión del compilador es la siguiente:

    1. Apoye los comandos SSE3 (o PNI, Prescott New Instruction). Aquí vale la pena resaltar de tres maneras:

    pero. Insertos del ensamblador (ensamblaje en línea). Por ejemplo, el compilador reconoce el siguiente uso del comando del conjunto SSE3 _AM (AddSubpd XMM0, XMM1). Por lo tanto, los usuarios interesados \u200b\u200ben la optimización de bajo nivel pueden obtener acceso directo a los equipos de ensamblaje.

    b. En el compilador C / C ++, las nuevas instrucciones están disponibles a un nivel más alto que el uso de insertos de ensamblador. A saber, a través de funciones incrustadas (funciones intrínsecas):

    Funciones integradas

    Función incorporada Equipo generado
    _mm_addsub_ps. ADDSUBPS.
    _mm_hadd_ps. Haddps.
    _mm_hsub_ps. Msubps.
    _mm_moveldup_ps. Movsldup.
    _mm_movehdup_ps. Movshdup.
    _mm_addsub_pd. Addsubpd.
    _mm_hadd_pd. Haddpd.
    _mm_hsub_pd. Hsubpd.
    _mm_loaddup_pd. Movddup xmm, m64
    _mm_movedup_pd. Movddup reg, reg
    _mm_lddqu_si128. Lddqu.

    La tabla muestra las características incorporadas y los comandos de ensamblaje correspondientes del conjunto SSE3. El mismo soporte existe para comandos de los conjuntos MMX \\ SSE \\ SSE2. Esto le permite al programador llevar a cabo la optimización de código de bajo nivel, sin recurrir a la programación en el ensamblador: el propio compilador se encarga de la pantalla (Mapeo "E) de las funciones incorporadas en los comandos del procesador correspondientes y uso óptimo Registros. El programador puede concentrarse en crear un algoritmo que use efectivamente nuevos conjuntos de comandos.

    en. Generación automática de nuevos comandos compilador. Otras formas anteriores sugieren el uso de nuevos comandos por parte del programador. Pero el compilador también es capaz de usar las opciones apropiadas: consulte la sección 3 a continuación) Genere automáticamente nuevos comandos de la esfera SSE3 para el código de software en C / C ++ y Idiomas FORTRAN. Por ejemplo, un comando de carga uninteligente optimizado (LDDQ), cuyo uso le permite obtener una ganancia de rendimiento hasta un 40% (por ejemplo, en tareas de codificación de audio y video). Otros equipos del conjunto SSE3 hacen posible obtener una aceleración significativa en tareas de gráficos 3D o tareas de liquidación utilizando números complejos. Por ejemplo, un gráfico en la sección 3.1 a continuación muestra que para la aplicación 168.Wupworkwise de un conjunto de la aceleración de FP de CPU2000 FP obtenidos de la generación automática de comandos SSE3 fue ~ 25%. El rendimiento de esta solicitud depende significativamente de la velocidad de los números integrados aritméticos.

    2. Uso de ventajas microarcocturales del procesador Prescott. Al generar el código, el compilador tiene en cuenta los cambios de microarconcual en el nuevo procesador. Por ejemplo, realizar algunas operaciones (como cambios enteros, multiplicando enteros o conversión de números entre diferentes formatos de puntos de flotación en SSE2) acelerados en un nuevo procesador con respecto a las versiones anteriores (digamos, un cambio entero ahora está ocupado por un procesador Tacto contra cuatro para la versión anterior Intel Pentium 4 procesador). El uso más intensivo de tales comandos hace posible obtener una aceleración significativa de las aplicaciones.
    Otro ejemplo de cambios de microarconcual es el mecanismo de reenvío de la tienda mejorado (datos de descarga rápida almacenados anteriormente en la memoria); El ahorro real ni siquiera está en la memoria del caché, sino en algún búfer de guardado intermedio, lo que le permite realizar un acceso muy rápido a los datos. Esta característica de la arquitectura permite, por ejemplo, llevar a cabo una vectorización automática más agresiva del código del programa.
    El compilador también tiene en cuenta la mayor cantidad de caché de primer y segundo nivel.

    3. Soporte de tecnología de hiper-roscado mejorado. Este artículo puede atribuirse a los cambios anteriores - microarconcuales y su uso en el compilador. Por ejemplo, una biblioteca de tiempo de ejecución, que implementa el apoyo de la especificación de la industria OpenMP, se optimizó para su ejecución en un nuevo procesador.

    Actuación

    El uso de los compiladores es un simple y método efectivo Aproveche las arquitecturas del procesador Intel. Dos formas de usar los compiladores se destacan a continuación: a) Programas recompiladoras con un posible cambio en la configuración del compilador, b) Recomprimen con un cambio tanto en la configuración del compilador como en el texto de la fuente, así como el uso de los diagnósticos del compilador en la optimización y posible Uso de otro software (por ejemplo, Profilizadores).


    1.1 Optimización de programas recompply y cambia la configuración del compilador


    A menudo, el primer paso en la transición a un nuevo compilador de optimización es su uso con la configuración predeterminada. El siguiente paso lógico es usar opciones para una optimización más agresiva. Las Figuras 1, 2, 3 y 4 muestran el efecto de la transición a una versión 8.0 del compilador Intel en comparación con el uso de otros productos que conducen en la industria (-O2 - Configuración de compilación predeterminada, base - Configuración de base en productividad máxima). La comparación se lleva a cabo en arquitecturas de Intel de 32 y 64 bits. Las aplicaciones de la especificación CPU2000 se utilizan como dial de prueba.


    Foto 1




    Figura 2.




    Figura 3.




    Figura 4.


    Algunas opciones se enumeran a continuación (en adelante, la familia de Windows OS; para la familia Linux OS, hay opciones con la misma acción, pero el nombre puede diferir; por ejemplo, -od o qxk para Windows proporcionan una acción similar con - o0 o -xk para Linux en consecuencia; más información detallada Puede encontrar en el manual de uso del compilador) compatible con el compilador Intel.


    Niveles de control de optimización.: Opciones -od (sin optimización; aplicado a programas de depuración), -O1 (velocidad máxima al minimizar el tamaño del código), -O2 (optimización por la velocidad de la ejecución del código; aplicado por defecto), -O3 (incluye la optimización más agresiva para la velocidad del código; en algunos casos, puede llevar al efecto opuesto, es decir, a una desaceleración; se debe tener en cuenta que en el uso de IA-64 -O3 conduce a la aceleración en la mayoría de los casos, mientras que el efecto positivo en IA- 32 es menos pronunciado). Ejemplos de optimizaciones incluidas en -O3: permutación del orden de los ciclos anidados (intercambio de bucle), fusión de ciclos (fusión de bucle), separación del ciclo (distribución de bucle; optimización, fusión de bucle inversa), datos de preservación de software. La razón por la cual es posible una desaceleración cuando se usa -O3 puede ser que el compilador usó un enfoque heurístico de la elección de la optimización agresiva para un caso específico, sin tener suficiente información sobre el programa (por ejemplo, generó los comandos de preelección para Los datos utilizados en el ciclo, creyendo, que el ciclo se realiza una gran cantidad de veces, mientras que, de hecho, tiene solo unas pocas iteraciones). La optimización de interprocesamiento para perfiles, así como una variedad de "indicaciones" del programador (consulte la Sección 3.2), puede ayudar en esta situación.

    Optimización interprocesiva: -QIP (dentro de un solo archivo) y -Qipo (dentro de algunos archivos de proyecto). Incluye optimización, como, por ejemplo, una sustitución en línea del código utilizado con frecuencia (reduciendo los costos / procedimientos de llamadas de costo). Presenta información a otras etapas de optimización, por ejemplo, información sobre el límite superior del ciclo (digamos, si es un tiempo de compilación constante definido en un archivo y se usa en muchos) o la información sobre alineación de datos en la memoria (muchos mmx \\ Los comandos de SSE \\ SSE2 \\ SSE3 trabajan más rápido si los operandos están alineados en la memoria a la frontera en 8 o 16 bytes). El análisis de los procedimientos de asignación de memoria (implementados \\ llamados en uno de los archivos del proyecto) se transmite a las funciones \\ procedimientos en los que se usa esta memoria (esto puede ayudar al compilador a abandonar el supuesto conservador de que los datos no están alineados en la memoria correctamente; pero El supuesto debe ser conservador cuando la ausencia. para más información). Otro ejemplo es el análisis de las intersecciones de la memoria (desambiguación, análisis de alias de datos): en ausencia de información adicional y la incapacidad de demostrar la falta de intersecciones, el compilador proviene del supuesto conservador de que hay una intersección. Dicha decisión puede afectar negativamente la calidad de las optimizaciones como, por ejemplo, la vectorización automática en IA-32 o la transportación de software (pipelinización del software o SWP) en IA-64. La optimización de interprocesador puede ayudar a analizar la presencia de intersecciones de memoria.

    Optimización de perfiles: Incluye tres etapas. 1) Generar el código instrumental utilizando la opción -qprof_gen. 2) El código obtenido se inicia en los datos representativos, la información sobre varias características Realización del código (por ejemplo, una probabilidad de transición o un valor típico para el número de iteraciones de ciclo). 3) Re-compilación con la opción -qprof_USE, que proporciona el uso del compilador de la información recopilada en el paso anterior. Por lo tanto, el compilador tiene la capacidad de utilizar no solo las estimaciones estáticas de las características importantes del programa, sino también los datos obtenidos durante la ejecución real del programa. Esto puede ayudar con la elección posterior de ciertas optimizaciones (por ejemplo, una ubicación más eficiente en la memoria de varias ramas del programa, en función de la información sobre qué sucursales se llevaron a cabo a qué frecuencia; o el uso de la optimización a un ciclo Basado en información sobre el número típico de iteraciones en ella). La optimización de perfiles es especialmente útil en los casos en que es posible elegir un conjunto de datos pequeño, pero un representante (para el paso No. 2), lo que ilustra los casos más típicos de uso futuro del programa. En algunas áreas temáticas, la elección de dicho conjunto representativo es bastante posible. Por ejemplo, los desarrolladores de DBMS utilizan la optimización de perfiles.

    La optimización enumerada anteriormente pertenece al tipo general (genérico), es decir, El código generado trabajará en todos los diferentes procesadores de la familia (por ejemplo, en el caso de la arquitectura de 32 bits, en todos los procesadores a continuación: Intel Pentium-III, Pentium 4, incluido el kernel Prescott, Intel Pentium M). También hay optimizado para un procesador específico.

    Optimización específica orientada al procesador.: -QXK (Pentium-III; usando comandos de ajuste de SSE, características microarquisectónicas), -QXW y -QXN (Pentium 4; usando comandos SSE y SSE2, características microarquisectorias), -QXB (Pentium M; usando comandos SSE y SSE2, características microarquitectuales ), QXP (Prescott; usando comandos SSE, SSE2 y SSE3, características de microarquitectura). En este caso, el código generado utilizando dichas opciones puede no funcionar en otros representantes de la línea del procesador (por ejemplo, el código -QXW puede llevar a un comando inaceptable, si se realiza en el sistema de procesador Intel Pentium-III). O no trabajar con la máxima eficiencia (por ejemplo, el código QXB en el procesador Pentium 4 en virtud de las diferencias en la microarquitectura). Con tales opciones, también es posible utilizar las bibliotecas de tiempo de ejecución optimizadas para un procesador específico utilizando su sistema de comandos. Para controlar el hecho de que el código es válido en el procesador de destino, se implementa el mecanismo de despacho (CPU-Dispatch): verificando el procesador durante la ejecución del programa. En diversas situaciones, este mecanismo puede ser involucrado o no. El envío siempre se usa si se aplica la variación de las opciones -Qax (KWNP). En este caso, se generan dos versiones de código: optimizado para un procesador específico y "general" (genérico), la selección ocurre durante la ejecución del programa. Por lo tanto, debido a un aumento en el tamaño del Código, el programa se puede realizar en todos los procesadores de la línea y la ejecución óptima en el procesador de destino. Otra opción es usar la optimización de código en el representante anterior de la línea y utilizar este código en este y los procesadores subsiguientes. Por ejemplo, el código QXNN se puede realizar en Pentium 4 con el núcleo de Northwood y Prescott. El aumento del tamaño del código no se produce. Con este enfoque, es posible obtener una buena, pero aún no se tiene un rendimiento óptimo en el sistema con el procesador Prescott (ya que SSE3 no se usa y las diferencias en la microarquitectura no se tienen en cuenta) con un rendimiento óptimo en Northwood. Para los procesadores de arquitectura IA-64 también hay opciones similares. En este momento hay dos: -G1 (Itanium) y -G2 (Itanium 2; opción predeterminada).

    El siguiente gráfico (Figura 5) muestra la aceleración (para el comienzo de la referencia recibida una unidad, la ausencia de cualquier aceleración) al usar parte de la optimización anterior (a saber, NAMELY -O3 -QIPO -QPPROF_USH -QX (N, P)) en El procesador PRESCOTT se comparó con la configuración predeterminada (-O2). El uso -QXP ayuda en algunos casos obtener aceleración en comparación con -QXN. La mayor aceleración se logra en el Apéndice 168.Wupwiswise, que ya se ha mencionado en la sección anterior (debido a la optimización intensiva de la aritmética compleja utilizando comandos SSE3).


    Figura 5.


    La FIGURA 6 muestra la relación (valores) de la velocidad del código con ajustes óptimos en comparación con el código no optimizado (-OD) en los procesadores Pentium 4 y Itanium 2. Se puede ver que Itanium 2 es mucho más fuerte en el Calidad de la optimización. Esto es especialmente pronunciado para la computación de puntos flotantes (FP), donde la proporción es de aproximadamente 36 veces. Los cálculos de puntos flotantes son lado fuerte La arquitectura IA-64, pero es necesario acercarse cuidadosamente el uso de la configuración más eficiente del compilador. La ganancia de desempeño resultante paga los costos laborales para su búsqueda.


    Figura 6. Aceleración Al aplicar las mejores opciones de optimización, especificaciones CPU200


    Los compiladores de Intel admiten la especificación Sector de OpenMP para crear aplicaciones multiprescritas. Se admite una clara (opción -QopenMP) y automática (-QParalle) con el modo de paralelización. En el caso de un modo explícito, el programador es responsable del uso correcto y eficiente del estándar OpenMP. En el caso de la paralelización automática, el compilador pone una carga adicional asociada con el análisis del código del programa. Por esta razón, la paralelización automática está trabajando efectivamente en suficientes códigos simples.

    La gráfica en la Figura 7 muestra la aceleración del uso de la paralelización explícita en el sistema de muestras de ingeniería (preproducción) basada en el procesador Intel Pentium 4 (Prescott) con soporte para la tecnología de hiper-roscado: 2.8GHz, 2GB RAM, 8K L1- Caché, 512k l2-caché. SPEC OMPM2001 se utiliza como prueba de prueba. Este conjunto se enfoca en sistemas pequeños y medios SMP, el consumo de memoria es de hasta dos gigabytes. Las aplicaciones se compilan utilizando Intel 8.0 C / C ++ y FORTRAN con dos conjuntos de opciones: -QOPENMP -QIPO -O3 -QXN y -QOPENMP -QIPO -O3 -QXP, con cada una de las cuales las aplicaciones comenzadas con la hipericiones de encendido y apagado. Tecnología de roscado. Los valores de la aceleración en la tabla se normalizan al rendimiento de la versión de una sola roscada cuando se apaga la tecnología Hyper-Threading.


    Figura 7: Aplicaciones del conjunto OMPM2001 SPECT Set en el procesador PRESCOTT


    Se puede ver que en 9 de cada 11 casos, el uso de la paralelización explícita utilizando OpenMP proporciona ganancia de rendimiento cuando se enciende la tecnología Hyper-Threading. En una de las aplicaciones (312.SWIM) hay una desaceleración. Este es un hecho famoso: esta aplicación Se caracteriza por un alto grado de dependencia del ancho de banda de memoria. Además, como en el caso de la CPU2000 SPEC, la aplicación WUPISH WIBS gana significativamente de usar la optimización de Prescott (-QXP).


    1.2 Optimización de programas con cambios en el texto de origen y utilizando los diagnósticos del compilador


    En las secciones anteriores, consideramos el efecto del compilador (y su configuración) en la velocidad del código del programa. Al mismo tiempo, los compiladores de Intel presentan más oportunidades para optimizar el código que simplemente los cambios en la configuración. En particular, los compiladores permiten al programador hacer "sugerencias" en el código del programa, que permiten la generación de un código más eficiente en términos de rendimiento. A continuación se muestran algunos ejemplos para el lenguaje C / C ++ (para el idioma FORTRAN, existen medios similares que difieren solo por la sintaxis).

    #Pragma IVDEP (donde IVDEP significa ignorar las dependencias vectoriales) se aplica a los ciclos de software para informar al compilador que dentro de no hay dependencias de datos. Esta punta funciona en el caso cuando el compilador (basado en el análisis) sugiere de manera conservadora que dichas dependencias pueden ser (si el compilador puede probar como resultado del análisis, que existe la adicción, entonces la "punta" no tiene ninguna acción) , mientras que el autor del Código sabe que tales dependencias no pueden surgir. Usando esta punta, el compilador puede generar un código más eficiente: vectorización automática para IA-32 (usando comandos vectoriales de MMX \\ SSE \\ SSE2 \\ SSE3 sets para ciclos de software en C / C ++ y ForTran; se familiarizará con esto Técnica con más detalle con esta técnica, por ejemplo, en el siguiente artículo en Intel Technology Journal), Transportorización de software (SWP) para IA-64.

    #PRagma Vector siempre se usa para hacer que el compilador cambie la solución en la ineficiencia de la vectorización del ciclo (tanto automática para IA-32 como para SWP para IA-64), en función del análisis de las características cuantitativas y cualitativas del trabajo en cada iteración .

    #Pragma novector tiene una acción inversa #PRAGMA siempre.

    #PRAGMA vector alineado se usa para informar al compilador que los datos utilizados en el ciclo se nivelan en la frontera a 16 bytes. Esto le permite generar más eficientes y / o compactos (debido a la falta de cheques durante la ejecución).

    #PRAGMA vector no aliñineado tiene una acción inversa #pragma alineada. Es difícil hablar sobre la ganancia en el desempeño en este caso, pero puede contar con un código más compacto.

    #PRagma Distribute Point se usa dentro del ciclo del programa, de modo que el compilador pueda romper el ciclo (distribución de bucle) en este punto en uno ligeramente más pequeño. Por ejemplo, tal "TIP" se puede usar cuando el compilador no realiza la vectorización automática del ciclo de origen (por ejemplo, debido a la dependencia de los datos, que no se puede ignorar incluso si hay un #PRAGMA IVDEP), mientras que cada uno (o parte) de los ciclos recién formados se pueden contabilizar de manera efectiva.

    #PRagma Loop COUNT (N) se usa para informar al compilador que el valor más probable de la cantidad de iteraciones de ciclo será N. Esta información ayuda a tomar una decisión sobre la optimización más eficiente para este ciclo (por ejemplo, ya sea para hacer Una exploración, necesita hacer SWP o vectorización automática, necesita usar los comandos de preelección del programa de datos, ...)

    "TIP" _AsSume_aligned (P, Base) se usa para informar al compilador que el área de memoria asociada con el puntero P se nivela al borde en la base \u003d 2 ^ n byte.

    Esta lejos de lista llena Compilador de "puntas" diferentes, que pueden afectar significativamente la efectividad del código generado. Puede surgir una pregunta cómo determinar que el compilador requiere una sugerencia.

    Primero, puede usar los diagnósticos del compilador en forma de informes que proporciona al programador. Por ejemplo, cuando se utiliza la opción -qvec_reportn (donde n varía de 0 a 3 y significa el nivel de detalle) puede obtener un informe sobre la vectorización automática. El programador estará disponible información sobre los cuales se vectorizan los ciclos y que no lo son. En el caso negativo, el compilador indica las razones por las que falló la vectorización. Supongamos que la razón fue la dependencia estimada conservadora de los datos. En este caso, si el programador está seguro de que pueden ocurrir las dependencias, entonces es posible el uso de #PRAGMA IVDEP. Similares (comparando con qvec_reportn para IA-32) Posible compilador presenta en IA-64 para controlar la disponibilidad y la eficiencia del SWP. En general, los compiladores de Intel presentan amplias oportunidades para diagnosticar la optimización.

    En segundo lugar, otros productos de software (como el Profilador Intel Vtune) se pueden usar para buscar "cuellos de botella" en el código en términos de rendimiento. Los resultados del análisis pueden ayudar al programador a realizar los cambios necesarios.

    También puede utilizar el código de listado del ensamblador generado por el compilador.


    Figura 8.


    En la Figura 8 muestra un proceso de optimización de aplicaciones paso a paso utilizando el compilador (y otros productos de software) Intel en el idioma FORTRAN para la arquitectura IA-64. Como ejemplo, se considera el esquema de pronóstico regional no legrado durante 48 horas de centro de Roshidomet (puede leer sobre él, por ejemplo, en este artículo. El artículo se refiere al momento del cálculo de unos 25 minutos, pero los cambios significativos han ocurrió desde su escritura. Como punto de referencia, el rendimiento del código en el sistema Cray-YMP. El código sin cambios con las opciones predeterminadas del compilador (-O2) mostró un aumento en el rendimiento en un 20% en un sistema de cuatro procesadores basado en Intel Itanium 2 900 MHz procesador. El uso de la optimización más agresiva (-O3) llevó a la aceleración a ~ 2.5 veces sin cambiar el código, principalmente debido a la preselección de SWP y datos. El análisis por los diagnósticos del compilador y el Impilador Intel Vtune tiene Revelado algunos " lugares estrechos"Por ejemplo, el compilador no hizo una transportación de software de varios ciclos importantes, informando en el informe, que involucra la adicción de acuerdo con los datos. Los cambios de código pequeño (directiva de IVDEP) ayudaron a lograr una transportación eficiente. Usando el perfilador de Vtune, fue posible Detectarlo (y el informe del compilador confirmó esto) que el compilador no cambió el orden de los ciclos anidados (intercambio de bucle) para un uso más eficiente de la memoria caché. La razón fue nuevamente suposiciones conservadoras sobre las dependencias. Se realizaron cambios en el texto de origen de El programa. Como resultado, fue posible lograr una aceleración 4 veces con respecto a la versión inicial. Usando la paralelización explícita utilizando las directivas estándar OpenMP, y luego la transición al sistema con procesadores de frecuencia más altas hizo posible reducir la Tiempo de cuenta al indicador de menos de 8 minutos, lo que dio más de 16 veces aceleración en comparación con la versión inicial.

    Intel Visual Fortran

    Intel Visual Fortran 8.0 utiliza la parte frontal (parte del compilador que es responsable de convertir un programa del texto en el lenguaje de programación a la representación interna del compilador, que en muchos aspectos no depende del lenguaje de programación, ni de la Máquina objetivo) Tecnología del compilador CVF y los componentes del compilador Intel, responsable del conjunto de optimización y la generación de código.


    Figura 9.




    Figura 10.


    En las Figuras 9 y 10, los gráficos de comparación de rendimiento Intel Visual Fortran 8.0 se dan con la versión anterior de Intel Fortran 7.1 y con otras industrias en los compiladores de la industria de este idioma que ejecutan a las familias de Windows y Linux. Para la comparación, se utilizaron pruebas, los textos de origen de los cuales satisfacen los estándares F77 y F90 están disponibles en el sitio http://www.polyhedron.com/. En el mismo sitio más disponible información detallada En el compilador del compilador (Comparaciones del compilador WIN32 -\u003e FORTRAN (77, 90) Puntos de referencia de la ejecución y comparaciones del compilador de Linux -\u003e Benchmarks de Tiempo de ejecución Fortran (77, 90)): se muestran más compiladores diferentes, y el promedio geométrico se da junto con Resultados individuales cada prueba.

    El número anterior de la revista, discutimos los productos de la familia Intel Vtune Performance Analyzer - Herramientas de análisis de productividad que se honran con los desarrolladores de aplicaciones y permiten detectarse en el código de aplicación de la aplicación al que se gastan demasiados recursos procesadores, lo que da Los desarrolladores la oportunidad de identificar y eliminar los posibles cuellos de botella asociados con las secciones similares del Código, acelerando el proceso de desarrollo de aplicaciones. Sin embargo, observamos que el desempeño de las aplicaciones depende en gran medida de cómo se aplicaron los compiladores efectivos al desarrollarlos, y qué características hardware Se utilizan al generar un código de máquina.

    Las últimas versiones de Intel Intel C ++ e Intel Fortran Compilers para Windows y Linux Software le permiten obtener ganancias en el rendimiento de las aplicaciones para Intel Itanium 2 procesadores 2, Intel Xeon y Intel Pentium 4 a 40% en comparación con los compiladores existentes de Otros fabricantes mediante el uso de tales características de los procesadores especificados como la tecnología Hyper-Threading.

    A la distinción asociada con la optimización del código por parte de esta familia de compiladores, la aplicación de una pila para realizar operaciones de puntos de flotación, optimización de interproceduras (optimización interprociural, IPO), optimización de acuerdo con la optimización guiada del perfil, PGO), precarga Datos a la memoria caché (prefetificación de datos), que evita un retraso asociado con el acceso a la memoria, lo que admite las características características de los procesadores Intel (por ejemplo, las extensiones para la transmisión de Intel Streaming Extensions Extensions 2 de la transmisión de datos, característica de Intel Pentium 4), paralelización automática del código Ejecución, creación de aplicaciones, realizando en varios diferentes tipos Los procesadores se optimizan para uno de ellos, las herramientas de predicción de código posteriores (predicción de sucursales), soporte avanzado para ejecutar flujos.

    Tenga en cuenta que los compiladores Intel se utilizan en compañías tan famosas como Alias \u200b\u200b/ Wavefront, Oracle, Fujitsu Siemens, Abaqus, Silicon Graphics, IBM. Según las pruebas independientes realizadas por una serie de empresas, el rendimiento de los compiladores de Intel supera significativamente el rendimiento de los compiladores de otros fabricantes (consulte, por ejemplo, http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf. pdf).

    A continuación veremos algunas características. versiones recientes Compiladores Intel para sistemas operativos de escritorio y servidor.

    Compiladores para la plataforma de Microsoft Windows

    Compilador de Intel C ++ 7.1 para Windows

    Intel C ++ Compiler 7.1 es un compilador lanzado a principios de este año, lo que le permite lograr un alto grado de optimización de código para procesadores Intel Itanium, Intel Itanium 2, Intel Pentium 4 e Intel Xeon, así como para Intel Pentium M procesador utilizando el procesador Intel Pentium M tecnología Intel Centrino y destinado a su uso en dispositivos móviles.

    El compilador especificado es totalmente compatible con las herramientas de desarrollo de Microsoft Visual C ++ 6.0 y Microsoft Visual Studio .NET: se puede integrar en los entornos de desarrollo apropiados.

    Este compilador admite estándares ANSI y ISO C / C ++.

    Compilador de Intel Fortran 7.1 para Windows

    El compilador Intel Fortran Compiler 7.1 para Windows, también lanzado a principios de este año, le permite crear un código optimizado para los procesadores Intel Itanium, Intel Itanium 2, Intel Pentium 4 e Intel Xeon, Intel Pentium M.

    Este compilador es totalmente compatible con Microsoft Visual C ++ 6.0 y Microsoft Visual Studio .NET, es decir, se puede incrustar en los entornos de desarrollo apropiados. Además, este compilador le permite desarrollar aplicaciones de 64 bits para sistemas operativos que se ejecutan en los procesadores Itanium / Itanium 2, con utilizando Microsoft. Visual Studio en el procesador Pentium de 32 bits utilizando el compilador de compilador Intel Intel Fortran de 64 bits. Al depurar el código, este compilador le permite aplicar un depurador para la plataforma Microsoft .NET.

    En presencia del producto instalado Compaq Visual Fortran 6.6, se puede usar en lugar del compilador de origen de Intel Fortran 7.1, ya que los compiladores especificados son compatibles con el nivel de código fuente.

    El compilador de Intel Fortran 7.1 para Windows es totalmente compatible con la norma ISO FORTRAN 95 y admite la creación y la depuración de aplicaciones que contienen código en dos idiomas, C y Fortran.

    Compiladores para la plataforma Linux

    Compilador Intel C ++ 7.1 para Linux

    Otro compilador que ha visto la luz a principios de año, el compilador de Intel C ++ 7.1 para Linux, le permite lograr un alto grado de optimización de código para los procesadores Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Este compilador es totalmente compatible con el compilador C GNU C en el nivel, los módulos de código fuente y objetos, que sin costos adicionales le permiten migrar las aplicaciones creadas con GNU C. El compilador del compilador Intel C ++ admite C ++ ABI (adición a el kernel de Linux, lo que le permite ejecutar un código compilado para otras plataformas, como los sistemas operativos de SCO primitivos, versiones tempranas Sun Solaris et al.), Que significa compatibilidad total con el compilador GCC 3.2 en el nivel de código binario. Finalmente, utilizando el compilador Intel C ++ Compiler 7.1 para Linux, incluso puede recompilar el kernel de Linux haciendo varios cambios menores en su código fuente.

    Compilador de Intel Fortran 7.1 para Linux

    El compilador de Intel Fortran 7.1 para Linux le permite crear un código optimizado para los procesadores Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Este compilador es totalmente compatible con el compilador Compaq Visual Fortran 6.6 en el nivel de código fuente, Le permite realizar la recompilación de la aplicación creada con Compaq Visual Fortran, lo que aumenta su rendimiento.

    Además, el compilador especificado es compatible con los desarrolladores usados \u200b\u200butilizados por las utilidades como editor de Emacs, el depurador GDB, la utilidad para ensamblar las aplicaciones.

    Al igual que la versión de Windows de este compilador, Intel Fortran Compiler 7.1 para Linux es totalmente compatible con la norma ISO Fortran 95 y admite la creación y la depuración de aplicaciones que contienen el código en dos idiomas: C y Fortran.

    Se debe enfatizar que los especialistas del Centro Ruso Intel en el desarrollo del software en Nizhny Novgorod fueron una contribución significativa a la creación de compiladores enumerados Intel. Puede encontrar más información sobre los compiladores de Intel en el sitio web de Intel en www.intel.com/software/products/.

    La segunda parte de este artículo se dedicará a los compiladores de Intel creando aplicaciones para dispositivos móviles.