## Learning Objectives
* Learn about ways to use initial data with USM
#### Initial data
* Often when writing SYCL kernel functions there is initial data
which has been allocated somewhere else in the application.
#### Initial data (USM)
auto devicePtr = sycl::malloc_device(sizeInBytes, gpuQueue);
gpuQueue.memcpy(devicePtr, initialData, sizeInBytes).wait();
* When using the USM model (unless using system USM) pointers passed
to kernel functions must be allocated by the SYCL runtime.
* This means you have to copy the initial data to the USM memory
allocation using `memcpy`.
#### Initial data (USM)
auto sharedData = sycl::malloc_shared(sizeInBytes, gpuQueue);
* Alternatively if your device supports shared USM allocations you
can allocate memory which is shared across the host and device.
* Then there is no need to copy the data to the device.