使用股票Sun 1.6編譯器和JRE/JIT,使用Duff's Device展示的大量展開來展開循環是個好主意嗎?或者它最終會成爲代碼混淆而沒有性能優勢?Duff的設備是否加速Java代碼?
我使用的Java分析工具對於逐行CPU使用的信息比valgrind更少,所以我期望通過其他人的經驗來擴充測量。
請注意,當然,你不能確切代碼達夫的設備,但你可以做基本的展開,這就是我想知道的。
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;
}
...
通過許多其他值。
我不明白你修改過的問題。達夫的設備並不意味着只是落後。交錯循環是關鍵部分。 – 2010-03-16 01:42:28
你爲什麼不...測試它? 像平常一樣用循環編寫一個版本。用展開的循環編寫一個版本。編寫一個框架,執行每一百萬次(或其他)。看看您的優化嘗試會帶來哪些性能提升。 – 2010-03-16 01:42:43
沒有最好的答案??? O.o – 2011-06-26 18:44:03