Now we work with a very different architecture. To deal with this complexity, we write a program that runs on the CPU, which writes and runs a program on the GPU. This both addresses the architectural differences, and because the GPU program is compiled at runtime, cross platform (ATI, Nvidia, etc) issues are also dealt with.