FloatVector.frink

Download or view FloatVector.frink in plain text format


/** Test of vectorizing operations with Java's jdk.incubator.vector classes.

    You need to use this with a later version of Java and add the following
    to your java invocation line:

    --add-modules jdk.incubator.vector --add-opens=jdk.incubator.vector/jdk.incubator.vector=ALL-UNNAMED

    And maybe we should add:
   -XX:-UseSuperWord

    (see https://medium.com/@tomerr90/javas-new-vector-api-how-fast-is-it-part-1-1b4c2b573610 )

    Vector API:

    https://docs.oracle.com/en/java/javase/23/docs/api/jdk.incubator.vector/jdk/incubator/vector/package-summary.html
*/


// Note that if len is not a multiple of species.length[] then the last items
// don't get done.  You have to write your code twice.  All of this is lame.
len = 10001
a = toArray[1 to len]
startb = 2
b = toArray[startb to startb+len-1]

species = staticJava["jdk.incubator.vector.FloatVector", "SPECIES_PREFERRED"]
println[species.toString[]]

i = 0
la = length[a]
ila = newJava["java.lang.Long", la]  // This lets the next line disambiguate between
                                     // loopBound[int] and loopBound[long]
upperBound = species.loopBound[ila]
println["upperBound is $upperBound"]

c = newJavaArray["float", [la]]
il = species.length[]
println["il is $il"] 

while i < upperBound

   fa = callJava["jdk.incubator.vector.FloatVector", "fromArray", [species, a, i]]
   fb = callJava["jdk.incubator.vector.FloatVector", "fromArray", [species, b, i]]
   fc = fa.add[fb]
   fc.intoArray[c, i]
   i = i + il
}

println[first[c, 10]]
println[last[c,8]]


Download or view FloatVector.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen, eliasen@mindspring.com