906 LongVector av = LongVector.fromArray(SPECIES, a, i);
907 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
908 }
909 }
910
911 bh.consume(r);
912 }
913
914 @Benchmark
915 public void extract(Blackhole bh) {
916 long[] a = fa.apply(SPECIES.length());
917 long[] r = fr.apply(SPECIES.length());
918
919 for (int ic = 0; ic < INVOC_COUNT; ic++) {
920 for (int i = 0; i < a.length; i += SPECIES.length()) {
921 LongVector av = LongVector.fromArray(SPECIES, a, i);
922 int num_lanes = SPECIES.length();
923 // Manually unroll because full unroll happens after intrinsification.
924 // Unroll is needed because get intrinsic requires for index to be a known constant.
925 if (num_lanes == 1) {
926 r[i]=av.get(0);
927 } else if (num_lanes == 2) {
928 r[i]=av.get(0);
929 r[i+1]=av.get(1);
930 } else if (num_lanes == 4) {
931 r[i]=av.get(0);
932 r[i+1]=av.get(1);
933 r[i+2]=av.get(2);
934 r[i+3]=av.get(3);
935 } else if (num_lanes == 8) {
936 r[i]=av.get(0);
937 r[i+1]=av.get(1);
938 r[i+2]=av.get(2);
939 r[i+3]=av.get(3);
940 r[i+4]=av.get(4);
941 r[i+5]=av.get(5);
942 r[i+6]=av.get(6);
943 r[i+7]=av.get(7);
944 } else if (num_lanes == 16) {
945 r[i]=av.get(0);
946 r[i+1]=av.get(1);
947 r[i+2]=av.get(2);
948 r[i+3]=av.get(3);
949 r[i+4]=av.get(4);
950 r[i+5]=av.get(5);
951 r[i+6]=av.get(6);
952 r[i+7]=av.get(7);
953 r[i+8]=av.get(8);
954 r[i+9]=av.get(9);
955 r[i+10]=av.get(10);
956 r[i+11]=av.get(11);
957 r[i+12]=av.get(12);
958 r[i+13]=av.get(13);
959 r[i+14]=av.get(14);
960 r[i+15]=av.get(15);
961 } else if (num_lanes == 32) {
962 r[i]=av.get(0);
963 r[i+1]=av.get(1);
964 r[i+2]=av.get(2);
965 r[i+3]=av.get(3);
966 r[i+4]=av.get(4);
967 r[i+5]=av.get(5);
968 r[i+6]=av.get(6);
969 r[i+7]=av.get(7);
970 r[i+8]=av.get(8);
971 r[i+9]=av.get(9);
972 r[i+10]=av.get(10);
973 r[i+11]=av.get(11);
974 r[i+12]=av.get(12);
975 r[i+13]=av.get(13);
976 r[i+14]=av.get(14);
977 r[i+15]=av.get(15);
978 r[i+16]=av.get(16);
979 r[i+17]=av.get(17);
980 r[i+18]=av.get(18);
981 r[i+19]=av.get(19);
982 r[i+20]=av.get(20);
983 r[i+21]=av.get(21);
984 r[i+22]=av.get(22);
985 r[i+23]=av.get(23);
986 r[i+24]=av.get(24);
987 r[i+25]=av.get(25);
988 r[i+26]=av.get(26);
989 r[i+27]=av.get(27);
990 r[i+28]=av.get(28);
991 r[i+29]=av.get(29);
992 r[i+30]=av.get(30);
993 r[i+31]=av.get(31);
994 } else if (num_lanes == 64) {
995 r[i]=av.get(0);
996 r[i+1]=av.get(1);
997 r[i+2]=av.get(2);
998 r[i+3]=av.get(3);
999 r[i+4]=av.get(4);
1000 r[i+5]=av.get(5);
1001 r[i+6]=av.get(6);
1002 r[i+7]=av.get(7);
1003 r[i+8]=av.get(8);
1004 r[i+9]=av.get(9);
1005 r[i+10]=av.get(10);
1006 r[i+11]=av.get(11);
1007 r[i+12]=av.get(12);
1008 r[i+13]=av.get(13);
1009 r[i+14]=av.get(14);
1010 r[i+15]=av.get(15);
1011 r[i+16]=av.get(16);
1012 r[i+17]=av.get(17);
1013 r[i+18]=av.get(18);
1014 r[i+19]=av.get(19);
1015 r[i+20]=av.get(20);
1016 r[i+21]=av.get(21);
1017 r[i+22]=av.get(22);
1018 r[i+23]=av.get(23);
1019 r[i+24]=av.get(24);
1020 r[i+25]=av.get(25);
1021 r[i+26]=av.get(26);
1022 r[i+27]=av.get(27);
1023 r[i+28]=av.get(28);
1024 r[i+29]=av.get(29);
1025 r[i+30]=av.get(30);
1026 r[i+31]=av.get(31);
1027 r[i+32]=av.get(32);
1028 r[i+33]=av.get(33);
1029 r[i+34]=av.get(34);
1030 r[i+35]=av.get(35);
1031 r[i+36]=av.get(36);
1032 r[i+37]=av.get(37);
1033 r[i+38]=av.get(38);
1034 r[i+39]=av.get(39);
1035 r[i+40]=av.get(40);
1036 r[i+41]=av.get(41);
1037 r[i+42]=av.get(42);
1038 r[i+43]=av.get(43);
1039 r[i+44]=av.get(44);
1040 r[i+45]=av.get(45);
1041 r[i+46]=av.get(46);
1042 r[i+47]=av.get(47);
1043 r[i+48]=av.get(48);
1044 r[i+49]=av.get(49);
1045 r[i+50]=av.get(50);
1046 r[i+51]=av.get(51);
1047 r[i+52]=av.get(52);
1048 r[i+53]=av.get(53);
1049 r[i+54]=av.get(54);
1050 r[i+55]=av.get(55);
1051 r[i+56]=av.get(56);
1052 r[i+57]=av.get(57);
1053 r[i+58]=av.get(58);
1054 r[i+59]=av.get(59);
1055 r[i+60]=av.get(60);
1056 r[i+61]=av.get(61);
1057 r[i+62]=av.get(62);
1058 r[i+63]=av.get(63);
1059 } else {
1060 for (int j = 0; j < SPECIES.length(); j++) {
1061 r[i+j]=av.get(j);
1062 }
1063 }
1064 }
1065 }
1066
1067 bh.consume(r);
1068 }
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
|
906 LongVector av = LongVector.fromArray(SPECIES, a, i);
907 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
908 }
909 }
910
911 bh.consume(r);
912 }
913
914 @Benchmark
915 public void extract(Blackhole bh) {
916 long[] a = fa.apply(SPECIES.length());
917 long[] r = fr.apply(SPECIES.length());
918
919 for (int ic = 0; ic < INVOC_COUNT; ic++) {
920 for (int i = 0; i < a.length; i += SPECIES.length()) {
921 LongVector av = LongVector.fromArray(SPECIES, a, i);
922 int num_lanes = SPECIES.length();
923 // Manually unroll because full unroll happens after intrinsification.
924 // Unroll is needed because get intrinsic requires for index to be a known constant.
925 if (num_lanes == 1) {
926 r[i]=av.lane(0);
927 } else if (num_lanes == 2) {
928 r[i]=av.lane(0);
929 r[i+1]=av.lane(1);
930 } else if (num_lanes == 4) {
931 r[i]=av.lane(0);
932 r[i+1]=av.lane(1);
933 r[i+2]=av.lane(2);
934 r[i+3]=av.lane(3);
935 } else if (num_lanes == 8) {
936 r[i]=av.lane(0);
937 r[i+1]=av.lane(1);
938 r[i+2]=av.lane(2);
939 r[i+3]=av.lane(3);
940 r[i+4]=av.lane(4);
941 r[i+5]=av.lane(5);
942 r[i+6]=av.lane(6);
943 r[i+7]=av.lane(7);
944 } else if (num_lanes == 16) {
945 r[i]=av.lane(0);
946 r[i+1]=av.lane(1);
947 r[i+2]=av.lane(2);
948 r[i+3]=av.lane(3);
949 r[i+4]=av.lane(4);
950 r[i+5]=av.lane(5);
951 r[i+6]=av.lane(6);
952 r[i+7]=av.lane(7);
953 r[i+8]=av.lane(8);
954 r[i+9]=av.lane(9);
955 r[i+10]=av.lane(10);
956 r[i+11]=av.lane(11);
957 r[i+12]=av.lane(12);
958 r[i+13]=av.lane(13);
959 r[i+14]=av.lane(14);
960 r[i+15]=av.lane(15);
961 } else if (num_lanes == 32) {
962 r[i]=av.lane(0);
963 r[i+1]=av.lane(1);
964 r[i+2]=av.lane(2);
965 r[i+3]=av.lane(3);
966 r[i+4]=av.lane(4);
967 r[i+5]=av.lane(5);
968 r[i+6]=av.lane(6);
969 r[i+7]=av.lane(7);
970 r[i+8]=av.lane(8);
971 r[i+9]=av.lane(9);
972 r[i+10]=av.lane(10);
973 r[i+11]=av.lane(11);
974 r[i+12]=av.lane(12);
975 r[i+13]=av.lane(13);
976 r[i+14]=av.lane(14);
977 r[i+15]=av.lane(15);
978 r[i+16]=av.lane(16);
979 r[i+17]=av.lane(17);
980 r[i+18]=av.lane(18);
981 r[i+19]=av.lane(19);
982 r[i+20]=av.lane(20);
983 r[i+21]=av.lane(21);
984 r[i+22]=av.lane(22);
985 r[i+23]=av.lane(23);
986 r[i+24]=av.lane(24);
987 r[i+25]=av.lane(25);
988 r[i+26]=av.lane(26);
989 r[i+27]=av.lane(27);
990 r[i+28]=av.lane(28);
991 r[i+29]=av.lane(29);
992 r[i+30]=av.lane(30);
993 r[i+31]=av.lane(31);
994 } else if (num_lanes == 64) {
995 r[i]=av.lane(0);
996 r[i+1]=av.lane(1);
997 r[i+2]=av.lane(2);
998 r[i+3]=av.lane(3);
999 r[i+4]=av.lane(4);
1000 r[i+5]=av.lane(5);
1001 r[i+6]=av.lane(6);
1002 r[i+7]=av.lane(7);
1003 r[i+8]=av.lane(8);
1004 r[i+9]=av.lane(9);
1005 r[i+10]=av.lane(10);
1006 r[i+11]=av.lane(11);
1007 r[i+12]=av.lane(12);
1008 r[i+13]=av.lane(13);
1009 r[i+14]=av.lane(14);
1010 r[i+15]=av.lane(15);
1011 r[i+16]=av.lane(16);
1012 r[i+17]=av.lane(17);
1013 r[i+18]=av.lane(18);
1014 r[i+19]=av.lane(19);
1015 r[i+20]=av.lane(20);
1016 r[i+21]=av.lane(21);
1017 r[i+22]=av.lane(22);
1018 r[i+23]=av.lane(23);
1019 r[i+24]=av.lane(24);
1020 r[i+25]=av.lane(25);
1021 r[i+26]=av.lane(26);
1022 r[i+27]=av.lane(27);
1023 r[i+28]=av.lane(28);
1024 r[i+29]=av.lane(29);
1025 r[i+30]=av.lane(30);
1026 r[i+31]=av.lane(31);
1027 r[i+32]=av.lane(32);
1028 r[i+33]=av.lane(33);
1029 r[i+34]=av.lane(34);
1030 r[i+35]=av.lane(35);
1031 r[i+36]=av.lane(36);
1032 r[i+37]=av.lane(37);
1033 r[i+38]=av.lane(38);
1034 r[i+39]=av.lane(39);
1035 r[i+40]=av.lane(40);
1036 r[i+41]=av.lane(41);
1037 r[i+42]=av.lane(42);
1038 r[i+43]=av.lane(43);
1039 r[i+44]=av.lane(44);
1040 r[i+45]=av.lane(45);
1041 r[i+46]=av.lane(46);
1042 r[i+47]=av.lane(47);
1043 r[i+48]=av.lane(48);
1044 r[i+49]=av.lane(49);
1045 r[i+50]=av.lane(50);
1046 r[i+51]=av.lane(51);
1047 r[i+52]=av.lane(52);
1048 r[i+53]=av.lane(53);
1049 r[i+54]=av.lane(54);
1050 r[i+55]=av.lane(55);
1051 r[i+56]=av.lane(56);
1052 r[i+57]=av.lane(57);
1053 r[i+58]=av.lane(58);
1054 r[i+59]=av.lane(59);
1055 r[i+60]=av.lane(60);
1056 r[i+61]=av.lane(61);
1057 r[i+62]=av.lane(62);
1058 r[i+63]=av.lane(63);
1059 } else {
1060 for (int j = 0; j < SPECIES.length(); j++) {
1061 r[i+j]=av.lane(j);
1062 }
1063 }
1064 }
1065 }
1066
1067 bh.consume(r);
1068 }
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
|