USEIMPROVEEVANGELIZE High-Performance Computing and OpenSolaris ● Silveira Neto ● Sun Campus Ambassador ● Federal University of Ceará ● ParGO - Paralellism, Graphs, and Combinatorial Optimization Research Group
2 USEIMPROVEEVANGELIZE Agenda ● Why programs should run faster? ● How programs can run faster? ● High Performance Computing – Motivating – Computer Models – Approachs ● OpenSolaris – What is, Advantages and Tools.
3 USEIMPROVEEVANGELIZE Aplication Area Share stats fromTop500.org Application area share for November/2007
4 USEIMPROVEEVANGELIZE Computational fluid dynamics
5 USEIMPROVEEVANGELIZE Finite Element Analysis
6 USEIMPROVEEVANGELIZE Serial Computation problem instructions CP U
7 USEIMPROVEEVANGELIZE Serial Computation ● Single computer, single CPU. ● Problem broken into discrete series of instructions. ● One instruction per time. instructions CP U
8 USEIMPROVEEVANGELIZE Parallel Computing problem CP U parts instructions
9 USEIMPROVEEVANGELIZE Parallel Computing ● Simultaneous use of multiple compute resources to solve a computational problem. ● Compute resources can include – Single computer with multiple processors – Multiple computers connected by a network – or both
10 USEIMPROVEEVANGELIZE Flynn's Taxonomy ● Instruction or Data ● Single or Multiple SISD Single Instruction, Single Data SIMD Single Instruction, Multiple Data MISD Multiple Instruction, Single Data MIMD Multiple Instruction, Multiple Data
11 USEIMPROVEEVANGELIZE SISD ● Single Instruction, Single Data LOAD A LOAD B C = A+B STORE C CPU
12 USEIMPROVEEVANGELIZE SIMD ● Single Instruction, Multiple Data LOAD A[0] LOAD B[0] C[0] = A[0]+B[0] STORE C[0] LOAD A[1] LOAD B[1] C[1] = A[1]+B[1] STORE C[1] LOAD A[n] LOAD B[n] C[n] = A[n]+B[n] STORE C[n] CPU 1 CPU 2 CPU n
13 USEIMPROVEEVANGELIZE MISD ● Multiple Instruction, Single Data LOAD A[0] C[0] = A[0] *1 STORE C[0] LOAD A[1] C[1] = A[1] *2 STORE C[1] LOAD A[n] C[n] = A[n] *n STORE C[n] CPU 1 CPU 2 CPU n
14 USEIMPROVEEVANGELIZE MIMD ● Multiple Instruction, Multiple Data LOAD A[0] C[0] = A[0] *1 STORE C[0] X=sqrt(2) C[1] = A[1] *X method(C[1]); something(); W = C[n]**X C[n] = 1/W CPU 1 CPU 2 CPU n
15 USEIMPROVEEVANGELIZE Parallel Programming Models ● Shared Memory ● Threads ● Message Passing ● Data Parallel ● Hybrid
16 USEIMPROVEEVANGELIZE Threads Model Memory CP U
17 USEIMPROVEEVANGELIZE Threads Model
18 USEIMPROVEEVANGELIZE Message Passing Model Memory CP U Memory CP U Memory CP U Memory CP U x=10
19 USEIMPROVEEVANGELIZE Hybrid Model Memory CPU Memory CPU x=10 Memory CPU Memory CPU
20 USEIMPROVEEVANGELIZE Amdahl's Law fraction of code that can be parallelized
21 USEIMPROVEEVANGELIZE Amdahl's Law parallel fraction number of processors serial fraction
22 USEIMPROVEEVANGELIZE CP U Integration a b c
23 USEIMPROVEEVANGELIZE Pi calculation ● Madhava of Sangamagrama ( ) CP U
24 USEIMPROVEEVANGELIZE MPI ● Message Passing Interface ● A computer specification ● An implementation that allows many computers to communicate with one another. It is used in computer clusters.
25 USEIMPROVEEVANGELIZE MPI Simplest Example $ mpicc hello.c -o hello $ mpirun -np 5 hi
26 USEIMPROVEEVANGELIZE MPI_Send
27 USEIMPROVEEVANGELIZE MPI_Recv
28 USEIMPROVEEVANGELIZE OpenMP ● Open Multi-Processing ● Multi-platform shared memory multiprocessing programming in C/C++ and Fortran on many architectures ● Available on GCC 4.2 ● C/C++/Fortran
29 USEIMPROVEEVANGELIZE Creating a OpenMP Thread $ gcc -openmp hello.c -o hello $./hello
30 USEIMPROVEEVANGELIZE Creating multiples OpenMP Threads
31 USEIMPROVEEVANGELIZE Pthreads ● POSIX Threads ● POSIX standard for threads ● Defines an API for creating and manipulating threads
32 USEIMPROVEEVANGELIZE Pthreads g++ -o threads threads.cpp -lpthread./threads
33 USEIMPROVEEVANGELIZE Java Threads ● java.lang.Thread ● java.util.concurrent
34 USEIMPROVEEVANGELIZE What is OpenSolaris? ● Open development effort based on the source code for the Solaris Operating System. ● Collection of source bases (consolidations) and projects.
35 USEIMPROVEEVANGELIZE Opensolaris ● ZFS ● Dtrace ● Containers ● HPC Tools ● opensolaris.org/os/community/hpcdev/ – Dtrace for Open MPI
36 USEIMPROVEEVANGELIZE Sun HPC ClusterTools ● Comprehensive set of capabilities for parallel computing. ● Integrated toolkit that allows developers to create and tune MPI applications that run on high performance clusters and SMPs. ● sun.com/clustertools
37 USEIMPROVEEVANGELIZE Academy, industry and market
38 USEIMPROVEEVANGELIZE References ● Introduction to Parallel Computing, Blaise Barney, Livermore Computing, ● Flynn, M., Some Computer Organizations and Their Effectiveness, IEEE Trans. Comput., Vol. C-21, pp. 948, ● Top500 Supercomputer sites, Application Area share for 11/2007, ● Wikipedia's article on Finite Element Analysis, ● Wikipedia's article on Computational Fluid Dynamics, ● Slides An Introduction to OpenSolaris, Peter Karlson. ● Wikipedia's article on OpenMP,
39 USEIMPROVEEVANGELIZE References ● Wikipedia's article on MPI, ● Wikipedia's article on PThreads, ● Wikipedia's article on Madhave of Sangamagrama, ● Distributed Systems Programming, Heriot-Watt University
USEIMPROVEEVANGELIZE Thank you! José Maria Silveira Neto Sun Campus Ambassador “open” artwork and icons by chandan: