[PD] [PD-dev] CUDA discussion
Claude Heiland-Allen
claudiusmaximus at goto10.org
Sat Nov 14 10:57:51 CET 2009
Charles Henry wrote:
>>> b) how to do it right.
>> I did have an idea that went something like this:
[snip]
> Okay, you've gone way beyond my area of knowledge already :)
Well, it's just ideation so far - no code written, nor enough knowledge
gained to even start writing the code...
[snip]
> Probably, if we come up with anything in
> the way of top-down design, we should be able to apply the same
> framework to different platforms and make comparisons.
My initial thoughts on top down design, having read only the OpenCL
intro slides and not written any code:
It will be difficult to get a "OpenCL API as Pd objects" approach to be
efficient, there are too many timing/asynchrony issues as far as I can
tell so far. It would also be undesireable to have to expect all users
to know how OpenCL works in detail, as it's quite tricky...
An alternative idea is to have an [opencl~] object that sits in a
subpatch like [switch~] or [block~] does, that analyses the DSP
sub-graph for that subpatch and "lifts" the whole dsp part of the
subpatch to the GPU. Probably it would require some magic to get [+~]
etc to work directly, so maybe a compromise would be [cl/+~] etc, then
the [opencl~] object would "compile" these objects into a kernel at ";
pd dsp 1" time. Then [inlet~] and [outlet~] would do the transfer
to/from GPU (if the containing patch isn't on GPU, otherwise it would
just pass a pointer to GPU memory...).
And if [import] or whatever works to a sufficient extent(*), it should
be possible to go back to using [+~] and [import cl], with a backend
switchable so you could [import simd] instead to use regular
SIMD-optimized dsp objects, or [import vanilla] to use the normal
unoptimized Pd objects, etc...
The first idea is simpler to implement but is horrible for users, the
second idea is simpler for users but requires horrible knowledge of Pd
internals to implement. The goal of libraries is to make life better
for library users, I think - so that makes the second idea more attractive.
(*) by which I mean [import] or other similar object works on a subpatch
basis, or at least on a .pd file basis, so abstractions can have
different libraries to their containing patches if they desire without
clobbering anything globally, and imported objects can override global
objects with the same name, etc...
Claude
--
http://claudiusmaximus.goto10.org
More information about the Pd-list
mailing list