<feed xmlns='http://www.w3.org/2005/Atom'>
<title>symlbm_playground/template, branch visualization</title>
<subtitle>Tinkering with LBM, OpenCL and SymPy-based code generation</subtitle>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/'/>
<entry>
<title>Use new projection utilities in LDC 3D</title>
<updated>2019-09-23T17:39:03+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-09-23T17:39:03+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=191c425e06c040afc0e24fec9c854090fa032461'/>
<id>191c425e06c040afc0e24fec9c854090fa032461</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Implement basic diffusive lighting in volumetric raytracer</title>
<updated>2019-09-23T13:42:21+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-09-23T13:42:21+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=beda0edf885608ffbb6498f97bf7e4fc08df1e27'/>
<id>beda0edf885608ffbb6498f97bf7e4fc08df1e27</id>
<content type='text'>
Approximated surface normals are encoded into the moments texture.
These normals are restored when the ray marcher encounters an
impermeable cell. Note that normals are shifted to be &gt;= 0 as negative
values are not representable using OpenGL textures.

If this prototype works out it might be preferable to calculate better
surface normals during preprocessing to be stored separately.

Compare to 6123c8a.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Approximated surface normals are encoded into the moments texture.
These normals are restored when the ray marcher encounters an
impermeable cell. Note that normals are shifted to be &gt;= 0 as negative
values are not representable using OpenGL textures.

If this prototype works out it might be preferable to calculate better
surface normals during preprocessing to be stored separately.

Compare to 6123c8a.
</pre>
</div>
</content>
</entry>
<entry>
<title>Extract GL moments, particle buffers and add texture buffer</title>
<updated>2019-09-21T16:19:22+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-09-21T16:19:22+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=b770e7452c11cf0acdccf824c9c9304e9de3f08b'/>
<id>b770e7452c11cf0acdccf824c9c9304e9de3f08b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Extract indicators, drawing of geometric primitives</title>
<updated>2019-09-17T19:25:27+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-09-17T19:25:27+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=6bed7f80ea8e67c388f1c52a60237e7ceb8c274e'/>
<id>6bed7f80ea8e67c388f1c52a60237e7ceb8c274e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add 3d lid driven cavity OpenGL visualization</title>
<updated>2019-09-13T21:01:06+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-09-13T21:01:06+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=bf728d8a33b57b2b775b9a1c3bc8f2d84388acd6'/>
<id>bf728d8a33b57b2b775b9a1c3bc8f2d84388acd6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Cleanup</title>
<updated>2019-09-11T17:12:29+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-09-11T17:12:29+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=89f21e0a1fceacea5ed2c2b02dfcaca76249aec2'/>
<id>89f21e0a1fceacea5ed2c2b02dfcaca76249aec2</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add a fun little fake bonfire _simulation_</title>
<updated>2019-09-06T20:29:05+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-09-06T20:29:05+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=bf967631c146997d7673798318d94b0a186ec89d'/>
<id>bf967631c146997d7673798318d94b0a186ec89d</id>
<content type='text'>
…using appropriately colored aging particles
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
…using appropriately colored aging particles
</pre>
</div>
</content>
</entry>
<entry>
<title>Reset stuck particles to starting position</title>
<updated>2019-09-04T20:52:38+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-09-04T20:52:38+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=4974c2ccc7f640d6a657c22cc1a3dfa9d114b8f0'/>
<id>4974c2ccc7f640d6a657c22cc1a3dfa9d114b8f0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Prototype "ink" particles visualization</title>
<updated>2019-09-01T21:06:10+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-09-01T21:06:10+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=a89d3eba9aec11a4f55817fcdb189fcd6f26b574'/>
<id>a89d3eba9aec11a4f55817fcdb189fcd6f26b574</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Dampen channel inflow</title>
<updated>2019-07-25T18:59:06+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-07-25T18:59:06+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=bcc087a36ea7d84ac61a2c756458a208f6bc3ff3'/>
<id>bcc087a36ea7d84ac61a2c756458a208f6bc3ff3</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Implement layout and memory padding</title>
<updated>2019-06-29T21:45:47+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-29T21:45:47+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=b3acd514c5d629781e816b847aff9891015fa7bd'/>
<id>b3acd514c5d629781e816b847aff9891015fa7bd</id>
<content type='text'>
There are at least two distinct areas where padding can be beneficial on a GPU:

1. Padding the global thread sizes to support specific thread layouts
   e.g. (32,1) layouts require the global lattice width to be a multiple of 32
2. Padding the memory layout at the lowest level to align memory accesses
   i.e. some GPUs read memory in 128 Byte chunks and as such it is beneficial if
   the operations are aligned accordingly

For lattice and thread layout sizes that are exponents of two these two padding
areas are equivalent. However when one operates on e.g. a (300,300) lattice using
a (30,1) layout, padding to 128 bytes yields a performance improvement of about
10 MLUPS on a K2200.

Note that I am getting quite unsatisfied with how the Lattice class and
its suroundings continue to accumulate parameters. The naming distinction
between Geometry, Grid, Memory and Lattice is also not very intuitive.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There are at least two distinct areas where padding can be beneficial on a GPU:

1. Padding the global thread sizes to support specific thread layouts
   e.g. (32,1) layouts require the global lattice width to be a multiple of 32
