Not logged in. Login

Project Selection

Students may choose from several project types for this course. All projects must involve existing open-source technologies that specifically target the use of SIMD instructions. Students may work alone or in groups.

There are three broad categories from which projects may be chosen.

  1. Pure LLVM: projects that involve the LLVM compiler infrastructure alone.
  2. Parabix+LLVM: projects that involve the Parabix plus LLVM framework.
  3. External: projects that involve some significant compiler technology outside of the Parabix or LLVM frameworks, such as the Intel SPMD Compiler.

Students who choose external projects must be able to demonstrate that they have background and experience that would allow them to work independently. Otherwise students should choose either a pure LLVM project or a Parabix+LLVM project.

Pure LLVM projects can be tackled in a semi-independent manner without dependencies on the current state of Parabix technologies. Choosing a pure LLVM project may be quite useful in developing a personal portfolio demonstrating your ability to do compiler and systems programming work to important companies that use LLVM technology.

Choosing a Parabix+LLVM project will offer the greatest chance to work together with the SFU Parabix research group. This could lead to follow-on opportunities to work as an NSERC Undergraduate Summer Research Assistant (USRA), for graduate study (MSc/PhD) or possibly even working for an SFU spin-off company.

Pure LLVM Projects

There are many types of pure LLVM projects that could be tackled.

  1. Back-end code-generation projects. These projects involve improving the SIMD code generation for some particular back-end such as x86/AVX2, Arm Neon, Power PC Altivec. You must improve the existing LLVM code generation for the target and show that it improves performance using some benchmark applications. (Note: icgrep could be used as a benchmark application).
  2. Target-independent SWAR project. This project involve the construction of a generic approach to SIMD-within-a-register compilation, for SIMD vector types that are not actually supported by an architecture.
  3. ShuffleVector project.
  4. Intrinsic hoisting projects, such as SSE2 Hoisting

Parabix + LLVM Projects

  1. Code-generation support for key Parabix operations (transposition, long-stream addition, stream advance) on multiple architectures (AVX-512, ARM Neon, Power PC Altivec). Meng Lin's M.Sc. thesis may be useful here.
  2. JSON Parsing Using Parabix methods
  3. Regular Expression to Parabix Compiler improvements
  4. Parabix-1 Style Parser Generator
  5. Extending Pablo Capabilities with new Kernels
    • Stream filtering using Parallel Deletion
      • UTF-8 to UTF-16 transcoder
    • Marker-based Gather/Scatter
    • s2k operations: operations on streams of fields of size \(2^k\). See Ken Herdy's Ph.D. thesis on s2k.
Updated Tue Jan. 26 2016, 16:19 by cameron.