-
Notifications
You must be signed in to change notification settings - Fork 119
Expand file tree
/
Copy pathindex.html
More file actions
176 lines (175 loc) · 6.53 KB
/
Copy pathindex.html
File metadata and controls
176 lines (175 loc) · 6.53 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
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" href="../../Static/css/reveal.css"/>
<link rel="stylesheet" href="../../Static/css/theme/white.css"/>
<link rel="stylesheet" href="../../Static/css/custom.css"/>
<link rel="stylesheet" href="../../Static/css/atom-one-light.css"/>
<script src="../../node_modules/reveal.js/dist/reveal.js" defer></script>
<script src="../../node_modules/reveal.js/dist/plugin/markdown.js" defer></script>
<script src="../../node_modules/reveal.js/dist/plugin/highlight.js" defer></script>
<script src="../../node_modules/reveal.js/dist/plugin/notes.js" defer></script>
<script src="../../js/plugins/merge-html.js" defer></script>
<script src="../../js/setup.js" defer></script>
</head>
<body>
<div class="reveal">
<div class="slides">
<!--Slide 1-->
<section class="hbox">
<div class="hbox" data-markdown>
## Introduction to USM
</div>
</section>
<!--Slide 2-->
<section class="hbox" data-markdown>
## Learning Objectives
* Learn about the USM data management model
* Learn about the benefits of USM and when to use it
* Learn about the variations of USM
* Learn about the kinds of USM memory allocations
</section>
<!--Slide 3-->
<section>
<div class="hbox" data-markdown>
#### What is USM?
</div>
<div class="container" data-markdown>
Unified shared memory (USM) provides a pointer-based data management model
</div>
<div class="container" data-markdown>
* Unified virtual address space
* Pointer-based structures
* Explicit memory management
* Shared memory allocations
</div>
</section>
<!--Slide 4-->
<section>
<div class="hbox" data-markdown>
#### Unified virtual address space
</div>
<div class="container">
<div class="col" data-markdown>

</div>
<div class="col" data-markdown>
* USM memory allocations return pointers which are consistent between the host application and kernel functions on a device
* Pointer-based API more familiar to C or C++ programmers
</div>
</div>
</section>
<!--Slide 5-->
<section>
<div class="hbox" data-markdown>
#### Pointer based structures
</div>
<div class="container">
<div class="col" data-markdown>

</div>
<div class="col" data-markdown>
* Data is moved between the host and device(s) in a span of memory in bytes
* Pointers within that region of memory can freely point to any other address in that region
* Easier to port existing C or C++ code to use SYCL
</div>
</div>
</section>
<!--Slide 6-->
<section>
<div class="hbox" data-markdown>
#### Explicit memory management
</div>
<div class="container">
<div class="col" data-markdown>

</div>
<div class="col" data-markdown>
* Memory is allocated and data is moved using explicit routines
* The SYCL runtime will not perform any data dependency analysis, dependencies between commands must be managed manually
</div>
</div>
</section>
<!--Slide 7-->
<section>
<div class="hbox" data-markdown>
#### Shared memory allocations
</div>
<div class="container">
<div class="col" data-markdown>

</div>
<div class="col" data-markdown>
* Some platforms will support variants of USM where memory allocations share the same memory region between the host and device(s)
* No explicit routines are required to move the data between the host and device(s)
</div>
</div>
</section>
<!--Slide 8-->
<section>
<div class="hbox" data-markdown>
#### USM allocation types
</div>
<div class="container" data-markdown>
USM has three different kinds of memory allocation
</div>
<div class="container" data-markdown>
* A **host** allocation is allocated in host memory
* A **device** allocation is allocation in device memory
* A **shared** allocation is allocated in shared memory and can migrate back and forth
</div>
</section>
<!--Slide 9-->
<section>
<div class="hbox" data-markdown>
#### USM variants
</div>
<div class="container" data-markdown>
USM has four variants which a platform can support with varying levels of support.
Only Explicit USM is guraranteed to be available, with the others optional.
</div>
<div class="container" data-markdown>
| | Explicit USM | Restricted USM | Concurrent USM | System USM |
|------------------------|--------------|----------------|----------------|------------|
| Consistent pointers | ✓ | ✓ | ✓ | ✓ |
| Pointers in structures | ✓ | ✓ | ✓ | ✓ |
| Explicit data movement | ✓ | ✓ | ✓ | ✓ |
| Shared allocations | ✗ | ✓ | ✓ | ✓ |
| Concurrent access | ✗ | ✗ | ✓ | ✓ |
| System allocations | ✗ | ✗ | ✗ | ✓ |
</div>
</section>
<!--Slide 10-->
<section>
<div class="hbox" data-markdown>
#### Querying for support
</div>
<div class="container" data-markdown>
Each SYCL platform and its device(s) will support
different variants of USM and different kinds of memory allocation
</div>
<pre><code class="language-cpp" data-line-numbers>if (dev.has(sycl::aspect::usm_device_allocations))</code></pre>
</section>
<!--Slide 12-->
<section>
<div class="hbox" data-markdown>
## Questions
</div>
</section>
<!--Slide 13-->
<section>
<div class="hbox" data-markdown>
#### Exercise
</div>
<div class="container" data-markdown>
Code_Exercises/Introduction_to_USM/source
</div>
<div class="container" data-markdown>
Implement a device selector that chooses a device in your system which supports explicit USM and device allocations
</div>
</section>
</div>
</div>
</body>
</html>