达夫';s设备加速Java代码?

达夫';s设备加速Java代码?,java,duffs-device,Java,Duffs Device,使用库存Sun 1.6编译器和JRE/JIT,使用达夫的设备示例的那种扩展展开循环是一个好主意吗?或者它最终会导致代码混淆而没有性能优势 与valgrind相比,我使用的Java评测工具在逐行CPU使用方面的信息较少,因此我希望利用其他人的经验来增加度量 请注意,当然,您不能准确地编码达夫的设备,但您可以进行基本的展开,这就是我想知道的 short stateType = data.getShort(ptr); switch (stateType) {

使用库存Sun 1.6编译器和JRE/JIT,使用达夫的设备示例的那种扩展展开循环是一个好主意吗?或者它最终会导致代码混淆而没有性能优势

与valgrind相比,我使用的Java评测工具在逐行CPU使用方面的信息较少,因此我希望利用其他人的经验来增加度量

请注意,当然,您不能准确地编码达夫的设备,但您可以进行基本的展开,这就是我想知道的

        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;
            }
         ...
short stateType=data.getShort(ptr);
开关(状态类型){
案例搜索\类型\派送+16:

如果(c>data.getChar)(ptr+(3这是否是个好主意并不重要,因为它不会编译

编辑:这是明确提到的:

一个已知的Duff'设备可以用于C或C++中,以循环展开,但这不是java编程语言中的有效代码:

或者,更直截了当地说(来自同一部分):

很好的C语言,汤姆,但在这里无效


编辑:回答您的更多问题(太多)一般性问题,通常是否定的。您通常应该依赖JIT。

您忽略了Java编译为面向堆栈的虚拟机的字节码这一事实。无论您在Java级别尝试什么低级优化技巧,在很大程度上都是无效的。真正的优化发生在JIT编译器为ta生成程序集时rget体系结构,一个在很大程度上你既不能控制也不能关心的过程


相反,你应该从更大的角度进行优化。让JIT编译器来处理低级优化。

对不起,我没有把这个问题说得太不具体。我知道这是10年后的事了。但我们是否清楚地说“汤姆”是我不明白你修改过的问题。达夫的设备并不意味着只是失败。交错循环是一个关键部分。你为什么不…测试它?像往常一样用循环编写一个版本。用展开的循环编写一个版本。编写一个框架,每个框架执行一百万次(或其他)。看看你的优化尝试会带来什么(如果有的话)性能提升。我不是忽视它,我是在问你。