A computerized method of managing a plurality of subbuffers (410A-410D, 502A-502D, 602A-602D, 702A-702D) associated with a parent buffer (408, 500, 600, 700) in a heterogeneous compute environment, the heterogeneous compute environment including a plurality of heterogeneous compute units (402A-402D), wherein at least one of the plurality of heterogeneous compute units is associated with the parent buffer and at least one of the heterogeneous compute units is not associated with the parent buffer; each compute unit has a private memory space (404A-404D), wherein the private memory space for a compute unit associated with the parent buffer is different to the private memory space for a compute unit not associated with the parent buffer; the plurality of heterogeneous compute units includes a central processing unit and a graphics processing unit; and the plurality of heterogeneous compute units are resident on a single device; the method comprising: allocating the parent buffer for a process; determining that the graphics processing unit is not associated with the parent buffer and that the central processing unit is associated with the parent buffer; creating a subbuffer for each of the plurality of heterogeneous compute units from the parent buffer, wherein there is a different subbuffer for each of the plurality of heterogeneous compute units; storing subbuffer data in each of the subbuffers; for each subbuffer that corresponds to one of the plurality of heterogeneous compute units not associated with the parent buffer: copying the subbuffer data in that subbuffer to the private memory for the corresponding compute unit, and managing updates to the subbuffer data in the private memory by, tracking updates to the subbuffer data in the private memory for the corresponding compute unit, and sending the updates back to that subbuffer; and for each subbuffer that corresponds to one of the plurality of heterogeneous compute units associated with the parent buffer, accessing subbuffer data through a pointer to that subbuffer in the parent buffer. at least one of the plurality of heterogeneous compute units is associated with the parent buffer and at least one of the heterogeneous compute units is not associated with the parent buffer; each compute unit has a private memory space (404A-404D), wherein the private memory space for a compute unit associated with the parent buffer is different to the private memory space for a compute unit not associated with the parent buffer; the plurality of heterogeneous compute units includes a central processing unit and a graphics processing unit; and the plurality of heterogeneous compute units are resident on a single device; allocating the parent buffer for a process; determining that the graphics processing unit is not associated with the parent buffer and that the central processing unit is associated with the parent buffer; creating a subbuffer for each of the plurality of heterogeneous compute units from the parent buffer, wherein there is a different subbuffer for each of the plurality of heterogeneous compute units; storing subbuffer data in each of the subbuffers; for each subbuffer that corresponds to one of the plurality of heterogeneous compute units not associated with the parent buffer: copying the subbuffer data in that subbuffer to the private memory for the corresponding compute unit, and managing updates to the subbuffer data in the private memory by, tracking updates to the subbuffer data in the private memory for the corresponding compute unit, and sending the updates back to that subbuffer; and for each subbuffer that corresponds to one of the plurality of heterogeneous compute units associated with the parent buffer, accessing subbuffer data through a pointer to that subbuffer in the parent buffer. copying the subbuffer data in that subbuffer to the private memory for the corresponding compute unit, and managing updates to the subbuffer data in the private memory by, tracking updates to the subbuffer data in the private memory for the corresponding compute unit, and sending the updates back to that subbuffer; and for each subbuffer that corresponds to one of the plurality of heterogeneous compute units associated with the parent buffer, accessing subbuffer data through a pointer to that subbuffer in the parent buffer.