Queste sono buone risposte, ma è abbastanza probabile che entrambe le versioni di Fortran e C ++ contengano spazio sostanziale per l'accelerazione, quindi non ci si aspetterebbe che abbiano esattamente la stessa velocità ora.
Supponendo che uno dei due sia il più veloce possibile per una determinata macchina e il carico di input, esiste un infinito numerabile di programmi che eseguono il lavoro e alcuni programmi che impiegano meno tempo di tutti gli altri.
Quello che vuoi fare è rimuovere le attività non necessarie fino a quando il programma si avvicina a quella brevità ottimale di tempo, indipendentemente dalla lingua.
Ecco come lo faccio , ed ecco un esempio di ottimizzazione delle prestazioni seriamente aggressiva .
Se posso solo dare esempi, in C ++ (usando MFC) questo è un caso in cui qualcosa di cui normalmente non ti preoccupi, l'indicizzazione dell'array, risulta costare il 40% delle volte e può essere fatto meglio. In un esempio ho usato i vettori di stl, il costo era ancora più alto.
Analogamente in Fortran, stavo sintonizzando un codice che utilizzava la libreria LAPACK, che si direbbe essere ottimizzato il più possibile.
È probabile che lo sia, per le matrici di grandi dimensioni e un numero limitato di chiamate.
Tuttavia, per le piccole matrici e un numero elevato di chiamate, indovina cosa stava spendendo una pesante frazione del suo tempo.
Stava chiamando una funzione per fare confronti di stringhe per vedere quali erano le opzioni nel chiamare le funzioni matematiche.
Ad esempio, DGEMM è una routine generale per fare moltiplicazione e amplifica matrix; scaling.
I primi due argomenti sono i flag CHARACTER * 1 che indicano se una matrice di input viene trasposta.
Per le piccole matrici, chiamare una funzione per testare tali flag è una percentuale maggiore del tempo e potrebbe essere chiaramente eliminata scrivendo una routine più specializzata.
L'unica generalità che puoi trarre da questi esempi è che hai bisogno di una diagnostica efficace (come la pausa casuale) per dire qual è il problema in ogni fase della messa a punto delle prestazioni. I problemi che troverai saranno indubbiamente diversi da questi esempi, ma in ogni caso l'unico modo per sapere cosa risolvere è avere il programma stesso che ti dice.
Una volta che ti sei liberato delle cose extra fatte nel programma che esiste per rendere più semplice una codifica generale non specificata,
quindi puoi disattivare l'ottimizzatore del compilatore per eseguire il proprio livello di spremitura del ciclo (supponendo che la velocità sia la tua principale preoccupazione).