SUMMARYThis paper presents a framework that enables the development of Java applications that execute on CPUs, graphics processing units (GPUs) and clusters of CPUs/GPUs. Applications are specified in an OpenMPlike fashion, accessing data through a framework-provided data API. The framework enables the efficient execution of applications in CPU and/or GPU by relying on two key features: (i) parallelism exploitation patterns are specified by additional aspect modules; and (ii) data layout can be selected according to the target platform. This paper describes how the framework abstractions are mapped and how the framework intrinsically supports the development of applications with hybrid parallelism by composing aspect modules with a given base program. Performance results show that the framework provides a performance level similar to traditional approaches and enables better performance portability for a given base program.