def METHOD_NAME(self, global_size, local_size=None):
    """
    Execute the kernel code on the GPU.
    Parameters
    ----------
    global_size: tuple
        Tuple of between 1 and 3 entries representing the shape of the
        grid used for GPU computing. OpenCL uses global_size to generate
        a unique id for each kernel execution, which can be queried using
        get_global_id(axis) with axis between 0 and 2.
    local_size: tuple, optional
        Dimensions of local groups. Must divide global_size exactly,
        element-wise. If None, an implementation local workgroup size is
        used. Memory allocated in the __local address space on the GPU is
        shared between elements in a same workgroup.
    Returns
    -------
    outputs: list of ndarrays
        List of outputs produced by the program.
    """
    wait_event = self.kernel(self.queue,
                             global_size,
                             local_size,
                             *self.input_buffers,
                             *[out.buf for out in self.output_buffers])
    outputs = []
    for output in self.output_buffers:
        out_arr = np.empty(output.shape, dtype=output.dtype, order='F')
        cl.enqueue_copy(self.queue, out_arr, output.buf,
                        wait_for=[wait_event])
        outputs.append(out_arr)
    return outputs