¿Son los compiladores de Intel realmente mejores que los de Microsoft? [cerrado]

56

Hace años, me sorprendí cuando descubrí que Intel vende compiladores compatibles con Visual Studio. Lo probé en particular para C / C ++, así como fantásticas herramientas de diagnóstico. Pero el código simplemente no era tan intensivo en computación para notar la diferencia. La única impresión fue: ¿Intel realmente lo hizo por mí ahora, wow, increíbles herramientas con resolución de nanosegundos, increíble? Pero la prueba terminó y el equipo nunca consideró seriamente una compra.

Según su experiencia, si el costo de la licencia no importa, ¿qué proveedor es el ganador?

No es una pregunta amplia o vaga o un intento de desencadenar una guerra santa. Este tipo de pregunta es sobre dos herramientas muy visibles. A nadie le gusta cuando las herramientas tienen algún misterio o sorpresa. Y las elecciones entre lo mejor y lo mejor son siempre el dolor. También entiendo el argumento de la hierba siempre es más verde . Quiero escuchar todas las historias de "qué pasaría si".

¿Qué sucede si Intel solo lo optimiza localmente para la etapa del chip del mes, y no todos los objetivos de hardware funcionarán tan bien como Microsoft compiló? ¿Qué pasa si el hardware de AMD es el objetivo y todo se ralentizará sin ninguna razón? O, por otro lado, ¿qué sucede si el hardware de Intel tiene tantas oportunidades que no se pueden notar, que los compiladores de compiladores de Microsoft son demasiado lentos para adoptarlos y nunca lo implementan en el compilador? ¿Qué sucede si ambos son exactamente iguales? En realidad, una única base de código simplemente se envuelve en dos cajas diferentes y tiene licencia para ambos proveedores por parte de una tienda de terceros.

Y así sucesivamente. Pero alguien sabe algunas respuestas.

    
pregunta Peter Mortensen 03.06.2012 - 14:01

9 respuestas

56

ADVERTENCIA: Respuesta basada en experiencia propia - YMMV

Si el código es realmente costoso computacionalmente, sí, definitivamente . He visto una mejora de más de 20 veces con el antiguo compilador Intel C ++ (ahora Intel Studio si recuerdo bien) frente al compilador estándar de Microsoft Visual C ++. Es cierto que el código estaba muy lejos de ser perfecto y que puede haber jugado un papel (de hecho, es por eso que nos molestamos en utilizar el compilador de Intel, fue más fácil que refactorizar la base de código gigante), además, la CPU utilizada para ejecutar el código era un Intel Core 2 Quad, que es la CPU perfecta para tal cosa, pero los resultados fueron impactantes. El compilador en sí contiene innumerables formas de optimizar el código, incluida la orientación a una CPU específica en términos de, digamos, SSE . Realmente hace que -O2 / -O3 salga avergonzado. Y eso fue antes usando el generador de perfiles.

Tenga en cuenta que, sin embargo, la activación de optimizaciones realmente agresivas hará que la compilación lleve bastante tiempo, dos horas para un proyecto grande no es en absoluto imposible. Además, con altos niveles de optimizaciones, existe una mayor probabilidad de que se manifieste un error en el código (esto también se puede observar con gcc -O3 ). Para un proyecto que conoces bien, esto podría ser un punto a favor, ya que encontrarás y arreglarás cualquier error que no hayas detectado antes, pero al compilar un desastre de pelos, simplemente cruzas los dedos y rezas a los dioses del x86. / p>

Algo sobre el rendimiento en las máquinas AMD: no es tan bueno como las CPU de Intel, pero sigue siendo mucho mejor que el compilador de MS C ++ (nuevamente, desde mi experiencia). El motivo es que también puede apuntar a una CPU genérica con el soporte de SSE2 (por ejemplo). Entonces las CPUs AMD con SSE2 no serán discriminadas mucho. Sin embargo, el compilador de Intel en la CPU Intel realmente roba el show. Sin embargo, no todo es arco iris doble y unicornios brillantes. Ha habido algunas acusaciones de que los binarios no se ejecutan en absoluto en las CPU que no son GenuineIntel y (esta es una admitida) un rendimiento inferior inducido artificialmente en CPU de otros proveedores . Además, tenga en cuenta que esta información es de hace al menos 3 años y su validez a partir de ahora es desconocida, PERO las nuevas descripciones de productos le dan a los binarios una carta blanca para que se ejecute tan lento como Intel considere adecuado en CPU que no sean de Intel.

