Hi,
I have a couple of ODroid XU3s and they are working great. They are running the Mali T628 GPUs and currently support OpenCL 1.1.
However, I want to switch over to OpenCL 1.2 or 2.0 for future development work.
Does anyone know when updated drivers might be released for the T628?
Or can anyone suggest a different SoC to use with the equivalent or better specs to the XU3 and supports OpenCL 1.2 or 2.0?
Thanks!
Ben
Hi Michael,
I would really, really like to see the Mali support SPIR so that I can use C++ templates and build pool allocators and other nice C++ concepts. (I could do this with the C support in opencl right now but it's messy)
Actually having some kind of memory management system on the device side would be very nice. Having to allocate EVERYTHING on the host side is a pain in the ass.
Also, in-kernel enqueueNDkernel would be nice to have. It's a pain in the head to split my algorithm between the host and device. Having it all running on the device would make my life easier (at least until I have to redesign everything to use pipelining...)
Finally, Shared Virtual Memory would be a nice feature to have even though it's not really that important on a SoC system.
Thanks for making the best SoC with support of OpenCL!
Cheers
Hi Ben,
Glad to see you're having success with using CL on the Odroid XU3. It's always good to hear of developers using compute on these Mali-based embedded platforms.
Michael McGeagh's comment regarding not being able to talk about the roadmap for CL1.2 and CL2.0 extends to SPIR I'm afraid, and as you will know, SVM and enqueue come under CL2.0. I will be passing your thoughts on within ARM as it is always useful to know of developer activities and requirements to help inform priorities. Good luck with your work on Mali, and do let us know if you have any other questions.
Best regards, Tim
Hello Tim,
I am also interested to see openCL 1.2 on MALI T6xx (for example on Odroid XU3). The main reason that I like to see this implementation is :
1- As you know OpenCV V 3.0.0 RC1 has be released recently (OpenCV | OpenCV) and it has a transparent API for OpenCL (http://developer.amd.com/community/blog/2014/10/15/opencv-3-0-transparent-api-opencl-acceleration/), but it needs OpenCL 1.2 which is not supported on Mali T6xx, so we can not gain any speed performance from GPU if we want to use OpenCV on a board with this GPU, which is a shame, as you already has the driver and tools.
2- Our application which is mainly image processing, needs a hugh amount of processing power, and running it on CPU is not efficient and we don't like to move to CUDA as we are sure the future is lies on OpenCL.
3- Our code needs to be able to run on both PC and embedded devices, so we are very interested to have an embedded system that could support what we have on PC, with minimal code changes. for example we are interested to have OpenCL 1.2, as Intel based embedded GPUs already has OpenCL 1.2 support.
Is there any way that we can have this support sooner or have a date for when you are going to release it to see if we can develop on other platform now and port it later (which should be easy as OpenCL is a standard).
Hi mans,
Thanks for additional comments on this. Though I appreciate it may be frustrating I'm afraid we have to stand by the "no comment" on future releases for the time being.
It is feasible in certain cases to use some of the OpenCL-accelerated samples in OpenCV as they are. Or indeed, just make small changes to them if possible to remove CL1.2-specific features. But I should try and set your expectations generally with OpenCV. The OpenCL back-end that can be enabled has been optimised with desktop GPUs in mind. As you may know, one of the great strengths of OpenCL is its flexibility allowing you to target specific architectural characteristics. Although this means you can reach optimal performance on a particular platform, this can easily lead to implementations that are then not optimal when ported to other platforms. This is particularly true for the CL layer within OpenCV. Having one application that runs optimally across all platforms is ideal, but not yet a reality.
The other issue with OpenCV to be wary of is that its basic architecture is synchronous, This means that - typically - you make a call and wait for the result. In a mobile architecture you want to minimise synchronisation points between processor types as much as possible. A filter graph framework would be more optimal where you set up a chain of inter-dependent kernels to run on the GPU and then let the graph run in parallel with any other processing you want to do on the CPU.
That isn't to say of course that OpenCV doesn't have its uses. It remains an unparalleled resource for vision algorithms, and extremely useful when it comes to prototyping applications. My recommendation though is to plan in a significant refactoring phase to then get the best out of a heterogeneous SoC. With Mali GPUs, I'd recommend looking through some of the optimisation guides to get a good idea of the sort of things that will work optimally. There's a selection here: GPU Compute, OpenCL and RenderScript Tutorials - Mali Developer Center . And if you have any specific optimisation questions from this, do of course let us know.
I appreciate that's not the ideal answer, but I hope it helps nevertheless.
Thanks Tim,
Your reply was a good one and shed light on some questions that I had. I like to create an new thread for optimum implementation of Opencv algorithm on Mali so we can discusss samples codes from opencv that works directly on Mali and samples which needs some modification.
Do you have any library for filter graph type of framework that I can use optimally on Mali GPUs?
No problem, we'll look out for your additional questions on OpenCV.
There is no such graph-based framework currently available for Mali. As things stand you would need to implement this kind of functionality within your own application, bearing in mind the particular strengths of mobile architectures as you optimise.