 Programming such heterogeneous machines can be difficult since developing programs that make best use of characteristics of different processors increases the programmer's burden.It increases code complexity and decreases portability of the code by requiring hardware specific code to be interleaved throughout application code.Balancing the application workload across processors can be problematic, especially given that they typically have different performance characteristics.