Light Hearted Look At GPU Programming And Linear Algebra Operators

96
Light Hearted Look At GPU Programming And Linear Algebra Operators

description

Light Hearted Look At GPU Programming And Linear Algebra Operators. Pass Out (3) Papers And GPUGems Book Book Has Some Nice Graphics. Demos. Pyramids Demo Blackbox. Codecreatures Demo. Benchmarks!. What Are The Differences Between These Demos?. Food For Thought - PowerPoint PPT Presentation

Transcript of Light Hearted Look At GPU Programming And Linear Algebra Operators

Page 1: Light Hearted Look At GPU Programming And Linear Algebra Operators

Light Hearted Look At

GPU Programming And Linear Algebra Operators

Page 2: Light Hearted Look At GPU Programming And Linear Algebra Operators

Pass Out (3) PapersAnd GPUGems Book

Book Has Some Nice Graphics

Page 3: Light Hearted Look At GPU Programming And Linear Algebra Operators

Demos

Page 4: Light Hearted Look At GPU Programming And Linear Algebra Operators

Pyramids DemoBlackbox

Page 5: Light Hearted Look At GPU Programming And Linear Algebra Operators

Codecreatures Demo

Benchmarks!

Page 6: Light Hearted Look At GPU Programming And Linear Algebra Operators

What Are The Differences Between These Demos?

Page 7: Light Hearted Look At GPU Programming And Linear Algebra Operators

Food For Thought

Science/Education Versus Entertainment?

“Edutainment”?

Is “User Friendliness” The Same?

To Me, The Codecreatures Demo Was State Of The Art!Probably To Some Video Gamers, It’s Old Hat!

I Assume This Code Is Really Taking Advantage Of The GPU

Page 8: Light Hearted Look At GPU Programming And Linear Algebra Operators

“The Continuum”

Assembly Programming “GPU Programming” Monitor Programming 4GL, 5GL, …?

User Friendliness

small medium large

What, Exactly, Is Happening On The GPU? Probably Don’t Know Exactly

SDKS e.g.

Visual Studio

Page 9: Light Hearted Look At GPU Programming And Linear Algebra Operators

My ContinuumGPU Knowledge

small medium large

Me Prof Bailey (andProf Zhang andJacob)

Page 10: Light Hearted Look At GPU Programming And Linear Algebra Operators

;-) :-)

Page 11: Light Hearted Look At GPU Programming And Linear Algebra Operators

What’s On the GPU,What’s on the CPU?

“Don’t Ask Me!”

Page 12: Light Hearted Look At GPU Programming And Linear Algebra Operators

Is the GPU Synonymous With the Graphics Card?

“Yes, close enough. The GPU is actually the processor chip that lives on the graphics card. The "graphics card" has a bunch of other stuff on it to support the GPU and its operations, plus memory, bus interaction, etc.”

Mike Bailey

Page 13: Light Hearted Look At GPU Programming And Linear Algebra Operators

GonnaWear ThisOne Out!

Page 14: Light Hearted Look At GPU Programming And Linear Algebra Operators

GPU/Graphics Card?

Page 15: Light Hearted Look At GPU Programming And Linear Algebra Operators

CPU,Bus,VP,FP,bunchof other stuff

Page 16: Light Hearted Look At GPU Programming And Linear Algebra Operators

Benchmarking

(CPU)

(BUS)

Page 17: Light Hearted Look At GPU Programming And Linear Algebra Operators

Benchmarking

(VP)

(FP)

Science?

Entertainment?

Page 18: Light Hearted Look At GPU Programming And Linear Algebra Operators

Benchmarking

glFinish(); int t0 = glutGet( GLUT_ELAPSED_TIME );

<< All Graphics Calls That You Are Testing The Speed Of >>

glFinish(); int t1 = glutGet( GLUT_ELAPSED_TIME ); glutSwapBuffers(); fprintf( stderr, "One display frame took %d milliseconds\n", t1 - t0 );

Page 19: Light Hearted Look At GPU Programming And Linear Algebra Operators

What’s On the GPU,What’s On the CPU?

How Well Do We Know The Hardware/Software Boundary?

Page 20: Light Hearted Look At GPU Programming And Linear Algebra Operators

// minimal vertex shader// www.lighthouse3d.com

