Background DevicesΒΆ

Most applications might only use one device, thus we provide a simpler API for such cases. Similar to CUDA, there is a background device that can be used to call methods that would normally require an actual device object.

For example, when allocating memory

device.malloc(10 * sizeof(int));

would turn into

occa::malloc(10 * sizeof(int));
occaDeviceMalloc(device, 10 * sizeof(int));

would turn into

occaMalloc(10 * sizeof(int));
device.malloc(10 * sizeof(int))

would turn into

occa.malloc(10 * sizeof(int))
!???

would turn into

!???

The default background device is set to

occa::host()
occaHost()
occa.host
!???

Methods to fetch and set the background device are

occa::setDevice(device);
occa::setDevice("mode: 'Serial'");
occaSetDevice(device);
occaSetDevice(occaString("mode: 'Serial'"));
occa.set_device(device)
occa.set_device("mode: 'Serial'")
!???

A powerful use of the background device is the ability to easy the inclusion of OCCA in existing libraries. Changing API is not always an easy process, specially when adding a library such as OCCA that targets the most computational intensive parts of the code. Having the background device implicitly allows a device to be used inside methods without passing it as a function argument.