-
Notifications
You must be signed in to change notification settings - Fork 0
/
texas-instruments-pocl-use-case.html
134 lines (102 loc) · 6.02 KB
/
texas-instruments-pocl-use-case.html
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 | Kernel De-SPMD Compilation for Texas Instruments' DSPs</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 | Kernel De-SPMD Compilation for Texas Instruments' DSPs</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="development.html" class="menu_link">Development</a></li>
<li class="menu_item"><a href="discussion.html" class="menu_link">Discussion</a></li>
<li class="menu_item"><a href="https://github.com/pocl/pocl/wiki" class="menu_link">Wiki</a></li>
<li class="menu_item"><a href="publications.html" class="menu_link">Publications</a></li>
</ul>
</div>
<div id="content">
<p>[2016-07-01] pocl developers were recently happy to find out that also Texas Instruments
is using a core component, the "de-spmd" kernel compiler of pocl, in their OpenCL SDK for
a range of DSPs.</p>
<p>After querying for details, we received the following response (published
here verbatim with permission):<p>
<span style="text-align:center">
<div style="margin:20px">
<p><i>
Thanks for the good work in POCL. We at Texas Instruments found the LLVM
passes from POCL very useful. The modular design of POCL enables us to
incorporate passes into TI's OpenCL C kernel compilation flow. We use POCL
LLVM passes to transform OpenCL C kernel function written as a work-item
function into an aggregated work-group function which iterates through all
work-items. We support OpenCL on various TI's SoCs (ARM as host + DSP as device)
as well as desktop with attached PCI-E cards (x86 as host + DSP on PCI-E as device).
List of supported platforms can be found <a href="http://downloads.ti.com/mctools/esd/docs/opencl/intro.html">here</a>.</p>
<p>We have done some modifications to the POCL LLVM passes. For example, since we
do not perform re-compilation at every kernel invocation, we parameterize the loop
bounds when generating loops around work-items. We offer both online and offline kernel compilation.
We annotate POCL privatized data with meta data so that our down-stream compiler tool chain can do
a better alias analysis. We do not privatize allocas that only exist in a single POCL analyzed
ParallelRegion. All our modifications to POCL as well as our OpenCL runtime source code are
available on the public <a href="http://git.ti.com/gitweb/?p=opencl/ti-opencl.git">git repository</a>
(you already know this address:), you are welcome to merge any of our changes back to POCL
if you find them useful. I think POCL licenses and TI licenses we use for OpenCL source code are compatible.</p>
<p>Thanks again for the excellent work, from the Texas Instruments Multicore Tools Team (supporting
TI's multicore platforms with compiler and runtime including OpenCL, OpenMP and OpenMP Accelerated Model)!</p>
<p>- Yuan</p>
</i>
</p>
</div>
</span>
<p>It seems their pocl kernel compiler version is not the most recent one as upstream
pocl was quite recently added the generation of work-group functions with dynamic
local size and proper offline compilation. However, we will definitely take a
closer look at their branch if the other mentioned improvements could be upstreamed!</p>
<br/>
<p>As always, if you have found any other interesting use cases for pocl,
<a href="http://portablecl.org/discussion.html">please let us know</a>, we'll be
happy to tell about them here.</p>
<p><i>- Pekka</i></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-2023 PoCL developers
</span>
</div>
<div class="g-plusone" data-annotation="inline" data-width="300"></div>
</div>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-36911879-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
</script>
</body>
</html>