En utilisant le compilateur Sun 1.6 et JRE/JIT, est-ce une bonne idée d'utiliser le type de déroulement étendu illustré par Duff's Device pour dérouler une boucle? Ou est-ce que ça finit comme une obfuscation de code sans bénéfice de performance? Les outils de profilage Java que j'ai utilisés sont moins informatifs sur l'utilisation du processeur ligne par ligne que, disons, sur valgrind, donc je cherchais à augmenter la mesure avec l'expérience des autres.L'appareil de Duff accélère-t-il le code Java?
Notez que, bien sûr, vous ne pouvez pas exactement code périphérique Duff, mais vous pouvez faire le déroulement de base, et c'est ce que je me demande.
short stateType = data.getShort(ptr);
switch (stateType) {
case SEARCH_TYPE_DISPATCH + 16:
if (c > data.getChar(ptr + (3 << 16) - 4)) {
ptr += 3 << 16;
}
case SEARCH_TYPE_DISPATCH + 15:
if (c > data.getChar(ptr + (3 << 15) - 4)) {
ptr += 3 << 15;
}
...
de nombreuses autres valeurs.
Je ne comprends pas votre question révisée. L'appareil de Duff ne veut pas dire juste tomber. La boucle entrelacée est une partie clé. –
Pourquoi ne pas ... le tester? Ecrivez une version avec la boucle comme d'habitude. Ecrire une version avec la boucle déroulée. Ecrire un cadre qui exécute chacun sur un million de fois (ou autre). Voyez ce que, le cas échéant, les gains de performance proviennent de votre tentative d'optimisation. –
Pas de meilleure réponse ??? O.o –