21
synergy.cs.vt.edu CU2CL Automated Source-to-Source Translation from CUDA to OpenCL for General Purpose Accelerated Computing Synergy/SEEC Fall Symposium 2015 Paul Sathre

AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

  • Upload
    lykien

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Page 1: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu

CU2CLAutomated Source-to-Source Translation from CUDA

to OpenCL for General Purpose Accelerated Computing

Synergy/SEEC Fall Symposium 2015

Paul Sathre

Page 2: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Parallel and Heterogeneous Computing is

Everywhere

• Supercomputers to cell phones

• Mac OS X (since Snow Leopard)

–GPU-accelerated

• Adobe Photoshop CS6

–GPU-accelerated

System

CPU Accelerator

(GPU)

Heterogeneous Computing

Offload data, computation

Copy results backWork

Page 3: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Functional Portability

Page 4: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Translation Is Easy ...

• … when there is NO ambiguity in the translation between

languages

• High-level language → low-level representation, e.g., C → LLVM

x * y + z →

%tmp = mul i32 %x, %y

%tmp2 = add i32 %tmp, %z

• Between languages, e.g., CUDA → OpenCL

__powf(x[threadIdx.x], y[threadIdx.y]) →

native_pow(x[get_local_id(0)], y[get_local_id(1)])

Page 5: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Translation isn't easy …

• … when there IS ambiguity (or lack of one-to-one mapping) in

the translation between languages

• Idiomatic Expressions

–“Putting all your eggs in one basket” → ??

–CUDA threadfence() → ??

• Dialects

–Latin American Spanish vs. Castilian Spanish → English

–CUDA Runtime API vs. CUDA Driver API → OpenCL

Page 6: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

CU2CL Translator Prototype

Source

Code

Preprocessed

Code

Tokenized

Code

Parse

Tree

Intermediate

RepresentationBinary

Preprocessor LexerSemantic

AnalyzerParser

Code

Generator

Compilation Process

Clang LLVM

Page 7: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

String-based Recursive Rewriting

• CUDA

• OpenCL

__powf(x[threadIdx.x], y[threadIdx.y])

native_pow(x[get_local_id(0)], y[get_local_id(1)])

Func

Arg

Arg

Struct

Struct

Field

Field

1get_local_id( )

y[ ]native_pow

x[ ]get_local_id( )

0

Paul Sathre – SEEC Fall Symposium

<sourcefile>:<byteoffset>:<origlength>:“native_pow(x[get_local_id(0)], y[get_local_id(1)])”

Page 8: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Application CUDA Lines OpenCL Lines

Changed

Percent

Automatically

Translated

Dwarf

asyncAPI 135 5 96.3 -

bandwidthTest 891 5 98.9 -

BlackScholes 347 14 96.0 Dense Linear Algebra

FastWalshTransform 327 30 90.8 Spectral Methods

matrixMul 351 9 97.4 Dense Linear Algebra

scalarProd 251 18 92.8 Sparse/Dense Linear Algebra

vectorAdd 147 0 100 Sparse/Dense Linear Algebra

Back Propagation 313 24 92.3 Dynamic Programming

Breadth-First Search 306 35 88.6 Graph Traversal

Gaussian 390 26 93.3 Dense Linear Algebra

Hotspot 328 2 99.4 Structured Grids

Needleman-Wunsch 430 3 99.3 Dynamic Programming

Fen Zi 17768 1786 89.9 -

GEM 524 15 97.1 N-body Methods

IZ PS 8402 166 98.0 -

Translator Coverage

SD

K S

ample

sRod

inia

Page 9: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Translated Application Performance (Runtime Overhead)

0

0.5

1

1.5

2

2.5

3

3.5

Nvidia GTX 480 (OpenCL) Nvidia GTX 480 (CUDA)Nvidia K20C (OpenCL) Nvidia K20C (CUDA)AMD 7970 (OpenCL)

Who

le-P

rog

ram

Runt

ime (s)

Lower is Better

Test Systems:

AMD Phenom II X6 + Nvidia GTX 480

Intel i5 2400 + Nvidia K20C

AMD Opteron 6272 + AMD Radeon 7970

Page 10: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu

Translated Application Performance: GEM

2015.08.21

Paul Sathre – SEEC Fall Symposium

1.0

10.0

100.0

1000.0

10000.0

100000.0

Molecular Structure(smallest to largest)

NVIDA K20C (CUDA)

NVIDIA K20C (OpenCL)

7970 (OpenCL)

Lower is better!

Kern

el R

unt

ime (m

s)

Page 11: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu

Future Efforts

• Modularize the frontend/backend

– Separate CUDA structure identification from OpenCL string generation, so that potentially other languages can be "plugged in"

• De-C++ kernel code

– De-templating

– De-classing

• Altera/Non-standard CL mode

– Generate offline compile scripts (could be useful for HSAIL)

– Modify whatever boilerplate is required.

• Expanded CUDA support

– Textures

– Error handling

– Dynamic Shared Memory

– other API components

2015.08.21

Paul Sathre – SEEC Fall Symposium

Page 12: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu

Related Work• Swan: wrapper API around either CUDA OR OpenCL host API with a Basic

CUDA-to-OpenCL Kernel Translator– M. J. Harvey and G. D. Fabritiis, “Swan: A tool for porting CUDA programs to

OpenCL,” Computer Physics Communications, vol. 182, no. 4, pp. 1093–1099, 2011.

