Different I/O devices should be created (using AK::StreamMgr::CreateDevice()) for each physical device. At the Stream Manager level (high-level), I/O devices are in fact scheduler threads, each with their own Streaming IO memory pool. Having separate I/O devices makes it possible to specify different I/O memory pool size, granularity and nominal buffering size, that are more adapted to their respective physical device.
In a system that uses multiple devices, you must register one and only one instance of an AK::StreamMgr::IAkFileLocationResolver to the Stream Manager (using AK::StreamMgr::SetFileLocationResolver()). When the Stream Manager needs to open a file, it calls AK::StreamMgr::IAkFileLocationResolver::Open(), and expects that the AkFileDesc structure that it passes gets filled with the file information and its associated device ID. Valid device IDs are returned from AK::StreamMgr::CreateDevice(). This is where you need to add implement your dispatching strategy.
The sound engine is not aware of where the files it needs are located, like SoundBanks and streamed audio files. It is up to you to resolve this in AK::StreamMgr::IAkFileLocationResolver::Open().