2. Padding the memory layout at the lowest level to align memory accesses
   i.e. some GPUs read memory in 128 Byte chunks and as such it is beneficial if
   the operations are aligned accordingly

For lattice and thread layout sizes that are exponents of two these two padding
areas are equivalent. However when one operates on e.g. a (300,300) lattice using
a (30,1) layout, padding to 128 bytes yields a performance improvement of about
10 MLUPS on a K2200.

Note that I am getting quite unsatisfied with how the Lattice class and
its suroundings continue to accumulate parameters. The naming distinction
between Geometry, Grid, Memory and Lattice is also not very intuitive.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add platform, precision and thread layout parameters</title>
<updated>2019-06-22T12:44:50+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-22T12:44:50+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=4df2d7678755c652f7af3d579a812dfc091a00e6'/>
<id>4df2d7678755c652f7af3d579a812dfc091a00e6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Gather interop moments in a more generic manner</title>
<updated>2019-06-21T18:41:11+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-21T18:41:11+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=1f5b9393f7317f7e505fd4f60991797fa273e3d2'/>
<id>1f5b9393f7317f7e505fd4f60991797fa273e3d2</id>
<content type='text'>
i.e. return unshifted moments in a implicitly ordered float4 array.
Cell positions are reconstructed by a vertex shaded analogously to
how it is done in compustream.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
i.e. return unshifted moments in a implicitly ordered float4 array.
Cell positions are reconstructed by a vertex shaded analogously to
how it is done in compustream.
</pre>
</div>
</content>
</entry>
<entry>
<title>Prototype OpenGL interoperation</title>
<updated>2019-06-20T13:43:58+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-20T13:43:58+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=dfcb729ff162aba45e3d83acf864fe1ff92e5a06'/>
<id>dfcb729ff162aba45e3d83acf864fe1ff92e5a06</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Extract population offset</title>
<updated>2019-06-17T18:11:43+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-17T18:11:43+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=b178e9b0e70e2b85ad7ba82d6afff1464cc27c51'/>
<id>b178e9b0e70e2b85ad7ba82d6afff1464cc27c51</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Declutter gid and offset calculation</title>
<updated>2019-06-16T11:51:35+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-16T11:51:35+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=b64054acaa9c9710c5b4140cfdb8e32e392a5df9'/>
<id>b64054acaa9c9710c5b4140cfdb8e32e392a5df9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add support for generating a D3Q19 kernel</title>
<updated>2019-06-15T18:54:56+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-15T18:45:27+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=d71faec93ec0a55c46810e0d178b2803ee89130c'/>
<id>d71faec93ec0a55c46810e0d178b2803ee89130c</id>
<content type='text'>
Note how this basically required no changes besides generalizing cell indexing
and adding the symbolic formulation of a D3Q19 BGK collision step.

Increasing the neighborhood communication from 9 to 19 cells leads to a
significant performance "regression": The 3D kernel yields ~ 360 MLUPS
compared to the 2D version's ~ 820 MLUPS.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Note how this basically required no changes besides generalizing cell indexing
and adding the symbolic formulation of a D3Q19 BGK collision step.

Increasing the neighborhood communication from 9 to 19 cells leads to a
significant performance "regression": The 3D kernel yields ~ 360 MLUPS
compared to the 2D version's ~ 820 MLUPS.
</pre>
</div>
</content>
</entry>
<entry>
<title>Consistently name population buffers</title>
<updated>2019-06-15T12:18:32+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-15T12:18:32+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=c543a20179d495cb6d585c48637c24b248c29a07'/>
<id>c543a20179d495cb6d585c48637c24b248c29a07</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Extract geometry information</title>
<updated>2019-06-14T20:44:44+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-14T20:44:44+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=418fb9a27cab212735a903d6008d1c31b71bed48'/>
<id>418fb9a27cab212735a903d6008d1c31b71bed48</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Further the separation between descriptor and lattice</title>
<updated>2019-06-13T19:55:18+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-13T19:45:49+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=3d355b66fe231837e0051cf289d8a0f72dec798c'/>
<id>3d355b66fe231837e0051cf289d8a0f72dec798c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Tidy up symbolic kernel generation</title>
<updated>2019-06-13T19:19:49+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-13T19:19:49+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=61cd3b6bc53c151863bd99fb2a03b29157a876ca'/>
<id>61cd3b6bc53c151863bd99fb2a03b29157a876ca</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add kernel customization point for velocity boundaries</title>
<updated>2019-06-13T16:08:14+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-13T16:08:14+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=2046e1329f522eeafb0f979a97eb91adeebb7a14'/>
<id>2046e1329f522eeafb0f979a97eb91adeebb7a14</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Make it easier to exchange initial equilibration logic</title>
<updated>2019-06-12T20:20:51+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-12T20:20:51+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=d4dab626ea25c088e2a5c7256e17d115d4f80478'/>
<id>d4dab626ea25c088e2a5c7256e17d115d4f80478</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Move kernel template into separate file</title>
<updated>2019-06-12T18:25:38+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-06-12T18:25:38+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/symlbm_playground/commit/?id=1a7c31a135ad08781f8e4abdd8dec11c7395bba1'/>
<id>1a7c31a135ad08781f8e4abdd8dec11c7395bba1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