• MCUDA: CUDA OpenMP translator– J. A. Stratton, S. S. Stone, and W. W. Hwu, Languages and Compilers for Parallel

Computing. Springer-Verlag, 2008, ch. MCUDA: An Efficient Implementation of CUDA Kernels for Multi-core CPUs, pp. 16–30.

• Ocelot / Caracal: PTX LLVM IR / AMD CAL IR– G. F. Diamos, A. R. Kerr, S. Yalamanchili, and N. Clark, “Ocelot: A Dynamic

Optimization Framework for Bulk-Synchronous Applications in Heterogeneous Systems,” in 19th International Conference on Parallel Architectures and Compilation Techniques, 2010, pp. 353–364.

– R. Dominguez, D. Schaa, and D. Kaeli, “Caracal: Dynamic Translation of Runtime Environments for GPUs,” in 4th Workshop on General Purpose Processing on Graphics Processing Units , 2011, pp. 5:1–5:7.

• CUDAtoOpenCL: MS Project at UIUC: CUDA-to-OpenCL translator (AFAIK, never released, and now defunct)

– D. Nandakumar, “Automatic Translation of CUDA to OpenCL and Comparison of Performance Optimizations on GPUs,” 2011. [Online]. Available: http://hdl.handle.net/2142/24279

2015.08.21

Paul Sathre – SEEC Fall Symposium

Page 13: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu

Contributions

• Automatically translate upwards of 80-90% of most apps!

– perfect translation in a few cases

• Maintainable code, retained formatting and comments

– Translation in place maintains structure

• Collaboration and PR with AMD via translation of open source

Fluidsv3 smooth particle hydrodynamics

Visualization/Simulation

• Binary and source freely available for non-commercial use

• CHREC funders have had new 0.7.0b version since December

– Unified translation of multi-file codebases

2015.08.21

Paul Sathre – SEEC Fall Symposium

Page 14: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Conclusions• Robust automatic source translation from CUDA to OpenCL is

(mostly) achievable

–Not straightforward, but moving towards full functional portability

–Some important (current) limitations

» Libraries, Device C++, NVIDIA-specific functions/ hardware behaviors

» Maturation of OpenCL ecosystem may help (i.e. SYCL)

• Once translated, application performance is retained

–Work to utilize new devices is reduced

–Software is able to reach a broader audience

• What used to take weeks/months/years to do by hand, now takes

seconds!

Page 15: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Acknowledgements

• Advisors: Dr. Wu-chun Feng, Dr. Mark Gardner

• Alumni: Gabriel Martinez, Paul Sathre

• This work was supported in part by NSF I/UCRC IIP-0804155

via the NSF Center for High-Performance Reconfigurable

Computing (CHREC).

Page 16: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Questions?

Linux build and tool scripts available: http://chrec.cs.vt.edu/cu2cl

Source release available: https://github.com/vtsynergy/CU2CL

Manual Translation

(Days, weeks, years)

Automatic Translation

(seconds)

CUDA

Source

Code

OpenCL

Source

Code

CU2CL

xkcd.com

Page 17: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu

Appendix

2015.08.21

Paul Sathre – SEEC Fall Symposium

Page 18: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu

Globalized Translations

• Reimplemented plugin as Clang Tool

– Can run consecutive translator instances on all source files making up

a binary within a single invocation

• Intelligent cache and merge of rewritten code via

Replacement objects

• Deferred OpenCL boilerplate generation

– partial initialization and deconstruction code generated per file

– global initializers/deconstructors generated after last source file

processed

2015.08.21

Paul Sathre – SEEC Fall Symposium

<sourcefile>:<byteoffset>:<origlength>:<replacementtext>

fooKern.cu:1337:38:“native_pow(x[get_local_id(0)], y[get_local_id(1)])”

Page 19: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

Complex Semantic Conversions

Device Identification

–CUDA uses int, OpenCL uses opaque cl_device

–To change devices in CUDA, use cudaSetDevice(int id)

–To change devices in OpenCL, use...

–Implement our own handler to emulate and encapsulate

//scan all devices//save old platform, device, context, queue, program, & kernelsmyDevice = allDevices[id]ClGetDeviceInfo(...); //get new device's platformmyContext = clCreateContext(...);myQueue = clCreateCommandQueue(...);

//load program sourceclBuildProgram(...);myKernel = clCreateKernel(...);

Page 20: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu2015.08.21

Paul Sathre – SEEC Fall Symposium

CU2CL Reliability

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%

20.3%

52.9%

20.3%

52.9%

12.7%

5.9%

21.5%

23.5%

15.2%

5.9%

24.1%

2.5%

5.9%

1.3%

11.4%

11.8%

68.3%

35.3%

5.9%

FailedPartialComplete

Clang 3.2main() method handlingTemplate handling

OpenGL #defined function handlingSeparately declared and defined function handlingKernel pointer invocation handling

CUDA SDK Samples

CUDA SDK Samples

Rodinia Samples

Rodinia Samples

Befo

re

Upg

rad

es

Aft

er

Upg

rad

es

Page 21: AFOSR BRI: Co-Design of Hardware/Software for …research.cs.vt.edu/seec/2015-08-workshop/CU2CL-SynergySymposium... · • Idiomatic Expressions –“Putting all your eggs in one

synergy.cs.vt.edu

AMD collaboration

2015.08.21

Paul Sathre – SEEC Fall Symposium

Fluids v.3: Open Source Windows+CUDA fluid simulation, translated to

OpenCL w/ CU2CL and run on AMD W9100s, demo at ISC’14 in Leipzig