No sé de qué se trata Intel y por qué son tan buenas herramientas de cálculo numérico, pero también pueden ver esto: enlace . Hay una comparación y si miras la última fila, MATLAB brilla al derrotar tanto el código C como Julia , lo que me sorprende es que los autores piensan que la razón es Math Kernel Library .

Me doy cuenta de que esto suena mucho como un anuncio para el kit de herramientas Intel Compiler, pero en mi experiencia realmente hizo el trabajo bien, e incluso la lógica simple dicta que los tipos que hacen CPUs deben saber mejor cómo programar para ellos. En mi opinión, el compilador Intel C ++ exprime hasta el último bit de ganancia de rendimiento posible.

    
respondido por el K.Steff 03.06.2012 - 14:33
35

Intel Compiler tiene una reputación de producir código numérico muy eficiente:

enlace

enlace

enlace

Tenga en cuenta que no afirmo que sea el compilador más rápido que existe, pero sin duda goza de una muy buena reputación por su eficiencia. Tenga en cuenta que los autores de los binarios "oficiales" de LAPACK para Windows utilizan el compilador Fortran de Intel para compilarlos: enlace y deben saber una o dos cosas sobre la eficiencia.

    
respondido por el quant_dev 04.08.2011 - 18:25
27

Intel C ++ tiene un par de ventajas sobre gcc además del generador de código. Ambos se derivan (en gran parte) del hecho de que se basa en el front-end EDG . Para bien o para mal, ambos se están erosionando (lentamente), por lo que las ventajas no son tan grandes como lo eran antes.

La primera es que emite mensajes de error mucho mejores como regla general. Es posible que desee ver una comparación de los mensajes de error entre Clang y gcc. Intel C ++ (junto con la mayoría de los otros basados en el front-end EDG) ha estado emitiendo diagnósticos similares a los de Clang durante años.

En segundo lugar, es que el extremo frontal de EDG es tan conocido por su excepcional conformidad con el lenguaje, como lo es el generador de código Intel para producir código rápido. En casi cualquier medida razonable, el front-end EDG proporciona una mejor conformidad con C ++ 98, 03 o (en las versiones actuales) C ++ 0x que cualquier otro compilador disponible.

Como dije, estas dos ventajas se han erosionado en diversos grados a lo largo del tiempo. Las versiones recientes de gcc tienen una conformidad lingüística bastante decente. Clang tiene mensajes de error sustancialmente mejores y también está avanzando hacia la implementación de todo el lenguaje C ++. Sin embargo, cuando llega a eso, Intel C ++ sigue siendo mejor que cualquiera de los dos, y es un paquete único que hace las cosas bien en lugar de necesitar un compilador para un buen diagnóstico y otro para una mejor conformidad y generación de código. / p>     

respondido por el Jerry Coffin 04.08.2011 - 21:29
14

Probamos esto en el trabajo hace un tiempo. La mayor parte de nuestra base de código está en Delphi, pero tenemos una funcionalidad altamente computacional que, según alguien, sería una buena idea hacer en un archivo DLL de C ++. Y uno de mis compañeros de trabajo había oído grandes cosas sobre el compilador de Intel, por lo que decidió probarlo. Reconstruimos la DLL en el compilador de Intel y realizamos algunas pruebas de velocidad, y los resultados lo sorprendieron tanto que pensó que debía estar haciendo algo mal.

La DLL tiene que calcular algunos problemas muy difíciles con la combinatoria y los componentes de topología, que técnicamente se encuentran en la clase de dificultad NP difícil si los hicimos "bien", pero utilizamos varias heurísticas para evitar el rendimiento de NP. Aun así, hay un montón de cálculos numéricos en marcha. Y para las pruebas que realizamos, la diferencia entre el compilador VS y el compilador Intel fue dentro de epsilon, o el compilador Intel fue notablemente más lento, generalmente en un lugar cercano al 20%. Y se mantuvo así sin importar los cambios que hizo en la configuración de compilación para intentar que el compilador de Intel produzca un código más rápido. Así que terminamos sin cambiarlo.

Este es solo un ejemplo del mundo real, por supuesto. Su kilometraje puede variar.

    
respondido por el Mason Wheeler 03.06.2012 - 14:49
9

