CPS 258, Fall 2004 Introduction to Computational Science
Introduction to Computational Science An introduction to a wide variety of methods in computational science to facilitate interdisciplinary collaborative research Cover leading techniques and potential applications to research Introduce PRACTICAL computational methods Bring together graduate students from different disciplines in science, engineering and the basic sciences Underline the "common-ground" of computational methods
Administeria Lead Instructor: Nikos Pitsianis Prerequisites: Programming experience, calculus, numerical linear algebra or equivalent Schedule: Tu-Th, 2:50 PM-4:05 PM LSRC A156 Grading: –30% Class Participation –30% Homework Assignments –40% Final Project Credit: 3 hours Office Hours: to be announced Course Admin: Mindy Quigley
Instructors Nikos Pitsianis and Rachael Brady Tod Laursen Bill Rankin …
Syllabus High performance computer architectures Linear Algebra Visualization Spatial & Time Integration Finite Elements, Applied to PDEs and ODEs Fast Transforms Introduction to MPI programming Schroedinger’s Equation Molecular Dynamics Stochastic Optimization and Integration
Abstraction and Portability vs Performance High level programming Easy maintenance Flexible and reusable code Portable to other architectures
Questions Can my program be faster/more accurate/stable –Computational complexity –Algorithm choice –Implementation How can I make it better Is it worth the effort
Parallel Architectures
Parallelism Levels Job Program Instruction Bit
Parallel Architectures Pipelining Multiple execution units –Superscalar –VLIW Multiple processors
Pipelining Example Load UALUStore load x(i) load y(i) load x(i+1)add z(i),x(i),y(i) load xy(i+1) store z(i) add z(i+1),x(i+1),y(i+1) store z(i+1) Prologue Loop body Epilogue for i = 1:n z(i) = x(i) + y(i); end
Generic Computer CPU Memory Bus
Memory Organization Distributed memory Shared memory
Shared Memory
Distributed Memory
Interleaved Memory
Network Topologies Ring Torus Tree Star Hypercube Cross-bar
Flynn’s Taxonomy SISD SIMD MISD MIMD
Instruction Processing Stages Fetch Decode Execute Post
Vector Architectures Single Instruction Multiple Data Exploit uniformity of operations Multiple execution units Pipelining Hardware assisted loops Vectorizing compilers