void main(){

// the following three lines provide the same result

// gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;// gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

gl_Position = ftransform();}

The end result is of course the same. Does this guarantee the same transformation as in the fixed functionality? Well in theory yes, but in practice the process of transforming the vertices may not follow the same order as in

here. This is normally a highly optimized task in a graphic card, and a special function is provided to take advantage of that optimization. Another reason for this function is due to the limit in the precision of the float data type. When calculus is done in different orders, different results may be obtained due to this limited precision. Hence the GLSL provides a function that guarantees that not only the best performance is obtained but also that the result is always the same as when using the fixed functionality. This magical function is:

vec4 ftransform(void);

This function returns the transformed incoming vertex, following the same steps as the fixed functionality does.

http://www.lighthouse3d.com/opengl/glsl/index.php?minimal

Jumping Ahead:Specific Code,But TakeawayIs Some UncertaintyIn Implementation

Simplest Shader Program You Will Ever See!

Page 21: Light Hearted Look At GPU Programming And Linear Algebra Operators

GPU Overview

Page 22: Light Hearted Look At GPU Programming And Linear Algebra Operators

What is the GPU?

“Graphical Processing Unit”

Page 23: Light Hearted Look At GPU Programming And Linear Algebra Operators

HowWe Gonna Dive In?

Page 24: Light Hearted Look At GPU Programming And Linear Algebra Operators

GLSL - (Relatively) User Friendly

GLman - User Friendly

Good Demos Available (e.g. Pyramids)

GLSL/GLman Orientation

