Java 16 er på gaden med vektor-beregninger

17. marts 2021 kl. 08:43
Java 16 er på gaden med vektor-beregninger
Illustration: mkabakov/Bigstock.
Vektor-beregninger på cpu’en er blandt nyhederne i det objektorienterede sprog.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

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:

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

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

  1. static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_256;
  2.  
  3. void vectorComputation(float[] a, float[] b, float[] c) {
  4.  
  5. for (int i = 0; i < a.length; i += SPECIES.length()) {
  6. var m = SPECIES.indexInRange(i, a.length);
  7. // FloatVector va, vb, vc;
  8. var va = FloatVector.fromArray(SPECIES, a, i, m);
  9. var vb = FloatVector.fromArray(SPECIES, b, i, m);
  10. var vc = va.mul(va).
  11. add(vb.mul(vb)).
  12. neg();
  13. vc.intoArray(c, i, m);
  14. }
  15. }

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

Artiklen fortsætter efter annoncen

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

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.

Artiklen fortsætter efter annoncen

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.

Ingen kommentarer endnu.  Start debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger