相关疑难解决方法(0)

是否有任何JVM的JIT编译器生成使用向量化浮点指令的代码?

假设我的Java程序的瓶颈确实是计算一堆矢量点积的一些紧密循环.是的我已经分析过,是的,它是瓶颈,是的,它是重要的,是的,这就是算法是什么,是的,我运行Proguard来优化字节码等.

这项工作基本上是点产品.因为,我有两个float[50],我需要计算成对产品的总和.我知道处理器指令集可以快速和批量地执行这些操作,如SSE或MMX.

是的我可以通过在JNI中编写一些本机代码来访问它们.JNI电话证明非常昂贵.

我知道你无法保证JIT编译或编译的内容.有没有人曾经听说过使用这些指令的JIT生成的代码?如果有的话,有什么关于Java代码可以帮助它以这种方式编译吗?

可能是"不"; 值得一提.

java floating-point jit sse vectorization

91
推荐指数
4
解决办法
2万
查看次数

为什么字节添加性能如此不可预测?

几个小时前我回答了另一个Stack Overflow问题,结果非常令人惊讶.答案可以在这里找到.答案是/部分错误,但我觉得专注于字节添加.

严格来说,它实际上是字节到长的添加.

这是我一直使用的基准代码:

public class ByteAdditionBenchmark {
    private void start() {
        int[] sizes = {
            700_000,
            1_000,
            10_000,
            25_000,
            50_000,
            100_000,
            200_000,
            300_000,
            400_000,
            500_000,
            600_000,
            700_000,
        };

        for (int size : sizes) {
            List<byte[]> arrays = createByteArrays(size);
            //Warmup
            arrays.forEach(this::byteArrayCheck);
            benchmark(arrays, this::byteArrayCheck, "byteArrayCheck");
        }
    }

    private void benchmark(final List<byte[]> arrays, final Consumer<byte[]> method, final String name) {
        long start = System.nanoTime();
        arrays.forEach(method);
        long end = System.nanoTime();
        double nanosecondsPerIteration = (end - start) * 1d / arrays.size();
        System.out.println("Benchmark: …
Run Code Online (Sandbox Code Playgroud)

java benchmarking

18
推荐指数
1
解决办法
1305
查看次数

标签 统计

java ×2

benchmarking ×1

floating-point ×1

jit ×1

sse ×1

vectorization ×1