SlideShare a Scribd company logo
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Kevin Goldsmith | Senior Engineering Manager
Bob Archer | Senior Computer Scientist
Pixel Bender
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What is Pixel Bender?
A domain specific kernel and graph language for image and video processing
designed to efficiently target current and future heterogeneous hardware.
2
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender Kernels & Graphs
3
<languageVersion : 1.0;>
kernel pixelate_sample
<
namespace : "AIF Test";
vendor : "Adobe";
version : 1;>
{
parameter int dimension;
input image4 inputImage;
output pixel4 outputPixel;
void evaluatePixel()
{
float dimAsFloat = float(dimension);
float2 sc = floor(outCoord() /
float2(dimAsFloat, dimAsFloat));
sc *= dimAsFloat;
outputPixel = sampleNearest(inputImage, sc);
}
}
<?xml version="1.0" encoding="utf-8"?>
<graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0">
<metadata name = "namespace" value = "AIF"/>
<metadata name = "vendor" value = "Adobe Systems" />
<metadata name = "version" type = "int" value = "1" />
<parameter type = "int" name = "dimension" >
<metadata name = "defaultValue" type = "int" value = "1" />
<metadata name = "minValue" type = "int" value = "1" />
<metadata name = "maxValue" type = "int" value = "100" />
</parameter>
<inputImage type = "image4" name = "inputImage" />
<outputImage type = "image4" name = "outputImage" />
<kernel>
<![CDATA[
<languageVersion : 1.0;>
kernel Pixelate
<
namespace:"AIF";
vendor:"Adobe Systems";
version:1;
>
{
…
}
]]>
</kernel>
<node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1"
clientID ="ADBE Pixelate" >
<evaluateParameters>
<![CDATA[
void evaluateParameters()
{
pixelateFilter::dimension = dimension;
}
]]>
</evaluateParameters>
</node>
<!-- Connect the graph -->
<connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" />
<connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" />
</graph>
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender Kernels & Graphs
4
<languageVersion : 1.0;>
kernel pixelate_sample
<
namespace : "AIF Test";
vendor : "Adobe";
version : 1;>
{
parameter int dimension;
input image4 inputImage;
output pixel4 outputPixel;
void evaluatePixel()
{
float dimAsFloat = float(dimension);
float2 sc = floor(outCoord() /
float2(dimAsFloat, dimAsFloat));
sc *= dimAsFloat;
outputPixel = sampleNearest(inputImage, sc);
}
}
<?xml version="1.0" encoding="utf-8"?>
<graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0">
<metadata name = "namespace" value = "AIF"/>
<metadata name = "vendor" value = "Adobe Systems" />
<metadata name = "version" type = "int" value = "1" />
<parameter type = "int" name = "dimension" >
<metadata name = "defaultValue" type = "int" value = "1" />
<metadata name = "minValue" type = "int" value = "1" />
<metadata name = "maxValue" type = "int" value = "100" />
</parameter>
<inputImage type = "image4" name = "inputImage" />
<outputImage type = "image4" name = "outputImage" />
<kernel>
<![CDATA[
<languageVersion : 1.0;>
kernel Pixelate
<
namespace:"AIF";
vendor:"Adobe Systems";
version:1;
>
{
…
}
]]>
</kernel>
<node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1"
clientID ="ADBE Pixelate" >
<evaluateParameters>
<![CDATA[
void evaluateParameters()
{
pixelateFilter::dimension = dimension;
}
]]>
</evaluateParameters>
</node>
<!-- Connect the graph -->
<connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" />
<connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" />
</graph>
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender Kernels & Graphs
5
<languageVersion : 1.0;>
kernel pixelate_sample
<
namespace : "AIF Test";
vendor : "Adobe";
version : 1;>
{
parameter int dimension;
input image4 inputImage;
output pixel4 outputPixel;
void evaluatePixel()
{
float dimAsFloat = float(dimension);
float2 sc = floor(outCoord() /
float2(dimAsFloat, dimAsFloat));
sc *= dimAsFloat;
outputPixel = sampleNearest(inputImage, sc);
}
}
<?xml version="1.0" encoding="utf-8"?>
<graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0">
<metadata name = "namespace" value = "AIF"/>
<metadata name = "vendor" value = "Adobe Systems" />
<metadata name = "version" type = "int" value = "1" />
<parameter type = "int" name = "dimension" >
<metadata name = "defaultValue" type = "int" value = "1" />
<metadata name = "minValue" type = "int" value = "1" />
<metadata name = "maxValue" type = "int" value = "100" />
</parameter>
<inputImage type = "image4" name = "inputImage" />
<outputImage type = "image4" name = "outputImage" />
<kernel>
<![CDATA[
<languageVersion : 1.0;>
kernel Pixelate
<
namespace:"AIF";
vendor:"Adobe Systems";
version:1;
>
{
…
}
]]>
</kernel>
<node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1"
clientID ="ADBE Pixelate" >
<evaluateParameters>
<![CDATA[
void evaluateParameters()
{
pixelateFilter::dimension = dimension;
}
]]>
</evaluateParameters>
</node>
<!-- Connect the graph -->
<connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" />
<connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" />
</graph>
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender Kernels & Graphs
6
<languageVersion : 1.0;>
kernel pixelate_sample
<
namespace : "AIF Test";
vendor : "Adobe";
version : 1;>
{
parameter int dimension;
input image4 inputImage;
output pixel4 outputPixel;
void evaluatePixel()
{
float dimAsFloat = float(dimension);
float2 sc = floor(outCoord() /
float2(dimAsFloat, dimAsFloat));
sc *= dimAsFloat;
outputPixel = sampleNearest(inputImage, sc);
}
}
<?xml version="1.0" encoding="utf-8"?>
<graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0">
<metadata name = "namespace" value = "AIF"/>
<metadata name = "vendor" value = "Adobe Systems" />
<metadata name = "version" type = "int" value = "1" />
<parameter type = "int" name = "dimension" >
<metadata name = "defaultValue" type = "int" value = "1" />
<metadata name = "minValue" type = "int" value = "1" />
<metadata name = "maxValue" type = "int" value = "100" />
</parameter>
<inputImage type = "image4" name = "inputImage" />
<outputImage type = "image4" name = "outputImage" />
<kernel>
<![CDATA[
<languageVersion : 1.0;>
kernel Pixelate
<
namespace:"AIF";
vendor:"Adobe Systems";
version:1;
>
{
…
}
]]>
</kernel>
<node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1"
clientID ="ADBE Pixelate" >
<evaluateParameters>
<![CDATA[
void evaluateParameters()
{
pixelateFilter::dimension = dimension;
}
]]>
</evaluateParameters>
</node>
<!-- Connect the graph -->
<connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" />
<connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" />
</graph>
High Pass Texturize
Saturate
Blend
Vacation
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender Kernels & Graphs
7
<languageVersion : 1.0;>
kernel pixelate_sample
<
namespace : "AIF Test";
vendor : "Adobe";
version : 1;>
{
parameter int dimension;
input image4 inputImage;
output pixel4 outputPixel;
void evaluatePixel()
{
float dimAsFloat = float(dimension);
float2 sc = floor(outCoord() /
float2(dimAsFloat, dimAsFloat));
sc *= dimAsFloat;
outputPixel = sampleNearest(inputImage, sc);
}
}
<?xml version="1.0" encoding="utf-8"?>
<graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0">
<metadata name = "namespace" value = "AIF"/>
<metadata name = "vendor" value = "Adobe Systems" />
<metadata name = "version" type = "int" value = "1" />
<parameter type = "int" name = "dimension" >
<metadata name = "defaultValue" type = "int" value = "1" />
<metadata name = "minValue" type = "int" value = "1" />
<metadata name = "maxValue" type = "int" value = "100" />
</parameter>
<inputImage type = "image4" name = "inputImage" />
<outputImage type = "image4" name = "outputImage" />
<kernel>
<![CDATA[
<languageVersion : 1.0;>
kernel Pixelate
<
namespace:"AIF";
vendor:"Adobe Systems";
version:1;
>
{
…
}
]]>
</kernel>
<node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1"
clientID ="ADBE Pixelate" >
<evaluateParameters>
<![CDATA[
void evaluateParameters()
{
pixelateFilter::dimension = dimension;
}
]]>
</evaluateParameters>
</node>
<!-- Connect the graph -->
<connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" />
<connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" />
</graph>
•Explicitly Data Parallel
•Explicitly Lock Free
•Implicitly Vectorizable
•Contains Optimization Hints
•Region Reasoning
•Parameter Ranges
•Supports per-frame functions
•JIT
•x86 with SSE
•GLSL
•Implicitly Task Parallel
•Contains Optimization Hints
•Region Reasoning
•Parameter Ranges
•Parameter Use
•Supports per frame and internal
graph logic
•Language/Hardware Agnostic
•Enforces the programming Model
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender Runtime
§ Run-time scheduling
§ Decide if a Pixel Bender node runs on the GPU or CPU
§ Order the execution of each node
§ Drives Optimization
§ Runs region reasoning pass
§ Concatenate adjacent Pixel Bender nodes
§ Fix parameter values for constant folding and range propagation
§ Caches intra-graph frames when possible to reduce computation
§ Allows host application to aid optimization
§ Lock parameter values
§ Lock inputs
§ Interfaces with host application resource management
§ Application can force CPU or GPU execution
§ Application can provide memory or threading management
8
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender Runtime
§ Run-time scheduling
§ Decide if a Pixel Bender node runs on the GPU or CPU
§ Order the execution of each node
§ Drives Optimization
§ Runs region reasoning pass
§ Concatenate adjacent Pixel Bender nodes
§ Fix parameter values for constant folding and range propagation
§ Caches intra-graph frames when possible to reduce computation
§ Allows host application to aid optimization
§ Lock parameter values
§ Lock inputs
§ Interfaces with host application resource management
§ Application can force CPU or GPU execution
§ Application can provide memory or threading management
9
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender Runtime
§ Run-time scheduling
§ Decide if a Pixel Bender node runs on the GPU or CPU
§ Order the execution of each node
§ Drives Optimization
§ Runs region reasoning pass
§ Concatenate adjacent Pixel Bender nodes
§ Fix parameter values for constant folding and range propagation
§ Caches intra-graph frames when possible to reduce computation
§ Allows host application to aid optimization
§ Lock parameter values
§ Lock inputs
§ Interfaces with host application resource management
§ Application can force CPU or GPU execution
§ Application can provide memory or threading management
10
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender Runtime
§ Run-time scheduling
§ Decide if a Pixel Bender node runs on the GPU or CPU
§ Order the execution of each node
§ Drives Optimization
§ Runs region reasoning pass
§ Concatenate adjacent Pixel Bender nodes
§ Fix parameter values for constant folding and range propagation
§ Caches intra-graph frames when possible to reduce computation
§ Allows host application to aid optimization
§ Lock parameter values
§ Lock inputs
§ Interfaces with host application resource management
§ Application can force CPU or GPU execution
§ Application can provide memory or threading management
11
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Demo
12
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Lessons Learned (so far)
§ A DSL allows you to limit the language for optimization purposes while
preserving programmability
§ Just-in-time Compilation allows you not only to use runtime information for
optimization purposes, but also allows you to future-proof algorithms against
later hardware architectures
§ Developers will learn new programming languages if they give them an ability to
do something new, or make something significantly easier
§ A language with only a text representation creates some nice network and
community effects (for a time)
13
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Lessons Learned (so far)
§ A DSL allows you to limit the language for optimization purposes while
preserving programmability
§ Just-in-time Compilation allows you not only to use runtime information for
optimization purposes, but also allows you to future-proof algorithms against
later hardware architectures
§ Developers will learn new programming languages if they give them an ability to
do something new, or make something significantly easier
§ A language with only a text representation creates some nice network and
community effects (for a time)
14
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Lessons Learned (so far)
§ A DSL allows you to limit the language for optimization purposes while
preserving programmability
§ Just-in-time Compilation allows you not only to use runtime information for
optimization purposes, but also allows you to future-proof algorithms against
later hardware architectures
§ Developers will learn new programming languages if they give them an ability to
do something new, or make something significantly easier
§ A language with only a text representation creates some nice network and
community effects (for a time)
15
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Lessons Learned (so far)
§ A DSL allows you to limit the language for optimization purposes while
preserving programmability
§ Just-in-time Compilation allows you not only to use runtime information for
optimization purposes, but also allows you to future-proof algorithms against
later hardware architectures
§ Developers will learn new programming languages if they give them an ability to
do something new, or make something significantly easier
§ A language with only a text representation creates some nice network and
community effects (for a time)
16
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Warning.
Speculation ahead.
17
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
How do we make the most of the hardware
we have available?
18
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Writing multi threaded code is like juggling
chainsaws; amazing when it works and truly
sucky when it doesn’t.
Andrew Wulf
19
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
§ Gflop / $
20
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
§ Gflop / $
§ Gflop / watt
21
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
§ Gflop / $
§ Gflop / watt
Gflop / developer-hour
22
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What have we got?
23
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What have we got?
§ DSL for image processing (Pixel Bender)
24
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What have we got?
§ DSL for image processing (Pixel Bender)
§ JIT compiler / optimizer
25
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What have we got?
§ DSL for image processing (Pixel Bender)
§ JIT compiler / optimizer
§ Runtime – enforces programming model, allows graphs
26
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What have we got?
§ DSL for image processing (Pixel Bender)
§ JIT compiler / optimizer
§ Runtime – enforces programming model, allows graphs
§ High performance on parallel hardware (using OpenGL)
27
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What have we got?
§ DSL for image processing (Pixel Bender)
§ JIT compiler / optimizer
§ Runtime – enforces programming model, allows graphs
§ High performance on parallel hardware (using OpenGL)
§ Future proof against new hardware
28
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What have we got?
§ DSL for image processing (Pixel Bender)
§ JIT compiler / optimizer
§ Runtime – enforces programming model, allows graphs
§ High performance on parallel hardware (using OpenGL)
§ Future proof against new hardware
§ Cross platform
29
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What cross platform means to Adobe
§ Mac
§ Windows
§ AMD
§ Intel
§ nVidia
§ CPU
§ GPU
§ Mobile hardware
30
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What have we got?
§ DSL for image processing (Pixel Bender)
§ JIT compiler / optimizer
§ Runtime – enforces programming model, allows graphs
§ High performance on parallel hardware (using OpenGL)
§ Future proof against new hardware
§ Cross platform
31
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What have we got?
§ DSL for image processing (Pixel Bender)
§ JIT compiler / optimizer
§ Runtime – enforces programming model, allows graphs
§ High performance on parallel hardware (using OpenGL)
§ Future proof against new hardware
§ Cross platform
OpenCL
32
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Why not just switch entirely to OpenCL?
33
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Why not just switch entirely to OpenCL?
Pixel Bender has certain advantages:
§ Ease of writing
34
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Why not just switch entirely to OpenCL?
Pixel Bender has certain advantages:
§ Ease of writing
§ Optimization opportunities
35
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Why not just switch entirely to OpenCL?
Pixel Bender has certain advantages:
§ Ease of writing
§ Optimization opportunities
§ Race free by construction
36
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Why not just switch entirely to OpenCL?
Pixel Bender has certain advantages:
§ Ease of writing
§ Optimization opportunities
§ Race free by construction
§ Parallelism for the masses
37
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Warning.
Increased speculation
ahead.
38
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender has certain disadvantages:
§ One fixed programming model
§ Focuses on image processing
§ Not general enough
39
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Framework
40
Inputs Framework Outputs
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Framework
41
Inputs Framework Outputs
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Michael McCool’s parallel programming patterns
§ Gather
§ Map
§ Reduce
§ Superscalar sequences
§ Pipeline
§ Nesting
§ Scans
§ Recurrences
§ Search
§ Subdivision
§ Stencil
§ Scatter
§ Pack
§ Selection
§ Partition
§ Expand
42
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What are we going to do about it?
43
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Internal customers
44
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
External customers
45
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
References
Pixel Bender
http://www.adobe.com/devnet/pixelbender.html
http://blogs.adobe.com/pixel-bender/
http://blogs.adobe.com/kevin-goldsmith/tag/pixel-bender-2
Structured Parallel Programming with Deterministic Patterns
Michael D. McCool http://software.intel.com/file/27160
Patterns for Parallel Programming
Mattson, Sanders & Massingill
46
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
48
Pixel Bender programming model
Write a function that produces a single
output pixel
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
49
Pixel Bender programming model
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
50
Pixel Bender programming model
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
51
Pixel Bender programming model
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
52
Pixel Bender programming model
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Why Pixel Bender?
§ 2001 programmable shading units on the GPU
§ 2005 dual core CPUs
§ 2005 AIF team formed
§ 2006 quad core CPUs
§ 2006 AMD announces CTM
§ 2008 OpenCL
§ 2011 fusion chips
54
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Pixel Bender History
§ 2001 programmable shading units on the GPU
§ 2005 dual core CPUs
§ 2005 AIF team formed
§ 2006 quad core CPUs
§ 2006 AMD announces CTM
§ 2007 After Effects CS3 replaces GLSL code with Pixel Bender
§ 2007 Flash Player 10 Announced including Pixel Bender support
§ 2008 OpenCL
§ 2008 After Effects CS4 - first CPU implementation, 3rd party plug-ins, Pixel Bender
Graph language announced
§ 2008 Photoshop CS4 – Pixel Bender plug-in released
§ 2010 Pixel Bender commercial plug-ins start to appear en masse
§ 2010 Flash Player Molehill Announced – Pixel Bender 3D
§ 2011 fusion chips
55

