When using cuda streams, is a device constant memory array available for all the streams? or do you need to create a copy of the array for each stream?
It is available to all streams. Note that if you are using multiple devices, then that is a separate case. constant memory is instantiated (allocated) on all devices with a single declaration, but it must be populated per device.