1 MPIglut: Powerwall Programming made Easier Dr. Orion Sky Lawlor U. Alaska Fairbanks WSCG '08, 2008-02-05.

Slides:



Advertisements
Similar presentations
Programming with OpenGL - Getting started - Hanyang University Han Jae-Hyek.
Advertisements

COMPUTER GRAPHICS SOFTWARE.
Chapter 2: Graphics Programming
COMPUTER GRAPHICS CS 482 – FALL 2014 NOVEMBER 10, 2014 GRAPHICS HARDWARE GRAPHICS PROCESSING UNITS PARALLELISM.
Pemrograman OpenGL Dasar
GPU Virtualization on VMware’s Hosted I/O Architecture Micah Dowty Jeremy Sugerman USENIX WIOV
Types of Parallel Computers
What is OpenGL? Low level 2D and 3D Graphics Library Competitor to Direct3D (the rendering part of DirectX) Used in: CAD, virtual reality, scientific.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 1: Background Ed Angel Professor of Computer Science, Electrical.
Real-Time Geometric and Color Calibration for Multi-Projector Displays Christopher Larson, Aditi Majumder Large-Area High Resolution Displays Motivation.
OpenGL and Projections
Beowulf Cluster Computing Each Computer in the cluster is equipped with: – Intel Core 2 Duo 6400 Processor(Master: Core 2 Duo 6700) – 2 Gigabytes of DDR.
Parallel Rendering Ed Angel
HIPerSpace The Highly Interactive Parallelized Display Space.
Programming with OpenGL Part 1: Background Mohan Sridharan Based on slides created by Edward Angel CS4395: Computer Graphics 1.
Word Processing, Web Browsing, File Access, etc. Windows Operating System (Kernel) Window (GUI) Platform Dependent Code Virtual Memory “Swap” Block Data.
1b.1 Types of Parallel Computers Two principal approaches: Shared memory multiprocessor Distributed memory multicomputer ITCS 4/5145 Parallel Programming,
Sort-Last Parallel Rendering for Viewing Extremely Large Data Sets on Tile Displays Paper by Kenneth Moreland, Brian Wylie, and Constantine Pavlakos Presented.
Chi-Cheng Lin, Winona State University CS430 Computer Graphics Graphics Programming and OpenGL.
1 Parallel Rendering In the GPU Era Orion Sky Lawlor U. Alaska Fairbanks
CAP4730: Computational Structures in Computer Graphics Introduction to OpenGL.
TerraForm3D Plasma Works 3D Engine & USGS Terrain Modeler Heather Jeffcott Craig Post Deborah Lee.
July, 2007 GCB SAGE workshop SAGE Development. July, 2007 GCB SAGE workshop Architecture … Free Space manager provides central control between apps, UI.
Electronic Visualization Laboratory University of Illinois at Chicago “Sort-First, Distributed Memory Parallel Visualization and Rendering” by E. Wes Bethel,
CHAPTER 4 Window Creation and Control © 2008 Cengage Learning EMEA.
Chep06 1 High End Visualization with Scalable Display System By Dinesh M. Sarode, S.K.Bose, P.S.Dhekne, Venkata P.P.K Computer Division, BARC, Mumbai.
Parallel Rendering 1. 2 Introduction In many situations, standard rendering pipeline not sufficient ­Need higher resolution display ­More primitives than.
CS240 Computer Science II Introduction to Unix Based on “UNIX for Programmers and Users” by G.Class and K. Ables.
Introduction to OpenGL and GLUT GLUT. What is OpenGL? An application programming interface (API) A (low-level) Graphics rendering API Generate high-quality.
CSC 461: Lecture 41 CSC461: Lecture 4 Introduction to OpenGL Objectives: Development of the OpenGL API OpenGL Architecture -- OpenGL as a state machine.
Graphics Architectures & OpenGL API Introduction Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
OpenGl Graphics Programming. Introduction OpenGL is a low-level graphics library specification. It makes available to the programmer a small set of geomteric.
1 GPGPU Clusters Hardware Performance Model & SW: cudaMPI, glMPI, and MPIglut Orion Sky Lawlor U. Alaska Fairbanks
Seminar II: Rendering Architectures Yan Cui Love Joy Mendoza Oscar Kozlowski John Tang.
Programming with OpenGL Part 1: Background
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 1: Background Ed Angel Professor of Computer Science, Electrical.
CD2012 Principles of Interactive Graphics Lecture 01 Introduction Abir Hussain (Rome: 6.33,Tel , Web:
Introduction to Parallel Rendering Jian Huang, CS 594, Spring 2002.
CS 4363/6353 OPENGL BACKGROUND. WHY IS THIS CLASS SO HARD TO TEACH? (I’LL STOP WHINING SOON) Hardware (GPUs) double in processing power ever 6 months!
CS 480/680 Intro Dr. Frederick C Harris, Jr. Fall 2014.
Parallel Rendering. 2 Introduction In many situations, a standard rendering pipeline might not be sufficient ­Need higher resolution display ­More primitives.
MATRIX MULTIPLY WITH DRYAD B649 Course Project Introduction.
1 cudaMPI and glMPI: Message Passing for GPGPU Clusters Orion Sky Lawlor U. Alaska Fairbanks
Introduction to OpenGL  OpenGL is a graphics API  Software library  Layer between programmer and graphics hardware (and software)  OpenGL can fit in.
Introduction to OpenGL and GLUT. What’s OpenGL? An Application Programming Interface (API) A low-level graphics programming API – Contains over 250 functions.
X-WindowsP.K.K.Thambi The X Window System Module 5.
Parallel Rendering Ed Angel Professor Emeritus of Computer Science University of New Mexico 1 E. Angel and D. Shreiner: Interactive Computer Graphics 6E.
NoufNaief.net TA: Nouf Al-harbi.
A Sorting Classification of Parallel Rendering Molnar et al., 1994.
GPU Computing for GIS James Mower Department of Geography and Planning University at Albany.
An Introduction to the Cg Shading Language Marco Leon Brandeis University Computer Science Department.
COMP 175 | COMPUTER GRAPHICS Remco Chang1/XX13 – GLSL Lecture 13: OpenGL Shading Language (GLSL) COMP 175: Computer Graphics April 12, 2016.
1 Chapter 2: Operating-System Structures Services Interface provided to users & programmers –System calls (programmer access) –User level access to system.
Constructing a system with multiple computers or processors 1 ITCS 4/5145 Parallel Programming, UNC-Charlotte, B. Wilkinson. Jan 13, 2016.
INTRODUCTION TO OPENGL
Computer Graphics (Fall 2003) COMS 4160, Lecture 5: OpenGL 1 Ravi Ramamoorthi Many slides courtesy Greg Humphreys.
INTRODUCTION TO HIGH PERFORMANCE COMPUTING AND TERMINOLOGY.
Computer Graphics -practical- Lecture 6. (visual c++) open gl library To use open GL with VC++ we add these files:- 1)Glut.h C:\program files\ Microsoft.
Programming with OpenGL Part 1: Background
For Massively Parallel Computation The Chaotic State of the Art
Definition of Distributed System
MPI Message Passing Interface
TerraForm3D Plasma Works 3D Engine & USGS Terrain Modeler
גרפיקה ממוחשבת: מבוא ל-OpenGL
Programming with OpenGL Part 1: Background
Introduction to OpenGL
MPJ: A Java-based Parallel Computing System
Programming with OpenGL Part 1: Background
CIS 441/541: Introduction to Computer Graphics Lecture 15: shaders
OpenGL Background CS 4722.
Presentation transcript:

1 MPIglut: Powerwall Programming made Easier Dr. Orion Sky Lawlor U. Alaska Fairbanks WSCG '08,

2 Talk Overview ● MPIglut: lets serial glut OpenGL apps run in parallel atop MPI Powerwall Hardware & Software Parallel Rendering Software ● MPIglut code & runtime changes ● Application Performance ● Future work

3 MPIglut Basics

4 MPIglut: Motivation ● Modern computing is parallel Multi-Core CPUs, Clusters Athlon 64 X2, Intel Core2 Duo Multiple Multi-Unit GPUs nVidia SLI, ATI CrossFire Multiple Displays ● But languages and many existing applications are sequential Software problem: run existing serial code on a parallel machine Related: easily write parallel code

5 What is a “Powerwall”? ● A powerwall has: Several physical display devices One large virtual screen I.E. “parallel screens” ● UAF CS/Bioinformatics Powerwall Twenty LCD panels 9000 x 4500 pixels combined resolution 35+ Megapixels

6 Sequential OpenGL Application

7 Parallel Powerwall Application

8 MPIglut: The basic idea ● Users compile their OpenGL/glut application using MPIglut, and it “just works” on the powerwall ● MPIglut's version of glutInit runs a separate copy of the application for each powerwall screen ● MPIglut intercepts glutInit, glViewport, and broadcasts user events over the network ● MPIglut's glViewport shifts to render only the local screen

