<div dir="ltr">I hope there is an expert on this list who can answer your question.<div><br></div><div>I don't have an answer for you, but I wanted to say that this is potentially a very useful thing to do.  I think there is something about processing streams of information, which gstreamer does quite well, which seems central to the way that sensory signals *should* be processed (e.g. in the context of computer vision problems).  I can imagine doing something like the Van Essen diagram with gstreamer and OpenCL.</div><div><br></div><div>I think having some kind of example around basic convolution -- even something extremely basic (e.g. sobel edge detection) -- would be a great example to work from.</div><div><br></div><div>I had not heard about SYCL until today, but I just noticed that SYCL seems to extend some C++ AMP concepts (where GPU code is written as C++ lambda expressions).  Personally I think this is the correct approach.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 7, 2019 at 7:05 PM Aaron Boxer <<a href="mailto:boxerab@gmail.com">boxerab@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Dear GStreamers,</div><div><br></div><div>I'm thinking of writing an OpenCL plugin that will</div><div>add an arbitrary 2d OpenCl kernel into the pipeline;<br></div><div>possible applications are edge detection, debayering...</div><div><br></div><div>Is there any existing element I could use as a template?</div><div>One twist is that GPUs give the highest performance in asynchronous mode, so</div><div>the element will need to pull buffers from upstream, schedule them to</div><div>the GPU, and only push the processed buffers downstream when the GPU</div><div> completes.  Also, it would be good to have the option of keeping the memory</div><div>on the device, in order to apply a series of kernels without costly move</div><div>to host and back to device.<br></div><div><br></div><div>Simple use case will be a kernel stored in a single user-specified text file that will be passed</div><div>to the plugin, compiled for a specified device, and then executed on the buffers.</div><div>For more complex situations, plugin could be sub-classed with multiple kernels.<br></div><div><br></div><div>Future work could involve exploring other languages such as SYCL, which some say is the future</div><div>of open source compute:  <br></div><div><br></div><div><a href="https://en.wikipedia.org/wiki/SYCL" target="_blank">https://en.wikipedia.org/wiki/SYCL</a></div><div><br></div><div><a href="https://www.youtube.com/watch?v=ZTq8wKnVUZ8" target="_blank">https://www.youtube.com/watch?v=ZTq8wKnVUZ8</a></div><div>(But Mommy, I don't want to use CUDA ! )<br></div><div><br></div><div>Any advice or guidance would be greatly appreciated.</div><div><br></div><div>Many Thanks,</div><div>Aaron<br></div><div><br></div><div><br></div></div></div></div></div>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a></blockquote></div>