Cloud Programming Paradigms for Technical Computing Applications Geoffrey Fox, Indiana University Dennis Gannon, Microsoft In the past four years cloud computing has emerged as an alternative platform for high performance computing. Unfortunately, there is still confusion about the cloud model and its advantages and disadvantages over tradition supercomputing based problem solving methods. In this note we characterize the ways in which cloud computing can be used productively in scientific and technical applications. As we shall see there is a large set of application that can run on a cloud and a supercomputer equally well. There are also applications that are better suited to the cloud and there are applications where a cloud is a very poor replacement for a supercomputer. Our goal is to illustrate where cloud computing can complement the capabilities of a contemporary massively parallel supercomputer. Defining the Cloud. It would not be a huge exaggeration to say that the number of different definitions of cloud computing greatly exceeds the number of actual physical realizations of the key concepts. Consequently, if we wish to provide a characterization of what works “in the cloud”, we need a grounding definitions and we shall start with one that most accurately describes the commercial public clouds from Microsoft, Amazon and Google. These public clouds consist of one or more large data centers with the following architectural characteristics 1. The data center is composed of containers of racks of basic servers. The total number of servers in one data center is between 10,000 and a million. Each server has 8 or more cpu cores and a 64GB of shared memory and one or more terabyte local disk drives. GPUs or other accelerators are not common. 2. There is a network that allows messages to be routed between any two servers, but the bisection bandwidth of the network is very low and the network protocols implement the full TCP/IP stack at a sufficient enough level so that every server can be a full Internet host. This is an important point of distinction between a cloud data center and a supercomputer. Data center networks optimize traffic between users on the Internet and the servers in the cloud. This is very different from supercomputer networks which are optimized to minimize interprocessor latency and maximize bisection bandwidth. Application data communications on a supercomputer generally take place over specialized physical and data link layers of the network and interoperation with the Internet is usually very limited. 3. Each server in the data center is host to one or more virtual machines and the cloud runs a “fabric controller” which schedules and manages large sets of VMs across the servers. This fabric controller is the operating system for the data center. Using a VM as the basic unit of scheduling means that an application running on the data center consists of one or more complete VM instances that implement a web service. This means that each VM instance can contain its own specific software library versions and internal application such as databases and web servers. This greatly simplifies the required data