To demonstrate service executions, we’ve developed a set of 26 common image processing algorithms covering a variety of global, local, pixel, morphologic, and geometric operations. Each algorithm is available in four variants: single-threaded CPU code, multi-threaded CPU code with OpenMP-based loop parallelization, GPU code with OpenACC compiler directives, and MaxJ code describing Maxeler’s data flow engines executing the image processing algorithms.
The four different implementations for an image processing algorithm are bundled into a single software service. The services are designed as dynamically loadable plugins. To facilitate experimentation, we have developed an expandable client-server software framework. Using the client, a user can upload images to the server and execute a service composition on the desired computing resource. A service composition is specified as a task graph using the DOT language where the nodes represent single services. In the current version of our framework, the user must specify on which resource the service is computed.
All selected computing resources support precise energy and temperature measurements without need for dedicated measurement equipment, since all resources have on-die respectively on-card power and temperature sensors. These sensors are readable via system interfaces or libraries provided by the Linux kernel or the device manufacturers. We’ve developed a library providing measurement results for a specific service execution on the Heterogeneous Node.