/
research.html
298 lines (247 loc) · 16.7 KB
/
research.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
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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
<HTML>
<HEAD>
<TITLE>Research</TITLE>
<meta charset="UTF-8">
<meta name="description" content="Research related stuff. List of publications and such">
<meta name="keywords" content="research functional programming fp haskell gpu parallelism">
<meta name="author" content="Bo Joel Svensson">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</HEAD>
<style type="text/css">
body, html {
margin-left: 5%;
margin-right: 5%;
}
.topnav {
overflow: auto;
white-space: nowrap;
background-color: #333;
}
.topnav a {
display: inline-block;
color: #f2f2f2;
text-align: center;
padding: 14px 16px;
text-decoration: none;
font-size: 17px;
}
.topnav a:hover {
background-color: #ddd;
color: black;
}
.topnav a.active {
background-color: #4CAF50;
color: white;
}
.hero-image {
background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url("./images/nerd.jpg");
height: 50%;
/* Position and center the image to scale nicely on all screens */
background-position: center;
background-repeat: no-repeat;
background-size: cover;
position: relative;
}
/* Place text in the middle of the image */
.hero-text {
text-align: center;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: gray;
}
body, html {
margin-left: 5%;
margin-right: 5%;
font-size: large;
zoom-level: 150%;
}
pre {
background-color: white;
word-wrap: normal;
overflow-x: auto;
white-space: pre;
margin-left: 2%;
margin-right: 2%;
}
img {
max-width:100%;
height:auto;
}
.yt-link {
text-align: center;
}
.yt-link img {
display: block;
margin: 0 auto;
max-width: 100%
}
</style>
<BODY bgcolor=#C0C0C0>
<div class="hero-image">
<div class="hero-text">
<h1>Research</h1>
</div>
</div>
<div class="topnav">
<a href="./index.html"> Home </a>
<a href="./index.html#BLOG"> Blog </a>
<a href="./index.html#VIDEOS"> Videos </a>
<a class="active" href="./research.html"> Research </a>
<a href="./lispbm.html"> LispBM </a>
<a href="./about.html"> About </a>
<a href="./privacy_policy.html">Privacy Policy</a>
</div>
<h2>Research</h2>
<b> Functional Programming and microcontrollers, Functional Programming in hardware design, Functional Programming in IoT</b><br>
Until May 2022 I worked at Chalmers University of technology doing reserach in the Functional Programming research group. My research is revolving around
functional programming for resource constrained platforms. <br>
I work on a bytecode virtual machine together with a bunch of colleagues at Chalmers. The focus of this VM is IoT application and we hope to focus on security and robustness.
We call the VM <a href="https://github.com/svenssonjoel/Sense-VM"> Sense-VM </a>. <br>
Mostly as a hobby, but also as a way to learn about microcontrollers while doing something fun, I develop a Lisp interpreter, bytecode compiler and bytecode virtual machine (work in progress) for
the STM32, ESP32 and NRF52 microcontrollers as well as on Xilinx Zynq 7000 (any 32 bit platform with a reasonable amount of memory should be fine) that I call <a href="https://github.com/svenssonjoel/lispBM"> LispBM</a>.
<br><br>
<b> Autonomous Vehicles, Vehicle Electronic Architecture, Embedded Systems </b><br>
At RISE I was involved in work related to the <a href=http://www.github.se/vedderb/rise_sdvp>RISE Self Driving Vehicle Platform</a>
together with <a href=https://vedder.se/>Benjamin Vedder</a>. Benjamin is not at RISE anymore but I enjoyed working with him a lot.
I have also been a part of a research project involving <a href=http://propart-project.eu/> UWB positioning and Galileo </a> and
the <a href=https://www.vinnova.se/en/p/chronos-part-2/> Chronos </a> projects about testing autonomous and ADAS functionality at AstaZero.
At RISE I had the chance to get started on PCB design under the mentorship of Benjamin Vedder. <br> <br>
<b> Reconfigurable computing </b> <br>
I have worked on acceleration of applications by utilising reconfigurable hardware, Field Programmable Gate Arrays (FPGAs), Xiling Zynq 7000 devices to be specific.
This work focused on OpenCL (High level synthesis) generated hardware kernels treated as compute black boxes. We experimented
with surrounding support infrastructure for making these OpenCL kernels execute more efficiently, for example by moving scheduling
of kernels into hardware, relieving the processing system of the ZYNQ of this task. My research in this area ended when I left Chalmers
but I continue to explore the Zynq platform and to write down what I learn in the form of <a href="https://www.researchgate.net/publication/302300881_Getting_Started_with_OpenCL_on_the_ZYNQ"> guides for beginners </a> of Zynq and FPGAs.
The Zynq development/experiment board I use is the <a href=https://wiki.trenz-electronic.de/display/PD/TE0726+Resources> Trenz ZynqBerry</a>.
<br><br>
<b> Streaming aggregation on an FPGA </b> <br>
<a href="http://www.cse.chalmers.se/~ramgee/"> Prajith</a> is doing research on acceleration of streaming computations using FPGAs and
I am happy to have worked with him in exploring the capabilities of the Maxeler machine.
<br>
<br>
<b> Lightweight binary-instrumentation </b> <br>
During a postdoc at Indiana University I participated in work on binary-instrumentation together with Buddhika Chamith and <a href="https://www.cs.indiana.edu/~rrnewton/homepage.html"> Ryan Newton </a>.
<br>
<br>
<b> Embedded languages and parallelism </b> <br>
During my Ph.D. studies <a href="http://www.cse.chalmers.se/~ms/">Mary Sheeran</a>, <a href="http://www.cse.chalmers.se/~koen/">Koen Claessen</a>, <a href="http://www.cse.chalmers.se/~josefs/">Josef Svenningsson</a> and I were exploring high level and functional approaches to program highly parallel computers such as a GPU.
Currently there are GPUs available with over a thousand processing elements. Our approach was to develop an embedded
language in the style of Lava, using combinators to describe
parallel computation structures. We call this language Obsidian. Running an Obsidian program results in a CUDA C program being generated.
We have also experimented with Haskell embeddings of
<a href="http://software.intel.com/en-us/articles/intel-array-building-blocks">Intel's Array Building Blocks</a>, ArBB.
This embedded language we call EmbArBB. <br>
<h3>Presentation slides</h3>
<ul>
<li><b>FP-Talk Dec 8 2023</b><a href ="./slides/LBM_DEC_8.pdf"> A Lisp for microcontrollers</a> (Dec 2023)
<li><b>Docent Presentation 2022</b><a href="./slides/docent_presentation.pdf">Mind the gap!</a> (April 2022)
<li><b>FP-Talk 2022</b><a href="./slides/fp_talk_28_jan.pdf">Concurrency, Message-passing and Pattern-matching in lispbm</a> (Jan 2022)
<li><b>PFP Course 2016</b><a href="./slides/PFP_LECTURE_2016.pdf"> Parallel Functional Programming </a>
<li><b>PFP Course 2013</b><a href="./slides/lecture2.pdf">Obsidian: Internals</a>(April 2013)
<li><b>PFP Course 2013</b><a href="./slides/lecture1.pdf">GPU Programming: Imperative and Functional Approaches</a>(April 2013)
<li><b>FHPC 2012</b><a href="./slides/AlmostFreePresentation.pdf">Parallel Programming in Haskell Almost for Free</a> (Sep 2012)
<li><b>Intel 2011</b><a href="./slides/Harbb.pdf"> Haskell+ArBB presentation.</a>(2011)<br>
<li><b><a href="./slides/shadowmapping.pdf"> Intro to basic Shadow mapping.</a> (2010)<br>
<li><b>Lic Presentation</b><a href="./slides/licpres.pdf"> slides. </a> <br>
<li><b><a href="http://www.cs.chalmers.se/Cs/Grundutb/Kurser/svh/index.html"> HDV </a> Course 2009</b> <a href="./slides/obsidian_090514.pdf">Obsidian: GPGPU
Programming in Haskell.</a>
(May 2009)
<li><b>IFL 2008</b> <a href="./slides/ifl2008_obsidian.pdf">Obsidian: A Domain
Specific Embedded Language for Parallel Programming of Graphics Processors.</a>
(Sep 2008)
<li><b>DCC 2008</b> <a href="./slides/dcc2008_obsidian.pdf">Obsidian: GPU
Programming in Haskell </a> (Mar 2008)
<li><b>Master thesis presentation</b> <a href="./slides/masterpres.pdf">An
Embedded language for data-parallel programming</a> (Feb 2008)
</ul>
<h3>Experiment documentation</h3>
<ul>
<li> <a href=./writing/zynqreduce.pdf> OpenCL Reduction on the Zynq </a> (2017)
</ul>
<h3>Technical reports</h3>
<ul>
<li> Bo Joel Svensson: <a href=./writing/ZynqBandwidth.pdf> Exploring OpenCL Memory Throughput on the Zynq </a> (2016)
<li> Bo Joel Svensson, Mary Sheeran, Ryan Newton: <a href="http://www.cs.indian
a.edu/cgi-bin/techreports/TRNNN.cgi?trnum=TR712">A Language for Nested Data Parallel Design-space Exploration on GPUs</a> (2014)
<li><b>(Thesis)</b> Bo Joel Svensson: <a href="./thesis/thesis.pdf">Embedded Languages for Data-Parallel Programming</a> (2013)
<li><b>(Licentiate Thesis)</b> Joel Svensson: <a href="./writing/lic.pdf">Obsidian:GPU Kernel Programming in Haskell</a> (2011)
<a href="./writing/jslic.bib">BIBTEX</a>
<li> Joel Svensson, Koen Claessen, Mary Sheeran:
<a href="./writing/GPGPU_tech.pdf">GPGPU Kernel Implementation using an Embedded Language: a Status Report</a> (Jan 2010)
</ul>
<h3>Publications</h3>
<ul>
<li><b>(MEMOCODE 2022)</b> Robert Krook, John Hui, Bo Joel Svensson, Stephen A. Edwards, Koen Claessen: <a href=./writing/krook_0.pdf> Creating a Language for Writing Real-Time Applications for the Internet of Things </a>
<li><b>(ECOOP 2022)</b> Abhiroop Sarkar, Bo Joel Svensson, Mary Sheeran: <a href=https://2022.ecoop.org/details/ecoop-2022-papers/19/Synchron-An-API-and-Runtime-for-Embedded-Systems> An API and Runtime for Embedded Systems </a>
<li><b>(MPLR 2021)</b> Abhiroop Sarkar, Robert krook, Bo Joel Svensson, Mary Sheeran: <a href=./writing/sensevm_mplr.pdf> Higher-Order Concurrency for Microcontrollers </a>
<li><b>(MDPI Electronics 2020)</b> Javier San Martin, Ainhoa Cortés, Leticia Zamora-Cadenas, Bo Joel Svensson: <a href=https://www.mdpi.com/2079-9292/9/8/1238> Precise Positioning of Autonomous Vehicles Combining UWB Ranging Estimations with On-Board Sensors </a>
<li><b>(HINDAWI Journal of Robotics 2020)</b> Benjamin Vedder, Bo Joel Svensson, Jonny Vinter, Magnus Jonsson: <a href=http://downloads.hindawi.com/journals/jr/2020/9345360.pdf> Automated Testing of Ultra-Wideband Positioning for Autonomous Driving </a>
<li><b>(ICFPT 2017)</b> Prajith Ramakrishnan Geethakumari, Vincenzo Gulisano, Bo Joel Svensson, Pedro Petersen Moura Trancoso, Philippas Tsigas and Ioannis Sourdis: <a href=http://ieeexplore.ieee.org/document/8280128/> Single Window Stream Aggregation using Reconfigurable Hardware</a>
<li><b>(PLDI 2017)</b> Buddhika Chamith De Alwis Kahawitage don, Luke Dalessandro, Bo Joel Svensson, Ryan R. Newton: <a href=https://dl.acm.org/citation.cfm?id=3062344&dl=ACM&coll=DL&CFID=1018008436&CFTOKEN=71615509> Instruction Punning: Lightweight Instrumentation for x86-64</a>
<li><b>(FHPC 2016)</b> Martin Dybdal, Martin Elsman, Bo Joel Svensson and Mary Sheeran: <a href=./writing/fhpc16-preprint.pdf> Low-level functional GPU programming for parallel algorithms </a>
<li><b>(CPC 2016)</b> Martin Dybdal, Martin Elsman, Bo Joel Svensson and Mary Sheeran: Low-level functional GPU programming for parallel algorithms
<li><b>(PLDI 2016)</b> Buddhika Chamith, Bo Joel Svensson, Luke Dalessandro, Ryan R. Newton: <a href=./writing/pldi16-crossmod.pdf> Living on the edge: Rapid-toggling probes with cross modification on x86</a>
<li><b>(JFP 2016)</b> Bo Joel Svensson, Mary Sheeran, Ryan Newton: <a href=http://journals.cambridge.org/action/displayFulltext?type=1&fid=10242178&jid=JFP&volumeId=26&issueId=-1&aid=10242156> A Language for Hierarchical Data Parallel Design-space Exploration on GPUs </a>
<li><b>(FHPC 2015)</b> Michael Vollmer, Bo Joel Svensson, Eric Holk, Ryan R. Newton: <a href=./writing/MetaAuto.pdf>Meta-Programming and Auto-Tuning in the Search for High Performance GPU Code</a>
<li><b>(FHPC 2015)</b> Bo Joel Svensson, Michael Vollmer, Eric Holk, Trevor L. McDonell, Ryan R. Newton: <a href=./writing/multidev.pdf> Converting Data-Parallelism to Task-Parallelism by Rewrites</a>
<li><b>(FHPC 2014)</b> Bo Joel Svensson, Josef Svenningsson: <a href=./writing/defuncEmb.pdf>Defunctionalizing Push Arrays</a> (2014)
<li><b>(CACM 2014)</b> Bo Joel Svensson, Mary Sheeran, Ryan Newton: <a href="http://cacm.acm.org/magazines/2014/6/175181-design-exploration-through-code-generating-dsls/fulltext">Design Exploration through Code-generating DSLs</a> (2014)
<li><b>(ACM Queue 2014)</b> Bo Joel Svensson, Mary Sheeran, Ryan Newton: <a href="http://dl.acm.org/citation.cfm?id=2626374">Design Exploration through Code-generating DSLs</a> (2014)
<li><b>(ICFP 2013)</b> Josef Svenningsson, Bo Joel Svensson: <a href="./writing/bb.pdf">Simple and Compositional Reification of Monadic Embedded Languages</a> (2013)
<li><b>(FHPC 2013)</b> Josef Svenningsson, Bo Joel Svensson, Mary Sheeran: <a href="./writing/csort.pdf">Counting and Occurrence sort for GPUs using an Embedded Language</a> (2013)
<li><b>(FHPC 2012)</b> Bo Joel Svensson, Mary Sheeran: <a href="./writing/almost_free.pdf"> Parallel Programming in Haskell Almost for Free</a> (2012)
<li><b>(DAMP 2012)</b> Koen Claessen, Mary Sheeran, Bo Joel Svensson: <a href="./writing/expressive.pdf"> Expressive Array Constructs in an Embedded GPU Kernel Programming Language</a> (2012) <a href="./expressive.html"> (more info) </a>
<li><b>(FASPP 2011)</b> Bo Joel Svensson, Ryan Newton: <a href="./writing/faspp2011_haskell_arbb.pdf">Programming Future Parallel Architectures with Haskell and ArBB</a> (2011)
<li><b>(PAPP 2010)</b> Joel Svensson, Koen Claessen, Mary Sheeran:
<a href="http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B9865-506HM1Y-86&_user=10&_coverDate=05%2F31%2F2010&_rdoc=230&_fmt=high&_orig=browse&_srch=doc-info(%23toc%2359117%232010%23999989998%232084734%23FLP%23display%23Volume)&_cdi=59117&_sort=d&_docanchor=&view=c&_ct=311&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=e80230792f0cba7f0c994856bde90b78"> GPGPU kernel implementation and refinement using Obsidian </a> (May 2010)
<li><b>(IFL 2008)</b> Joel Svensson, Mary Sheeran, Koen Claessen:
<a href="./writing/obsidian_ifl2008.pdf">Obsidian: A Domain Specific Embedded Language for Parallel Programming of Graphics Processors</a> (Sep 2008)
<li><b>(DCC 2008)</b> Joel Svensson, Mary Sheeran, Koen Claessen:
<a href="./writing/dccpaper_obsidian.pdf">Obsidian: GPU Programming in
Haskell</a> (Mar 2008)
<!--
<li><b>(Course handin)</b> Joel Svensson: <a href="./writing/optobsidian.pdf">
Optimising Obsidian Programs Through Derivations</a> (June 2008)
-->
<!--
<li><b>(Master thesis)</b> Joel Svensson: <a href="./writing/joelmscthesis.pdf">
An embedded language for data-parallel programming</a> (Jan 2008)
-->
</ul>
<!--
<h3>Drafts</h3>
-->
<hr>
<h3> Presentations by others </h3>
<ul>
<li><b>FP-TALK 2020</b><a href="./writing/fossi_chalmers.pdf"> Olof Kindgren : An introduction to open source silicon talk given at Chalmers FP-Talks </a>
</ul>
<hr>
<h3>Related to Obsidian</h3>
<ul>
<li> Niklas Ulvinge: <a href="http://publications.lib.chalmers.se/records/fulltext/194157/194157.pdf"> Increasing programmability of an embedded domain specific language for GPGPU kernels using static analysis</a> (2014)
<li> Chris Ouwehand: <a href="./writing/GPUFL.pdf">GPU Programming in Functional Languages</a> (2013)
<li> Alex Cole, Alistair A. McEwan, Geoffrey Mainland: <a href="http://www.y-less.com/list.php?id=2"> Beauty And The Beast: Exploiting GPUs in Haskell</a> (2012)
</ul>
<hr>
<h3>Download Obsidian, EmbArBB and other Projects</h3>
From Github <a href ="http://svenssonjoel.github.com"> (svenssonjoel) </a><br>
<hr>
<h3> Counting sort</h3>
<a href="./csort.html"> link </a><br>
<hr>
<h3>Related links</h3>
<a href="http://www.gpgpu.org"> www.gpgpu.org </a> <br>
<a href="http://www.nvidia.com/cuda"> NVIDIA CUDA </a> <br>
<a href="http://software.intel.com/en-us/articles/intel-array-building-blocks">Intel's Array Building Blocks</a><br>
<br>
<h3> Other links </h3>
<a href="http://www.github.com/svenssonjoel"> <font size="+2"> Github </font> </a> <br>
<a href="http://www.researchgate.net/profile/Bo_Joel_Svensson"> <font size="+2"> Researchgate </font> </a> <br>
<a href="https://scholar.google.se/citations?user=Ja6gzfgAAAAJ&hl=en"> <font size="+2"> Google Scholar </font> </a> <br>
<div itemscope itemtype="https://schema.org/Person"><a itemprop="sameAs" content="https://orcid.org/0000-0003-0363-1206" href="https://orcid.org/0000-0003-0363-1206" target="orcid.widget" rel="noopener noreferrer" style="vertical-align:top;"><img src="https://orcid.org/sites/default/files/images/orcid_16x16.png" style="width:1em;margin-right:.5em;" alt="ORCID iD icon">orcid.org/0000-0003-0363-1206</a></div>
© Copyright 2020 Bo Joel Svensson
</BODY>
</HTML>