-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcuda-backend.html
More file actions
134 lines (105 loc) · 5.28 KB
/
cuda-backend.html
File metadata and controls
134 lines (105 loc) · 5.28 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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="keywords" content="OpenCL portable OpenCL PoCL pocl Portable Computing Langauge" />
<meta name="description" content="PoCL - Portable Computing Language" />
<meta property="og:title" content="PoCL home page"/>
<meta property="og:site_name" content="PoCL"/>
<meta property="og:type" content="website"/>
<meta property="og:description" content="PoCL: a performance portable open source OpenCL implementation"/>
<meta property="og:url" content="http://portablecl.org"/>
<title>PoCL - Portable Computing Language | NVIDIA GPU support via CUDA backend</title>
<link rel="stylesheet" type="text/css" href="pocl-style.css" />
</head>
<body>
<div id="page">
<div id="header">
<h1 id="title"><span style="height: 100%; vertical-align: middle;"></span>
<a href="http://portablecl.org"><img src="img/pocl-80x60.png" border="0" style="vertical-align: middle;"></a>
<span style="height: 100%; vertical-align: middle;"> Portable Computing Language | NVIDIA GPU support via CUDA backend</span></h1>
</div>
<div id="navi">
<ul id="menu_item_list">
<li class="menu_item"><a href="index.html" class="menu_link">Main</a></li>
<li class="menu_item"><a href="download.html" class="menu_link">Download</a></li>
<li class="menu_item"><a href="docs/html" class="menu_link">Documentation</a></li>
<li class="menu_item"><a href="contact.html" class="menu_link">Contact</a></li>
<li class="menu_item"><a href="publications.html" class="menu_link">Publications</a></li>
</ul>
</div>
<div id="content">
<h1>April 2017: NVIDIA GPU support via CUDA backend</h1>
<p>
pocl now has experimental support for NVIDIA GPU devices via a new backend
which makes use of the LLVM NVPTX backend and the CUDA driver API.
This work was primarily carried out by James Price from the
<a href="http://uob-hpc.github.io">High Performance Computing group</a> at the
University of Bristol.
</p>
<h2>Status</h2>
<p>
Instructions for building and using the CUDA backend can be found in the
<a href="http://portablecl.org/docs/html/cuda.html">user manual</a>.
</p>
<p>
Although this backend is still a work in progress, many core features are
implemented, allowing real OpenCL applications to be run.
For example, we can run all of the OpenCL benchmarks from
<a href="https://github.com/vetter/shoc/wiki">SHOC</a>, with the exception of
those that require support for image types.
The performance on the SHOC benchmarks compared to NVIDIA's own OpenCL
implementation is shown below.
While there is still a lot of room for improvement in a few of these benchmarks,
many of them achieve performance close to the NVIDIA driver, and in one case
exceeds it.
At this stage we have only been focusing on implementing functionality, so we
believe there is the potential to significantly improve the performance of this
backend in the future.
</p>
<img src="img/pocl-nvidia-SHOC-April17.png" border="0" style="vertical-align: middle;" />
<p>
One key advantage of having an open source alternative to the proprietary NVIDIA
OpenCL implementation is our ability to add support for things that NVIDIA
doesn't.
For example, this backend allows us to run SPIR-based applications on NVIDIA
devices, such as SYCL codes compiled with
<a href="https://www.codeplay.com/products/computesuite/computecpp">Codeplay's
ComputeCpp compiler</a>.
We can also use this backend on ARM-based platforms with NVIDIA GPUs, such as
the Jetson TK1 and TX1 development boards, which NVIDIA doesn't publicly release
OpenCL support for.
In the future, this could extend to adding support for OpenCL subgroups, SPIR-V
consumption, or other features from recent versions of the OpenCL standard.
Finally, since this backend makes use of CUDA under-the-hood, we can also use
all of the CUDA development tools that NVIDIA provide (such as their visual
profiler), many of which currently don't support OpenCL directly.
</p>
<h4>Known limitations (at the time of writing):</h4>
<ul>
<li>image types and samplers are unimplemented</li>
<li>atomics are unimplemented</li>
<li>global offsets are unimplemented</li>
<li>get_work_dim() is unimplemented</li>
<li>printf format support is incomplete</li>
</ul>
<h2>Contributing</h2>
<p>
We welcome any contributions in the form of bug reports and pull requests.
In particular, we are keen to see contributions that fill in the remaining
functionality, as well as performance improvements.
If you're interested in helping out but aren't sure what to work on, drop into
the pocl IRC or get in touch with James Price for more information.
</p>
</div>
<div id="footer">
<span style="height: 100%; vertical-align: middle;"></span>
<a href="http://portablecl.org"><img src="img/pocl-80x60.png" border="0" style="vertical-align: middle;"></a>
<span style="height: 100%; vertical-align: middle;">Portable Computing Language © 2010-2025 PoCL developers
</span>
</div>
</div>
</body>
</html>