(Simple, Less Powerful, Less User Friendly Visual Studio Demos/Prototypes Do Exist And Will Be Overviewed

Page 25: Light Hearted Look At GPU Programming And Linear Algebra Operators

GLSL/GLman Orientation

Page 26: Light Hearted Look At GPU Programming And Linear Algebra Operators

“GLman is written in OpenGL. It is meant to be a scripting system to make it easy to explore GPU programming, so internally it takes care of a lot of theboilerplate of writing GPU-based programs, leaving you just to write the GPU code. So, the .glib files are the script, and the .vert and .frag files are the vertex and fragment GPU code.”

Mike Bailey

http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/Glman/glman.pdf

Page 27: Light Hearted Look At GPU Programming And Linear Algebra Operators

Glman Lets You Concentrate On:

Vertex Processor - .vert file // text file

Fragment Processor - .frag file // text file

GLSL/GLman Orientation

Page 28: Light Hearted Look At GPU Programming And Linear Algebra Operators

GLSL/GLman Orientation

Glman makesthis part easy

Page 29: Light Hearted Look At GPU Programming And Linear Algebra Operators

GLSL/GLman Orientation

Simple/Standalone Visual Studio Demo AppsAvailable, AndWill Be LookedAt

Page 30: Light Hearted Look At GPU Programming And Linear Algebra Operators

Why Use the GPU?

Page 31: Light Hearted Look At GPU Programming And Linear Algebra Operators

“The rasterizer is a part of the GPU, but its functionality can't becustomized by the user, other than sending user-defined variablesthrough it to be interpolated.”

Mike Bailey

Page 32: Light Hearted Look At GPU Programming And Linear Algebra Operators

Rasterizer In The“Bunch Of Other Stuff”Category ?

Page 33: Light Hearted Look At GPU Programming And Linear Algebra Operators
Page 34: Light Hearted Look At GPU Programming And Linear Algebra Operators
Page 35: Light Hearted Look At GPU Programming And Linear Algebra Operators

GPU versus CPU

“The distinction is becoming more and more blurred, but the basic difference is that GPUs have certain architectural changes that appeal more to graphics, such as more cores, less cache,and special texture fetching hardware.”

Mike Bailey

Can’t Do Recursion On The GPU!!!

Page 36: Light Hearted Look At GPU Programming And Linear Algebra Operators

GPU versus CPU

Can’t Do Recursion On The GPU!!!

CPU – double oriented

GPU – float oriented

Page 37: Light Hearted Look At GPU Programming And Linear Algebra Operators

Multi Cores Parallelism

Less Cache Streaming

Texture (Local) Memory Reduced Bus Activity

Page 38: Light Hearted Look At GPU Programming And Linear Algebra Operators

GPU versus CPU

Page 39: Light Hearted Look At GPU Programming And Linear Algebra Operators

http://www.springerlink.com/content/eupfj7euk0jvj98u/fulltext.pdf

[Chiang, Hsueh, Liu]

Page 40: Light Hearted Look At GPU Programming And Linear Algebra Operators

GPU versus CPU

Page 41: Light Hearted Look At GPU Programming And Linear Algebra Operators

GPU versus CPU

We’ll take a quick look at these (mostly linear operator) terms shortly

Page 42: Light Hearted Look At GPU Programming And Linear Algebra Operators

http://ieeexplore.ieee.org/iel5/4221378/4221379/04221459.pdf?tp=&isnumber=&arnumber=4221459

[Gong, Langille, Gong]

Page 43: Light Hearted Look At GPU Programming And Linear Algebra Operators

GPU Typical Programming Environment

GLSL - OpenGL Shading Language

HLSL - DirectX's high-level shading language

Cg – C For Graphics

Page 44: Light Hearted Look At GPU Programming And Linear Algebra Operators

Vertex Shader Program(ming)

Fragment Shader Program(ming)

each with a main()

examples shortly

Page 45: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

Matrices for Multiplication

Matrices for Differentiation – e.g. Sobel Filter

Page 46: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

vec2 texcoord1, texcoord2;vec3 position;vec4 myRGBA;ivec2 textureLookup;bvec3 less;

Data Types

Page 47: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

mat2 mat2D;mat3 optMatrix;mat4 view, projection;mat4x4 view; // an alternate way of declaring a mat4mat3x2 m; // a matrix with 3 columns and 2 rows

Data Types

Page 48: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

vec3(float) // initializes each component of with the floatvec4(ivec4) // makes a vec4 with component-wise conversionvec2(float, float) // initializes a vec2 with 2 floatsivec3(int, int, int) // initializes an ivec3 with 3 intsbvec4(int, int, float, float) // uses 4 Boolean conversionsvec2(vec3) // drops the third component of a vec3vec3(vec4) // drops the fourth component of a vec4vec3(vec2, float) // vec3.x = vec2.x, vec3.y = vec2.y, vec3.z = floatvec3(float, vec2) // vec3.x = float, vec3.y = vec2.x, vec3.z = vec2.yvec4(vec3, float) // We’’ll See An Application Of One Of Thesevec4(float, vec3) // Or Something Similarvec4(vec2, vec2)

Constructors

Page 49: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf

Page 50: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

Testing/Benchmarking

Page 51: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

Testing/Benchmarking

Page 52: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

Non Linear

Testing/Benchmarking

Page 53: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

SWIZZLING!

Page 54: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

// different denominator forms

Page 55: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

Page 56: Light Hearted Look At GPU Programming And Linear Algebra Operators

Specific Linear Operators

Page 57: Light Hearted Look At GPU Programming And Linear Algebra Operators

http://wwwcg.in.tum.de/Research/data/Publications/sig03.pdf

[Kruger,Westermann]

Specific Linear Operators

Page 58: Light Hearted Look At GPU Programming And Linear Algebra Operators

Basic Architecture View

Input Is (C/C++ Program), .vert file, .frag file (, .glib file)

Output Is Image(s)

Page 59: Light Hearted Look At GPU Programming And Linear Algebra Operators

More Complex Architecture Views

Page 60: Light Hearted Look At GPU Programming And Linear Algebra Operators

Another Pipeline Overview

MC – Model Coordinates

SC – Screen Coordinates

CompleteColored Screen

Coordinates

Page 61: Light Hearted Look At GPU Programming And Linear Algebra Operators
Page 62: Light Hearted Look At GPU Programming And Linear Algebra Operators
Page 63: Light Hearted Look At GPU Programming And Linear Algebra Operators

Another Pipeline Overview

“Programmable Unit”

Page 64: Light Hearted Look At GPU Programming And Linear Algebra Operators

OverSimplified?

Page 65: Light Hearted Look At GPU Programming And Linear Algebra Operators

MC – Model Coordinates

SC – Screen Coordinates

Colored Screen Coordinates

Page 66: Light Hearted Look At GPU Programming And Linear Algebra Operators

Snazzy Examples

Page 67: Light Hearted Look At GPU Programming And Linear Algebra Operators

Snazzy Examples

Page 68: Light Hearted Look At GPU Programming And Linear Algebra Operators

Snazzy Examples

Page 69: Light Hearted Look At GPU Programming And Linear Algebra Operators

Snazzy Examples

Page 70: Light Hearted Look At GPU Programming And Linear Algebra Operators

Getting Started

GLSL/GLman

Page 71: Light Hearted Look At GPU Programming And Linear Algebra Operators

Demos

Start -> Programs -> Shaders -> Glman

http://cs.oregonstate.edu/~mjb/cs519

has multiple sets of input files (.glib, .vert, and .frag)

(In e.g. CGEL)

Page 72: Light Hearted Look At GPU Programming And Linear Algebra Operators

Pyramids

- pyramids.glib

- pyramids.vert

- pyramids.frag

Page 73: Light Hearted Look At GPU Programming And Linear Algebra Operators

GLSL/Glman Specialization

Page 74: Light Hearted Look At GPU Programming And Linear Algebra Operators

GLSL/Glman Specialization

Page 75: Light Hearted Look At GPU Programming And Linear Algebra Operators

##OpenGL GLIB

Perspective 70

Vertex pyramids.vertFragment pyramids.fragProgram BumpMapTest \

LightX <-10. 0. 10.0> \LightY <-10. 10. 10.0> \LightZ <-10. 10. 10.0> \SurfaceColor {0.7 0.8 0.1 1.} \Ang <-3.14159 0.785398 3.14159> \BumpDensity <5. 16. 100.> \Ambient <0. 0.1 .4> \Height <-.06 .005 .06>

Sphere 1 200 200#Obj cow.obj#Teapot

pyramids.glib

Page 76: Light Hearted Look At GPU Programming And Linear Algebra Operators

##OpenGL GLIB

Perspective 70

Vertex pyramids.vertFragment pyramids.frag

Program BumpMapTest \LightX <-10. 0. 10.0> \LightY <-10. 10. 10.0> \LightZ <-10. 10. 10.0> \SurfaceColor {0.7 0.8 0.1 1.} \Ang <-3.14159 0.785398 3.14159> \BumpDensity <5. 16. 100.> \Ambient <0. 0.1 .4> \Height <-.06 .005 .06>

Sphere 1 200 200#Obj cow.obj#Teapot

“one to one”

Pyramids.glib

vert filefrag file

“one to one”

Page 77: Light Hearted Look At GPU Programming And Linear Algebra Operators

Getting Started

http://www.lighthouse3d.com/opengl/glsl/index.php?minimal

http://www.lighthouse3d.com/opengl/glsl/examples/glutglsl5_2.0.zip

has VS Project (glutglsl) that compiles (e.g. in CGEL) (needs glew32.lib which can be copied from the local hard drive)

Another Approach

Page 78: Light Hearted Look At GPU Programming And Linear Algebra Operators

void setShaders() {

char *vs = NULL,*fs = NULL,*fs2 = NULL;

v = glCreateShader(GL_VERTEX_SHADER);f = glCreateShader(GL_FRAGMENT_SHADER);f2 = glCreateShader(GL_FRAGMENT_SHADER);

vs = textFileRead("minimal.vert");fs = textFileRead("minimal.frag");

const char * vv = vs;const char * ff = fs;

glShaderSource(v, 1, &vv,NULL);glShaderSource(f, 1, &ff,NULL);

free(vs);free(fs);

glCompileShader(v);glCompileShader(f);

printShaderInfoLog(v);printShaderInfoLog(f);printShaderInfoLog(f2);

p = glCreateProgram();glAttachShader(p,v);glAttachShader(p,f);

glLinkProgram(p);printProgramInfoLog(p);

glUseProgram(p);

}

“THE CODE !!!”

(“THE SYNTAX”?)

Page 79: Light Hearted Look At GPU Programming And Linear Algebra Operators

// minimal vertex shader// www.lighthouse3d.com

void main(){

// the following three lines provide the same result

// gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;// gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

gl_Position = ftransform();}

The end result is of course the same. Does this guarantee the same transformation as in the fixed functionality? Well in theory yes, but in practice the process of transforming the vertices may not follow the same order as in here. This is normally a highly optimized task in a graphic card, and a special function is provided to take advantage of that optimization. Another reason for this function is due to the limit in the precision of the float data type. When calculus is done in different orders, different results may be obtained due to this limited precision. Hence the GLSL provides a function that guarantees that not only the best performance is obtained but also that the result is always the same as when using the fixed functionality. This magical function is:

vec4 ftransform(void);

This function returns the transformed incoming vertex, following the same steps as the fixed functionality does.

Page 80: Light Hearted Look At GPU Programming And Linear Algebra Operators

// minimal fragment shader// www.lighthouse3d.com

void main(){

gl_FragColor = vec4(0.4,0.4,0.8,1.0); What Color Is This?}

// minimal vertex shader// www.lighthouse3d.com

void main(){

// the following three lines provide the same result

// gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;// gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

gl_Position = ftransform();}

Page 81: Light Hearted Look At GPU Programming And Linear Algebra Operators
Page 82: Light Hearted Look At GPU Programming And Linear Algebra Operators

CTRL-ALT-PRINT_SCREEN

PASTE INTO PAINT

SAVE AS 24 BIT BMP

RIGHT CLICK FILEOPEN WITH PHOTOSHOP

TEARDROPPER TOOL

DOUBLE CLICK

102 = .4 * 255102 = .4 * 255204 = .8 * 255

Page 83: Light Hearted Look At GPU Programming And Linear Algebra Operators

// minimal fragment shader// www.lighthouse3d.com

void main(){

gl_FragColor = gl_Color ; // varying vec4 gl_Color;}

// minimal vector shader// www.lighthouse3d.com

void main(){

gl_FrontColor = gl_Color; // attribute vec4 gl_Color;

gl_Position = ftransform();}

Page 84: Light Hearted Look At GPU Programming And Linear Algebra Operators
Page 85: Light Hearted Look At GPU Programming And Linear Algebra Operators

// “near” minimal vertex shader// www.lighthouse3d.com

varying vec3 lightDir,normal;

void main(){

lightDir = normalize(vec3(gl_LightSource[0].position));normal = gl_NormalMatrix * gl_Normal;

gl_Position = ftransform();}

// “near” minimal fragment shader// www.lighthouse3d.com

varying vec3 lightDir,normal;

void main(){

float intensity;vec4 color;

// normalizing the lights position to be on the safe sidevec3 l = normalize(vec3(gl_LightSource[0].position));

vec3 n = normalize(normal);

intensity = dot(l,n);

if (intensity > 0.95)color = vec4(1.0,0.5,0.5,1.0);

else if (intensity > 0.5)color = vec4(0.6,0.3,0.3,1.0);

else if (intensity > 0.25)color = vec4(0.4,0.2,0.2,1.0);

elsecolor = vec4(0.2,0.1,0.1,1.0);

gl_FragColor = color;}

Page 86: Light Hearted Look At GPU Programming And Linear Algebra Operators

ShaderPseudo Lighting

Page 87: Light Hearted Look At GPU Programming And Linear Algebra Operators

Real Utility?

Exploiting(Living With)ExistingArchitecture/HardwareThat’s BeyondProgrammaticControl

// Special Constructor

Page 88: Light Hearted Look At GPU Programming And Linear Algebra Operators

Context

Page 89: Light Hearted Look At GPU Programming And Linear Algebra Operators

Context

Exploiting(Living With)ExistingArchitecture/HardwareThat’s BeyondProgrammaticControl

Page 90: Light Hearted Look At GPU Programming And Linear Algebra Operators

Context

// We Saw An // Example

Page 91: Light Hearted Look At GPU Programming And Linear Algebra Operators

Context

Page 92: Light Hearted Look At GPU Programming And Linear Algebra Operators

Miscellaneous

“Programmable Unit”

Page 93: Light Hearted Look At GPU Programming And Linear Algebra Operators

Miscellaneous

“Programmable Unit”

Page 94: Light Hearted Look At GPU Programming And Linear Algebra Operators

Did You See All 3 PapersAnd The Book?

Page 95: Light Hearted Look At GPU Programming And Linear Algebra Operators

Questions?

Page 96: Light Hearted Look At GPU Programming And Linear Algebra Operators

GLUTGLSL Demo

z:\Windows.Documents\Desktop\colorglut_2.0\Debug>glutglsl