VizGen:
Accelerating Visual Computing Prototypes in Dynamic Languages
Yuting Yang, Sam Prestwood, Connelly Barnes�
University of Virginia
Motivation
Motivation
Motivation
Motivation
Motivation
Motivation
Motivation
Motivation
Architecture
Architecture
Static Analysis:
Collect program information
Program transformations:
Apply optimizations
Autotuner:
Choose best variant
Python
C
Static analysis
Static analysis
Type and size inference
Parallelism analysis
Preallocation analysis
Type and size inference
Type and size inference
Type and size inference
Type and size inference
out_img = numpy.ones([3, 3])
Known value
Dependent type with�known shape (3x3)
Type and size inference
Type and size inference
Program transformations
Program transformations
Type specialization
Parallelize loop
Array storage alteration
Loop implicit variables
Preallocate arrays
API call rewriting
Remove loop conditionals
Vectorize innermost
Loop implicit variables
X
X*X
Y
X
Y
Y = X * X + 1
Normal computation order
Loop implicit variables
Vectorize innermost
X
Y
Z
Vectorize Innermost
X
Y
Z
Z = X + Y
Normal computation order
Array storage alteration
Unused padding
Float 64
Float 32
Remove loop conditionals
SLOW
FAST
Autotuner
Autotuner
Autotuner
Evaluation
Test suite
Bilateral grid
Camera pipeline
Interpolate
Composite
Harris corner
Local Laplacian
Mandelbrot
One stage blur
Optical flow
Pac-man
Raytracer
Two stage blur
Evaluation
Python
Numba
PyPy
Pythran
unPython*
1816x
38x
937x
7.1x
354x
Evaluation
Speedup with C
Code shorter than C
2.3x
2.3x
Conclusion
THANK YOU.
Yuting Yang
Sam Prestwood
Connelly Barnes