More Related Content

Similar to Pixel Bender - 2011 AMD Fusion Conference

ADF Mobile - an intro for Developers
ADF Mobile - an intro for DevelopersADF Mobile - an intro for Developers
ADF Mobile - an intro for Developers
Luc Bors
 
Top 10 HTML5 features
Top 10 HTML5 featuresTop 10 HTML5 features
Top 10 HTML5 features
Gill Cleeren
 
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
Publicis Sapient Engineering
 
When Smalltalk Meets the Web
When Smalltalk Meets the WebWhen Smalltalk Meets the Web
When Smalltalk Meets the Web
ESUG
 
Creating Flash Content for Multiple Screens
Creating Flash Content for Multiple ScreensCreating Flash Content for Multiple Screens
Creating Flash Content for Multiple Screens
paultrani
 
Flash for Mobile Devices
Flash for Mobile DevicesFlash for Mobile Devices
Flash for Mobile Devices
paultrani
 
Jsf2 html5-jazoon
Jsf2 html5-jazoonJsf2 html5-jazoon
Jsf2 html5-jazoon
Roger Kitain
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and Improved
Timothy Fisher
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
Igor Bronovskyy
 
Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8
Rupesh Kumar
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar (2nd installation)
RICOH THETA x IoT Developers Contest : Cloud API Seminar (2nd installation)RICOH THETA x IoT Developers Contest : Cloud API Seminar (2nd installation)
RICOH THETA x IoT Developers Contest : Cloud API Seminar (2nd installation)
contest-theta360
 
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
Wim Selles
 
