dataToGPU(options) {
        this.throwIfDisposed();
        return trackerFn().readToGPU(this.dataId, options);
    }
Copy the tensor's data to a new GPU resource. Comparing to the `dataSync()`
and `data()`, this method prevents data from being downloaded to CPU.

For WebGL backend, the data will be stored on a densely packed texture.
This means that the texture will use the RGBA channels to store value.

For WebGPU backend, the data will be stored on a buffer. There is no
parameter, so can not use a user-defined size to create the buffer.

@param options:
    For WebGL,
        - customTexShape: Optional. If set, will use the user defined
    texture shape to create the texture.

@returns For WebGL backend, a GPUData contains the new texture and
    its information.
    {
       tensorRef: The tensor that is associated with this texture,
       texture: WebGLTexture,
       texShape: [number, number] // [height, width]
    }

    For WebGPU backend, a GPUData contains the new buffer.
    {
       tensorRef: The tensor that is associated with this buffer,
       buffer: GPUBuffer,
    }

    Remember to dispose the GPUData after it is used by
    `res.tensorRef.dispose()`.

@doc {heading: 'Tensors', subheading: 'Classes'}