Halide: Decoupling Algorithms from Schedules for High-Performance Image Processing.

Writing high-performance code on modern machines requires not just locally optimizing inner loops, but globally reorganizing computations to exploit parallelism and locality--doing things such as tiling and blocking whole pipelines to fit in cache. This is especially true for image processing pipeli...

Full description

Bibliographic Details
Published in:Communications of the ACM Vol. 61; no. 1; pp. 106 - 116
Main Authors: Ragan-Kelley, Jonathan, Adams, Andrew, Sharlet, Dillon, Barnes, Connelly, Paris, Sylvain, Levoy, Marc, Amarasinghe, Saman, Durand, Frédo
Format: Article
Published: Association for Computing Machinery Jan2018
Subjects:
Online Access:View this record in EBSCOhost
fields @attributes:
  recordID: 1
pdfLink:
plink: https://search.ebscohost.com/login.aspx?direct=true&db=hlh&AN=127123946&site=ehost-live
header:
  @attributes:
    shortDbName: hlh
    uiTerm: 127123946
    longDbName: Humanities International Complete
    uiTag: AN
  controlInfo:
    bkinfo:
    jinfo:
      jid:
        00010782
        ACM
      jtl: Communications of the ACM
      issn: 00010782
      maglogo: N
    pubinfo:
      dt: Jan2018
      vid: 61
      iid: 1
      pid: 68
      pub: Association for Computing Machinery
    artinfo:
      ui:
        127123946
        10.1145/3150211
      ppf: 106
      ppct: 10
      formats:
      tig:
        atl: Halide: Decoupling Algorithms from Schedules for High-Performance Image Processing.
      aug:
        au:
          Ragan-Kelley, Jonathan
          Adams, Andrew
          Sharlet, Dillon
          Barnes, Connelly
          Paris, Sylvain
          Levoy, Marc
          Amarasinghe, Saman
          Durand, Frédo
        affil:
          UC Berkeley
          Google
          University of Virginia
          Adobe
          Stanford University & Google
          MIT CSAIL
      su:
        Mathematical decoupling
        Algorithms
        Image processing
        Computer scheduling
        High performance processors
        Computer vision
        Programming languages
        Computational photography
        Mathematics
      sug:
        subj:
          Mathematical decoupling
          Algorithms
          Image processing
          Computer scheduling
          High performance processors
          Computer vision
          Programming languages
          Computational photography
          Mathematics
      ab: Writing high-performance code on modern machines requires not just locally optimizing inner loops, but globally reorganizing computations to exploit parallelism and locality--doing things such as tiling and blocking whole pipelines to fit in cache. This is especially true for image processing pipelines, where individual stages do much too little work to amortize the cost of loading and storing results to and from off-chip memory. As a result, the performance difference between a naïve implementation of a pipeline and one globally optimized for parallelism and locality is often an order of magnitude. However, using existing programming tools, writing high-performance image processing code requires sacrificing simplicity, portability, and modularity. We argue that this is because traditional programming models conflate the computations defining the algorithm with decisions about intermediate storage and the order of computation, which we call the schedule. We propose a new programming language for image processing pipelines, called Halide, that separates the algorithm from its schedule. Programmers can change the schedule to express many possible organizations of a single algorithm. The Halide compiler then synthesizes a globally combined loop nest for an entire algorithm, given a schedule. Halide models a space of schedules which is expressive enough to describe organizations that match or outperform state-of-the-art hand-written implementations of many computational photography and computer vision algorithms. Its model is simple enough to do so often in only a few lines of code, and small changes generate efficient implementations for x86, ARM, Graphics Processors (GPUs), and specialized image processors, all from a single algorithm. Halide has been public and open source for over four years, during which it has been used by hundreds of programmers to deploy code to tens of thousands of servers and hundreds of millions of phones, processing billions of images every day.
      pubtype: Periodical
      doctype: Article
      src: R
    language: English
    refInfo:
    copyright:
      @attributes:
        flag: Y
      dt:
        @attributes:
          year: 2018
    holdings:
      @attributes:
        islocal: N