Workstation applications today demand a tightly coupled compute-graphics pipeline where the simulation and the graphics are done interactively and in parallel. The use of multiple GPUs provides an affordable way for such applications to improve their performance and increase their useable data size by partitioning the processing and subsequent visualization among mulitple GPUs. This tutorial explains the methodologies of how to program your application for a multi-GPU environment. Part 2 of this tutorial will cover programming methodologies, including: How to structure an application to optimize compute and graphics performance and manage synchronization; How to manage data transfers across the PCIE bus; Debugging and profiling; Programming considerations when scaling beyond two GPUs - multiple compute GPUs feeding to one or multiple graphics GPUs. Throughout this tutorial, simple OpenGL and CUDA examples designed for a single GPU will be modified to efficiently work in a multi-GPU environment.