• [^] # Re: Craintes

    Posté par . En réponse au journal La mort d'un troll : GCC supportera les plugins. Évalué à 2.

    Je ne suis pas à proprement parler un codeur Fortran, mais on m'a déjà demandé d'optimiser pas mal de codes écrits en Fortran, parce que tout bêtement, la syntaxe est très similaire à celle du C. Comparons:

    do i = 1, M
    ____do j = 1, N
    ________acc = beta * C(i,j)
    ________do k = 1,L
    ____________acc = acc + alpha * A(i,k) * B(k,j)
    ________enddo
    ________C[i,j] = acc
    ____enddo
    enddo


    En C, on aurait :
    for (i = 0; i < M; i = i + 1)
    {
    ____for (j = 0; j < N; j = j + 1)
    ____{
    ________acc = beta * C[i][j];
    ________for (k = 0; k < K; k = k + 1)
    ________{
    ____________acc = acc + alpha * a[i][k] * b[k][j];
    ________}
    ________c[i][j] = acc;
    ____}
    }


    (En se souvenant qu'en Fortran on est en column major, alors qu'en C on est en row major... Techniquement ça veut dire qu'il faudrait échanger toutes les boucles de mon code Fortran pour faire plaisir à la machine, ce qui rend le code beaucoup moins intuitif, de suite).

    Déjà, je ne vois pas de grande différence entre les deux codes. Ensuite, les entrées sorties en C, c'est déjà pas la fête, mais en Fortran c'est carrément imbitable. Du coup je persiste dans mes dires : soit on parle de Fortran 77, et là comme tout est statique ou presque, effectivement il y a un gros avantage sur le C; soit on parle de Fortran 90 et plus, et là en gagnant des fonctionnalités, on perd en simplicité (logique), obligeant le compilateur à être plus intelligent, et du coup on ne gagne plus rien sur le C/C++.