Skip to content

[GSoC 2021] Fuzzing Halide

Alexander Root edited this page Feb 18, 2021 · 5 revisions

Detailed Description

We have had a lot of success with fuzzing different components of the Halide compiler (i.e. in the simplifier). We would like projects that fuzz other aspects of Halide’s infrastructure, specifically (but not necessarily limited to):

  • The parallel runtime
    • Random generation of schedules that use parallel directives (i.e. async, parellelize, storage folding, etc.) and make sure that none of the produced schedules deadlock. (see #4725)
  • The Halide frontend
    • Random generation of pipelines (and possibly schedules) to detect errors - the Halide frontend should only ever trigger user errors, not internal errors.
  • compute_root scheduling compilation times
    • Random generation and compilation of pipelines with every Func scheduled as compute_root. Fuzzing would ensure that compilation (Halide’s code generation) completes within a reasonable amount of time for these simple schedules. A wider space of schedules could be added over time (e.g. those produced by an autoscheduler).

We have a random pipeline generator already, and our autoscheduler(s) can be used to randomly generate a subset of correct schedules.

Expected Outcomes

  • For project #1 (and possibly #2), a random schedule generator using existing autoscheduler code for schedule exploration.
  • Detection of bugs specific to the selected project
    • Parallel runtime: detection of any possible deadlock for valid schedules.
    • Halide frontend: detection of internal errors/crashes that should be presented as user errors.
    • compute_root scheduling: generation of pipelines that cause Halide code generation to take much longer than it should.

Stretch goal(s):

  • Fixes for detected bugs.
  • A random schedule generator that does not use existing autoscheduler schedule exploration, in order to explore a larger subset of valid schedules.

Required Skills

  • Strong C++ experience is required for this project.
  • Halide experience will be useful but not required.

Difficulty Level

  • Parallel runtime: Hard.
  • Halide frontend: Medium/Hard.
  • compute_root scheduling: Medium.

Mentors