New WSO2 Enterprise Integrator Focuses on Integration Developer Productivity
New WSO2 Enterprise Integrator Focuses on Integration Developer ProductivityNew WSO2 Enterprise Integrator Focuses on Integration Developer Productivity
New WSO2 Enterprise Integrator Focuses on Integration Developer Productivity
WSO2
 
Angular2 Development for Java developers
Angular2 Development for Java developersAngular2 Development for Java developers
Angular2 Development for Java developers
Yakov Fain
 
Firefox OS Web APIs, taking it to the next level
Firefox OS Web APIs, taking it to the next levelFirefox OS Web APIs, taking it to the next level
Firefox OS Web APIs, taking it to the next level
Frédéric Harper
 
Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2
Filippo Matteo Riggio
 
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at NetflixOSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
Manish Pandit
 
2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta
Daniel Fisher
 
Kinect v2 Introduction and Tutorial
Kinect v2 Introduction and TutorialKinect v2 Introduction and Tutorial
Kinect v2 Introduction and Tutorial
Tsukasa Sugiura
 

Similar to Pixel Bender - 2011 AMD Fusion Conference (20)

ADF Mobile - an intro for Developers
ADF Mobile - an intro for DevelopersADF Mobile - an intro for Developers
ADF Mobile - an intro for Developers
 
