2009-12-30 11 views

Respuesta

28

El compilador de Intel es uno de los compiladores de C++ más avanzados disponibles, tiene una serie de ventajas sobre, por ejemplo, el compilador de Microsoft Visual C++, y una gran desventaja. Las ventajas incluyen:

  • Muy buen soporte SIMD, por lo que yo he podido averiguar, es el compilador que tiene el mejor soporte para instrucciones SIMD.

  • Admite la paralelización automática (optimizaciones multinúcleo), así como la manual (a través de OpenMP), y hace ambas cosas muy bien.

  • Soporte de despacho de CPU, esto es realmente importante, ya que permite al compilador enfocarse en el procesador para obtener instrucciones optimizadas cuando se ejecuta el programa. Por lo que puedo decir, este es el único compilador de C++ disponible que hace esto, a menos que G ++ haya introducido esto en su todavía.

  • A menudo se envía con bibliotecas optimizadas, como bibliotecas de matemática y de imágenes.

Sin embargo, tiene un inconveniente importante, el despachador como se mencionó anteriormente, sólo funciona en la CPU de Intel, esto significa que las optimizaciones avanzadas se quedará fuera de AMD CPU. Hay una solución para esto, pero sigue siendo un problema importante con el compilador.

Para evitar el problema despachador, es posible sustituir el código despachador producido con una versión de trabajo de los procesadores de AMD, se puede por ejemplo utilizar Agner Fog'sasmlib library que sustituye el compilador genera la función de despachador. Se puede encontrar mucha más información sobre el problema del envío y explicaciones técnicas más detalladas de algunos de los temas en el documento Optimizing software in C++, también de Anger (que realmente vale la pena leer).

En una nota personal, utilicé el compilador Intel C++ con Visual Studio 2005, donde funcionó a la perfección, no tuve ningún problema con las extensiones de lenguaje específicas de Microsoft, parecía entender las que usaba, pero tal vez las mencionadas por John Knoeller eran diferentes de las que tenía en mis proyectos.

Aunque me gusta el compilador de Intel, actualmente estoy trabajando con el compilador de Microsoft C++, simplemente debido a la inversión financiera adicional que requiere el compilador de Intel. Solo usaría el compilador de Intel como alternativa a Microsofts o el compilador GNU, si el rendimiento fuera crítico para mi proyecto y tuviera una parte financiera en orden;)

+9

Cuidado con absolutos como "* the * mot compilador avanzado disponible". – jalf

+7

@jalf: Estoy de acuerdo en que esto podría llevar a creer que el autor es parcial, sin embargo, este es un caso en el que tenemos un tamaño mensurable. Se puede observar a través del ejecutable producido que el compilador de Intel utiliza tecnologías de optimización más avanzadas, en comparación con los compiladores de la competencia. –

+0

Además, al escribir tales respuestas, es mejor prever las afirmaciones generales que podrían cambiar (es decir, volverse falsas) con el tiempo. Como todos sabemos, el software evoluciona rápidamente y sufre constantemente por ser superado por la competencia. Incluso solo unos pocos años pueden cambiar las cifras dramáticamente. – ulidtko

5

He tenido solo una experiencia con este compilador, compilando STLPort. MSVC tardó unos 5 minutos en compilarlo e ICC compiló durante más de una hora. Parece que su compilación de plantilla es muy lenta. Aparte de esto, solo he oído cosas buenas al respecto.

Aquí hay algo interesante:

compilador de Intel puede producir diferentes versiones de piezas de código, con cada versión está optimizado para un procesador específico y/o conjunto de instrucciones (SSE2, SSE3, etc.) El sistema detecta en qué CPU se está ejecutando y elige la ruta de código óptima en consecuencia; el despachador de CPU , como se llama.

"Sin embargo, la CPU despachador Intel no sólo se compruebe que la enseñanza conjunto se apoya en la CPU, sino que también comprueba la cadena de ID del fabricante," niebla detalles, "Si la cadena proveedor dice 'GenuineIntel' luego utiliza la ruta de código óptimo . Si la CPU no es de Intel, entonces, en la mayoría de los casos, ejecutará la versión más lenta posible del código, incluso si la CPU es totalmente compatible con una mejor versión ".

OSNews artículo here

+2

¿Qué niveles de optimización estaba usando? Si usaba la optimización interproceso (tomando todos los archivos de objeto, combinándolos en un solo archivo de objeto enorme y optimizando en el tiempo de enlace), ICC va a ser mucho más lento que MSVC. Sin embargo, producirá mejores resultados. – Tom

2

La última vez que la empresa donde trabajo compara los dos era hace un año, (tal vez 2). El compilador de Intel generó un código más rápido, generalmente solo un poco más rápido, pero en algunos casos bastante.

Pero no podía manejar algunas de las extensiones de lenguaje MS en las que dependemos, así que terminamos quedándonos con MS. Fue VS 2005 que lo estábamos comparando. Y estoy destrozando mi cerebro para recordar exactamente qué extensión de MS no pudo manejar el compilador de Intel. Regresaré y editaré esta publicación si puedo recordar.

+0

¿Puede manejar COM/ATL? Estoy atrapado en tierra COM/ATL ... – wheaties

+1

Podría manejar COM, pero no usamos mucho ATL, así que no estoy seguro de eso. –

