AMD Opencl Compiler Utilizing LLVM to Create a Cross-Platform Heterogeneous Compiler Tool-Chain Micah Villmow AMD

AMD Opencl Compiler Utilizing LLVM to Create a Cross-Platform Heterogeneous Compiler Tool-Chain Micah Villmow AMD

AMD OpenCL Compiler Utilizing LLVM to create a cross-platform heterogeneous compiler tool-chain Micah Villmow AMD 1 | 20101 | 2010 LLVM LLVM Developers Developers Conference Conference Summary ● Compiler Tool Chain ● Target Backends ● CPU Compiler Path ● GPU Compiler Path ● Ideas 2 | 20102 | 2010 LLVM LLVM Developers Developers Conference Conference Compiler Toolchain Frontend Linker Optimizer Binary • EDG based • Modifications • Custom passes generation frontend based on for CPU/GPU • Target Binary extended to Efficient JIT Codegen generation accept OpenCL from LLVM`08 and produce LLVM-IR GPU AMD IL CAL Compiler Optimizations Backend EDG Frontend LLVM Linker CPU Optimizations X86 Backend AS/LD 3 | 20103 | 2010 LLVM LLVM Developers Developers Conference Conference Summary ● Compiler Tool Chain ● Target Backends ● CPU Compiler Path ● GPU Compiler Path ● Ideas 4 | 20104 | 2010 LLVM LLVM Developers Developers Conference Conference Target Backends ● The CPU backend targets SSE2+ devices ● LLVM x86 backend ● Minor changes/bug fixes to work with OpenCL ● More information in Twin Peaks, Gummaraju, et al. PACT 2010 ● The GPU backend targets AMD IL ● IL spec in stream SDK ● Unique constraints that don't exist most other languages 5 | 20105 | 2010 LLVM LLVM Developers Developers Conference Conference Summary ● Compiler Tool Chain ● Target Backends ● CPU Compiler Path ● GPU Compiler Path ● Ideas 6 | 20106 | 2010 LLVM LLVM Developers Developers Conference Conference CPU Compiler Path • Optimizer has mostly standard passes • Backend expands mem* ops EDG Frontend • Custom win32 ulong->float conversion LLVM Linker • Custom data layout alignments GPU Optimizations • Disable MMX generation CPU Optimizations • MC Binary Emitter AMD IL Backend X86 Backend Device Linker CAL Compiler AS/LD 7 | 20107 | 2010 LLVM LLVM Developers Developers Conference Conference Summary ● Compiler Tool Chain ● Target Backends ● CPU Compiler Path ● GPU Compiler Path ● Ideas 8 | 20108 | 2010 LLVM LLVM Developers Developers Conference Conference GPU Optimizations • Modified FC optimizations • Loop Unswitch EDG Frontend • Simplify CFG LLVM Linker • Jump Threading CPU Optimizations • Loop Simplify GPU Optimizations • Loop Unrolling Pragma X86 Backend • SCEV Binomial Coefficient AMD IL Backend • Limits bit width to 64bits AS/LD • Inline everything Device Linker CAL Compiler 9 | 20109 | 2010 LLVM LLVM Developers Developers Conference Conference AMD IL Backend • Production backend targets AMD IL • Backend is mainly self contained EDG Frontend • Required to support multiple LLVM versions simultaneously from the same codebase LLVM Linker • Required to work across OS X, Linux and GPU CPU Windows Optimizations Optimizations • Supports all RV7XX and later AMD GPUs X86 Backend AMD IL Backend AS/LD Device Linker CAL Compiler 10 | 102010| 2010 LLVM LLVM Developers Developers Conference Conference AMD IL Language ● Forward compatible device agnostic pseudo-ISA ● Supports R300 and later chips ● Designed around graphics, not compute ● Virtual GPR set containing 2^16 4x32 registers ● Declare before use semantics ● Resources are globally scoped ● Compute heavy instruction set ● Functions, macros, flow control 11 | 112010| 2010 LLVM LLVM Developers Developers Conference Conference AMD IL Constraints ● No unstructured control flow ● No calling conventions ● No extended or truncating memory ops ● Multiple register families(i.e. r#, l#, cb#, x#, mem, …) ● 32bit uniform memory region ● 8/16/32 bit path different from 32/64/128 bit path ● Different resource IDs for different paths ● Literals are 4 x 32 bits and declare before use ● dcl_literal l3, 0x12348FFF, 12345678, 1.0, 1.5 12 | 122010| 2010 LLVM LLVM Developers Developers Conference Conference AMD IL Constraints ● 5 main non-uniform memory regions ● Device, Constant, Private, GDS and LDS memory ● OpenCL Address spaces map directly to them ● 137 unique sub-regions in device memory – 128 read-only image resources – 9 generic 32bit DWORD read/write resources – 1 32bit byte addressable read/write resource ● 16 unique sub-regions in constant memory ● Small device specific size limitations on non-device memory ● Resource IDs must be known at compile time 13 | 132010| 2010 LLVM LLVM Developers Developers Conference Conference AMDIL Examples • Add a register and a literal • iadd r0, r0, l4 4 x i32 add • Add a constant and private memory • iadd r2, cb3[l10.z], x3[r0.x] • Read a 32 bit value • uav_raw_load_id(3) r1.x, r2.x • Read a 128 bit value • uav_raw_load_id(11) r1, r2.x • Read a 8 bit value • uav_arena_load_id(8)_byte r1, r2.x 14 | 142010| 2010 LLVM LLVM Developers Developers Conference Conference GPU Modifications • Many optimizations disabled in optimization phase • GPU custom passes to handle the following: • Printf – No native library support • Images – No way to represent exactly in LLVM • GPU specific peephole optimizations • Hook added to SelectionDAG to disable conditional short circuiting on flow control (Bug7696) • Some codegen fixes for vector types • Overload CommonCodeGenPasses to disable MachineCSE 15 | 152010| 2010 LLVM LLVM Developers Developers Conference Conference GPU Backend Workarounds • MI:AsmPrinterFlags • Stores resource ID’s for I/O instructions • Stores load/store specific flags • Load cacheable • 8/16 bit store • Unknown Resource ID • Tablegen - GCCBuiltins • Maps function calls to native instructions • Hack to allow function overloading to intrinsic mapping(i.e. sqrt_[f32|v2f32|v4f32|f64|v2f64] -> amdil.sqrt intrinsic) 16 | 162010| 2010 LLVM LLVM Developers Developers Conference Conference Summary ● Compiler Tool Chain ● Target Backends ● CPU Compiler Path ● GPU Compiler Path ● Ideas 17 | 172010| 2010 LLVM LLVM Developers Developers Conference Conference LLVM Improvements • Tablegen • Vector immediates • Many to Many patterns • Function to instruction matching • Allow register Operand to match equivalent immediate • Method to access custom fields in Instruction • LLVM • Allow expansion of all extload nodes • Vector channel encoded in Machine Operand • Vector machine friendly optimizations 18 | 182010| 2010 LLVM LLVM Developers Developers Conference Conference Questions?.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    19 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us