528 FloatVector av = FloatVector.fromArray(SPECIES, a, i);
529 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
530 }
531 }
532
533 bh.consume(r);
534 }
535
536 @Benchmark
537 public void extract(Blackhole bh) {
538 float[] a = fa.apply(SPECIES.length());
539 float[] r = fr.apply(SPECIES.length());
540
541 for (int ic = 0; ic < INVOC_COUNT; ic++) {
542 for (int i = 0; i < a.length; i += SPECIES.length()) {
543 FloatVector av = FloatVector.fromArray(SPECIES, a, i);
544 int num_lanes = SPECIES.length();
545 // Manually unroll because full unroll happens after intrinsification.
546 // Unroll is needed because get intrinsic requires for index to be a known constant.
547 if (num_lanes == 1) {
548 r[i]=av.get(0);
549 } else if (num_lanes == 2) {
550 r[i]=av.get(0);
551 r[i+1]=av.get(1);
552 } else if (num_lanes == 4) {
553 r[i]=av.get(0);
554 r[i+1]=av.get(1);
555 r[i+2]=av.get(2);
556 r[i+3]=av.get(3);
557 } else if (num_lanes == 8) {
558 r[i]=av.get(0);
559 r[i+1]=av.get(1);
560 r[i+2]=av.get(2);
561 r[i+3]=av.get(3);
562 r[i+4]=av.get(4);
563 r[i+5]=av.get(5);
564 r[i+6]=av.get(6);
565 r[i+7]=av.get(7);
566 } else if (num_lanes == 16) {
567 r[i]=av.get(0);
568 r[i+1]=av.get(1);
569 r[i+2]=av.get(2);
570 r[i+3]=av.get(3);
571 r[i+4]=av.get(4);
572 r[i+5]=av.get(5);
573 r[i+6]=av.get(6);
574 r[i+7]=av.get(7);
575 r[i+8]=av.get(8);
576 r[i+9]=av.get(9);
577 r[i+10]=av.get(10);
578 r[i+11]=av.get(11);
579 r[i+12]=av.get(12);
580 r[i+13]=av.get(13);
581 r[i+14]=av.get(14);
582 r[i+15]=av.get(15);
583 } else if (num_lanes == 32) {
584 r[i]=av.get(0);
585 r[i+1]=av.get(1);
586 r[i+2]=av.get(2);
587 r[i+3]=av.get(3);
588 r[i+4]=av.get(4);
589 r[i+5]=av.get(5);
590 r[i+6]=av.get(6);
591 r[i+7]=av.get(7);
592 r[i+8]=av.get(8);
593 r[i+9]=av.get(9);
594 r[i+10]=av.get(10);
595 r[i+11]=av.get(11);
596 r[i+12]=av.get(12);
597 r[i+13]=av.get(13);
598 r[i+14]=av.get(14);
599 r[i+15]=av.get(15);
600 r[i+16]=av.get(16);
601 r[i+17]=av.get(17);
602 r[i+18]=av.get(18);
603 r[i+19]=av.get(19);
604 r[i+20]=av.get(20);
605 r[i+21]=av.get(21);
606 r[i+22]=av.get(22);
607 r[i+23]=av.get(23);
608 r[i+24]=av.get(24);
609 r[i+25]=av.get(25);
610 r[i+26]=av.get(26);
611 r[i+27]=av.get(27);
612 r[i+28]=av.get(28);
613 r[i+29]=av.get(29);
614 r[i+30]=av.get(30);
615 r[i+31]=av.get(31);
616 } else if (num_lanes == 64) {
617 r[i]=av.get(0);
618 r[i+1]=av.get(1);
619 r[i+2]=av.get(2);
620 r[i+3]=av.get(3);
621 r[i+4]=av.get(4);
622 r[i+5]=av.get(5);
623 r[i+6]=av.get(6);
624 r[i+7]=av.get(7);
625 r[i+8]=av.get(8);
626 r[i+9]=av.get(9);
627 r[i+10]=av.get(10);
628 r[i+11]=av.get(11);
629 r[i+12]=av.get(12);
630 r[i+13]=av.get(13);
631 r[i+14]=av.get(14);
632 r[i+15]=av.get(15);
633 r[i+16]=av.get(16);
634 r[i+17]=av.get(17);
635 r[i+18]=av.get(18);
636 r[i+19]=av.get(19);
637 r[i+20]=av.get(20);
638 r[i+21]=av.get(21);
639 r[i+22]=av.get(22);
640 r[i+23]=av.get(23);
641 r[i+24]=av.get(24);
642 r[i+25]=av.get(25);
643 r[i+26]=av.get(26);
644 r[i+27]=av.get(27);
645 r[i+28]=av.get(28);
646 r[i+29]=av.get(29);
647 r[i+30]=av.get(30);
648 r[i+31]=av.get(31);
649 r[i+32]=av.get(32);
650 r[i+33]=av.get(33);
651 r[i+34]=av.get(34);
652 r[i+35]=av.get(35);
653 r[i+36]=av.get(36);
654 r[i+37]=av.get(37);
655 r[i+38]=av.get(38);
656 r[i+39]=av.get(39);
657 r[i+40]=av.get(40);
658 r[i+41]=av.get(41);
659 r[i+42]=av.get(42);
660 r[i+43]=av.get(43);
661 r[i+44]=av.get(44);
662 r[i+45]=av.get(45);
663 r[i+46]=av.get(46);
664 r[i+47]=av.get(47);
665 r[i+48]=av.get(48);
666 r[i+49]=av.get(49);
667 r[i+50]=av.get(50);
668 r[i+51]=av.get(51);
669 r[i+52]=av.get(52);
670 r[i+53]=av.get(53);
671 r[i+54]=av.get(54);
672 r[i+55]=av.get(55);
673 r[i+56]=av.get(56);
674 r[i+57]=av.get(57);
675 r[i+58]=av.get(58);
676 r[i+59]=av.get(59);
677 r[i+60]=av.get(60);
678 r[i+61]=av.get(61);
679 r[i+62]=av.get(62);
680 r[i+63]=av.get(63);
681 } else {
682 for (int j = 0; j < SPECIES.length(); j++) {
683 r[i+j]=av.get(j);
684 }
685 }
686 }
687 }
688
689 bh.consume(r);
690 }
691
692
693 @Benchmark
694 public void sin(Blackhole bh) {
695 float[] a = fa.apply(SPECIES.length());
696 float[] r = fr.apply(SPECIES.length());
697
698 for (int ic = 0; ic < INVOC_COUNT; ic++) {
699 for (int i = 0; i < a.length; i += SPECIES.length()) {
700 FloatVector av = FloatVector.fromArray(SPECIES, a, i);
701 av.sin().intoArray(r, i);
702 }
703 }
|
528 FloatVector av = FloatVector.fromArray(SPECIES, a, i);
529 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
530 }
531 }
532
533 bh.consume(r);
534 }
535
536 @Benchmark
537 public void extract(Blackhole bh) {
538 float[] a = fa.apply(SPECIES.length());
539 float[] r = fr.apply(SPECIES.length());
540
541 for (int ic = 0; ic < INVOC_COUNT; ic++) {
542 for (int i = 0; i < a.length; i += SPECIES.length()) {
543 FloatVector av = FloatVector.fromArray(SPECIES, a, i);
544 int num_lanes = SPECIES.length();
545 // Manually unroll because full unroll happens after intrinsification.
546 // Unroll is needed because get intrinsic requires for index to be a known constant.
547 if (num_lanes == 1) {
548 r[i]=av.lane(0);
549 } else if (num_lanes == 2) {
550 r[i]=av.lane(0);
551 r[i+1]=av.lane(1);
552 } else if (num_lanes == 4) {
553 r[i]=av.lane(0);
554 r[i+1]=av.lane(1);
555 r[i+2]=av.lane(2);
556 r[i+3]=av.lane(3);
557 } else if (num_lanes == 8) {
558 r[i]=av.lane(0);
559 r[i+1]=av.lane(1);
560 r[i+2]=av.lane(2);
561 r[i+3]=av.lane(3);
562 r[i+4]=av.lane(4);
563 r[i+5]=av.lane(5);
564 r[i+6]=av.lane(6);
565 r[i+7]=av.lane(7);
566 } else if (num_lanes == 16) {
567 r[i]=av.lane(0);
568 r[i+1]=av.lane(1);
569 r[i+2]=av.lane(2);
570 r[i+3]=av.lane(3);
571 r[i+4]=av.lane(4);
572 r[i+5]=av.lane(5);
573 r[i+6]=av.lane(6);
574 r[i+7]=av.lane(7);
575 r[i+8]=av.lane(8);
576 r[i+9]=av.lane(9);
577 r[i+10]=av.lane(10);
578 r[i+11]=av.lane(11);
579 r[i+12]=av.lane(12);
580 r[i+13]=av.lane(13);
581 r[i+14]=av.lane(14);
582 r[i+15]=av.lane(15);
583 } else if (num_lanes == 32) {
584 r[i]=av.lane(0);
585 r[i+1]=av.lane(1);
586 r[i+2]=av.lane(2);
587 r[i+3]=av.lane(3);
588 r[i+4]=av.lane(4);
589 r[i+5]=av.lane(5);
590 r[i+6]=av.lane(6);
591 r[i+7]=av.lane(7);
592 r[i+8]=av.lane(8);
593 r[i+9]=av.lane(9);
594 r[i+10]=av.lane(10);
595 r[i+11]=av.lane(11);
596 r[i+12]=av.lane(12);
597 r[i+13]=av.lane(13);
598 r[i+14]=av.lane(14);
599 r[i+15]=av.lane(15);
600 r[i+16]=av.lane(16);
601 r[i+17]=av.lane(17);
602 r[i+18]=av.lane(18);
603 r[i+19]=av.lane(19);
604 r[i+20]=av.lane(20);
605 r[i+21]=av.lane(21);
606 r[i+22]=av.lane(22);
607 r[i+23]=av.lane(23);
608 r[i+24]=av.lane(24);
609 r[i+25]=av.lane(25);
610 r[i+26]=av.lane(26);
611 r[i+27]=av.lane(27);
612 r[i+28]=av.lane(28);
613 r[i+29]=av.lane(29);
614 r[i+30]=av.lane(30);
615 r[i+31]=av.lane(31);
616 } else if (num_lanes == 64) {
617 r[i]=av.lane(0);
618 r[i+1]=av.lane(1);
619 r[i+2]=av.lane(2);
620 r[i+3]=av.lane(3);
621 r[i+4]=av.lane(4);
622 r[i+5]=av.lane(5);
623 r[i+6]=av.lane(6);
624 r[i+7]=av.lane(7);
625 r[i+8]=av.lane(8);
626 r[i+9]=av.lane(9);
627 r[i+10]=av.lane(10);
628 r[i+11]=av.lane(11);
629 r[i+12]=av.lane(12);
630 r[i+13]=av.lane(13);
631 r[i+14]=av.lane(14);
632 r[i+15]=av.lane(15);
633 r[i+16]=av.lane(16);
634 r[i+17]=av.lane(17);
635 r[i+18]=av.lane(18);
636 r[i+19]=av.lane(19);
637 r[i+20]=av.lane(20);
638 r[i+21]=av.lane(21);
639 r[i+22]=av.lane(22);
640 r[i+23]=av.lane(23);
641 r[i+24]=av.lane(24);
642 r[i+25]=av.lane(25);
643 r[i+26]=av.lane(26);
644 r[i+27]=av.lane(27);
645 r[i+28]=av.lane(28);
646 r[i+29]=av.lane(29);
647 r[i+30]=av.lane(30);
648 r[i+31]=av.lane(31);
649 r[i+32]=av.lane(32);
650 r[i+33]=av.lane(33);
651 r[i+34]=av.lane(34);
652 r[i+35]=av.lane(35);
653 r[i+36]=av.lane(36);
654 r[i+37]=av.lane(37);
655 r[i+38]=av.lane(38);
656 r[i+39]=av.lane(39);
657 r[i+40]=av.lane(40);
658 r[i+41]=av.lane(41);
659 r[i+42]=av.lane(42);
660 r[i+43]=av.lane(43);
661 r[i+44]=av.lane(44);
662 r[i+45]=av.lane(45);
663 r[i+46]=av.lane(46);
664 r[i+47]=av.lane(47);
665 r[i+48]=av.lane(48);
666 r[i+49]=av.lane(49);
667 r[i+50]=av.lane(50);
668 r[i+51]=av.lane(51);
669 r[i+52]=av.lane(52);
670 r[i+53]=av.lane(53);
671 r[i+54]=av.lane(54);
672 r[i+55]=av.lane(55);
673 r[i+56]=av.lane(56);
674 r[i+57]=av.lane(57);
675 r[i+58]=av.lane(58);
676 r[i+59]=av.lane(59);
677 r[i+60]=av.lane(60);
678 r[i+61]=av.lane(61);
679 r[i+62]=av.lane(62);
680 r[i+63]=av.lane(63);
681 } else {
682 for (int j = 0; j < SPECIES.length(); j++) {
683 r[i+j]=av.lane(j);
684 }
685 }
686 }
687 }
688
689 bh.consume(r);
690 }
691
692
693 @Benchmark
694 public void sin(Blackhole bh) {
695 float[] a = fa.apply(SPECIES.length());
696 float[] r = fr.apply(SPECIES.length());
697
698 for (int ic = 0; ic < INVOC_COUNT; ic++) {
699 for (int i = 0; i < a.length; i += SPECIES.length()) {
700 FloatVector av = FloatVector.fromArray(SPECIES, a, i);
701 av.sin().intoArray(r, i);
702 }
703 }
|