9 MPIglut uses MPI parallel library ● MPI: Message Passing Interface Standardized communication library for distributed-memory parallel machines (like clusters) ● MPI runs over many networks; several software implementations MPICH, OpenMPI, AMPI ● MPIglut uses MPI to compile (mpiCC), start-up (mpirun), event broadcast, and synchronization MPIglut apps can call MPI too!

10 MPIglut uses glut sequential code ● GL Utilities Toolkit Portable window, event, and GUI functionality for OpenGL apps De facto standard for small apps Several implementations: Mark Kilgard original, FreeGLUT,... Totally sequential library, until now! ● MPIglut intercepts several calls But many calls still unmodified We run on a patched freeglut 2.4 Minor modification to window creation

11 Parallel Rendering Taxonomy ● Molnar's influential 1994 paper Sort-first: send geometry across network before rasterization (GLX/DMX, Chromium) Sort-middle: send scanlines across network during rasterization Sort-last: send rendered pixels across the network after rendering (IBM's Scalable Graphics Engine, ATI CrossFire)

12 Parallel Rendering Taxonomy ● Expanded taxonomy: Send-event (MPIglut, VR Juggler) Send only user events (mouse clicks, keypresses). Just kilobytes/sec! Send-database Send application-level primitives, like terrain model. Can cache/replicate data! Send-geometry (Molnar sort-first) Send-scanlines (Molnar sort-middle) Send-pixels (Molnar sort-last)

13 Code & Runtime Changes

14 MPIglut Conversion: Original Code #include void display(void) { glBegin(GL_TRIANGLES);... glEnd(); glutSwapBuffers(); } void reshape(int x_size,int y_size) { glViewport(0,0,x_size,y_size); glLoadIdentity(); gluLookAt(...); }... int main(int argc,char *argv[]) { glutInit(&argc,argv); glutCreateWindow(“Ello!”); glutMouseFunc(...);... }

15 MPIglut: Required Code Changes #include void display(void) { glBegin(GL_TRIANGLES);... glEnd(); glutSwapBuffers(); } void reshape(int x_size,int y_size) { glViewport(0,0,x_size,y_size); glLoadIdentity(); gluLookAt(...); }... int main(int argc,char *argv[]) { glutInit(&argc,argv); glutCreateWindow(“Ello!”); glutMouseFunc(...);... } This is the only source change. Or, you can just copy mpiglut.h over your old glut.h header!

16 MPIglut Runtime Changes: Init #include void display(void) { glBegin(GL_TRIANGLES);... glEnd(); glutSwapBuffers(); } void reshape(int x_size,int y_size) { glViewport(0,0,x_size,y_size); glLoadIdentity(); gluLookAt(...); }... int main(int argc,char *argv[]) { glutInit(&argc,argv); glutCreateWindow(“Ello!”); glutMouseFunc(...);... } MPIglut starts a separate copy of the program (a “backend”) to drive each powerwall screen

