回答編集履歴
3
計測結果を追加等
test
CHANGED
@@ -18,15 +18,31 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
手元での結果では速い順で
|
21
|
+
手元での結果では速い順で(単位は秒)
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
+
```
|
26
|
+
|
27
|
+
prep_avx2 5.64 (user 5.40, system 0.18)
|
28
|
+
|
25
|
-
|
29
|
+
shift_ll 6.22 (user 6.04, system 0.17)
|
30
|
+
|
31
|
+
prep_ll 6.53 (user 6.39, system 0.14)
|
32
|
+
|
33
|
+
prep_int 7.83 (user 7.64, system 0.18)
|
34
|
+
|
35
|
+
shift_int 8.85 (user 8.71, system 0.14)
|
36
|
+
|
37
|
+
prep_char 14.75 (user 14.46, system 0.20)
|
38
|
+
|
39
|
+
shift_char 21.48 (user 21.15, system 0.28)
|
40
|
+
|
41
|
+
```
|
26
42
|
|
27
43
|
|
28
44
|
|
29
|
-
という感じでした。AVX2の256bitとlong longではそれほど差が出
|
45
|
+
という感じでした。AVX2の256bitとlong longではそれほど差が出ていないのは、AVX2には_m265iをそのままシフトする関数がない(64bit整数4つそろぞれシフトならある)ため、面倒だったので、uint64_tで作って、そのままキャストしているところだと思います。ここを四つ同時にシフトしてうまくするように書き直せばもう少し速くなると思います。
|
30
46
|
|
31
47
|
|
32
48
|
|
2
誤字の修正
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
shiftは愚直に毎回シフトするもの、prepはあらかじめシフト済みのsearchとmaskを用意しておくものです。avx2がついているのだけ、AVX2で__m256i(256bit整数)を使っています。同じようにSSEで128bit、AVX-512で512bitも作れると思います
|
9
|
+
shiftは愚直に毎回シフトするもの、prepはあらかじめシフト済みのsearchとmaskを用意しておくものです。avx2がついているのだけ、AVX2で__m256i(256bit整数)を使っています。同じようにSSEで128bit、AVX-512で512bitも作れると思います、たぶん。
|
10
10
|
|
11
11
|
|
12
12
|
|
1
結果の一部が間違っていた。
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
prep_avx2 > shift_ll > prep_
|
25
|
+
prep_avx2 > shift_ll > prep_ll >>> prep_int > shift_int >>> prep_char >>> shift_char
|
26
26
|
|
27
27
|
|
28
28
|
|