VectorOperators

mr.kernel

Mitglied
Hallo!

Ich versuche folgenden Skalaren Code

Java:
int red = (color & 0xFF0000) >> 16;

in Vektor Code

Java:
var red = color.lanewise(VectorOperators.AND, 0xFF0000);
red = red.lanewise(VectorOperators.ASHR, 16);

umzuwandeln.

Leider klappt das nicht so wie es soll.
Scheinbar wird nicht das bitweise UND ausgeführt.
Kann mir da jemand weiterhelfen?
 

ByteBitch

Mitglied
Verzeihung, es war alles richtig, du musst nur die richtige Lane abgreifen:

Java:
    public static int red(IntVector color) {
        System.out.println(color);
        var red = color.lanewise(VectorOperators.AND, 0xFF0000);
        System.out.println(red);
        red = red.lanewise(VectorOperators.ASHR, 16);
        System.out.println(red);
        return red.lane(1);
    }

    public static void main(String[] args) {
        System.out.printf("0x%X%n", red(IntVector.fromArray(IntVector.SPECIES_64, new int[]{0, 0x12345678}, 0)));
    }

Das gibt dir 0x34 aus, der Wert für Rot.

Auch wichtig:

Code:
compileJava {
    options.compilerArgs.addAll(['--release', '23'])
    options.compilerArgs.addAll(['--enable-preview'])
    options.compilerArgs.addAll(['--add-modules', 'jdk.incubator.vector'])
}

application {
    applicationDefaultJvmArgs = ['--enable-preview',
                                 '--add-modules', 'jdk.incubator.vector']
}
 

mr.kernel

Mitglied
Verzeihung, es war alles richtig, du musst nur die richtige Lane abgreifen:

Java:
    public static int red(IntVector color) {
        System.out.println(color);
        var red = color.lanewise(VectorOperators.AND, 0xFF0000);
        System.out.println(red);
        red = red.lanewise(VectorOperators.ASHR, 16);
        System.out.println(red);
        return red.lane(1);
    }

    public static void main(String[] args) {
        System.out.printf("0x%X%n", red(IntVector.fromArray(IntVector.SPECIES_64, new int[]{0, 0x12345678}, 0)));
    }

Das gibt dir 0x34 aus, der Wert für Rot.

Auch wichtig:

Code:
compileJava {
    options.compilerArgs.addAll(['--release', '23'])
    options.compilerArgs.addAll(['--enable-preview'])
    options.compilerArgs.addAll(['--add-modules', 'jdk.incubator.vector'])
}

application {
    applicationDefaultJvmArgs = ['--enable-preview',
                                 '--add-modules', 'jdk.incubator.vector']
}

Danke dir, Ich hab mittlerweile gemerkt dass der Fehler woanders liegt :rolleyes:

Kann mir jemand auch helfen folgendes zu vektorisieren?
Java:
for (i = 0; i < tresholds.length - 1; ++i) {
                            if (redint > tresholds[i] && tresholds[i + 1] > redint) {
                                redint = tresholds[i];
                            }
                        }
 

mr.kernel

Mitglied
Schade dass ihr nur die Sinnhaftigkeit hinterfragt, die Vektor Erweiterung wurde ja nicht umsonst entwickelt.

Für die beiden Bedingungen
Java:
for (i = 0; i < tresholds.length - 1; ++i) {
    if (redint > tresholds[i] && tresholds[i + 1] > redint) {
        redint = tresholds[i];
    }
}

habe ich Masken erstellt:
Java:
VectorMask<Integer> maskredgt = red.compare(VectorOperators.GT, tresholds[j]);
VectorMask<Integer> maskredlt = red.compare(VectorOperators.LT, tresholds[j + 1] );
ich verzweifle "nur" daran diese beiden Masken zu kombinieren (UND Verknüpfen) damit dann die Lane auf den Wert tresholds gesetzt wird.
 

Oneixee5

Top Contributor
Schade dass ihr nur die Sinnhaftigkeit hinterfragt, die Vektor Erweiterung wurde ja nicht umsonst entwickelt.

Für die beiden Bedingungen
Java:
for (i = 0; i < tresholds.length - 1; ++i) {
    if (redint > tresholds[i] && tresholds[i + 1] > redint) {
        redint = tresholds[i];
    }
}

habe ich Masken erstellt:
Java:
VectorMask<Integer> maskredgt = red.compare(VectorOperators.GT, tresholds[j]);
VectorMask<Integer> maskredlt = red.compare(VectorOperators.LT, tresholds[j + 1] );
ich verzweifle "nur" daran diese beiden Masken zu kombinieren (UND Verknüpfen) damit dann die Lane auf den Wert tresholds gesetzt wird.
Ich finde es ganz interessant, habe nur leider keine Ahnung davon.
 

Neue Themen


Oben