Top 10 HTML5 features
Top 10 HTML5 featuresTop 10 HTML5 features
Top 10 HTML5 features
 
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
 
When Smalltalk Meets the Web
When Smalltalk Meets the WebWhen Smalltalk Meets the Web
When Smalltalk Meets the Web
 
Creating Flash Content for Multiple Screens
Creating Flash Content for Multiple ScreensCreating Flash Content for Multiple Screens
Creating Flash Content for Multiple Screens
 
Flash for Mobile Devices
Flash for Mobile DevicesFlash for Mobile Devices
Flash for Mobile Devices
 
Jsf2 html5-jazoon
Jsf2 html5-jazoonJsf2 html5-jazoon
Jsf2 html5-jazoon
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and Improved
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
 
Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar (2nd installation)
RICOH THETA x IoT Developers Contest : Cloud API Seminar (2nd installation)RICOH THETA x IoT Developers Contest : Cloud API Seminar (2nd installation)
RICOH THETA x IoT Developers Contest : Cloud API Seminar (2nd installation)
 
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
 
New WSO2 Enterprise Integrator Focuses on Integration Developer Productivity
New WSO2 Enterprise Integrator Focuses on Integration Developer ProductivityNew WSO2 Enterprise Integrator Focuses on Integration Developer Productivity
New WSO2 Enterprise Integrator Focuses on Integration Developer Productivity
 
Angular2 Development for Java developers
Angular2 Development for Java developersAngular2 Development for Java developers
Angular2 Development for Java developers
 
Firefox OS Web APIs, taking it to the next level
Firefox OS Web APIs, taking it to the next levelFirefox OS Web APIs, taking it to the next level
Firefox OS Web APIs, taking it to the next level
 
Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2
 
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at NetflixOSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
 
2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta
 
Kinect v2 Introduction and Tutorial
Kinect v2 Introduction and TutorialKinect v2 Introduction and Tutorial
Kinect v2 Introduction and Tutorial
 

More from Kevin Goldsmith

It's teams all the way down - Design patterns for technology organizations
It's teams all the way down - Design patterns for technology organizationsIt's teams all the way down - Design patterns for technology organizations
It's teams all the way down - Design patterns for technology organizations
Kevin Goldsmith
 
What Vulnerabilities? How and why to secure your ML/AI Solutions
What Vulnerabilities? How and why to secure your ML/AI SolutionsWhat Vulnerabilities? How and why to secure your ML/AI Solutions
What Vulnerabilities? How and why to secure your ML/AI Solutions
Kevin Goldsmith
 
Raising the subject of raises
Raising the subject of raisesRaising the subject of raises
Raising the subject of raises
Kevin Goldsmith
 
Managing partly distributed teams
Managing partly distributed teamsManaging partly distributed teams
Managing partly distributed teams
Kevin Goldsmith
 
Steal from the best
Steal from the bestSteal from the best
Steal from the best
Kevin Goldsmith
 
What is Agile?
What is Agile?What is Agile?
What is Agile?
Kevin Goldsmith
 
It Is All About the Benjamins: the Real World Economics of HPC
It Is All About the Benjamins: the Real World Economics of HPCIt Is All About the Benjamins: the Real World Economics of HPC
It Is All About the Benjamins: the Real World Economics of HPC
Kevin Goldsmith
 
Parallelism, the Cloud, and the Tools of the Future for the next generation o...
Parallelism, the Cloud, and the Tools of the Future for the next generation o...Parallelism, the Cloud, and the Tools of the Future for the next generation o...
Parallelism, the Cloud, and the Tools of the Future for the next generation o...
Kevin Goldsmith
 
Innovation and organization
Innovation and organizationInnovation and organization
Innovation and organization
Kevin Goldsmith
 
My CMU alumni journey
My CMU alumni journeyMy CMU alumni journey
My CMU alumni journey
Kevin Goldsmith
 
Building Lean
Building LeanBuilding Lean
Building Lean
Kevin Goldsmith
 
A Software Career (2017)
A Software Career (2017)A Software Career (2017)
A Software Career (2017)
Kevin Goldsmith
 
When why and how to stop coding as your day job
When why and how to stop coding as your day jobWhen why and how to stop coding as your day job
When why and how to stop coding as your day job
Kevin Goldsmith
 
Presenting to executives
Presenting to executivesPresenting to executives
Presenting to executives
Kevin Goldsmith
 
Crafting a Mission and Vision For Your Team
Crafting a Mission and Vision For Your TeamCrafting a Mission and Vision For Your Team
Crafting a Mission and Vision For Your Team
Kevin Goldsmith
 
You Are Doing Autonomy Wrong
You Are Doing Autonomy WrongYou Are Doing Autonomy Wrong
You Are Doing Autonomy Wrong
Kevin Goldsmith
 
