visual versiones studio lenguaje ifort entre diferencia compiler compilador c++ visual-studio ide compiler-construction
biblioteca asmlib de

versiones - visual c++ y c++



¿Compilador Intel C++ como alternativa a Microsoft? (8)

¿Alguien está aquí usando el compilador Intel C ++ en lugar del compilador Visual c ++ de Microsoft?

Me interesaría mucho escuchar tu experiencia sobre integración, rendimiento y tiempos de construcción.


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 de Intel admite C99.


La última vez que comparó la compañía para la que trabajé fue hace aproximadamente 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.


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

Lo usaría porque tiene:

  • Excelente soporte de ensamblador en línea. Intel C ++ admite sintaxis de 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.

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

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


Anecdóticamente, descubrí que el compilador Intel falla más frecuentemente 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 vincularse con 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 punto flotante y son similares a Visual C ++ en puntos de referencia pesados ​​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, deberá 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 compilador de un mes, por lo que puede probar estas cosas por su cuenta.


Solo he tenido 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:

El compilador de Intel puede producir diferentes versiones de fragmentos de código, optimizándose cada versión 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, el despachador de CPU Intel no solo verifica qué conjunto de instrucciones es compatible con la CPU, sino que también verifica la cadena de identificación del proveedor," Detalles de niebla ", si la cadena del proveedor dice" GenuineIntel ", utiliza la ruta de código óptima. 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 versión mejor ".

Artículo de OSnews aquí


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

  • La paralelización (vectorización, OpenMP, SSE) no tiene igual en otros compiladores.
  • Toolset 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 soporte MPI (!!!)), Integrated Performance Primitives, etc. Lo que también es genial que estas bibliotecas están en constante evolución.

Desventajas

  • La aceleración es solo de 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.
  • Realmente no se puede hacer OSS ni nada de eso 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 del rendimiento ya no es fuerte, porque muchas bibliotecas como Thrust o Microsoft AMP le permiten usar GPGPU que superará a su CPU de 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).

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).

EDITAR: 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.


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 buena compatibilidad SIMD, hasta donde he podido averiguar, es el compilador que tiene el mejor soporte para las instrucciones SIMD.

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

  • Admite el despacho de CPU, esto es realmente importante, ya que permite al compilador apuntar al 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, solo funciona en las CPU de Intel, esto significa que las optimizaciones avanzadas quedarán fuera en las CPU de AMD. Hay una solución para esto, pero sigue siendo un problema importante con el compilador.

Para evitar el problema del despachador, es posible reemplazar el código de despachador producido con una versión que trabaja en procesadores AMD, uno puede, por ejemplo, usar la biblioteca asmlib de Agner Fog que reemplaza la función del despachador generado por el compilador. Se puede encontrar mucha más información sobre el problema del despacho y explicaciones técnicas más detalladas de algunos de los temas en Optimizing software en papel C ++ , también de Anger (que realmente vale la pena leer).

En una nota personal, he usado el compilador Intel c ++ con Visual Studio 2005, donde funcionó perfectamente, no experimenté ningún problema con las extensiones de lenguaje específicas de Microsoft, parecía entender las que usaba, pero quizás las que mencionó John Knoeller eran diferente de los 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 de GNU, si el rendimiento fuera crítico para mi proyecto y tuviera una parte financiera en orden;)