-
Notifications
You must be signed in to change notification settings - Fork 129
Expand file tree
/
Copy pathMain_Page.mwiki
More file actions
204 lines (182 loc) · 7.76 KB
/
Copy pathMain_Page.mwiki
File metadata and controls
204 lines (182 loc) · 7.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
{{title|Libsimdpp reference}}
{| class="mainpagetable" cellspacing=0 style="width:100%; white-space:nowrap;"
|- class="row rowtop"
| colspan=4 | <span style="font-size: 2em;">Libsimdpp documentation</span>
|- class="row"
| colspan=4 |
<div style="white-space:normal;">
libsimdpp is a portable header-only zero-overhead C++ wrapper around
single-instruction multiple-data (SIMD) intrinsics found in many compilers. The
library presents a single interface over several instruction sets in such a way
that the same source code may be compiled for different instruction sets. The
resulting object files then may be hooked into internal dynamic dispatch
mechanism.
The library resolves differences between instruction sets by implementing the
missing functionality as a combination of several intrinsics. Moreover, the
library supplies a lot of additional, commonly used functionality, such as
various variants of matrix transpositions, interleaving loads/stores, optimized
compile-time shuffling instructions, etc. Each of these are implemented in the
most efficient manner for the target instruction set. Finally, it's possible
to fall back to native intrinsics when necessary, without compromising
maintainability.
The library sits somewhere in the middle between programming directly in
intrinsics and even higher-level SIMD libraries. As much control as possible
is given to the developer, so that it's possible to exactly predict what code
the compiler will generate.
</div>
|- class="row"
|
'''Instruction sets'''
<div class="mainpagediv">
[[arch/selection|Instruction set selection]]<br/>
[[arch/dispatch|Dynamic dispatch]]<br/>
</div>
'''[[depr|Deprecations]]'''
'''[[types|Types]]'''
<div class="mainpagediv">
[[types/overview|Overview]]<br/>
[[types/promotion|Vector type promotion]]<br/>
</div>
'''[[cap|Capabilities]]'''
'''[[util | Utilities]]'''
<div class="mainpagediv">
{{ltt|util#zzz|SIMDPP_ALIGN}}<br/>
{{ltt|util/aligned_allocator}}<br/>
[[util#Vector_size_macros|Vector size macros]]<br/>
[[util#Enabled_instruction_set | Enabled instruction set]]
</div>
'''[[conv | Conversions]]'''
<div class="mainpagediv">
{{ltt|conv/to_int8}} {{ltt|conv/to_uint8}}<br/>
{{ltt|conv/to_int16}} {{ltt|conv/to_uint16}}<br/>
{{ltt|conv/to_int32}} {{ltt|conv/to_uint32}}<br/>
{{ltt|conv/to_int64}} {{ltt|conv/to_uint64}}<br/>
{{ltt|conv/to_float32}} {{ltt|conv/to_float64}}<br/>
{{ltt|conv/to_mask}}
</div>
|
'''[[bitwise | Bitwise operations]]'''
<div class="mainpagediv">
{{ltt|bitwise/bit_and}} {{ltt|bitwise/bit_andnot}} <br/>
{{ltt|bitwise/bit_or}} {{ltt|bitwise/bit_xor}} <br/>
{{ltt|bitwise/bit_not}} <br/>
</div>
'''[[fp | Floating-point operations]]'''
<div class="mainpagediv">
{{ltt|fp/add}} {{ltt|fp/sub}} <br/>
{{ltt|fp/mul}} {{ltt|fp/div}} <br/>
{{ltt|fp/fmadd}} {{ltt|fp/fmsub}} <br/>
{{ltt|fp/neg}} <br/>
{{ltt|fp/round}} {{ltt|fp/trunc}} <br/>
{{ltt|fp/floor}} {{ltt|fp/ceil}} <br/>
{{ltt|fp/cmp_eq}} {{ltt|fp/cmp_neq}} <br/>
{{ltt|fp/cmp_lt}} {{ltt|fp/cmp_gt}} <br/>
{{ltt|fp/cmp_le}} {{ltt|fp/cmp_ge}} <br/>
{{ltt|fp/abs}} {{ltt|fp/sign}} <br/>
{{ltt|fp/min}} {{ltt|fp/max}} <br/>
{{ltt|fp/isnan}} {{ltt|fp/isnan2}} <br/>
{{ltt|fp/sqrt}} <br/>
{{ltt|fp/rcp_e}} {{ltt|fp/rcp_rh}} <br/>
{{ltt|fp/rsqrt_e}} {{ltt|fp/rsqrt_rh}} <br/>
{{ltt|fp/reduce_add}} {{ltt|fp/reduce_mul}} <br/>
{{ltt|fp/reduce_min}} {{ltt|fp/reduce_max}} <br/>
</div>
'''[[operator | Operators]]'''
<div class="mainpagediv">
{{tt|+}} {{tt|-}}
{{tt|*}} {{tt|/}}
{{tt|<<}} {{tt|>>}}<br/>
{{tt|&}} {{tt|{{!}}}}
{{tt|^}} {{tt|~}}<br/>
{{tt|{{==}}}} {{tt|!{{=}}}}
{{tt|>}} {{tt|>{{=}}}}
{{tt|<}} {{tt|<{{=}}}}<br/>
</div>
|
'''[[int | Integer operations]]'''
<div class="mainpagediv">
{{ltt|int/add}} {{ltt|int/sub}} <br/>
{{ltt|int/add_sat}} {{ltt|int/sub_sat}} <br/>
{{ltt|int/mul_lo}} {{ltt|int/mul_hi}} <br/>
{{ltt|int/mull}} {{ltt|int/neg}} <br/>
{{ltt|int/cmp_eq}} {{ltt|int/cmp_neq}} <br/>
{{ltt|int/cmp_lt}} {{ltt|int/cmp_gt}} <br/>
{{ltt|int/cmp_le}} {{ltt|int/cmp_ge}} <br/>
{{ltt|int/abs}} <br/>
{{ltt|int/avg}} {{ltt|int/avg_trunc}} <br/>
{{ltt|int/min}} {{ltt|int/max}} <br/>
{{ltt|int/shift_l}} {{ltt|int/shift_r}} <br/>
{{ltt|int/reduce_add}} {{ltt|int/reduce_mul}} <br/>
{{ltt|int/reduce_min}} {{ltt|int/reduce_max}} <br/>
{{ltt|int/reduce_and}} {{ltt|int/reduce_or}} <br/>
</div>
'''[[mem | Memory access]]'''
<div class="mainpagediv">
{{ltt|mem/load}} {{ltt|mem/load_u}} <br/>
{{ltt|mem/load_splat}} <br/>
{{ltt|mem/load_packed2}}<br/>
{{ltt|mem/load_packed3}} <br/>
{{ltt|mem/load_packed4}} <br/>
{{ltt|mem/store}} {{ltt|mem/stream}} <br/>
{{ltt|mem/store_first}} {{ltt|mem/store_last}} <br/>
{{ltt|mem/store_packed2}}<br/>
{{ltt|mem/store_packed3}} <br/>
{{ltt|mem/store_packed4}} <br/>
</div>
|
'''[[shuffle | Shuffle operations]]'''
<div class="mainpagediv">
{{ltt|shuffle/blend}} {{ltt|shuffle/splat}} <br/>
{{ltt|shuffle/combine}} {{ltt|shuffle/split}} <br/>
{{ltt|shuffle/permute2}} {{ltt|shuffle/permute4}} <br/>
{{ltt|shuffle/shuffle2x2}} {{ltt|shuffle/shuffle4x2}} <br/>
{{ltt|shuffle/transpose2}} {{ltt|shuffle/transpose4}} <br/><br/>
Shuffles operating on 128-bit blocks <br/>
{{ltt | shuffle/alignX_128 | align16 align8 align4 align2 }} <br/>
{{ltt | shuffle/splatX_128 | splat16 splat8 splat4 splat2 }} <br/>
{{ltt | shuffle/moveX_l_128 | move16_l move8_l move4_l move2_l }} <br/>
{{ltt | shuffle/moveX_r_128 | move16_r move8_r move4_r move2_r }} <br/>
{{ltt | shuffle/zipX_hi_128 | zip16_hi zip8_hi zip4_hi zip2_hi }} <br/>
{{ltt | shuffle/zipX_lo_128 | zip16_lo zip8_lo zip4_lo zip2_lo }} <br/>
{{ltt | shuffle/unzipX_hi_128 | unzip16_hi unzip8_hi<br/>unzip4_hi unzip2_hi }} <br/>
{{ltt | shuffle/unzipX_lo_128 | unzip16_lo unzip8_lo<br/>unzip4_lo unzip2_lo }} <br/>
{{ltt | shuffle/make_shuffle_bytes16_mask}}<br/>
{{ltt | shuffle/shuffle_bytes16}} {{ltt | shuffle/shuffle_zbytes16}}<br/>
{{ltt | shuffle/permute_bytes16}} {{ltt | shuffle/permute_zbytes16}}<br/>
</div>
'''[[misc | Miscellaneous operations]]'''
<div class="mainpagediv">
{{ltt|misc/make_int}} {{ltt|misc/make_uint}} {{ltt|misc/make_float}} <br/>
{{ltt|misc/extract}} {{ltt|misc/insert}} {{ltt|misc/splat|splat{{small|(scalar)}}}} <br/>
{{ltt|misc/for_each}} {{ltt|misc/test_bits_any}}<br/>
{{ltt|misc/bit_cast}}<br/>
{{ltt|misc/prefetch_read}} {{ltt|misc/prefetch_write}}
</div>
'''[[Algorithm | STL like algorithm]]'''
<div class="mainpagediv">
{{ltt|algorithm/any_of}}<br/>
{{ltt|algorithm/all_of}}<br/>
{{ltt|algorithm/copy}}<br/>
{{ltt|algorithm/copy_n}}<br/>
{{ltt|algorithm/count}}<br/>
{{ltt|algorithm/count_if}}<br/>
{{ltt|algorithm/equal}}<br/>
{{ltt|algorithm/fill}}<br/>
{{ltt|algorithm/find}}<br/>
{{ltt|algorithm/find_if}}<br/>
{{ltt|algorithm/find_if_not}}<br/>
{{ltt|algorithm/lexicographical_compare}}<br/>
{{ltt|algorithm/max}}<br/>
{{ltt|algorithm/max_element}}<br/>
{{ltt|algorithm/min}}<br/>
{{ltt|algorithm/min_element}}<br/>
{{ltt|algorithm/none_of}}<br/>
{{ltt|algorithm/reduce}}<br/>
{{ltt|algorithm/replace}}<br/>
{{ltt|algorithm/replace_if}}<br/>
{{ltt|algorithm/transform}}<br/>
{{ltt|algorithm/transform_reduce}}<br/>
</div>
|- class="row rowbottom"
| colspan=4|
|}