Organization, Architecture, Autonomy and Accountability (2020)
Organization, Architecture, Autonomy and Accountability (2020)Organization, Architecture, Autonomy and Accountability (2020)
Organization, Architecture, Autonomy and Accountability (2020)
Kevin Goldsmith
 
Leading Distributed Teams - Stretch Conference 2020
Leading Distributed Teams - Stretch Conference 2020Leading Distributed Teams - Stretch Conference 2020
Leading Distributed Teams - Stretch Conference 2020
Kevin Goldsmith
 
How Does Salary Work - The Lead Developer Berlin 2019 extended remix
How Does Salary Work - The Lead Developer Berlin 2019 extended remixHow Does Salary Work - The Lead Developer Berlin 2019 extended remix
How Does Salary Work - The Lead Developer Berlin 2019 extended remix
Kevin Goldsmith
 
Developing your Developers: Constructing Career Paths for your Technologists ...
Developing your Developers: Constructing Career Paths for your Technologists ...Developing your Developers: Constructing Career Paths for your Technologists ...
Developing your Developers: Constructing Career Paths for your Technologists ...
Kevin Goldsmith
 

More from Kevin Goldsmith (20)

It's teams all the way down - Design patterns for technology organizations
It's teams all the way down - Design patterns for technology organizationsIt's teams all the way down - Design patterns for technology organizations
It's teams all the way down - Design patterns for technology organizations
 
What Vulnerabilities? How and why to secure your ML/AI Solutions
What Vulnerabilities? How and why to secure your ML/AI SolutionsWhat Vulnerabilities? How and why to secure your ML/AI Solutions
What Vulnerabilities? How and why to secure your ML/AI Solutions
 
Raising the subject of raises
Raising the subject of raisesRaising the subject of raises
Raising the subject of raises
 
Managing partly distributed teams
Managing partly distributed teamsManaging partly distributed teams
Managing partly distributed teams
 
Steal from the best
Steal from the bestSteal from the best
Steal from the best
 
What is Agile?
What is Agile?What is Agile?
What is Agile?
 
It Is All About the Benjamins: the Real World Economics of HPC
It Is All About the Benjamins: the Real World Economics of HPCIt Is All About the Benjamins: the Real World Economics of HPC
It Is All About the Benjamins: the Real World Economics of HPC
 
Parallelism, the Cloud, and the Tools of the Future for the next generation o...
Parallelism, the Cloud, and the Tools of the Future for the next generation o...Parallelism, the Cloud, and the Tools of the Future for the next generation o...
Parallelism, the Cloud, and the Tools of the Future for the next generation o...
 
Innovation and organization
Innovation and organizationInnovation and organization
Innovation and organization
 
My CMU alumni journey
My CMU alumni journeyMy CMU alumni journey
My CMU alumni journey
 
Building Lean
Building LeanBuilding Lean
Building Lean
 
A Software Career (2017)
A Software Career (2017)A Software Career (2017)
A Software Career (2017)
 
When why and how to stop coding as your day job
When why and how to stop coding as your day jobWhen why and how to stop coding as your day job
When why and how to stop coding as your day job
 
Presenting to executives
Presenting to executivesPresenting to executives
Presenting to executives
 
Crafting a Mission and Vision For Your Team
Crafting a Mission and Vision For Your TeamCrafting a Mission and Vision For Your Team
Crafting a Mission and Vision For Your Team
 
You Are Doing Autonomy Wrong
You Are Doing Autonomy WrongYou Are Doing Autonomy Wrong
You Are Doing Autonomy Wrong
 
Organization, Architecture, Autonomy and Accountability (2020)
Organization, Architecture, Autonomy and Accountability (2020)Organization, Architecture, Autonomy and Accountability (2020)
Organization, Architecture, Autonomy and Accountability (2020)
 
Leading Distributed Teams - Stretch Conference 2020
Leading Distributed Teams - Stretch Conference 2020Leading Distributed Teams - Stretch Conference 2020
Leading Distributed Teams - Stretch Conference 2020
 
How Does Salary Work - The Lead Developer Berlin 2019 extended remix
How Does Salary Work - The Lead Developer Berlin 2019 extended remixHow Does Salary Work - The Lead Developer Berlin 2019 extended remix
How Does Salary Work - The Lead Developer Berlin 2019 extended remix
 
Developing your Developers: Constructing Career Paths for your Technologists ...
Developing your Developers: Constructing Career Paths for your Technologists ...Developing your Developers: Constructing Career Paths for your Technologists ...
Developing your Developers: Constructing Career Paths for your Technologists ...
 

Recently uploaded

在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
obonagu
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
JoytuBarua2
 
Runway Orientation Based on the Wind Rose Diagram.pptx
Runway Orientation Based on the Wind Rose Diagram.pptxRunway Orientation Based on the Wind Rose Diagram.pptx
Runway Orientation Based on the Wind Rose Diagram.pptx
SupreethSP4
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
gerogepatton
 
Fundamentals of Electric Drives and its applications.pptx
Fundamentals of Electric Drives and its applications.pptxFundamentals of Electric Drives and its applications.pptx
Fundamentals of Electric Drives and its applications.pptx
manasideore6
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
Kamal Acharya
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation & Control
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
thanhdowork
 
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
ydteq
 
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
Amil Baba Dawood bangali
 
J.Yang, ICLR 2024, MLILAB, KAIST AI.pdf
J.Yang,  ICLR 2024, MLILAB, KAIST AI.pdfJ.Yang,  ICLR 2024, MLILAB, KAIST AI.pdf
J.Yang, ICLR 2024, MLILAB, KAIST AI.pdf
MLILAB
 
The Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdfThe Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdf
Pipe Restoration Solutions
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
Pratik Pawar
 
ASME IX(9) 2007 Full Version .pdf
ASME IX(9)  2007 Full Version       .pdfASME IX(9)  2007 Full Version       .pdf
ASME IX(9) 2007 Full Version .pdf
AhmedHussein950959
 
Architectural Portfolio Sean Lockwood
Architectural Portfolio Sean LockwoodArchitectural Portfolio Sean Lockwood
Architectural Portfolio Sean Lockwood
seandesed
 
Hierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power SystemHierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power System
Kerry Sado
 
Investor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptxInvestor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptx
AmarGB2
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
VENKATESHvenky89705
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
bakpo1
 
power quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptxpower quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptx
ViniHema
 

Recently uploaded (20)

在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
 
Runway Orientation Based on the Wind Rose Diagram.pptx
Runway Orientation Based on the Wind Rose Diagram.pptxRunway Orientation Based on the Wind Rose Diagram.pptx
Runway Orientation Based on the Wind Rose Diagram.pptx
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
 
Fundamentals of Electric Drives and its applications.pptx
Fundamentals of Electric Drives and its applications.pptxFundamentals of Electric Drives and its applications.pptx
Fundamentals of Electric Drives and its applications.pptx
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
 
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
 
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
 
J.Yang, ICLR 2024, MLILAB, KAIST AI.pdf
J.Yang,  ICLR 2024, MLILAB, KAIST AI.pdfJ.Yang,  ICLR 2024, MLILAB, KAIST AI.pdf
J.Yang, ICLR 2024, MLILAB, KAIST AI.pdf
 
The Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdfThe Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdf
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
 
ASME IX(9) 2007 Full Version .pdf
ASME IX(9)  2007 Full Version       .pdfASME IX(9)  2007 Full Version       .pdf
ASME IX(9) 2007 Full Version .pdf
 
Architectural Portfolio Sean Lockwood
Architectural Portfolio Sean LockwoodArchitectural Portfolio Sean Lockwood
Architectural Portfolio Sean Lockwood
 
Hierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power SystemHierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power System
 
Investor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptxInvestor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptx
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
 
power quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptxpower quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptx
 

