Java 16 er på gaden med vektor-beregninger

Illustration: mkabakov/Bigstock
Vektor-beregninger på cpu’en er blandt nyhederne i det objektorienterede sprog.

En ny udgave af programmeringssproget Java er netop blevet udsendt. Den bærer versionsnummeret 16, og er ikke en long term edition - en udgave med lang levetid.

Blandt nyhederne er et api til at udnytte cpu’ers faciliteter til at udføre vektorberegninger hurtigere end med almindelig aritmetik. Der er ikke tale om at understøtte gpu’er, som ellers ofte anvendes til beregninger med vektorer, men instruktioner til cpu’er med x64- og ARM AArch64-arkitekturer.

Faciliteten hedder SIMD (Single Instruction Multiple Data), og går ud på at de enkelte tal i en vektor alle beregnes med samme operationer sideløbende i såkaldte hardwaredefinerede vektorbaner.

Uden et vektor-api kan en sådan beregning se således ud:

void scalarComputation(float[] a, float[] b, float[] c) {
   for (int i = 0; i < a.length; i++) {
        c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
   }
}

Med det nye api, som stadig er ganske ungt og endnu ikke i en færdig udgave, kan beregningen udføres således:

static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_256;
 
void vectorComputation(float[] a, float[] b, float[] c) {
 
    for (int i = 0; i < a.length; i += SPECIES.length()) {
        var m = SPECIES.indexInRange(i, a.length);
        // FloatVector va, vb, vc;
        var va = FloatVector.fromArray(SPECIES, a, i, m);
        var vb = FloatVector.fromArray(SPECIES, b, i, m);
        var vc = va.mul(va).
                    add(vb.mul(vb)).
                    neg();
        vc.intoArray(c, i, m);
    }
}

Læs også: Her er nyhederne i Java 16: Vektor-beregninger på cpu'en

Derudover er records og indledende pattern matching med instanceof-operatoren klar til brug og ikke længere i preview-versioner.

Læs også: Poster til tiden: Her er nyhederne i Java 14

Sealed classes, som gør det muligt for en klasse at udpege præcist de subklasser, der må nedarve, og ingen andre, kommer nu i andet preview

Læs også: Her er nyhederne i Java 15: Koden gemmes i forseglede og skjulte klasser

Blandt andre nyheder er et api til interoperabilitet med C og andre hjemmefødte sprog, som er inspireret af tilsvarende muligheder i Python og Rust, hvor funktioner i C kan pakkes ind uden klister-kode.

Et api til adgang af hukommelse uden for den virtuelle maskine er nu i tredje incubator-udgave.

I selve runtimen bliver C++ 14 platformen fremover. JDK’et udvikles nu til to nye platforme: Den ene er Windows på ARM-arkitektur, og den anden er Alpine Linux, som dog ikke er testet nok til at være moden til produktion på nuværende tidspunkt.

Der er efterhånden mange builds af OpenJDK, som er open source-udgaven af udviklings- og afviklingsmiljøet. En liste kan findes på Wikipedia.

Næste udgave af Java, version 17, tilrettelægges til sommer og er en long term edition.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (0)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Log ind eller Opret konto for at kommentere