45 private static short [] sout;
46 private static short [] sinp;
47 private static float [] fout;
48
49 public static void main(String args[]) {
50 TestFramework framework = new TestFramework(TestFloatConversionsVector.class);
51 framework.addFlags("-XX:-TieredCompilation", "-XX:CompileThresholdScaling=0.3");
52 switch (args[0]) {
53 case "nCOH_nAV" -> { framework.addFlags("-XX:+UnlockExperimentalVMOptions", "-XX:-UseCompactObjectHeaders", "-XX:-AlignVector"); }
54 case "nCOH_yAV" -> { framework.addFlags("-XX:+UnlockExperimentalVMOptions", "-XX:-UseCompactObjectHeaders", "-XX:+AlignVector"); }
55 case "yCOH_nAV" -> { framework.addFlags("-XX:+UnlockExperimentalVMOptions", "-XX:+UseCompactObjectHeaders", "-XX:-AlignVector"); }
56 case "yCOH_yAV" -> { framework.addFlags("-XX:+UnlockExperimentalVMOptions", "-XX:+UseCompactObjectHeaders", "-XX:+AlignVector"); }
57 default -> { throw new RuntimeException("Test argument not recognized: " + args[0]); }
58 };
59 framework.start();
60 System.out.println("PASSED");
61 }
62
63 @Test
64 @IR(counts = {IRNode.VECTOR_CAST_F2HF, IRNode.VECTOR_SIZE + "min(max_float, max_short)", "> 0"},
65 applyIfOr = {"UseCompactObjectHeaders", "false", "AlignVector", "false"},
66 applyIfPlatformOr = {"x64", "true", "aarch64", "true", "riscv64", "true"},
67 applyIfCPUFeatureOr = {"f16c", "true", "avx512f", "true", "zvfh", "true", "asimd", "true", "sve", "true"})
68 public void test_float_float16(short[] sout, float[] finp) {
69 for (int i = 0; i < finp.length; i++) {
70 sout[i] = Float.floatToFloat16(finp[i]);
71 // With AlignVector, we need 8-byte alignment of vector loads/stores.
72 // UseCompactObjectHeaders=false UseCompactObjectHeaders=true
73 // F_adr = base + 16 + 4*i -> i % 2 = 0 F_adr = base + 12 + 4*i -> i % 2 = 1
74 // S_adr = base + 16 + 2*i -> i % 4 = 0 S_adr = base + 12 + 2*i -> i % 4 = 2
75 // -> vectorize -> no vectorization
76 }
77 }
78
79 @Test
80 public void test_float_float16_strided(short[] sout, float[] finp) {
81 for (int i = 0; i < finp.length/2; i++) {
82 sout[i*2] = Float.floatToFloat16(finp[i*2]);
83 }
84 }
85
86 @Test
87 public void test_float_float16_short_vector(short[] sout, float[] finp) {
88 for (int i = 0; i < finp.length; i+= 4) {
89 sout[i+0] = Float.floatToFloat16(finp[i+0]);
90 sout[i+1] = Float.floatToFloat16(finp[i+1]);
91 }
92 }
93
94 @Run(test = {"test_float_float16", "test_float_float16_strided",
95 "test_float_float16_short_vector"}, mode = RunMode.STANDALONE)
114 test_float_float16_strided(sout, finp);
115 }
116
117 // Verifying the result
118 for (int i = 0; i < ARRLEN/2; i++) {
119 Asserts.assertEquals(Float.floatToFloat16(finp[i*2]), sout[i*2]);
120 }
121
122 for (int i = 0; i < ITERS; i++) {
123 test_float_float16_short_vector(sout, finp);
124 }
125
126 // Verifying the result
127 for (int i = 0; i < ARRLEN; i++) {
128 Asserts.assertEquals(Float.floatToFloat16(finp[i]), sout[i]);
129 }
130 }
131
132 @Test
133 @IR(counts = {IRNode.VECTOR_CAST_HF2F, IRNode.VECTOR_SIZE + "min(max_float, max_short)", "> 0"},
134 applyIfOr = {"UseCompactObjectHeaders", "false", "AlignVector", "false"},
135 applyIfPlatformOr = {"x64", "true", "aarch64", "true", "riscv64", "true"},
136 applyIfCPUFeatureOr = {"f16c", "true", "avx512f", "true", "zvfh", "true", "asimd", "true", "sve", "true"})
137 public void test_float16_float(float[] fout, short[] sinp) {
138 for (int i = 0; i < sinp.length; i++) {
139 fout[i] = Float.float16ToFloat(sinp[i]);
140 // With AlignVector, we need 8-byte alignment of vector loads/stores.
141 // UseCompactObjectHeaders=false UseCompactObjectHeaders=true
142 // F_adr = base + 16 + 4*i -> i % 2 = 0 F_adr = base + 12 + 4*i -> i % 2 = 1
143 // S_adr = base + 16 + 2*i -> i % 4 = 0 S_adr = base + 12 + 2*i -> i % 4 = 2
144 // -> vectorize -> no vectorization
145 }
146 }
147
148 @Test
149 public void test_float16_float_strided(float[] fout, short[] sinp) {
150 for (int i = 0; i < sinp.length/2; i++) {
151 fout[i*2] = Float.float16ToFloat(sinp[i*2]);
152 }
153 }
154
155 @Run(test = {"test_float16_float", "test_float16_float_strided"}, mode = RunMode.STANDALONE)
156 public void kernel_test_float16_float() {
157 sinp = new short[ARRLEN];
158 fout = new float[ARRLEN];
159
160 for (int i = 0; i < ARRLEN; i++) {
161 sinp[i] = (short)i;
162 }
163
164 for (int i = 0; i < ITERS; i++) {
|
45 private static short [] sout;
46 private static short [] sinp;
47 private static float [] fout;
48
49 public static void main(String args[]) {
50 TestFramework framework = new TestFramework(TestFloatConversionsVector.class);
51 framework.addFlags("-XX:-TieredCompilation", "-XX:CompileThresholdScaling=0.3");
52 switch (args[0]) {
53 case "nCOH_nAV" -> { framework.addFlags("-XX:+UnlockExperimentalVMOptions", "-XX:-UseCompactObjectHeaders", "-XX:-AlignVector"); }
54 case "nCOH_yAV" -> { framework.addFlags("-XX:+UnlockExperimentalVMOptions", "-XX:-UseCompactObjectHeaders", "-XX:+AlignVector"); }
55 case "yCOH_nAV" -> { framework.addFlags("-XX:+UnlockExperimentalVMOptions", "-XX:+UseCompactObjectHeaders", "-XX:-AlignVector"); }
56 case "yCOH_yAV" -> { framework.addFlags("-XX:+UnlockExperimentalVMOptions", "-XX:+UseCompactObjectHeaders", "-XX:+AlignVector"); }
57 default -> { throw new RuntimeException("Test argument not recognized: " + args[0]); }
58 };
59 framework.start();
60 System.out.println("PASSED");
61 }
62
63 @Test
64 @IR(counts = {IRNode.VECTOR_CAST_F2HF, IRNode.VECTOR_SIZE + "min(max_float, max_short)", "> 0"},
65 applyIfPlatformOr = {"x64", "true", "aarch64", "true", "riscv64", "true"},
66 applyIfCPUFeatureOr = {"f16c", "true", "avx512f", "true", "zvfh", "true", "asimd", "true", "sve", "true"})
67 public void test_float_float16(short[] sout, float[] finp) {
68 for (int i = 0; i < finp.length; i++) {
69 sout[i] = Float.floatToFloat16(finp[i]);
70 }
71 }
72
73 @Test
74 public void test_float_float16_strided(short[] sout, float[] finp) {
75 for (int i = 0; i < finp.length/2; i++) {
76 sout[i*2] = Float.floatToFloat16(finp[i*2]);
77 }
78 }
79
80 @Test
81 public void test_float_float16_short_vector(short[] sout, float[] finp) {
82 for (int i = 0; i < finp.length; i+= 4) {
83 sout[i+0] = Float.floatToFloat16(finp[i+0]);
84 sout[i+1] = Float.floatToFloat16(finp[i+1]);
85 }
86 }
87
88 @Run(test = {"test_float_float16", "test_float_float16_strided",
89 "test_float_float16_short_vector"}, mode = RunMode.STANDALONE)
108 test_float_float16_strided(sout, finp);
109 }
110
111 // Verifying the result
112 for (int i = 0; i < ARRLEN/2; i++) {
113 Asserts.assertEquals(Float.floatToFloat16(finp[i*2]), sout[i*2]);
114 }
115
116 for (int i = 0; i < ITERS; i++) {
117 test_float_float16_short_vector(sout, finp);
118 }
119
120 // Verifying the result
121 for (int i = 0; i < ARRLEN; i++) {
122 Asserts.assertEquals(Float.floatToFloat16(finp[i]), sout[i]);
123 }
124 }
125
126 @Test
127 @IR(counts = {IRNode.VECTOR_CAST_HF2F, IRNode.VECTOR_SIZE + "min(max_float, max_short)", "> 0"},
128 applyIfPlatformOr = {"x64", "true", "aarch64", "true", "riscv64", "true"},
129 applyIfCPUFeatureOr = {"f16c", "true", "avx512f", "true", "zvfh", "true", "asimd", "true", "sve", "true"})
130 public void test_float16_float(float[] fout, short[] sinp) {
131 for (int i = 0; i < sinp.length; i++) {
132 fout[i] = Float.float16ToFloat(sinp[i]);
133 }
134 }
135
136 @Test
137 public void test_float16_float_strided(float[] fout, short[] sinp) {
138 for (int i = 0; i < sinp.length/2; i++) {
139 fout[i*2] = Float.float16ToFloat(sinp[i*2]);
140 }
141 }
142
143 @Run(test = {"test_float16_float", "test_float16_float_strided"}, mode = RunMode.STANDALONE)
144 public void kernel_test_float16_float() {
145 sinp = new short[ARRLEN];
146 fout = new float[ARRLEN];
147
148 for (int i = 0; i < ARRLEN; i++) {
149 sinp[i] = (short)i;
150 }
151
152 for (int i = 0; i < ITERS; i++) {
|