openclgpgpusyclintel-oneapihalf-precision-float

Declaring Half precision floating point memory in SYCL


I would like to know and understand how can one declare half-precision buffers and pointers in SYCL namely in the following ways -

Also, suppose I have an existing fp32 matrix / array on the host side. How can I copy it's contents to fp16 memory on the GPU side.

TIA


Solution

  • For half-precision, you can just use sycl::half as the template parameter for either of these.

    accHalf[i] = static_cast<sycl::half>(accFloat[i]);
    

    For copying, you'll need to convert the data from fp32 to fp16, which you could probably do using a kernel to perform the conversion. This seems to be a well documented problem with solutions, see this thread.