Pixel Bender - 2011 AMD Fusion Conference

  • 1. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Kevin Goldsmith | Senior Engineering Manager Bob Archer | Senior Computer Scientist Pixel Bender
  • 2. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What is Pixel Bender? A domain specific kernel and graph language for image and video processing designed to efficiently target current and future heterogeneous hardware. 2
  • 3. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender Kernels & Graphs 3 <languageVersion : 1.0;> kernel pixelate_sample < namespace : "AIF Test"; vendor : "Adobe"; version : 1;> { parameter int dimension; input image4 inputImage; output pixel4 outputPixel; void evaluatePixel() { float dimAsFloat = float(dimension); float2 sc = floor(outCoord() / float2(dimAsFloat, dimAsFloat)); sc *= dimAsFloat; outputPixel = sampleNearest(inputImage, sc); } } <?xml version="1.0" encoding="utf-8"?> <graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0"> <metadata name = "namespace" value = "AIF"/> <metadata name = "vendor" value = "Adobe Systems" /> <metadata name = "version" type = "int" value = "1" /> <parameter type = "int" name = "dimension" > <metadata name = "defaultValue" type = "int" value = "1" /> <metadata name = "minValue" type = "int" value = "1" /> <metadata name = "maxValue" type = "int" value = "100" /> </parameter> <inputImage type = "image4" name = "inputImage" /> <outputImage type = "image4" name = "outputImage" /> <kernel> <![CDATA[ <languageVersion : 1.0;> kernel Pixelate < namespace:"AIF"; vendor:"Adobe Systems"; version:1; > { … } ]]> </kernel> <node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1" clientID ="ADBE Pixelate" > <evaluateParameters> <![CDATA[ void evaluateParameters() { pixelateFilter::dimension = dimension; } ]]> </evaluateParameters> </node> <!-- Connect the graph --> <connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" /> <connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" /> </graph>
  • 4. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender Kernels & Graphs 4 <languageVersion : 1.0;> kernel pixelate_sample < namespace : "AIF Test"; vendor : "Adobe"; version : 1;> { parameter int dimension; input image4 inputImage; output pixel4 outputPixel; void evaluatePixel() { float dimAsFloat = float(dimension); float2 sc = floor(outCoord() / float2(dimAsFloat, dimAsFloat)); sc *= dimAsFloat; outputPixel = sampleNearest(inputImage, sc); } } <?xml version="1.0" encoding="utf-8"?> <graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0"> <metadata name = "namespace" value = "AIF"/> <metadata name = "vendor" value = "Adobe Systems" /> <metadata name = "version" type = "int" value = "1" /> <parameter type = "int" name = "dimension" > <metadata name = "defaultValue" type = "int" value = "1" /> <metadata name = "minValue" type = "int" value = "1" /> <metadata name = "maxValue" type = "int" value = "100" /> </parameter> <inputImage type = "image4" name = "inputImage" /> <outputImage type = "image4" name = "outputImage" /> <kernel> <![CDATA[ <languageVersion : 1.0;> kernel Pixelate < namespace:"AIF"; vendor:"Adobe Systems"; version:1; > { … } ]]> </kernel> <node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1" clientID ="ADBE Pixelate" > <evaluateParameters> <![CDATA[ void evaluateParameters() { pixelateFilter::dimension = dimension; } ]]> </evaluateParameters> </node> <!-- Connect the graph --> <connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" /> <connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" /> </graph>
  • 5. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender Kernels & Graphs 5 <languageVersion : 1.0;> kernel pixelate_sample < namespace : "AIF Test"; vendor : "Adobe"; version : 1;> { parameter int dimension; input image4 inputImage; output pixel4 outputPixel; void evaluatePixel() { float dimAsFloat = float(dimension); float2 sc = floor(outCoord() / float2(dimAsFloat, dimAsFloat)); sc *= dimAsFloat; outputPixel = sampleNearest(inputImage, sc); } } <?xml version="1.0" encoding="utf-8"?> <graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0"> <metadata name = "namespace" value = "AIF"/> <metadata name = "vendor" value = "Adobe Systems" /> <metadata name = "version" type = "int" value = "1" /> <parameter type = "int" name = "dimension" > <metadata name = "defaultValue" type = "int" value = "1" /> <metadata name = "minValue" type = "int" value = "1" /> <metadata name = "maxValue" type = "int" value = "100" /> </parameter> <inputImage type = "image4" name = "inputImage" /> <outputImage type = "image4" name = "outputImage" /> <kernel> <![CDATA[ <languageVersion : 1.0;> kernel Pixelate < namespace:"AIF"; vendor:"Adobe Systems"; version:1; > { … } ]]> </kernel> <node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1" clientID ="ADBE Pixelate" > <evaluateParameters> <![CDATA[ void evaluateParameters() { pixelateFilter::dimension = dimension; } ]]> </evaluateParameters> </node> <!-- Connect the graph --> <connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" /> <connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" /> </graph>
  • 6. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender Kernels & Graphs 6 <languageVersion : 1.0;> kernel pixelate_sample < namespace : "AIF Test"; vendor : "Adobe"; version : 1;> { parameter int dimension; input image4 inputImage; output pixel4 outputPixel; void evaluatePixel() { float dimAsFloat = float(dimension); float2 sc = floor(outCoord() / float2(dimAsFloat, dimAsFloat)); sc *= dimAsFloat; outputPixel = sampleNearest(inputImage, sc); } } <?xml version="1.0" encoding="utf-8"?> <graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0"> <metadata name = "namespace" value = "AIF"/> <metadata name = "vendor" value = "Adobe Systems" /> <metadata name = "version" type = "int" value = "1" /> <parameter type = "int" name = "dimension" > <metadata name = "defaultValue" type = "int" value = "1" /> <metadata name = "minValue" type = "int" value = "1" /> <metadata name = "maxValue" type = "int" value = "100" /> </parameter> <inputImage type = "image4" name = "inputImage" /> <outputImage type = "image4" name = "outputImage" /> <kernel> <![CDATA[ <languageVersion : 1.0;> kernel Pixelate < namespace:"AIF"; vendor:"Adobe Systems"; version:1; > { … } ]]> </kernel> <node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1" clientID ="ADBE Pixelate" > <evaluateParameters> <![CDATA[ void evaluateParameters() { pixelateFilter::dimension = dimension; } ]]> </evaluateParameters> </node> <!-- Connect the graph --> <connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" /> <connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" /> </graph> High Pass Texturize Saturate Blend Vacation
  • 7. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender Kernels & Graphs 7 <languageVersion : 1.0;> kernel pixelate_sample < namespace : "AIF Test"; vendor : "Adobe"; version : 1;> { parameter int dimension; input image4 inputImage; output pixel4 outputPixel; void evaluatePixel() { float dimAsFloat = float(dimension); float2 sc = floor(outCoord() / float2(dimAsFloat, dimAsFloat)); sc *= dimAsFloat; outputPixel = sampleNearest(inputImage, sc); } } <?xml version="1.0" encoding="utf-8"?> <graph name = "PixelateGraph"xmlns="http://ns.adobe.com/PixelBenderGraph/1.0"> <metadata name = "namespace" value = "AIF"/> <metadata name = "vendor" value = "Adobe Systems" /> <metadata name = "version" type = "int" value = "1" /> <parameter type = "int" name = "dimension" > <metadata name = "defaultValue" type = "int" value = "1" /> <metadata name = "minValue" type = "int" value = "1" /> <metadata name = "maxValue" type = "int" value = "100" /> </parameter> <inputImage type = "image4" name = "inputImage" /> <outputImage type = "image4" name = "outputImage" /> <kernel> <![CDATA[ <languageVersion : 1.0;> kernel Pixelate < namespace:"AIF"; vendor:"Adobe Systems"; version:1; > { … } ]]> </kernel> <node id = "pixelateFilter" name ="Pixelate" namespace = "AIF" vendor = "Adobe Systems" version ="1" clientID ="ADBE Pixelate" > <evaluateParameters> <![CDATA[ void evaluateParameters() { pixelateFilter::dimension = dimension; } ]]> </evaluateParameters> </node> <!-- Connect the graph --> <connect fromImage = "inputImage" toNode = "pixelateFilter" toInput = "src" /> <connect fromNode = "pixelateFilter" fromOutput = "dst" toImage = "outputImage" /> </graph> •Explicitly Data Parallel •Explicitly Lock Free •Implicitly Vectorizable •Contains Optimization Hints •Region Reasoning •Parameter Ranges •Supports per-frame functions •JIT •x86 with SSE •GLSL •Implicitly Task Parallel •Contains Optimization Hints •Region Reasoning •Parameter Ranges •Parameter Use •Supports per frame and internal graph logic •Language/Hardware Agnostic •Enforces the programming Model
  • 8. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender Runtime § Run-time scheduling § Decide if a Pixel Bender node runs on the GPU or CPU § Order the execution of each node § Drives Optimization § Runs region reasoning pass § Concatenate adjacent Pixel Bender nodes § Fix parameter values for constant folding and range propagation § Caches intra-graph frames when possible to reduce computation § Allows host application to aid optimization § Lock parameter values § Lock inputs § Interfaces with host application resource management § Application can force CPU or GPU execution § Application can provide memory or threading management 8
  • 9. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender Runtime § Run-time scheduling § Decide if a Pixel Bender node runs on the GPU or CPU § Order the execution of each node § Drives Optimization § Runs region reasoning pass § Concatenate adjacent Pixel Bender nodes § Fix parameter values for constant folding and range propagation § Caches intra-graph frames when possible to reduce computation § Allows host application to aid optimization § Lock parameter values § Lock inputs § Interfaces with host application resource management § Application can force CPU or GPU execution § Application can provide memory or threading management 9
  • 10. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender Runtime § Run-time scheduling § Decide if a Pixel Bender node runs on the GPU or CPU § Order the execution of each node § Drives Optimization § Runs region reasoning pass § Concatenate adjacent Pixel Bender nodes § Fix parameter values for constant folding and range propagation § Caches intra-graph frames when possible to reduce computation § Allows host application to aid optimization § Lock parameter values § Lock inputs § Interfaces with host application resource management § Application can force CPU or GPU execution § Application can provide memory or threading management 10
  • 11. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender Runtime § Run-time scheduling § Decide if a Pixel Bender node runs on the GPU or CPU § Order the execution of each node § Drives Optimization § Runs region reasoning pass § Concatenate adjacent Pixel Bender nodes § Fix parameter values for constant folding and range propagation § Caches intra-graph frames when possible to reduce computation § Allows host application to aid optimization § Lock parameter values § Lock inputs § Interfaces with host application resource management § Application can force CPU or GPU execution § Application can provide memory or threading management 11
  • 12. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Demo 12
  • 13. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Lessons Learned (so far) § A DSL allows you to limit the language for optimization purposes while preserving programmability § Just-in-time Compilation allows you not only to use runtime information for optimization purposes, but also allows you to future-proof algorithms against later hardware architectures § Developers will learn new programming languages if they give them an ability to do something new, or make something significantly easier § A language with only a text representation creates some nice network and community effects (for a time) 13
  • 14. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Lessons Learned (so far) § A DSL allows you to limit the language for optimization purposes while preserving programmability § Just-in-time Compilation allows you not only to use runtime information for optimization purposes, but also allows you to future-proof algorithms against later hardware architectures § Developers will learn new programming languages if they give them an ability to do something new, or make something significantly easier § A language with only a text representation creates some nice network and community effects (for a time) 14
  • 15. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Lessons Learned (so far) § A DSL allows you to limit the language for optimization purposes while preserving programmability § Just-in-time Compilation allows you not only to use runtime information for optimization purposes, but also allows you to future-proof algorithms against later hardware architectures § Developers will learn new programming languages if they give them an ability to do something new, or make something significantly easier § A language with only a text representation creates some nice network and community effects (for a time) 15
  • 16. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Lessons Learned (so far) § A DSL allows you to limit the language for optimization purposes while preserving programmability § Just-in-time Compilation allows you not only to use runtime information for optimization purposes, but also allows you to future-proof algorithms against later hardware architectures § Developers will learn new programming languages if they give them an ability to do something new, or make something significantly easier § A language with only a text representation creates some nice network and community effects (for a time) 16
  • 17. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Warning. Speculation ahead. 17
  • 18. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. How do we make the most of the hardware we have available? 18
  • 19. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Writing multi threaded code is like juggling chainsaws; amazing when it works and truly sucky when it doesn’t. Andrew Wulf 19
  • 20. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. § Gflop / $ 20
  • 21. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. § Gflop / $ § Gflop / watt 21
  • 22. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. § Gflop / $ § Gflop / watt Gflop / developer-hour 22
  • 23. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What have we got? 23
  • 24. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What have we got? § DSL for image processing (Pixel Bender) 24
  • 25. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What have we got? § DSL for image processing (Pixel Bender) § JIT compiler / optimizer 25
  • 26. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What have we got? § DSL for image processing (Pixel Bender) § JIT compiler / optimizer § Runtime – enforces programming model, allows graphs 26
  • 27. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What have we got? § DSL for image processing (Pixel Bender) § JIT compiler / optimizer § Runtime – enforces programming model, allows graphs § High performance on parallel hardware (using OpenGL) 27
  • 28. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What have we got? § DSL for image processing (Pixel Bender) § JIT compiler / optimizer § Runtime – enforces programming model, allows graphs § High performance on parallel hardware (using OpenGL) § Future proof against new hardware 28
  • 29. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What have we got? § DSL for image processing (Pixel Bender) § JIT compiler / optimizer § Runtime – enforces programming model, allows graphs § High performance on parallel hardware (using OpenGL) § Future proof against new hardware § Cross platform 29
  • 30. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What cross platform means to Adobe § Mac § Windows § AMD § Intel § nVidia § CPU § GPU § Mobile hardware 30
  • 31. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What have we got? § DSL for image processing (Pixel Bender) § JIT compiler / optimizer § Runtime – enforces programming model, allows graphs § High performance on parallel hardware (using OpenGL) § Future proof against new hardware § Cross platform 31
  • 32. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What have we got? § DSL for image processing (Pixel Bender) § JIT compiler / optimizer § Runtime – enforces programming model, allows graphs § High performance on parallel hardware (using OpenGL) § Future proof against new hardware § Cross platform OpenCL 32
  • 33. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Why not just switch entirely to OpenCL? 33
  • 34. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Why not just switch entirely to OpenCL? Pixel Bender has certain advantages: § Ease of writing 34
  • 35. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Why not just switch entirely to OpenCL? Pixel Bender has certain advantages: § Ease of writing § Optimization opportunities 35
  • 36. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Why not just switch entirely to OpenCL? Pixel Bender has certain advantages: § Ease of writing § Optimization opportunities § Race free by construction 36
  • 37. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Why not just switch entirely to OpenCL? Pixel Bender has certain advantages: § Ease of writing § Optimization opportunities § Race free by construction § Parallelism for the masses 37
  • 38. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Warning. Increased speculation ahead. 38
  • 39. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender has certain disadvantages: § One fixed programming model § Focuses on image processing § Not general enough 39
  • 40. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Framework 40 Inputs Framework Outputs
  • 41. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Framework 41 Inputs Framework Outputs
  • 42. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Michael McCool’s parallel programming patterns § Gather § Map § Reduce § Superscalar sequences § Pipeline § Nesting § Scans § Recurrences § Search § Subdivision § Stencil § Scatter § Pack § Selection § Partition § Expand 42
  • 43. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What are we going to do about it? 43
  • 44. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Internal customers 44
  • 45. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. External customers 45
  • 46. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. References Pixel Bender http://www.adobe.com/devnet/pixelbender.html http://blogs.adobe.com/pixel-bender/ http://blogs.adobe.com/kevin-goldsmith/tag/pixel-bender-2 Structured Parallel Programming with Deterministic Patterns Michael D. McCool http://software.intel.com/file/27160 Patterns for Parallel Programming Mattson, Sanders & Massingill 46
  • 47. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
  • 48. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 48 Pixel Bender programming model Write a function that produces a single output pixel
  • 49. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 49 Pixel Bender programming model
  • 50. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 50 Pixel Bender programming model
  • 51. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 51 Pixel Bender programming model
  • 52. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 52 Pixel Bender programming model
  • 53. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
  • 54. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Why Pixel Bender? § 2001 programmable shading units on the GPU § 2005 dual core CPUs § 2005 AIF team formed § 2006 quad core CPUs § 2006 AMD announces CTM § 2008 OpenCL § 2011 fusion chips 54
  • 55. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Pixel Bender History § 2001 programmable shading units on the GPU § 2005 dual core CPUs § 2005 AIF team formed § 2006 quad core CPUs § 2006 AMD announces CTM § 2007 After Effects CS3 replaces GLSL code with Pixel Bender § 2007 Flash Player 10 Announced including Pixel Bender support § 2008 OpenCL § 2008 After Effects CS4 - first CPU implementation, 3rd party plug-ins, Pixel Bender Graph language announced § 2008 Photoshop CS4 – Pixel Bender plug-in released § 2010 Pixel Bender commercial plug-ins start to appear en masse § 2010 Flash Player Molehill Announced – Pixel Bender 3D § 2011 fusion chips 55