From d019388034471afba465ceadc2559f744b7c7b67 Mon Sep 17 00:00:00 2001 From: Denny Sheirer Date: Fri, 9 Feb 2024 10:39:46 -0500 Subject: [PATCH] 1826 Vector Oscillator fails to generate MPT1327 correlator reference samples on SIMD-512 machines. (#1832) Co-authored-by: Dennis Sheirer --- .../dsp/oscillator/VectorRealOscillator.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/dsheirer/dsp/oscillator/VectorRealOscillator.java b/src/main/java/io/github/dsheirer/dsp/oscillator/VectorRealOscillator.java index f9dd5523..42a592f2 100644 --- a/src/main/java/io/github/dsheirer/dsp/oscillator/VectorRealOscillator.java +++ b/src/main/java/io/github/dsheirer/dsp/oscillator/VectorRealOscillator.java @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2014-2022 Dennis Sheirer + * Copyright (C) 2014-2024 Dennis Sheirer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ package io.github.dsheirer.dsp.oscillator; +import java.util.Arrays; import jdk.incubator.vector.FloatVector; import jdk.incubator.vector.VectorOperators; import jdk.incubator.vector.VectorSpecies; @@ -45,7 +46,15 @@ public class VectorRealOscillator extends AbstractOscillator implements IRealOsc @Override public float[] generate(int sampleCount) { - float[] samples = new float[sampleCount]; + int length = sampleCount; + + //Increase the length until it aligns as a multiple of the vector species length + while(length % VECTOR_SPECIES.length() != 0) + { + length++; + } + + float[] samples = new float[length]; for(int samplePointer = 0; samplePointer < sampleCount; samplePointer += VECTOR_SPECIES.length()) { @@ -58,6 +67,7 @@ public class VectorRealOscillator extends AbstractOscillator implements IRealOsc generated.intoArray(samples, samplePointer); } - return samples; + //Truncate the array to the requested length, if we increased it for SIMD alignment. + return Arrays.copyOf(samples, sampleCount); } }