  The most important way to achieve higher performance in computer systems is
through heterogeneous computing, i.e., by adopting hardware platforms
containing more than one type of processor, such as CPUs, GPUs, and FPGAs.
Several types of algorithms can be executed significantly faster on a
heterogeneous platform. However, migrating CPU-executable software to other
types of execution platforms poses a number of challenges to software
engineering. Significant efforts are required in such type of migration,
particularly for re-architecting and re-implementing the software. Further,
optimizing it in terms of performance and other runtime properties can be very
challenging, making the process complex, expensive, and error-prone. Therefore,
a systematic approach based on explicit and justified architectural decisions
is needed for a successful refactoring process from a homogeneous to a
heterogeneous platform. In this paper, we propose a decision framework that
supports engineers when refactoring software systems to accommodate
heterogeneous platforms. It includes the assessment of important factors in
order to minimize the risk of recurrent problems in the process. Through a set
of questions, practitioners are able to formulate answers that will help in
making appropriate architectural decisions to accommodate heterogeneous
platforms. The contents of the framework have been developed and evolved based
on discussions with architects and developers in the automotive domain.
