Heterogeneous systems are evolving towards tighter integration
among devices for improved performance and reduced
energy. In addition to powerful CPUs, systems today typically
employ various types of specialized devices such as
Graphics Processing Units (GPUs) or Field-Programmable
Gate Arrays (FPGAs). In this tight integration, close collaboration
among processors becomes crucial for better use
of system resources and higher performance, compared to
traditional use of GPUs or FPGAs as offload accelerators.
Programming interfaces are also rapidly adapting to tightly
integrated heterogeneous platforms by introducing emerging
features, such as shared virtual memory, memory coherence,
and system-wide atomics, making collaborative computing
among different devices even more practical.
In this paper, we survey the current heterogeneous integrated
systems and corresponding techniques. We evaluate
collaborative computing on two heterogeneous integrated
systems, CPU-GPU and CPU-FPGA, using OpenCL. Finally,
we discuss the limitation of OpenCL and envision what
suitable programming languages for collaborative computing
will look like.