Flanker (./4) :
Quand tu fais du JIT, tu as des informations supplémentaires que n'a pas le compilo.
Exemple con : dans ton code, tu as
for(i = 0; i < k; i++) { [...] }
Si k < 10, alors vaut mieux dérouler la boucle,
si 10 <= k < 10000, il faut la laisser telle quelle
si 10000 <= k, alors il est plus intéressant de faire plusieurs threads quand tu as plusieurs cœurs.
Le JIT va connaître la valeur de k et pourra utiliser la bonne méthode directement, contrairement au compilo.
J'ai un doute sur la dernière remarque (que j'ai mise en gras). J'aimerais bien savoir comment fait le JIT pour décomposer la boucle en plusieurs threads et gérer les accès mémoire concurrent et la cohérance.
Parce que pour moi parallèliser ce genre de boucle directement même avec x milliards d'itérations, c'est impossible:
for (i = 1; i <= k; i++){
A[i] =A[i-1]+B[i];
B[i+1]= C[i] + D[i];
}
A moins que JIT ne transforme le code en:
A[1] = A[0] + B[0];
for (i = 1; i <= k - 1; i++) {
B[i+1] = C[i] + D[i];
A[i+1] = A[i] + B[i+1];
}
B[k+1] = C[k]+D[k];
Si oui, comment fait-il ?