Introduction to the PowerVR Compute Development Recommendations

The PowerVR family of Graphics Cores from Imagination Technologies is designed to perform both compute and graphics tasks. Its programmable core architecture allows for extremely efficient and high-performance compute execution.

Document Overview

This document describes the recommended usage guidelines for achieving optimal performance when using compute on Imagination's PowerVR Rogue Graphics Cores. Most of the guide describes constructs and patterns that directly emerge from the PowerVR Rogue architecture. This enables the developer to make the correct decisions irrespective of the preferred approach as far as APIs and programming languages are concerned. Additionally, several specific details are included for OpenCL, OpenGL, OpenGL ES Compute, and RenderScript. These details have been written against the following API versions:

  • OpenGL ES 3.1

  • OpenGL 4.3

  • OpenCL 1.x and 2.0

  • RenderScript

This document assumes that the reader has a good working knowledge of at least one of these APIs. It is also assumed that the reader has worked through the examples of the relevant PowerVR Compute SDK, or has referred to Google's documentation for RenderScript, available here.

After reading this document, readers should have a solid understanding of how compute works on Rogue Graphics Cores, as well as a good understanding of how to develop efficient and well-optimised code for these devices.

This document also provides an optimisation strategy quick reference sheet in Appendix C.

Glossary

Throughout this document, extensive use is made of terminology identified in the table below.

Common terms

TermAlso referred to asDescription
USC (Unified Shading Cluster)Shading Cluster, Shading Unit, Execution UnitA semi-autonomous part of the Graphics Core that can typically execute an entire work-group. Other large parts like Texture Units can be shared among USCs.
CoreProcessor, Graphics CoreAn almost completely autonomous part of the Graphics Core. Typically, a collection of USCs and possibly supporting hardware such as texture units.
TaskThread Group, Warp, WavefrontThe native grouping of threads that a USC executes. Consists of 32 threads on PowerVR Rogue cores.

API-specific terms

TermOpenGL and OpenGL ESOpenCLRenderScript
Kernel / shaderCompute ShaderKernelKernel
ThreadThread, shader instanceWork-itemKernel invocation
Work-groupWork-groupWork-groupN/A
Shared memoryshared variableslocal memoryN/A
ImageTexture, imageImageImage
Constant, constant memoryconst / uniform variable, uniform block, uniform bufferconstant memoryConstants
Private memoryLocal variables, temporariesVariables, private memoryLocal variables, temporaries
DatasetDispatch size, datasetGlobal work, ND RangeDataset