1 /* 2 * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 package org.openjdk.bench.jdk.incubator.vector.operation; 25 26 // -- This file was mechanically generated: Do not edit! -- // 27 28 import jdk.incubator.vector.Vector; 29 import jdk.incubator.vector.VectorMask; 30 import jdk.incubator.vector.VectorOperators; 31 import jdk.incubator.vector.VectorShape; 32 import jdk.incubator.vector.VectorSpecies; 33 import jdk.incubator.vector.VectorShuffle; 34 import jdk.incubator.vector.FloatVector; 35 36 import java.util.concurrent.TimeUnit; 37 import java.util.function.BiFunction; 38 import java.util.function.IntFunction; 39 40 import org.openjdk.jmh.annotations.*; 41 import org.openjdk.jmh.infra.Blackhole; 42 43 @BenchmarkMode(Mode.Throughput) 44 @OutputTimeUnit(TimeUnit.MILLISECONDS) 45 @State(Scope.Benchmark) 46 @Warmup(iterations = 3, time = 1) 47 @Measurement(iterations = 5, time = 1) 48 @Fork(value = 1, jvmArgsPrepend = {"--add-modules=jdk.incubator.vector"}) 49 public class Float128Vector extends AbstractVectorBenchmark { 50 static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_128; 51 52 static final int INVOC_COUNT = 1; // get rid of outer loop 53 54 55 static float firstNonZero(float a, float b) { 56 return Float.compare(a, (float) 0) != 0 ? a : b; 57 } 58 59 60 @Param("1024") 61 int size; 62 63 float[] fill(IntFunction<Float> f) { 64 float[] array = new float[size]; 65 for (int i = 0; i < array.length; i++) { 66 array[i] = f.apply(i); 67 } 68 return array; 69 } 70 71 float[] a, b, c, r; 72 boolean[] m, mt, rm; 73 int[] s; 74 75 @Setup 76 public void init() { 77 size += size % SPECIES.length(); // FIXME: add post-loops 78 79 a = fill(i -> (float)(2*i)); 80 b = fill(i -> (float)(i+1)); 81 c = fill(i -> (float)(i+5)); 82 r = fill(i -> (float)0); 83 84 m = fillMask(size, i -> (i % 2) == 0); 85 mt = fillMask(size, i -> true); 86 rm = fillMask(size, i -> false); 87 88 s = fillInt(size, i -> RAND.nextInt(SPECIES.length())); 89 } 90 91 final IntFunction<float[]> fa = vl -> a; 92 final IntFunction<float[]> fb = vl -> b; 93 final IntFunction<float[]> fc = vl -> c; 94 final IntFunction<float[]> fr = vl -> r; 95 final IntFunction<boolean[]> fm = vl -> m; 96 final IntFunction<boolean[]> fmt = vl -> mt; 97 final IntFunction<boolean[]> fmr = vl -> rm; 98 final BiFunction<Integer,Integer,int[]> fs = (i,j) -> s; 99 100 101 @Benchmark 102 public void ADD(Blackhole bh) { 103 float[] a = fa.apply(SPECIES.length()); 104 float[] b = fb.apply(SPECIES.length()); 105 float[] r = fr.apply(SPECIES.length()); 106 107 for (int ic = 0; ic < INVOC_COUNT; ic++) { 108 for (int i = 0; i < a.length; i += SPECIES.length()) { 109 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 110 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 111 av.lanewise(VectorOperators.ADD, bv).intoArray(r, i); 112 } 113 } 114 115 bh.consume(r); 116 } 117 118 @Benchmark 119 public void ADDMasked(Blackhole bh) { 120 float[] a = fa.apply(SPECIES.length()); 121 float[] b = fb.apply(SPECIES.length()); 122 float[] r = fr.apply(SPECIES.length()); 123 boolean[] mask = fm.apply(SPECIES.length()); 124 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 125 126 for (int ic = 0; ic < INVOC_COUNT; ic++) { 127 for (int i = 0; i < a.length; i += SPECIES.length()) { 128 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 129 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 130 av.lanewise(VectorOperators.ADD, bv, vmask).intoArray(r, i); 131 } 132 } 133 134 bh.consume(r); 135 } 136 137 @Benchmark 138 public void SUB(Blackhole bh) { 139 float[] a = fa.apply(SPECIES.length()); 140 float[] b = fb.apply(SPECIES.length()); 141 float[] r = fr.apply(SPECIES.length()); 142 143 for (int ic = 0; ic < INVOC_COUNT; ic++) { 144 for (int i = 0; i < a.length; i += SPECIES.length()) { 145 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 146 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 147 av.lanewise(VectorOperators.SUB, bv).intoArray(r, i); 148 } 149 } 150 151 bh.consume(r); 152 } 153 154 @Benchmark 155 public void SUBMasked(Blackhole bh) { 156 float[] a = fa.apply(SPECIES.length()); 157 float[] b = fb.apply(SPECIES.length()); 158 float[] r = fr.apply(SPECIES.length()); 159 boolean[] mask = fm.apply(SPECIES.length()); 160 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 161 162 for (int ic = 0; ic < INVOC_COUNT; ic++) { 163 for (int i = 0; i < a.length; i += SPECIES.length()) { 164 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 165 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 166 av.lanewise(VectorOperators.SUB, bv, vmask).intoArray(r, i); 167 } 168 } 169 170 bh.consume(r); 171 } 172 173 @Benchmark 174 public void MUL(Blackhole bh) { 175 float[] a = fa.apply(SPECIES.length()); 176 float[] b = fb.apply(SPECIES.length()); 177 float[] r = fr.apply(SPECIES.length()); 178 179 for (int ic = 0; ic < INVOC_COUNT; ic++) { 180 for (int i = 0; i < a.length; i += SPECIES.length()) { 181 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 182 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 183 av.lanewise(VectorOperators.MUL, bv).intoArray(r, i); 184 } 185 } 186 187 bh.consume(r); 188 } 189 190 @Benchmark 191 public void MULMasked(Blackhole bh) { 192 float[] a = fa.apply(SPECIES.length()); 193 float[] b = fb.apply(SPECIES.length()); 194 float[] r = fr.apply(SPECIES.length()); 195 boolean[] mask = fm.apply(SPECIES.length()); 196 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 197 198 for (int ic = 0; ic < INVOC_COUNT; ic++) { 199 for (int i = 0; i < a.length; i += SPECIES.length()) { 200 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 201 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 202 av.lanewise(VectorOperators.MUL, bv, vmask).intoArray(r, i); 203 } 204 } 205 206 bh.consume(r); 207 } 208 209 @Benchmark 210 public void DIV(Blackhole bh) { 211 float[] a = fa.apply(SPECIES.length()); 212 float[] b = fb.apply(SPECIES.length()); 213 float[] r = fr.apply(SPECIES.length()); 214 215 for (int ic = 0; ic < INVOC_COUNT; ic++) { 216 for (int i = 0; i < a.length; i += SPECIES.length()) { 217 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 218 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 219 av.lanewise(VectorOperators.DIV, bv).intoArray(r, i); 220 } 221 } 222 223 bh.consume(r); 224 } 225 226 @Benchmark 227 public void DIVMasked(Blackhole bh) { 228 float[] a = fa.apply(SPECIES.length()); 229 float[] b = fb.apply(SPECIES.length()); 230 float[] r = fr.apply(SPECIES.length()); 231 boolean[] mask = fm.apply(SPECIES.length()); 232 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 233 234 for (int ic = 0; ic < INVOC_COUNT; ic++) { 235 for (int i = 0; i < a.length; i += SPECIES.length()) { 236 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 237 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 238 av.lanewise(VectorOperators.DIV, bv, vmask).intoArray(r, i); 239 } 240 } 241 242 bh.consume(r); 243 } 244 245 @Benchmark 246 public void FIRST_NONZERO(Blackhole bh) { 247 float[] a = fa.apply(SPECIES.length()); 248 float[] b = fb.apply(SPECIES.length()); 249 float[] r = fr.apply(SPECIES.length()); 250 251 for (int ic = 0; ic < INVOC_COUNT; ic++) { 252 for (int i = 0; i < a.length; i += SPECIES.length()) { 253 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 254 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 255 av.lanewise(VectorOperators.FIRST_NONZERO, bv).intoArray(r, i); 256 } 257 } 258 259 bh.consume(r); 260 } 261 262 @Benchmark 263 public void FIRST_NONZEROMasked(Blackhole bh) { 264 float[] a = fa.apply(SPECIES.length()); 265 float[] b = fb.apply(SPECIES.length()); 266 float[] r = fr.apply(SPECIES.length()); 267 boolean[] mask = fm.apply(SPECIES.length()); 268 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 269 270 for (int ic = 0; ic < INVOC_COUNT; ic++) { 271 for (int i = 0; i < a.length; i += SPECIES.length()) { 272 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 273 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 274 av.lanewise(VectorOperators.FIRST_NONZERO, bv, vmask).intoArray(r, i); 275 } 276 } 277 278 bh.consume(r); 279 } 280 281 @Benchmark 282 public void MIN(Blackhole bh) { 283 float[] a = fa.apply(SPECIES.length()); 284 float[] b = fb.apply(SPECIES.length()); 285 float[] r = fr.apply(SPECIES.length()); 286 287 for (int ic = 0; ic < INVOC_COUNT; ic++) { 288 for (int i = 0; i < a.length; i += SPECIES.length()) { 289 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 290 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 291 av.lanewise(VectorOperators.MIN, bv).intoArray(r, i); 292 } 293 } 294 295 bh.consume(r); 296 } 297 298 @Benchmark 299 public void MAX(Blackhole bh) { 300 float[] a = fa.apply(SPECIES.length()); 301 float[] b = fb.apply(SPECIES.length()); 302 float[] r = fr.apply(SPECIES.length()); 303 304 for (int ic = 0; ic < INVOC_COUNT; ic++) { 305 for (int i = 0; i < a.length; i += SPECIES.length()) { 306 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 307 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 308 av.lanewise(VectorOperators.MAX, bv).intoArray(r, i); 309 } 310 } 311 312 bh.consume(r); 313 } 314 315 @Benchmark 316 public void ADDLanes(Blackhole bh) { 317 float[] a = fa.apply(SPECIES.length()); 318 float ra = 0; 319 320 for (int ic = 0; ic < INVOC_COUNT; ic++) { 321 ra = 0; 322 for (int i = 0; i < a.length; i += SPECIES.length()) { 323 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 324 ra += av.reduceLanes(VectorOperators.ADD); 325 } 326 } 327 bh.consume(ra); 328 } 329 330 @Benchmark 331 public void ADDMaskedLanes(Blackhole bh) { 332 float[] a = fa.apply(SPECIES.length()); 333 boolean[] mask = fm.apply(SPECIES.length()); 334 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 335 float ra = 0; 336 337 for (int ic = 0; ic < INVOC_COUNT; ic++) { 338 ra = 0; 339 for (int i = 0; i < a.length; i += SPECIES.length()) { 340 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 341 ra += av.reduceLanes(VectorOperators.ADD, vmask); 342 } 343 } 344 bh.consume(ra); 345 } 346 347 @Benchmark 348 public void MULLanes(Blackhole bh) { 349 float[] a = fa.apply(SPECIES.length()); 350 float ra = 1; 351 352 for (int ic = 0; ic < INVOC_COUNT; ic++) { 353 ra = 1; 354 for (int i = 0; i < a.length; i += SPECIES.length()) { 355 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 356 ra *= av.reduceLanes(VectorOperators.MUL); 357 } 358 } 359 bh.consume(ra); 360 } 361 362 @Benchmark 363 public void MULMaskedLanes(Blackhole bh) { 364 float[] a = fa.apply(SPECIES.length()); 365 boolean[] mask = fm.apply(SPECIES.length()); 366 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 367 float ra = 1; 368 369 for (int ic = 0; ic < INVOC_COUNT; ic++) { 370 ra = 1; 371 for (int i = 0; i < a.length; i += SPECIES.length()) { 372 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 373 ra *= av.reduceLanes(VectorOperators.MUL, vmask); 374 } 375 } 376 bh.consume(ra); 377 } 378 379 @Benchmark 380 public void MINLanes(Blackhole bh) { 381 float[] a = fa.apply(SPECIES.length()); 382 float ra = Float.POSITIVE_INFINITY; 383 384 for (int ic = 0; ic < INVOC_COUNT; ic++) { 385 ra = Float.POSITIVE_INFINITY; 386 for (int i = 0; i < a.length; i += SPECIES.length()) { 387 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 388 ra = (float) Math.min(ra, av.reduceLanes(VectorOperators.MIN)); 389 } 390 } 391 bh.consume(ra); 392 } 393 394 @Benchmark 395 public void MINMaskedLanes(Blackhole bh) { 396 float[] a = fa.apply(SPECIES.length()); 397 boolean[] mask = fm.apply(SPECIES.length()); 398 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 399 float ra = Float.POSITIVE_INFINITY; 400 401 for (int ic = 0; ic < INVOC_COUNT; ic++) { 402 ra = Float.POSITIVE_INFINITY; 403 for (int i = 0; i < a.length; i += SPECIES.length()) { 404 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 405 ra = (float) Math.min(ra, av.reduceLanes(VectorOperators.MIN, vmask)); 406 } 407 } 408 bh.consume(ra); 409 } 410 411 @Benchmark 412 public void MAXLanes(Blackhole bh) { 413 float[] a = fa.apply(SPECIES.length()); 414 float ra = Float.NEGATIVE_INFINITY; 415 416 for (int ic = 0; ic < INVOC_COUNT; ic++) { 417 ra = Float.NEGATIVE_INFINITY; 418 for (int i = 0; i < a.length; i += SPECIES.length()) { 419 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 420 ra = (float) Math.max(ra, av.reduceLanes(VectorOperators.MAX)); 421 } 422 } 423 bh.consume(ra); 424 } 425 426 @Benchmark 427 public void MAXMaskedLanes(Blackhole bh) { 428 float[] a = fa.apply(SPECIES.length()); 429 boolean[] mask = fm.apply(SPECIES.length()); 430 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 431 float ra = Float.NEGATIVE_INFINITY; 432 433 for (int ic = 0; ic < INVOC_COUNT; ic++) { 434 ra = Float.NEGATIVE_INFINITY; 435 for (int i = 0; i < a.length; i += SPECIES.length()) { 436 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 437 ra = (float) Math.max(ra, av.reduceLanes(VectorOperators.MAX, vmask)); 438 } 439 } 440 bh.consume(ra); 441 } 442 443 @Benchmark 444 public void FIRST_NONZEROLanes(Blackhole bh) { 445 float[] a = fa.apply(SPECIES.length()); 446 float ra = (float) 0; 447 448 for (int ic = 0; ic < INVOC_COUNT; ic++) { 449 ra = (float) 0; 450 for (int i = 0; i < a.length; i += SPECIES.length()) { 451 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 452 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO)); 453 } 454 } 455 bh.consume(ra); 456 } 457 458 @Benchmark 459 public void FIRST_NONZEROMaskedLanes(Blackhole bh) { 460 float[] a = fa.apply(SPECIES.length()); 461 boolean[] mask = fm.apply(SPECIES.length()); 462 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 463 float ra = (float) 0; 464 465 for (int ic = 0; ic < INVOC_COUNT; ic++) { 466 ra = (float) 0; 467 for (int i = 0; i < a.length; i += SPECIES.length()) { 468 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 469 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO, vmask)); 470 } 471 } 472 bh.consume(ra); 473 } 474 475 @Benchmark 476 public void withLane(Blackhole bh) { 477 float[] a = fa.apply(SPECIES.length()); 478 float[] b = fb.apply(SPECIES.length()); 479 float[] r = fr.apply(SPECIES.length()); 480 481 for (int ic = 0; ic < INVOC_COUNT; ic++) { 482 for (int i = 0, j = 0; i < a.length; i += SPECIES.length()) { 483 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 484 av.withLane(j, b[i + j]).intoArray(r, i); 485 a[i + j] = b[i + j]; 486 j = (j + 1) & (SPECIES.length() - 1); 487 } 488 } 489 490 bh.consume(r); 491 } 492 493 @Benchmark 494 public Object IS_DEFAULT() { 495 float[] a = fa.apply(size); 496 boolean[] ms = fmt.apply(size); 497 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 498 499 for (int ic = 0; ic < INVOC_COUNT; ic++) { 500 for (int i = 0; i < a.length; i += SPECIES.length()) { 501 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 502 503 // accumulate results, so JIT can't eliminate relevant computations 504 m = m.and(av.test(VectorOperators.IS_DEFAULT)); 505 } 506 } 507 508 return m; 509 } 510 511 @Benchmark 512 public Object IS_NEGATIVE() { 513 float[] a = fa.apply(size); 514 boolean[] ms = fmt.apply(size); 515 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 516 517 for (int ic = 0; ic < INVOC_COUNT; ic++) { 518 for (int i = 0; i < a.length; i += SPECIES.length()) { 519 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 520 521 // accumulate results, so JIT can't eliminate relevant computations 522 m = m.and(av.test(VectorOperators.IS_NEGATIVE)); 523 } 524 } 525 526 return m; 527 } 528 529 @Benchmark 530 public Object IS_FINITE() { 531 float[] a = fa.apply(size); 532 boolean[] ms = fmt.apply(size); 533 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 534 535 for (int ic = 0; ic < INVOC_COUNT; ic++) { 536 for (int i = 0; i < a.length; i += SPECIES.length()) { 537 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 538 539 // accumulate results, so JIT can't eliminate relevant computations 540 m = m.and(av.test(VectorOperators.IS_FINITE)); 541 } 542 } 543 544 return m; 545 } 546 547 @Benchmark 548 public Object IS_NAN() { 549 float[] a = fa.apply(size); 550 boolean[] ms = fmt.apply(size); 551 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 552 553 for (int ic = 0; ic < INVOC_COUNT; ic++) { 554 for (int i = 0; i < a.length; i += SPECIES.length()) { 555 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 556 557 // accumulate results, so JIT can't eliminate relevant computations 558 m = m.and(av.test(VectorOperators.IS_NAN)); 559 } 560 } 561 562 return m; 563 } 564 565 @Benchmark 566 public Object IS_INFINITE() { 567 float[] a = fa.apply(size); 568 boolean[] ms = fmt.apply(size); 569 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 570 571 for (int ic = 0; ic < INVOC_COUNT; ic++) { 572 for (int i = 0; i < a.length; i += SPECIES.length()) { 573 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 574 575 // accumulate results, so JIT can't eliminate relevant computations 576 m = m.and(av.test(VectorOperators.IS_INFINITE)); 577 } 578 } 579 580 return m; 581 } 582 @Benchmark 583 public Object LT() { 584 float[] a = fa.apply(size); 585 float[] b = fb.apply(size); 586 boolean[] ms = fmt.apply(size); 587 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 588 589 for (int ic = 0; ic < INVOC_COUNT; ic++) { 590 for (int i = 0; i < a.length; i += SPECIES.length()) { 591 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 592 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 593 594 // accumulate results, so JIT can't eliminate relevant computations 595 m = m.and(av.compare(VectorOperators.LT, bv)); 596 } 597 } 598 599 return m; 600 } 601 @Benchmark 602 public Object GT() { 603 float[] a = fa.apply(size); 604 float[] b = fb.apply(size); 605 boolean[] ms = fmt.apply(size); 606 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 607 608 for (int ic = 0; ic < INVOC_COUNT; ic++) { 609 for (int i = 0; i < a.length; i += SPECIES.length()) { 610 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 611 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 612 613 // accumulate results, so JIT can't eliminate relevant computations 614 m = m.and(av.compare(VectorOperators.GT, bv)); 615 } 616 } 617 618 return m; 619 } 620 @Benchmark 621 public Object EQ() { 622 float[] a = fa.apply(size); 623 float[] b = fb.apply(size); 624 boolean[] ms = fmt.apply(size); 625 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 626 627 for (int ic = 0; ic < INVOC_COUNT; ic++) { 628 for (int i = 0; i < a.length; i += SPECIES.length()) { 629 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 630 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 631 632 // accumulate results, so JIT can't eliminate relevant computations 633 m = m.and(av.compare(VectorOperators.EQ, bv)); 634 } 635 } 636 637 return m; 638 } 639 @Benchmark 640 public Object NE() { 641 float[] a = fa.apply(size); 642 float[] b = fb.apply(size); 643 boolean[] ms = fmt.apply(size); 644 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 645 646 for (int ic = 0; ic < INVOC_COUNT; ic++) { 647 for (int i = 0; i < a.length; i += SPECIES.length()) { 648 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 649 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 650 651 // accumulate results, so JIT can't eliminate relevant computations 652 m = m.and(av.compare(VectorOperators.NE, bv)); 653 } 654 } 655 656 return m; 657 } 658 @Benchmark 659 public Object LE() { 660 float[] a = fa.apply(size); 661 float[] b = fb.apply(size); 662 boolean[] ms = fmt.apply(size); 663 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 664 665 for (int ic = 0; ic < INVOC_COUNT; ic++) { 666 for (int i = 0; i < a.length; i += SPECIES.length()) { 667 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 668 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 669 670 // accumulate results, so JIT can't eliminate relevant computations 671 m = m.and(av.compare(VectorOperators.LE, bv)); 672 } 673 } 674 675 return m; 676 } 677 @Benchmark 678 public Object GE() { 679 float[] a = fa.apply(size); 680 float[] b = fb.apply(size); 681 boolean[] ms = fmt.apply(size); 682 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 683 684 for (int ic = 0; ic < INVOC_COUNT; ic++) { 685 for (int i = 0; i < a.length; i += SPECIES.length()) { 686 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 687 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 688 689 // accumulate results, so JIT can't eliminate relevant computations 690 m = m.and(av.compare(VectorOperators.GE, bv)); 691 } 692 } 693 694 return m; 695 } 696 697 @Benchmark 698 public void blend(Blackhole bh) { 699 float[] a = fa.apply(SPECIES.length()); 700 float[] b = fb.apply(SPECIES.length()); 701 float[] r = fr.apply(SPECIES.length()); 702 boolean[] mask = fm.apply(SPECIES.length()); 703 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 704 705 for (int ic = 0; ic < INVOC_COUNT; ic++) { 706 for (int i = 0; i < a.length; i += SPECIES.length()) { 707 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 708 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 709 av.blend(bv, vmask).intoArray(r, i); 710 } 711 } 712 713 bh.consume(r); 714 } 715 716 @Benchmark 717 public void rearrange(Blackhole bh) { 718 float[] a = fa.apply(SPECIES.length()); 719 int[] order = fs.apply(a.length, SPECIES.length()); 720 float[] r = fr.apply(SPECIES.length()); 721 722 for (int ic = 0; ic < INVOC_COUNT; ic++) { 723 for (int i = 0; i < a.length; i += SPECIES.length()) { 724 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 725 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i); 726 } 727 } 728 729 bh.consume(r); 730 } 731 @Benchmark 732 public Object compress() { 733 float[] a = fa.apply(size); 734 float[] r = fb.apply(size); 735 boolean[] ms = fmt.apply(size); 736 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 737 738 for (int ic = 0; ic < INVOC_COUNT; ic++) { 739 for (int i = 0; i < a.length; i += SPECIES.length()) { 740 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 741 av.compress(m).intoArray(r, i); 742 } 743 } 744 745 return r; 746 } 747 748 @Benchmark 749 public Object expand() { 750 float[] a = fa.apply(size); 751 float[] r = fb.apply(size); 752 boolean[] ms = fmt.apply(size); 753 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, 0); 754 755 for (int ic = 0; ic < INVOC_COUNT; ic++) { 756 for (int i = 0; i < a.length; i += SPECIES.length()) { 757 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 758 av.expand(m).intoArray(r, i); 759 } 760 } 761 762 return r; 763 } 764 765 @Benchmark 766 public Object maskCompress() { 767 boolean[] ms = fmt.apply(size); 768 boolean[] rs = fmt.apply(size); 769 770 for (int ic = 0; ic < INVOC_COUNT; ic++) { 771 for (int i = 0, j = 0; i < ms.length; i += SPECIES.length()) { 772 VectorMask<Float> m = VectorMask.fromArray(SPECIES, ms, i); 773 m.compress().intoArray(rs, j); 774 j += m.trueCount(); 775 } 776 } 777 778 return rs; 779 } 780 781 @Benchmark 782 public void laneextract(Blackhole bh) { 783 float[] a = fa.apply(SPECIES.length()); 784 float[] r = fr.apply(SPECIES.length()); 785 786 for (int ic = 0; ic < INVOC_COUNT; ic++) { 787 for (int i = 0; i < a.length; i += SPECIES.length()) { 788 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 789 int num_lanes = SPECIES.length(); 790 // Manually unroll because full unroll happens after intrinsification. 791 // Unroll is needed because get intrinsic requires for index to be a known constant. 792 if (num_lanes == 1) { 793 r[i]=av.lane(0); 794 } else if (num_lanes == 2) { 795 r[i]=av.lane(0); 796 r[i+1]=av.lane(1); 797 } else if (num_lanes == 4) { 798 r[i]=av.lane(0); 799 r[i+1]=av.lane(1); 800 r[i+2]=av.lane(2); 801 r[i+3]=av.lane(3); 802 } else if (num_lanes == 8) { 803 r[i]=av.lane(0); 804 r[i+1]=av.lane(1); 805 r[i+2]=av.lane(2); 806 r[i+3]=av.lane(3); 807 r[i+4]=av.lane(4); 808 r[i+5]=av.lane(5); 809 r[i+6]=av.lane(6); 810 r[i+7]=av.lane(7); 811 } else if (num_lanes == 16) { 812 r[i]=av.lane(0); 813 r[i+1]=av.lane(1); 814 r[i+2]=av.lane(2); 815 r[i+3]=av.lane(3); 816 r[i+4]=av.lane(4); 817 r[i+5]=av.lane(5); 818 r[i+6]=av.lane(6); 819 r[i+7]=av.lane(7); 820 r[i+8]=av.lane(8); 821 r[i+9]=av.lane(9); 822 r[i+10]=av.lane(10); 823 r[i+11]=av.lane(11); 824 r[i+12]=av.lane(12); 825 r[i+13]=av.lane(13); 826 r[i+14]=av.lane(14); 827 r[i+15]=av.lane(15); 828 } else if (num_lanes == 32) { 829 r[i]=av.lane(0); 830 r[i+1]=av.lane(1); 831 r[i+2]=av.lane(2); 832 r[i+3]=av.lane(3); 833 r[i+4]=av.lane(4); 834 r[i+5]=av.lane(5); 835 r[i+6]=av.lane(6); 836 r[i+7]=av.lane(7); 837 r[i+8]=av.lane(8); 838 r[i+9]=av.lane(9); 839 r[i+10]=av.lane(10); 840 r[i+11]=av.lane(11); 841 r[i+12]=av.lane(12); 842 r[i+13]=av.lane(13); 843 r[i+14]=av.lane(14); 844 r[i+15]=av.lane(15); 845 r[i+16]=av.lane(16); 846 r[i+17]=av.lane(17); 847 r[i+18]=av.lane(18); 848 r[i+19]=av.lane(19); 849 r[i+20]=av.lane(20); 850 r[i+21]=av.lane(21); 851 r[i+22]=av.lane(22); 852 r[i+23]=av.lane(23); 853 r[i+24]=av.lane(24); 854 r[i+25]=av.lane(25); 855 r[i+26]=av.lane(26); 856 r[i+27]=av.lane(27); 857 r[i+28]=av.lane(28); 858 r[i+29]=av.lane(29); 859 r[i+30]=av.lane(30); 860 r[i+31]=av.lane(31); 861 } else if (num_lanes == 64) { 862 r[i]=av.lane(0); 863 r[i+1]=av.lane(1); 864 r[i+2]=av.lane(2); 865 r[i+3]=av.lane(3); 866 r[i+4]=av.lane(4); 867 r[i+5]=av.lane(5); 868 r[i+6]=av.lane(6); 869 r[i+7]=av.lane(7); 870 r[i+8]=av.lane(8); 871 r[i+9]=av.lane(9); 872 r[i+10]=av.lane(10); 873 r[i+11]=av.lane(11); 874 r[i+12]=av.lane(12); 875 r[i+13]=av.lane(13); 876 r[i+14]=av.lane(14); 877 r[i+15]=av.lane(15); 878 r[i+16]=av.lane(16); 879 r[i+17]=av.lane(17); 880 r[i+18]=av.lane(18); 881 r[i+19]=av.lane(19); 882 r[i+20]=av.lane(20); 883 r[i+21]=av.lane(21); 884 r[i+22]=av.lane(22); 885 r[i+23]=av.lane(23); 886 r[i+24]=av.lane(24); 887 r[i+25]=av.lane(25); 888 r[i+26]=av.lane(26); 889 r[i+27]=av.lane(27); 890 r[i+28]=av.lane(28); 891 r[i+29]=av.lane(29); 892 r[i+30]=av.lane(30); 893 r[i+31]=av.lane(31); 894 r[i+32]=av.lane(32); 895 r[i+33]=av.lane(33); 896 r[i+34]=av.lane(34); 897 r[i+35]=av.lane(35); 898 r[i+36]=av.lane(36); 899 r[i+37]=av.lane(37); 900 r[i+38]=av.lane(38); 901 r[i+39]=av.lane(39); 902 r[i+40]=av.lane(40); 903 r[i+41]=av.lane(41); 904 r[i+42]=av.lane(42); 905 r[i+43]=av.lane(43); 906 r[i+44]=av.lane(44); 907 r[i+45]=av.lane(45); 908 r[i+46]=av.lane(46); 909 r[i+47]=av.lane(47); 910 r[i+48]=av.lane(48); 911 r[i+49]=av.lane(49); 912 r[i+50]=av.lane(50); 913 r[i+51]=av.lane(51); 914 r[i+52]=av.lane(52); 915 r[i+53]=av.lane(53); 916 r[i+54]=av.lane(54); 917 r[i+55]=av.lane(55); 918 r[i+56]=av.lane(56); 919 r[i+57]=av.lane(57); 920 r[i+58]=av.lane(58); 921 r[i+59]=av.lane(59); 922 r[i+60]=av.lane(60); 923 r[i+61]=av.lane(61); 924 r[i+62]=av.lane(62); 925 r[i+63]=av.lane(63); 926 } else { 927 for (int j = 0; j < SPECIES.length(); j++) { 928 r[i+j]=av.lane(j); 929 } 930 } 931 } 932 } 933 934 bh.consume(r); 935 } 936 937 @Benchmark 938 public void broadcast(Blackhole bh) { 939 float[] a = fa.apply(SPECIES.length()); 940 float[] r = new float[a.length]; 941 942 for (int ic = 0; ic < INVOC_COUNT; ic++) { 943 for (int i = 0; i < a.length; i += SPECIES.length()) { 944 FloatVector.broadcast(SPECIES, a[i]).intoArray(r, i); 945 } 946 } 947 948 bh.consume(r); 949 } 950 951 @Benchmark 952 public void zero(Blackhole bh) { 953 float[] a = fa.apply(SPECIES.length()); 954 float[] r = new float[a.length]; 955 956 for (int ic = 0; ic < INVOC_COUNT; ic++) { 957 for (int i = 0; i < a.length; i += SPECIES.length()) { 958 FloatVector.zero(SPECIES).intoArray(a, i); 959 } 960 } 961 962 bh.consume(r); 963 } 964 965 @Benchmark 966 public void sliceUnary(Blackhole bh) { 967 float[] a = fa.apply(SPECIES.length()); 968 float[] r = new float[a.length]; 969 int origin = RAND.nextInt(SPECIES.length()); 970 for (int ic = 0; ic < INVOC_COUNT; ic++) { 971 for (int i = 0; i < a.length; i += SPECIES.length()) { 972 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 973 av.slice(origin).intoArray(r, i); 974 } 975 } 976 977 bh.consume(r); 978 } 979 980 @Benchmark 981 public void sliceBinary(Blackhole bh) { 982 float[] a = fa.apply(SPECIES.length()); 983 float[] b = fb.apply(SPECIES.length()); 984 float[] r = new float[a.length]; 985 int origin = RAND.nextInt(SPECIES.length()); 986 for (int ic = 0; ic < INVOC_COUNT; ic++) { 987 for (int i = 0; i < a.length; i += SPECIES.length()) { 988 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 989 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 990 av.slice(origin, bv).intoArray(r, i); 991 } 992 } 993 994 bh.consume(r); 995 } 996 997 @Benchmark 998 public void sliceMasked(Blackhole bh) { 999 float[] a = fa.apply(SPECIES.length()); 1000 float[] b = fb.apply(SPECIES.length()); 1001 boolean[] mask = fm.apply(SPECIES.length()); 1002 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1003 1004 float[] r = new float[a.length]; 1005 int origin = RAND.nextInt(SPECIES.length()); 1006 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1007 for (int i = 0; i < a.length; i += SPECIES.length()) { 1008 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1009 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 1010 av.slice(origin, bv, vmask).intoArray(r, i); 1011 } 1012 } 1013 1014 bh.consume(r); 1015 } 1016 1017 @Benchmark 1018 public void unsliceUnary(Blackhole bh) { 1019 float[] a = fa.apply(SPECIES.length()); 1020 float[] r = new float[a.length]; 1021 int origin = RAND.nextInt(SPECIES.length()); 1022 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1023 for (int i = 0; i < a.length; i += SPECIES.length()) { 1024 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1025 av.unslice(origin).intoArray(r, i); 1026 } 1027 } 1028 1029 bh.consume(r); 1030 } 1031 1032 @Benchmark 1033 public void unsliceBinary(Blackhole bh) { 1034 float[] a = fa.apply(SPECIES.length()); 1035 float[] b = fb.apply(SPECIES.length()); 1036 float[] r = new float[a.length]; 1037 int origin = RAND.nextInt(SPECIES.length()); 1038 int part = RAND.nextInt(2); 1039 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1040 for (int i = 0; i < a.length; i += SPECIES.length()) { 1041 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1042 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 1043 av.unslice(origin, bv, part).intoArray(r, i); 1044 } 1045 } 1046 1047 bh.consume(r); 1048 } 1049 1050 @Benchmark 1051 public void unsliceMasked(Blackhole bh) { 1052 float[] a = fa.apply(SPECIES.length()); 1053 float[] b = fb.apply(SPECIES.length()); 1054 boolean[] mask = fm.apply(SPECIES.length()); 1055 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1056 float[] r = new float[a.length]; 1057 int origin = RAND.nextInt(SPECIES.length()); 1058 int part = RAND.nextInt(2); 1059 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1060 for (int i = 0; i < a.length; i += SPECIES.length()) { 1061 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1062 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 1063 av.unslice(origin, bv, part, vmask).intoArray(r, i); 1064 } 1065 } 1066 1067 bh.consume(r); 1068 } 1069 1070 @Benchmark 1071 public void SIN(Blackhole bh) { 1072 float[] a = fa.apply(SPECIES.length()); 1073 float[] r = fr.apply(SPECIES.length()); 1074 1075 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1076 for (int i = 0; i < a.length; i += SPECIES.length()) { 1077 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1078 av.lanewise(VectorOperators.SIN).intoArray(r, i); 1079 } 1080 } 1081 1082 bh.consume(r); 1083 } 1084 1085 @Benchmark 1086 public void EXP(Blackhole bh) { 1087 float[] a = fa.apply(SPECIES.length()); 1088 float[] r = fr.apply(SPECIES.length()); 1089 1090 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1091 for (int i = 0; i < a.length; i += SPECIES.length()) { 1092 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1093 av.lanewise(VectorOperators.EXP).intoArray(r, i); 1094 } 1095 } 1096 1097 bh.consume(r); 1098 } 1099 1100 @Benchmark 1101 public void LOG1P(Blackhole bh) { 1102 float[] a = fa.apply(SPECIES.length()); 1103 float[] r = fr.apply(SPECIES.length()); 1104 1105 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1106 for (int i = 0; i < a.length; i += SPECIES.length()) { 1107 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1108 av.lanewise(VectorOperators.LOG1P).intoArray(r, i); 1109 } 1110 } 1111 1112 bh.consume(r); 1113 } 1114 1115 @Benchmark 1116 public void LOG(Blackhole bh) { 1117 float[] a = fa.apply(SPECIES.length()); 1118 float[] r = fr.apply(SPECIES.length()); 1119 1120 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1121 for (int i = 0; i < a.length; i += SPECIES.length()) { 1122 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1123 av.lanewise(VectorOperators.LOG).intoArray(r, i); 1124 } 1125 } 1126 1127 bh.consume(r); 1128 } 1129 1130 @Benchmark 1131 public void LOG10(Blackhole bh) { 1132 float[] a = fa.apply(SPECIES.length()); 1133 float[] r = fr.apply(SPECIES.length()); 1134 1135 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1136 for (int i = 0; i < a.length; i += SPECIES.length()) { 1137 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1138 av.lanewise(VectorOperators.LOG10).intoArray(r, i); 1139 } 1140 } 1141 1142 bh.consume(r); 1143 } 1144 1145 @Benchmark 1146 public void EXPM1(Blackhole bh) { 1147 float[] a = fa.apply(SPECIES.length()); 1148 float[] r = fr.apply(SPECIES.length()); 1149 1150 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1151 for (int i = 0; i < a.length; i += SPECIES.length()) { 1152 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1153 av.lanewise(VectorOperators.EXPM1).intoArray(r, i); 1154 } 1155 } 1156 1157 bh.consume(r); 1158 } 1159 1160 @Benchmark 1161 public void COS(Blackhole bh) { 1162 float[] a = fa.apply(SPECIES.length()); 1163 float[] r = fr.apply(SPECIES.length()); 1164 1165 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1166 for (int i = 0; i < a.length; i += SPECIES.length()) { 1167 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1168 av.lanewise(VectorOperators.COS).intoArray(r, i); 1169 } 1170 } 1171 1172 bh.consume(r); 1173 } 1174 1175 @Benchmark 1176 public void TAN(Blackhole bh) { 1177 float[] a = fa.apply(SPECIES.length()); 1178 float[] r = fr.apply(SPECIES.length()); 1179 1180 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1181 for (int i = 0; i < a.length; i += SPECIES.length()) { 1182 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1183 av.lanewise(VectorOperators.TAN).intoArray(r, i); 1184 } 1185 } 1186 1187 bh.consume(r); 1188 } 1189 1190 @Benchmark 1191 public void SINH(Blackhole bh) { 1192 float[] a = fa.apply(SPECIES.length()); 1193 float[] r = fr.apply(SPECIES.length()); 1194 1195 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1196 for (int i = 0; i < a.length; i += SPECIES.length()) { 1197 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1198 av.lanewise(VectorOperators.SINH).intoArray(r, i); 1199 } 1200 } 1201 1202 bh.consume(r); 1203 } 1204 1205 @Benchmark 1206 public void COSH(Blackhole bh) { 1207 float[] a = fa.apply(SPECIES.length()); 1208 float[] r = fr.apply(SPECIES.length()); 1209 1210 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1211 for (int i = 0; i < a.length; i += SPECIES.length()) { 1212 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1213 av.lanewise(VectorOperators.COSH).intoArray(r, i); 1214 } 1215 } 1216 1217 bh.consume(r); 1218 } 1219 1220 @Benchmark 1221 public void TANH(Blackhole bh) { 1222 float[] a = fa.apply(SPECIES.length()); 1223 float[] r = fr.apply(SPECIES.length()); 1224 1225 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1226 for (int i = 0; i < a.length; i += SPECIES.length()) { 1227 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1228 av.lanewise(VectorOperators.TANH).intoArray(r, i); 1229 } 1230 } 1231 1232 bh.consume(r); 1233 } 1234 1235 @Benchmark 1236 public void ASIN(Blackhole bh) { 1237 float[] a = fa.apply(SPECIES.length()); 1238 float[] r = fr.apply(SPECIES.length()); 1239 1240 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1241 for (int i = 0; i < a.length; i += SPECIES.length()) { 1242 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1243 av.lanewise(VectorOperators.ASIN).intoArray(r, i); 1244 } 1245 } 1246 1247 bh.consume(r); 1248 } 1249 1250 @Benchmark 1251 public void ACOS(Blackhole bh) { 1252 float[] a = fa.apply(SPECIES.length()); 1253 float[] r = fr.apply(SPECIES.length()); 1254 1255 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1256 for (int i = 0; i < a.length; i += SPECIES.length()) { 1257 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1258 av.lanewise(VectorOperators.ACOS).intoArray(r, i); 1259 } 1260 } 1261 1262 bh.consume(r); 1263 } 1264 1265 @Benchmark 1266 public void ATAN(Blackhole bh) { 1267 float[] a = fa.apply(SPECIES.length()); 1268 float[] r = fr.apply(SPECIES.length()); 1269 1270 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1271 for (int i = 0; i < a.length; i += SPECIES.length()) { 1272 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1273 av.lanewise(VectorOperators.ATAN).intoArray(r, i); 1274 } 1275 } 1276 1277 bh.consume(r); 1278 } 1279 1280 @Benchmark 1281 public void CBRT(Blackhole bh) { 1282 float[] a = fa.apply(SPECIES.length()); 1283 float[] r = fr.apply(SPECIES.length()); 1284 1285 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1286 for (int i = 0; i < a.length; i += SPECIES.length()) { 1287 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1288 av.lanewise(VectorOperators.CBRT).intoArray(r, i); 1289 } 1290 } 1291 1292 bh.consume(r); 1293 } 1294 1295 @Benchmark 1296 public void HYPOT(Blackhole bh) { 1297 float[] a = fa.apply(SPECIES.length()); 1298 float[] b = fb.apply(SPECIES.length()); 1299 float[] r = fr.apply(SPECIES.length()); 1300 1301 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1302 for (int i = 0; i < a.length; i += SPECIES.length()) { 1303 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1304 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 1305 av.lanewise(VectorOperators.HYPOT, bv).intoArray(r, i); 1306 } 1307 } 1308 1309 bh.consume(r); 1310 } 1311 1312 @Benchmark 1313 public void POW(Blackhole bh) { 1314 float[] a = fa.apply(SPECIES.length()); 1315 float[] b = fb.apply(SPECIES.length()); 1316 float[] r = fr.apply(SPECIES.length()); 1317 1318 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1319 for (int i = 0; i < a.length; i += SPECIES.length()) { 1320 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1321 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 1322 av.lanewise(VectorOperators.POW, bv).intoArray(r, i); 1323 } 1324 } 1325 1326 bh.consume(r); 1327 } 1328 1329 @Benchmark 1330 public void ATAN2(Blackhole bh) { 1331 float[] a = fa.apply(SPECIES.length()); 1332 float[] b = fb.apply(SPECIES.length()); 1333 float[] r = fr.apply(SPECIES.length()); 1334 1335 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1336 for (int i = 0; i < a.length; i += SPECIES.length()) { 1337 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1338 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 1339 av.lanewise(VectorOperators.ATAN2, bv).intoArray(r, i); 1340 } 1341 } 1342 1343 bh.consume(r); 1344 } 1345 1346 @Benchmark 1347 public void FMA(Blackhole bh) { 1348 float[] a = fa.apply(SPECIES.length()); 1349 float[] b = fb.apply(SPECIES.length()); 1350 float[] c = fc.apply(SPECIES.length()); 1351 float[] r = fr.apply(SPECIES.length()); 1352 1353 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1354 for (int i = 0; i < a.length; i += SPECIES.length()) { 1355 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1356 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 1357 FloatVector cv = FloatVector.fromArray(SPECIES, c, i); 1358 av.lanewise(VectorOperators.FMA, bv, cv).intoArray(r, i); 1359 } 1360 } 1361 1362 bh.consume(r); 1363 } 1364 1365 @Benchmark 1366 public void FMAMasked(Blackhole bh) { 1367 float[] a = fa.apply(SPECIES.length()); 1368 float[] b = fb.apply(SPECIES.length()); 1369 float[] c = fc.apply(SPECIES.length()); 1370 float[] r = fr.apply(SPECIES.length()); 1371 boolean[] mask = fm.apply(SPECIES.length()); 1372 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1373 1374 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1375 for (int i = 0; i < a.length; i += SPECIES.length()) { 1376 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1377 FloatVector bv = FloatVector.fromArray(SPECIES, b, i); 1378 FloatVector cv = FloatVector.fromArray(SPECIES, c, i); 1379 av.lanewise(VectorOperators.FMA, bv, cv, vmask).intoArray(r, i); 1380 } 1381 } 1382 1383 bh.consume(r); 1384 } 1385 1386 @Benchmark 1387 public void NEG(Blackhole bh) { 1388 float[] a = fa.apply(SPECIES.length()); 1389 float[] r = fr.apply(SPECIES.length()); 1390 1391 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1392 for (int i = 0; i < a.length; i += SPECIES.length()) { 1393 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1394 av.lanewise(VectorOperators.NEG).intoArray(r, i); 1395 } 1396 } 1397 1398 bh.consume(r); 1399 } 1400 1401 @Benchmark 1402 public void NEGMasked(Blackhole bh) { 1403 float[] a = fa.apply(SPECIES.length()); 1404 float[] r = fr.apply(SPECIES.length()); 1405 boolean[] mask = fm.apply(SPECIES.length()); 1406 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1407 1408 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1409 for (int i = 0; i < a.length; i += SPECIES.length()) { 1410 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1411 av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i); 1412 } 1413 } 1414 1415 bh.consume(r); 1416 } 1417 1418 @Benchmark 1419 public void ABS(Blackhole bh) { 1420 float[] a = fa.apply(SPECIES.length()); 1421 float[] r = fr.apply(SPECIES.length()); 1422 1423 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1424 for (int i = 0; i < a.length; i += SPECIES.length()) { 1425 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1426 av.lanewise(VectorOperators.ABS).intoArray(r, i); 1427 } 1428 } 1429 1430 bh.consume(r); 1431 } 1432 1433 @Benchmark 1434 public void ABSMasked(Blackhole bh) { 1435 float[] a = fa.apply(SPECIES.length()); 1436 float[] r = fr.apply(SPECIES.length()); 1437 boolean[] mask = fm.apply(SPECIES.length()); 1438 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1439 1440 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1441 for (int i = 0; i < a.length; i += SPECIES.length()) { 1442 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1443 av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i); 1444 } 1445 } 1446 1447 bh.consume(r); 1448 } 1449 1450 @Benchmark 1451 public void SQRT(Blackhole bh) { 1452 float[] a = fa.apply(SPECIES.length()); 1453 float[] r = fr.apply(SPECIES.length()); 1454 1455 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1456 for (int i = 0; i < a.length; i += SPECIES.length()) { 1457 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1458 av.lanewise(VectorOperators.SQRT).intoArray(r, i); 1459 } 1460 } 1461 1462 bh.consume(r); 1463 } 1464 1465 @Benchmark 1466 public void SQRTMasked(Blackhole bh) { 1467 float[] a = fa.apply(SPECIES.length()); 1468 float[] r = fr.apply(SPECIES.length()); 1469 boolean[] mask = fm.apply(SPECIES.length()); 1470 VectorMask<Float> vmask = VectorMask.fromArray(SPECIES, mask, 0); 1471 1472 for (int ic = 0; ic < INVOC_COUNT; ic++) { 1473 for (int i = 0; i < a.length; i += SPECIES.length()) { 1474 FloatVector av = FloatVector.fromArray(SPECIES, a, i); 1475 av.lanewise(VectorOperators.SQRT, vmask).intoArray(r, i); 1476 } 1477 } 1478 1479 bh.consume(r); 1480 } 1481 }