File: data_transfer.rst

package info (click to toggle)
xsimd 13.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,716 kB
  • sloc: cpp: 36,557; sh: 541; makefile: 184; python: 117
file content (84 lines) | stat: -rw-r--r-- 5,021 bytes parent folder | download
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
.. Copyright (c) 2016, Johan Mabille, Sylvain Corlay 

   Distributed under the terms of the BSD 3-Clause License.

   The full license is in the file LICENSE, distributed with this software.

Data transfer
=============

From memory:

+---------------------------------------+----------------------------------------------------+
| :cpp:func:`load`                      | load values from memory                            |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`load_aligned`              | load values from aligned memory                    |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`load_unaligned`            | load values from unaligned memory                  |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`load_as`                   | load values, forcing a type conversion             |
+---------------------------------------+----------------------------------------------------+

From a scalar:

+---------------------------------------+----------------------------------------------------+
| :cpp:func:`broadcast`                 | broadcasting a value to all slots                  |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`broadcast_as`              | broadcasting a value, forcing a type conversion    |
+---------------------------------------+----------------------------------------------------+

To memory:

+---------------------------------------+----------------------------------------------------+
| :cpp:func:`store`                     | store values to memory                             |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`store_aligned`             | store values to aligned memory                     |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`store_unaligned`           | store values to unaligned memory                   |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`store_as`                  | store values, forcing a type conversion            |
+---------------------------------------+----------------------------------------------------+

In place:

+---------------------------------------+----------------------------------------------------+
| :cpp:func:`swizzle`                   | rearrange slots within the batch                   |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`slide_left`                | bitwise shift the whole batch to the left          |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`slide_right`               | bitwise shift the whole batch to the right         |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`rotate_left`               | bitwise rotate the whole batch to the left         |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`rotate_right`              | bitwise rotate the whole batch to the right        |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`insert`                    | modify a single batch slot                         |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`compress`                  | pack elements according to a mask                  |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`expand`                    | select contiguous elements from the batch          |
+---------------------------------------+----------------------------------------------------+

Between batches:

+---------------------------------------+----------------------------------------------------+
| :cpp:func:`transpose`                 | tranpose a matrix as an array of batches           |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`zip_lo`                    | interleave low halves of two batches               |
+---------------------------------------+----------------------------------------------------+
| :cpp:func:`zip_hi`                    | interleave high halves of two batches              |
+---------------------------------------+----------------------------------------------------+

----

.. doxygengroup:: batch_data_transfer
   :project: xsimd
   :content-only:

The following empty types are used for tag dispatching:

.. doxygenstruct:: xsimd::aligned_mode
   :project: xsimd

.. doxygenstruct:: xsimd::unaligned_mode
   :project: xsimd