En una aplicación incrustada en la que trabajé una vez, una versión de prueba de un compilador de Intel demostró que nos ahorraría tener que utilizar hardware nuevo con un mayor rendimiento. El costo del nuevo hardware fue de alrededor de $ 10 por unidad, las ventas proyectadas de 1 millón de unidades, agregar costos de desarrollo y retrasos en los proyectos. La opción 2 era una optimización de perfil / micro y una base de código optimizada / bien razonablemente bien perfilada: resultados desconocidos, tiempo desconocido.

¿Qué crees que dijo el jefe cuando pedimos los fondos para comprar el compilador .......

Sin embargo, este fue un caso muy afortunado y más raro: la salida de código 10% más rápida del compilador de Intel nos llevó al lado correcto del rendimiento. Si ya estuviéramos en el lado derecho, o estuviéramos 10% por encima, no habría hecho una diferencia. Si hubiéramos tenido a los ingenieros, probablemente podríamos haber optimizado el código y haber guardado el hardware y no necesitaríamos el compilador de Intel, pero el riesgo era alto y el compilador de Intel funcionó más barato que el tiempo de ingeniería.

En resumen, diría que es una forma de optimización micro: no lo haga hasta que sepa que lo necesita, y luego, solo después de haber perfilado y encontrado la causa real de los problemas. Es una elección particularmente buena de su perfil, ya que muestra que es lento 'en todas partes' y no tiene cuellos de botella identificados.

    
respondido por el mattnz 05.06.2012 - 05:18
5

Solo he encontrado tres ventajas:

  1. Tiene compatibilidad con las características de las CPU Intel más nuevas mucho antes que otros compiladores.

  2. Es un excelente compilador adicional para emitir advertencias y detectar problemas que otros compiladores no detectan. GCC atrapa algunas cosas que ICC no, y viceversa. Visual Studio capta algunas cosas que ICC no, y viceversa.

  3. Hace un trabajo mucho mejor de auto-paralelización de bucles (distribuyéndolos en múltiples subprocesos automáticamente) que cualquier otro compilador. No se beneficia mucho el código de esto, pero cuando tienes un código que lo hace, puede hacer una gran diferencia.

respondido por el David Schwartz 13.08.2011 - 08:26
3

Usamos el compilador de inteligencia para cada proyecto crítico de rendimiento de nuestro código base. Lo mejor de esto es que hace que la optimización del código sea realmente mantenible. En lugar de agregar manualmente llamadas __mm a todas partes, y decirle al compilador que busque datos de antemano, todo lo cual volverá a ser óptimo en la próxima versión, solo reorganizarás un poco tu código y obtendrás una velocidad increíble.

A menudo, el código optimizado es más fácil de seguir que la mano optimizada, es más rápido que la mano optimizada, y cuando se lanza un nuevo conjunto de instrucciones, el compilador utilizará ese conjunto de instrucciones. Es fantástico.

Lo mismo ocurre con el compilador de brazo (de brazo, no de inteligencia), si su liberación en el brazo hace un gran trabajo en vectorización para usted.

    
respondido por el martiert 05.06.2012 - 06:14
0

Consulte esta página de referencia. En resumen, Intel gana.

Pero el margen puede no ser tan grande: si compila a 32 bits, y su sistema de compilación no admite la optimización guiada por perfil, la ganancia es del orden del 10%. ¿Merece la pena esa mejora y los tiempos de compilación más largos?

    
respondido por el jdv-Jan de Vaan 29.04.2013 - 22:48
0

Se ha dicho que Intel lanzó el compilador Intel C ++ v13.0 para el sistema operativo Android, su primer intento de entregar un compilador de C / C ++ de optimización diseñado específicamente para la plataforma móvil de Google.

Los desarrolladores pueden usar el compilador en sistemas basados en Linux * para crear aplicaciones para dispositivos Android basados en procesadores Intel, incluido el procesador Intel® Atom ™. El compilador de Intel es compatible con GNU C ++ y las herramientas de desarrollo en el Kit de desarrollo nativo de Android (NDK) Tampoco puedes usar el compilador en cualquier máquina de desarrollo. Ni Windows ni OS X son compatibles; las herramientas solo están certificadas para su uso con Ubuntu 10.04 o 11.04

La versión actual de Android NDK usa la versión 4.6 de la cadena de herramientas de código abierto Gnu Compiler Collection (GCC) de forma predeterminada. Pero los compiladores de Intel incluyen muchas optimizaciones propietarias para sus propios chips y, a menudo, pueden generar código ejecutable que se desempeña mejor que el que producen los compiladores de terceros, como GCC.

    
respondido por el LOG_TAG 30.08.2013 - 05:43

Lea otras preguntas en las etiquetas