Thursday 30 April 2015

Google Summer of Code project accepted

My Google Summer of Code project proposal titled OpenCL image support for the r600 gallium driver has been accepted. See the proposal below:

  • Contact: Zoltan Gilian <zoltan.gilian@gmail.com>, zogi on IRC
  • Title: OpenCL image support for the r600 gallium driver
  • Synopsis:
    Current open source radeon drivers do not support OpenCL images. The aim of this project is to implement support for image-related OpenCL C 1.1 capabilities, both 2d and 3d, in the r600 gallium driver.
  • Benefits to the Community:
    OpenCL image handling functions could utilize appropriate GPU resources (e.g. texture sampling units), therefore increasing the performance of related algorithms (e.g. image processing). Such software relying on OpenCL image capabilities cannot run using the open source drivers despite having a capable GPU in the system. Implementing OpenCL image support would solve this problem.
  • Deliverables:
    • Expose image support to clover. Required.
    • Implement 2d image attribute query and basic data access OpenCL C builtins. Required.
      • querying image attributes (get_image_* builtins)
        reading image data with basic sampling parameters (using unnormalized coordinates, ‘none’ addressing mode and nearest filtering)
      • writing image data
    • Implement image sampling and access qualifiers. Optional.
    • Support 3d images. Optional.
    • Support half floating-point image access. Optional.
    • Documentation. Required.
  • Milestones:
    • Be able create an image, pass it to a kernel and query its attributes by June 8.
      Functions to impement:
      • get_image_width
      • get_image_height
      • get_image_channel_data_type
      • get_image_channel_order
      • get_image_dim
    • Be able to write and read 1 dimensional image data using basic sampling parameters by June 26.
      Functions to implement:
      • read_image{f,i,ui} (with the restrictions above)
      • write_image{f,i,ui} (with the restrictions above)
    • Implement 2d image access using basic sampling parameters by July 13.
      Functions to implement:
      • read_image{f,i,ui} (with the restrictions above)
      • write_image{f,i,ui} (with the restrictions above)
    • Document the previous steps to future developers by July 20.
    • Implement and document (a subset of) the optional deliverables in the remaining time.
      • Image sampling
        • extend the functionality of read_image
      • 3d images
        • extend the functionality of the builtins above
        • new function: get_image_depth
      • Access qualifiers (read_only and write_only)
      • Half floating-point image access
        • read_imageh, write_imageh
  • Architecture overview:
    • LLVM frontend (libclc): extend the libclc llvm bitcode library by supporting image related OpenCL C constructs (see: Deliverables).
      • Image attributes can be implemented as hidden kernel parameters. These attributes should be transferred to constant memory on the device.
    • LLVM backend (llvm): support intrinsics emitted by libclc.
    • r600 pipe driver (mesa): expose image support to clover.
  • Related Work:
  • Biographical Information:
    • Education: MSc degree in Computer Science, Eotvos Lorand University, Budapest (2012). Currently pursuing PhD in signal processing there.
    • Work experience:
      • SRE intern at Google, Zurich (2013 Aug-Dec)
      • Intern and coop student at Morgan Stanley, Budapest (2010 summer, 2011 spring)
      • System administrator at Bolyai College, Budapest (since 2014)
    • Related technical skills: C, C++, CUDA (udacity parallel computing class) and OpenCL, Linux, compilers (BSc thesis about a compiler extension to the feldspar language, 2010, sadly in hungarian).
    • Open source work: