2010-04-20 12 views
12

Faccio un po 'di numeri pesanti e per me le prestazioni in virgola mobile sono molto importanti. Mi piace molto le prestazioni del compilatore Intel e abbastanza contenuto con la qualità dell'assemblaggio che produce.C++ 0x ottimizzando la qualità del compilatore

Sto pensando ad un certo punto di provare C++ 0x principalmente per parti di zucchero, come auto, elenco di inizializzazione, ecc., Ma anche lambda. a questo punto, uso queste funzionalità in C++ regolare con l'aiuto di boost.

Quanto buono del codice assembly genera i compilatori C++ 0x? in particolare i compilatori Intel e gcc. Producono codice SSE? è una prestazione paragonabile a C++? ci sono dei parametri?

La mia ricerca su Google non ha rivelato molto.

Grazie.

ps: a un certo punto sto per testarlo da solo ma vorrei sapere cosa aspettarmi relativamente al C++.

+2

Solo un heads-up che il compilatore Intel C++ supporta solo lambda al momento, e questi sono implementati come se fossero semplici, unici nomi chiamati functors. Quindi, dal punto di vista dell'ottimizzazione, saranno ottimizzati come qualsiasi altra funzione. –

risposta

8

Ci si può aspettare la stessa ottimizzazione per il codice, perché il compilatore non ha certamente peggiorato durante l'ottimizzazione. Quindi, solo l'uso delle nuove funzionalità C++ 0x potrebbe avere un impatto. Ma dubito che le tue core routine vengano improvvisamente completamente cambiate per usare in qualche modo le funzionalità solo di C++ 0x.

Tenere a mente cose come auto e lambda sono solo zucchero sintattico. Ciò non avrà alcun effetto sull'ottimizzazione del compilatore perché sono solo metodi per generare lo stesso codice che avresti comunque. Quindi dovresti solo preoccuparti delle nuove "cose" come gli elenchi di inizializzatori. Ma sarei sorpreso se anche questo fosse inefficiente.

Ci si dovrebbe aspettare anche molti miglioramenti, a causa della semantica del movimento. Non è più necessario copiare i dati ma semplicemente spostarli. Progetta il tuo codice per approfittare di questo per il massimo beneficio.

+3

Se si ottiene un vantaggio immediato a causa della semantica dello spostamento, –

+0

@Billy: punto di forza, in realtà. Aggiungerò – GManNickG

+0

bene, sorgenti di C++ ricompilate con C++ 0x g ++ e in effetti non vi è alcuna differenza, ogni volta che utilizzo un normale floating-point o Intel intrinseco. quindi per quanto riguarda una performance sembrano essere uguali. non ho guardato l'assemblea, ma la mia ipotesi è equivalente pure – Anycorn

Problemi correlati