The Multi-USRP class provides a high-level interface to a single USRP device with one or more channels, or multiple USRP devices in a homogeneous setup. See the documentation for uhd::usrp::multi_usrp.
This is a more granular API than the Multi-USRP API, and can directly interact with RFNoC blocks in a device, and the RFNoC graph. This is available for all Generation-3 USRPs and above.
For more information on RFNoC, see RFNoC.
The Multi-USRP-Clock class provides a high-level interface to a single clock device or set of clock devices, from which the time can be queried. See the documentation for uhd::usrp_clock::multi_usrp_clock.
Both USRP and clock devices can be interacted with using a C API wrapper included by default in all UHD builds. More information can be found here.
This is an older API for pre-RFNoC devices (N2xx, B2xx, B100, USRP1).
A device is an abstraction for hardware that is connected to the host system. For a USRP device, this means that the motherboard and everything on it would be considered to be a "device". For a clock device, the device itself would be considered a "device" in software. The device API provides ways to:
See the documentation for uhd::device.