【发布时间】:2011-01-27 22:27:32
【问题描述】:
使用现有的 Sun 1.6 编译器和 JRE/JIT,使用 Duff 的设备示例的那种扩展展开来展开循环是否是个好主意?还是最终导致代码混淆而没有性能优势?
我使用的 Java 分析工具在逐行 CPU 使用方面的信息不如 valgrind,因此我希望通过其他人的经验来增强测量。
请注意,当然,您不能准确地对 Duff 的设备进行编码,但您可以进行基本的展开,这正是我想知道的。
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;
}
...
向下遍历许多其他值。
【问题讨论】:
-
我不明白你修改后的问题。达夫的装置并不意味着只是失败。交错循环是关键部分。
-
你为什么不……测试一下?像往常一样写一个带有循环的版本。用展开的循环编写一个版本。编写一个框架,每个框架执行一百万次(或其他)。看看您的优化尝试带来了哪些性能提升(如果有)。
标签: java duffs-device