回答編集履歴

3

計測結果を追加等

2018/08/13 07:12

投稿

raccy
raccy

スコア21735

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
- prep_avx2 > shift_ll > prep_ll >>> prep_int > shift_int >>> prep_char >>> shift_char
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ではそれほど差が出ません。AVX2には_m265iをそのままシフトする関数がない(64bit整数4つそろぞれシフトならある)ため、面倒だったので、long longで作って、そのままキャストしています。ここを四つ同時にシフトしてうまくするように書き直せばもう少し速くなると思います。
45
+ という感じでした。AVX2の256bitとlong longではそれほど差が出ていないのは、AVX2には_m265iをそのままシフトする関数がない(64bit整数4つそろぞれシフトならある)ため、面倒だったので、uint64_tで作って、そのままキャストしているところだと思います。ここを四つ同時にシフトしてうまくするように書き直せばもう少し速くなると思います。
30
46
 
31
47
 
32
48
 

2

誤字の修正

2018/08/13 07:12

投稿

raccy
raccy

スコア21735

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

結果の一部が間違っていた。

2018/08/13 06:58

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- prep_avx2 > shift_ll > prep_avx2 >>> prep_int > shift_int >>> prep_char >>> shift_char
25
+ prep_avx2 > shift_ll > prep_ll >>> prep_int > shift_int >>> prep_char >>> shift_char
26
26
 
27
27
 
28
28