相关疑难解决方法(0)

如何在Java中编写正确的微基准测试?

你如何在Java中编写(并运行)正确的微基准测试?

我在这里寻找代码示例和注释,说明要考虑的各种事项.

示例:基准测量应该测量时间/迭代或迭代/时间,为什么?

相关:秒表基准可以接受吗?

java benchmarking jvm jvm-hotspot microbenchmark

835
推荐指数
11
解决办法
11万
查看次数

为什么我的Rust程序比同等的Java程序慢?

我正在使用Rust中的二进制序列化和反序列化,并注意到二进制反序列化比使用Java慢几个数量级.为了消除由于例如分配和开销导致的开销的可能性,我只是从每个程序中读取二进制流.每个程序从磁盘上的二进制文件读取,该文件包含一个包含输入值数量的4字节整数,以及一个8字节大端IEEE 754编码浮点数的连续块.这是Java实现:

import java.io.*;

public class ReadBinary {
    public static void main(String[] args) throws Exception {
        DataInputStream input = new DataInputStream(new BufferedInputStream(new FileInputStream(args[0])));
        int inputLength = input.readInt();
        System.out.println("input length: " + inputLength);
        try {
            for (int i = 0; i < inputLength; i++) {
                double d = input.readDouble();
                if (i == inputLength - 1) {
                    System.out.println(d);
                }
            }
        } finally {
            input.close()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是Rust的实现:

fn main() {
    use std::os;
    use std::io::File;
    use std::io::BufferedReader;

    let …
Run Code Online (Sandbox Code Playgroud)

performance file-io rust

6
推荐指数
1
解决办法
1951
查看次数

x86_64:IMUL快于2x SHL + 2x ADD吗?

/O2(发布)模式下查看由Visual Studio(2015U2)生成的程序集时,我看到这个"手动优化"的C代码被转换回乘法:

int64_t calc(int64_t a) {
  return (a << 6) + (a << 16) - a;
}
Run Code Online (Sandbox Code Playgroud)

部件:

  imul        rdx,qword ptr [a],1003Fh  
Run Code Online (Sandbox Code Playgroud)

所以我想知道这是否真的比按照它的编写方式更快,类似于:

  mov         rbx,qword ptr [a]  
  mov         rax,rbx  
  shl         rax,6  
  mov         rcx,rbx  
  shl         rcx,10h  
  add         rax,rcx  
  sub         rax,rbx  
Run Code Online (Sandbox Code Playgroud)

我总是觉得乘法总是比几个班次/加法慢?现代英特尔x86_64处理器不再是这种情况吗?

performance assembly x86-64 intel multiplication

5
推荐指数
1
解决办法
1116
查看次数