HIP device and stream management

HIP device and stream management#

hipSetDevice and hipGetDevice are HIP device management APIs. They are not part of the hipSPARSELt API.

Device management#

hipSPARSELt assumes that you’ve already set the device before making a hipSPARSELt call.

To set a device, you can use hipSetDevice before making a HIP kernel invocation. If you don’t explicitly set a device, the system uses device 0 as default. HIP kernels are launched on device 0 by default.

After setting a device, you can create a handle using hipsparselt_init. Subsequent hipSPARSELt routines take this handle as an input parameter. hipSPARSELt only queries (hipGetDevice) the device, it doesn’t set the device. If hipSPARSELt doesn’t recognize a valid device, it returns an error message. To ensure device safety, it’s your responsibility to provide hipSPARSELt with a valid device.

You can’t switch devices between hipsparselt_init and hipsparselt_destroy. If you want to change devices, you must first destroy the current handle and then create a new one.

Stream management#

HIP kernels are always launched in a queue (also known as a stream).

If you don’t explicitly specify a stream, the system provides a default stream that maintained by the system. You can’t create or destroy the default stream. However, you can create new streams (hipStreamCreate) and bind them to hipSPARSELt operations, such as hipsparselt_spmma_prune and hipsparselt_matmul. HIP kernels are invoked in hipSPARSELt routines. Note that if you create a stream, you’re also responsible for destroying it.

Multiple streams and devices#

If the system under test has multiple HIP devices, you can run multiple hipSPARSELt handles concurrently. Each handle is associated with a specific device; therefore, a new handle must be created for each additional device. You can’t run a single hipSPARSELt handle on different discrete devices.