17 MPIglut Runtime Changes: Events #include void display(void) { glBegin(GL_TRIANGLES);... glEnd(); glutSwapBuffers(); } void reshape(int x_size,int y_size) { glViewport(0,0,x_size,y_size); glLoadIdentity(); gluLookAt(...); }... int main(int argc,char *argv[]) { glutInit(&argc,argv); glutCreateWindow(“Ello!”); glutMouseFunc(...);... } Mouse and other user input events are collected and sent across the network. Each backend gets identical user events (collective delivery)

18 MPIglut Runtime Changes: Sync #include void display(void) { glBegin(GL_TRIANGLES);... glEnd(); glutSwapBuffers(); } void reshape(int x_size,int y_size) { glViewport(0,0,x_size,y_size); glLoadIdentity(); gluLookAt(...); }... int main(int argc,char *argv[]) { glutInit(&argc,argv); glutCreateWindow(“Ello!”); glutMouseFunc(...);... } Frame display is (optionally) synchronized across the cluster

19 MPIglut Runtime Changes: Coords #include void display(void) { glBegin(GL_TRIANGLES);... glEnd(); glutSwapBuffers(); } void reshape(int x_size,int y_size) { glViewport(0,0,x_size,y_size); glLoadIdentity(); gluLookAt(...); }... int main(int argc,char *argv[]) { glutInit(&argc,argv); glutCreateWindow(“Ello!”); glutMouseFunc(...);... } User code works only in global coordinates, but MPIglut adjusts OpenGL's projection matrix to render only the local screen

20 MPIglut Runtime Non-Changes #include void display(void) { glBegin(GL_TRIANGLES);... glEnd(); glutSwapBuffers(); } void reshape(int x_size,int y_size) { glViewport(0,0,x_size,y_size); glLoadIdentity(); gluLookAt(...); }... int main(int argc,char *argv[]) { glutInit(&argc,argv); glutCreateWindow(“Ello!”); glutMouseFunc(...);... } MPIglut does NOT intercept or interfere with rendering calls, so programmable shaders, vertex buffer objects, framebuffer objects, etc all run at full performance

21 MPIglut Assumptions/Limitations ● Each backend app must be able to render its part of its screen Does not automatically imply a replicated database, if application uses matrix-based view culling ● Backend GUI events (redraws, window changes) are collective All backends must stay in synch Automatic for applications that are deterministic function of events Non-synchronized: files, network, time

22 MPIglut: Bottom Line ● Tiny source code change ● Parallelism hidden inside MPIglut Application still “feels” sequential! ● Fairly major runtime changes Multiple synchronized backends running in parallel User input events communicated across network OpenGL rendering coordinate system adjusted per-backend But rendering calls are left alone

23 Delivered Application Performance

24 Performance Testing ● MPIglut programs perform about the same on 20 screens as they do on 1 screen ● We compared performance against two other packages for running unmodified OpenGL apps: DMX: OpenGL GLX protocol interception and replication (MPIglut gets screen sizes via DMX) Chromium: libgl OpenGL rendering call interception and routing

25 Benchmark Applications soar UAF CS Bioinformatics Powerwall Switched Gigabit Ethernet Interconnect 10 Dual-Core 2GB Linux Machines: 7 nVidia QuadroFX nVidia QuadroFX 1400

26 MPIglut Performance

27 Chromium Tilesort Performance

28 Chromium Tilesort Performance Gigabit Ethernet Network Saturated!

29 DMX Performance

30 Conclusion & Future Work ● MPIglut: an easy route to high- performance parallel rendering ● Hiding parallelism inside a library is a broadly-applicable technique THREADirectX? OpenMPQt? ● Still much work to do: Multicore / multi-GPU support Need better GPGPU support (tiles, ghost edges, load balancing) Need load balancing, possibly by moving inter-processor boundaries

31 Backup Slides

32 What is a “Powerwall”? ● Powerwalls are often driven by a small parallel cluster Distributed-memory parallel machines Software must run over slow commodity network, often gigabit ethernet ● Porting existing software to powerwalls is a big problem! What is a “Powerwall”?