Verwenden Sie den originalen Sun 1.6-Compiler und JRE/JIT, ist es eine gute Idee, die Art von extensivem Abroll zu verwenden, die von Duffs Device veranschaulicht wird, um eine Schleife aufzurollen? Oder endet es als Codeverschleierung ohne Leistungsvorteil?Macht das Duff-Gerät Java-Code schneller?
Die Java-Profiling-Tools, die ich verwendet habe, sind weniger informativ über zeilenweise CPU-Nutzung als, sagen wir, Valgrind, also wollte ich die Messung mit der Erfahrung anderer Leute erweitern.
Beachten Sie, dass Sie natürlich nicht genau Code Duffs Gerät, aber Sie können die grundlegende Unroll tun, und das ist, was ich mich wundere.
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;
}
...
durch viele andere Werte.
Ich verstehe Ihre überarbeitete Frage nicht. Duffs Gerät bedeutet nicht nur Durchfall. Die Interlaced-Schleife ist ein Schlüsselelement. –
Warum testest du es nicht? Schreiben Sie wie gewohnt eine Version mit der Schleife. Schreibe eine Version mit der abgerollten Schleife. Schreiben Sie ein Framework, das jeweils millionenfach ausgeführt wird (oder was auch immer). Sehen Sie, ob Leistungssteigerungen durch Optimierungsversuche erzielt werden. –
Keine beste Antwort ??? O.o –