Welcome to the project page for GPGPU with GLES, below you may find most recent updates about the project.
Current status: a working library allowing you to do GPGPU computations which can be extended with new computations
The repository with the code and installation/usage instructions is available under this link.
Latest updates
-
Project Report
About
- Student Name: Jakub Duchniewicz
- Mentors: Iain Hunter and Hunyue Yau
- GSoC entry link: Project#5734780890513408
- Blog and wiki link: here :)
- Project link: GPGPU with GLES
- Introductory video: here
- Proposal link: here
-
Weeks 8 and 9
Coding
The last two weeks were spent mostly on my Master’s Summer School where we created a startup prototype in Digital Health (and we won :), so the time was well spent!
-
Library Innards
What exactly happens under the hood
-
Week 7
Coding
I tried rendering to a Pbuffer instead of regular surface on the device as proposed in the issue comment, however it did not work for me. Thus for now I will focus on polishing the API, to allow for operator chaining and adding broadcast operators. I also will try unrolling the loops as mentioned in the 2D convolution query.
-
Benchmarking
This post/page is a collection of benchmarks made both on the Beaglebone Black rev. C and my PC with NVIDIA GTX960M GPU. The operations are performed with 32-bit buffer on both devices.
-
Week 6
Coding
Hurdles with BBB ARGB8888 format
It turns out that BBB has issues with the internal ARGB8888 format used by my library for computing 32-bit floating-point operations. It returns a mysterious error which is hard to decipher:
Creating Window surface.. PVR:(Error): WSEGL_CreateWindowDrawable: Couldn't set CRTC: Invalid argument [0, ] Unable to create surface egl error 'EGL_BAD_ALLOC' (0x3003)
I am right now checking why it does not work as expected - there is an issue opened on Imagination forum and is under investigation. It is quite possible that it is some obsolete limitation, as the platform should be supporting such operations.
-
Week 5
Coding
Finally computing
This week was a breakthrough as the library finally computes something using GPU. A lot of time went into figuring how to do it (last week’s flashbacks) and a lot digging around obscure internet sites to understand what I was missing.
-
Week 4
Coding
CMake polishing
I needed to update my CMake files to work properly with my BBB. It turned out that there is no OpenGL on the Imagination image for BBB and just EGL + GLES. Therefore I had to write my own FindEGL.cmake which would not depend on OpenGL. I was long baffled by undefined references in my code, until I realized that I need to import system libraries as UNKNOWN IMPORTED like this:
if (NOT TARGET EGL::EGL) add_library(EGL::EGL UNKNOWN IMPORTED) set_target_properties(EGL::EGL PROPERTIES IMPORTED_LOCATION "${EGL_LIBRARY}") endif()
I also had to specify custom location for include directories for the EGL and GLES libraries (in FindX.cmake files) like this: ```cmake if (NOT DEFINED GLES2_INCLUDE_DIR) set(GLES2_INCLUDE_DIR “/opt/Native_SDK/include”) endif()
-
Week 3
Changing my environment
I needed to change my environment as the image I was previously using: AM3358 Debian 10.3 2020-04-06 4GB SD IoT proved not to have graphics system set up in a sufficent manner for EGL context creation. Therefore I installed AM3358 Debian 9.12 2020-04-06 4GB SD ImgTec and had to configure it.
-
Installing PowerVR SDK
This post will show you how to setup and test the PowerVR SDK from Imagination to be sure that everythings works fine.
-
Week 2
Setting up PowerVR SDK tutorial
The step-by-step instruction on how to setup the SDK is available here
-
Week 1
Coding
- Further reading about PowerVR
- Started creating CMakefiles for two elements of my project: C API library and the application using it (for now the application uses PowerVR SDK)
-
Pre GSoC and Community Bonding period activities
Before announcing the results