[vector] Why offset for `FloatVector.fromArray()` doesn't matter?

Lev Serebryakov lev at serebryakov.spb.ru
Mon Mar 25 11:51:12 UTC 2019


 I've tried simplest possible benchmark:

@Fork(2)
@Warmup(iterations = 5, time = 2)
@Measurement(iterations = 10, time = 2)
@Threads(1)
@State(org.openjdk.jmh.annotations.Scope.Thread)
public class Offsets {
    private final static int MAX_OFFSET = 3;
    @Param({"0", "1", "2", "3"})
    public int offset;

    private FloatVector.FloatSpecies PFS;
    private float x[];

    @Setup(Level.Trial)
    public void Setup() {
        PFS = FloatVector.preferredSpecies();
        x = new float[PFS.length() + MAX_OFFSET];

        for (int i = 0; i < x.length; i++) {
            x[i] = (float)(Math.random() * 2.0 - 1.0);
        }
    }


    @Benchmark
    public void load(Blackhole bh) {
        bh.consume(FloatVector.fromArray(PFS, x, offset));
    }
}

And on my simple i5-4570 results are statistically indistinguishable:

"Benchmark","Mode","Threads","Samples","Score","Score Error
(99.9%)","Unit","Param: offset"
"vector.Offsets.load","thrpt",1,20,101208526.657987,507208.244813,"ops/s",0
"vector.Offsets.load","thrpt",1,20,100728106.976688,642531.858346,"ops/s",1
"vector.Offsets.load","thrpt",1,20,101138279.385919,612415.941923,"ops/s",2
"vector.Offsets.load","thrpt",1,20,101107836.257976,653766.103615,"ops/s",3

To be honest, I'm surprised. I've tried turn off compressed oops and set
large objects alignment (16 bytes), it doesn't matter, too

-- 
// Black Lion AKA Lev Serebryakov



More information about the panama-dev mailing list