3

Intenté usar Intel C++ en mi trabajo anterior. IIRC, efectivamente generó un código más eficiente a expensas del tiempo de compilación. Sin embargo, no lo usamos para producción, por razones que no recuerdo.

Una diferencia importante en comparación con MSVC es que el compilador Intel admite C99.

5

No estoy usando el compilador de Intel C++ en el trabajo/personal (ojalá lo fuera).

lo usaría porque tiene:

  • Excelente soporte en línea ensamblador. Intel C++ es compatible con las sintaxis del ensamblador Intel y AT & T (GCC), para plataformas x86 y x64. Visual C++ solo puede manejar la sintaxis de ensamblado de Intel y solo para x86.

  • Compatibilidad con conjuntos de instrucciones SSE3, SSSE3 y SSE4.Visual C++ tiene soporte para SSE y SSE2.

  • Se basa en EDG C++, que cuenta con una completa ISO/IEC 14882: 2003 implementación estándar. Eso significa que puede usar/aprender cada característica de C++.

3

Como anécdota, he encontrado que el compilador de Intel se cuelga con más frecuencia que Visual C++. Sus diagnósticos son un poco más completos y están mejor escritos que los de VC. Por lo tanto, es posible que el compilador proporcione diagnósticos que no se proporcionaron con VC, o fallarán cuando VC no lo hizo, lo que encarece su conversión.

Sin embargo, creo que el compilador de Intel le permite vincular con los tiempos de ejecución de Microsoft como el CRT, lo que facilita el costo de transición.

Si está interoperando con el código administrado, probablemente debería quedarse con el compilador de Microsoft.

Los compiladores recientes de Intel logran un rendimiento significativamente mejor en puntos de referencia pesados ​​de coma flotante, y son similares a los puntos de referencia compactos de Visual C++ en enteros. Sin embargo, varía drásticamente según el programa y si está utilizando o no la generación de código de tiempo de enlace o la optimización guiada por perfil. Si el rendimiento es crítico para usted, necesitará comparar su aplicación antes de tomar una decisión. Solo diría que si está haciendo informática científica, probablemente valga la pena investigar.

Intel le permite una versión de prueba gratuita de un mes de su compilador, para que pueda probar estas cosas por su cuenta.

+0

¿Se están mejorando los diagnósticos en VC2010? – jalf

+0

Pensándolo bien, tal vez no. Tienen una nueva tecnología de front-end, pero creo que solo la usan para intellisense, no para el compilador en sí. –

2

El compilador Intel C++ tiene soporte INCREÍBLE (humano). Hablar con Microsoft puede tomar literalmente días. Mi problema no trivial se resolvió a través del chat en menos de 10 minutos (incluido el tiempo de verificación de membresía).

EDIT: He hablado con Microsoft sobre problemas en sus productos como Office 2007, incluso me han informado de un error. Aunque finalmente tuve éxito, el tamaño general y la complejidad de sus productos y la jerarquía de la organización es desalentadora.

+4

¿Cuántas veces llama al soporte técnico humano para un compilador en una década? 0, 1? –

+0

Así es como las compañías le pagan mucho dinero a Intel. ¿Es eso más fácil de encontrar la solución con Google, no. – ozhan

3

He estado usando el compilador Intel C++ desde la primera versión de Intel Parallel Studio, y hasta ahora no he sentido la tentación de volver. Aquí hay un resumen de las ventajas y desventajas, así como (algunas obvias) observaciones.

Ventajas

  • paralelización (vectorización, OpenMP, SSE) es igual en otros compiladores.
  • Conjunto de herramientas es simplemente increíble. Estoy hablando de los perfiles, por supuesto.
  • Inclusión de bibliotecas optimizadas como Threading Building Blocks (está bien, Microsoft ha replicado TBB con PPL), Math Kernel Library (rutinas estándar y algunas implementaciones tienen compatibilidad MPI (!!!)), Integrated Performance Primitives, etc. También es genial que estas bibliotecas evolucionen constantemente.

Desventajas

  • velocidad arriba es sólo para Intel. Bueno, duh! Sin embargo, no me preocupa, porque en el lado del servidor, todo lo que tengo que hacer es elegir máquinas Intel. No tengo ningún problema con eso, algunas personas podrían.
  • No se puede hacer realmente OSS o algo así en esto, porque el formato de archivo del proyecto es diferente. Sí, puedes tener formatos de archivo VS e IPS, pero eso es simplemente extraño. Te perderás al sincronizar las opciones del proyecto cada vez que realices un cambio. El compilador de Intel tiene el doble de opciones, por cierto.
  • El compilador es mucho más meticuloso. Es demasiado fácil establecer configuraciones de proyecto incompatibles que le darán un error de compilación críptico en lugar de una buena explicación significativa.
  • Cuesta dinero adicional encima de Visual Studio.

neutrales

  • Creo que el argumento rendimiento no es muy fuerte más, porque un montón de librerías como de empuje o Microsoft AMP permiten utilizar GPGPU que superan en armas su CPU todos modos .
  • Recomiendo a cualquier persona interesada que obtenga una versión de prueba y pruebe algún código, incluidas las bibliotecas. (Y sí, las bibliotecas son agradables, pero las interfaces de estilo C pueden volverlo loco).
Cuestiones relacionadas