2010-04-20 12 views
12

Hago algunos cálculos crujientes y para mí el rendimiento en coma flotante es muy importante. Me gusta mucho el rendimiento del compilador Intel y estoy bastante satisfecho con la calidad de ensamblaje que produce.C++ 0x optimizando la calidad del compilador

Estoy pensando en algún momento probar C++ 0x principalmente para partes de azúcar, como auto, lista de inicializadores, etc., pero también lambdas. en este punto utilizo esas características en C++ regular por medio de boost.

¿Qué tan bueno es el código de ensamblaje que generan los compiladores C++ 0x generate? específicamente compiladores Intel y gcc. ¿Producen el código SSE? ¿Es el rendimiento comparable a C++? ¿Hay algún punto de referencia?

Mi búsqueda en Google no reveló mucho.

Gracias.

ps: en algún momento voy a probarlo yo mismo, pero me gustaría saber qué esperar en relación con C++.

+2

Sólo un aviso de que el compilador Intel C++ solo admite lambdas en este momento, y esos se implementan como si fuesen funtores simples y con un nombre único. Entonces, desde el punto de vista de la optimización, se optimizarán como cualquier otra función. –

Respuesta

8

Puede esperar la misma optimización para su código, porque el compilador ciertamente no empeoró en la optimización. Entonces, solo el uso de las nuevas características de C++ 0x podría afectarlo. Pero dudo que sus rutinas centrales de repente cambien por completo para usar de alguna manera las características de C++ 0x.

Tenga en cuenta cosas como auto y lambda son solo azúcar sintáctica. Eso no tendrá ningún efecto en la optimización del compilador porque son solo métodos para generar el mismo código que de todos modos. Entonces solo tendrías que preocuparte por las nuevas "cosas" como las listas de inicializadores. Pero me sorprendería si eso fuera ineficiente también.

También debe esperar muchas mejoras, debido a la semántica de movimiento. Ya no debe copiar los datos, sino simplemente moverlos. Diseña tu código para aprovechar esto para mayor beneficio.

+3

En todo caso casi obtendría un beneficio instantáneo debido a la semántica de movimiento –

+0

@Billy: Gran punto, en realidad. Lo añadiré. – GManNickG

+0

bien, fuentes C++ recompiladas con C++ 0x g ++ y de hecho no hay diferencia, cada vez que utilizo el punto flotante regular o intrínseco de Intel. por lo que respecta a una actuación, parecen ser lo mismo. no he mirado el montaje, pero mi conjetura es equivalente también – Anycorn