1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| public class AdvancedVectorMath {
public void complexNumberOperations() { float[] realParts = {1.0f, 2.0f, 3.0f, 4.0f}; float[] imagParts = {0.5f, 1.5f, 2.5f, 3.5f};
Vector<Float> real = FloatVector.fromArray(FloatVector.SPECIES_PREFERRED, realParts, 0); Vector<Float> imag = FloatVector.fromArray(FloatVector.SPECIES_PREFERRED, imagParts, 0);
Vector<Float> ac = real.mul(real); Vector<Float> bd = imag.mul(imag); Vector<Float> ad = real.mul(imag); Vector<Float> bc = imag.mul(real);
Vector<Float> realResult = ac.sub(bd); Vector<Float> imagResult = ad.add(bc);
System.out.println("Complex multiplication result: " + realResult + " + " + imagResult + "i"); }
public void matrixOperations() { float[] matrixA = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
float[] matrixB = { 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
float[] result = new float[16]; performVectorizedMatrixMult(matrixA, matrixB, result);
System.out.println("Matrix multiplication completed with vectors"); }
private void performVectorizedMatrixMult(float[] a, float[] b, float[] c) { VectorSpecies<Float> species = FloatVector.SPECIES_PREFERRED; int vectorLength = species.vectorBitSize() / 32;
for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j += vectorLength) { FloatVector rowA = FloatVector.fromArray(species, a, i * 4 + j);
FloatVector result = FloatVector.zero(species);
for (int k = 0; k < 4; k++) { FloatVector colB = FloatVector.broadcast(species, b[k * 4 + j]); result = result.add(rowA.mul(colB)); }
result.intoArray(c, i * 4 + j); } } } }
|