Latest release

Halide 2018/02/15

@steven-johnson steven-johnson released this Feb 15, 2018

You probably want halide-linux-64-trunk, halide-mac-64-trunk or halide-win-distro-64-trunk for linux, os x, and windows respectively. For linux, pay attention to the various gcc versions and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Notable changes include:

  • Scheduling:
    • New scheduling directive: compute_with
  • Codegen:
    • Better instruction selection for Hexagon
    • Less integer math in cuda kernels
    • Support for warp shuffle instructions on cuda
    • Support for MSAN in Clang
    • X86 Runtime: various AVX2 improvements
  • Fixes:
    • Buffer now uses halide_device_crop API from within the Buffer class instead of just discarding any device allocation when a Buffer is cropped
    • Auto-scheduler: unbounded function bugs
    • halide_print() now defaults to output to stdout rather than stderr
    • Various fixes to corner cases of Buffer<> with const types
  • API:
    • Completely rewrote Python bindings using PyBind11 (not yet complete but much more robust and well-supported)
    • Removed long-deprecated variants of gpu_tile()
    • Added IRMutator2, deprecated IRMutator
  • Apps:
    • replaced apps/hexagon_matmul with apps/nn_ops, which provides fast implementations of common
      deep learning network operations on all platforms that Halide supports
  • Generators:
    • Revised LoopLevel to allow deferred-evaluation, making it easier to compose separate pieces of Halide code (e.g. when the compute_at or store_at may not be known yet)
    • remove Generator::ScheduleParam entirely; added support for GeneratorParam instead
    • Simplified Stubs to no longer be stateful, but just a single "generate" method
  • Build:
    • All prebuilt libHalide versions (both static and dynamic) are now built with RTTI enabled (previously they were built with RTTI disabled)
    • Much better CMake support, including 'make distrib', 'make install', and better test targets
    • Drop support for LLVM 3.9

Halide 2017/10/30

@steven-johnson steven-johnson released this Oct 30, 2017

You probably want halide-linux-64-trunk, halide-mac-64-trunk or halide-win-distro-64-trunk for linux, os x, and windows respectively. For linux, pay attention to the various gcc versions and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Changes include:

  • Drop support for LLVM 3.7 and 3.8 (LLVM 3.9 or later now required)
  • New loop-invariant-code-motion optimization pass added
  • Add the ability to explicitly schedule when and how host<->device buffer copies occur, via Func::copy_to_device() and Func::copy_to_host()
  • Add Func::clone_in() scheduling directive
  • Add support for storage folding through extern stages
  • Improve sliding window code generation for line-buffered pipelines
  • Halide::Runtime::Buffer now supports combined device-and-host allocation
  • Various fixes to Func::rfactor()
  • Various fixes to Func::prefetch()
  • Various fixes to auto-scheduler()
  • Various fixes to Halide::Runtime::Buffer and Halide::Buffer
  • Added support for CUDA Capability 6.1
  • Improved Hexagon code generation
  • Improved C++ backend code generation
  • Tracing output is buffered (>200x faster)
  • Many fixes to halide_image_io.h, plus support for .mat (Matlab level 5) and .tmp (ImageStack)
  • halide_benchmark.h now offers an adaptive iteration technique, for simpler usage
  • Tutorial for auto-scheduler added
  • Many improvements and enhancements to Generator:
    • Standardized CMake and Bazel build rules for Generator are now included in distribution; this makes using Generators with CMake (in particular) much simpler
    • Added the RunGen utility, to allow running any Generator directly (without needing to write a custom shell for testing); this is "free" if you use the CMake or Bazel build rules, and trivial to add support for in Make
    • Input<> and Output<> improvements to make more compatible with ImageParam/Param usage
    • built-in support for auto-scheduler via the auto_schedule param
    • auto-scheduler output is now emitted to .schedule files rather than stdout
    • Generators now uniformly use the HALIDE_REGISTER_GENERATOR() macro rather than the Halide::RegisterGenerator class

Halide 2017/05/03

@abadams abadams released this May 3, 2017 · 15816 commits to master since this release

You probably want halide-linux-64-trunk, halide-mac-64-trunk or halide-win-distro-64-trunk for linux, os x, and windows respectively. For linux, pay attention to the various gcc versions and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Changes include:

  • buffer_t has been deprecated, and replaced with halide_buffer_t. Halide inputs and outputs now get proper type and dimensionality checking, and you can pass buffers of arbitrary dimensionality. buffer_t is still supported via a legacy wrapper. Extern stages can be passed either buffer_t or halide_buffer_t, controlled via a flag in define_extern. It's recommended that you use Halide::Runtime::Buffer rather than halide_buffer_t directly.

  • Added a prefetch scheduling directive

  • New tutorials on Func::rfactor, Func::in, and RDom::where

  • When compiling for multiple targets, compilation is now multi-threaded

  • Var::gpu_blocks and Var::gpu_threads are deprecated. Instead of being loops with magic names, gpu blocks or gpu threads is now a property of a loop, like parallel, vectorized, or unrolled. So Func::gpu_tile now works more like tile. You pass explicit names for the inner dimensions.

  • Added support for AVX512 and pascal GPUs

  • Removed support for renderscript and native client, due to lack of usage and difficulty maintaining it.

Halide 2016/10/22

@abadams abadams released this Oct 25, 2016 · 15816 commits to master since this release

Assets

You probably want halide-linux-64-trunk, halide-mac-64-trunk or halide-win-64-trunk for linux, os x, and windows respectively. The "pnacl" versions are for compiling native client code. For linux, pay attention to the various gcc versions and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Notable changes:

The image types have been unified and overhauled. Use Halide::Buffer for both AOT and JIT.
We now support injecting msan annotations with the -msan target feature.
Much more robust hexagon/hvx support.

Halide 2016/08/04

@abadams abadams released this Aug 4, 2016

Assets

You probably want halide-linux-64-trunk, halide-mac-64-trunk or halide-win-64-trunk for linux, os x, and windows respectively. The "pnacl" versions are for compiling native client code. For linux, pay attention to the various gcc versions and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Notable changes since last release include:

  • There is now alpha-level support for hexagon dsp with hvx
  • You can parallelize associate reductions with Func::rfactor
  • You can add wrapper funcs in the schedule with Func::in
  • You can compile a static library targeting multiple architecture variants (e.g. x86 with and without avx) and have Halide select the right one at runtime with Func::compile_to_multitarget_static_library
  • The windows release is now built with Visual Studio 2015

Halide 2016/04/27

@steven-johnson steven-johnson released this Apr 28, 2016

Assets

You probably want halide-linux-64-trunk, halide-mac-64-trunk or halide-win-64-trunk for linux, os x, and windows respectively. The "pnacl" versions are for compiling native client code. For linux, pay attention to the various gcc versions and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Notable changes since last release:

  • can now call C++ ABI extern functions
  • you can attach predicates to RDoms to only iterate over a subset of the domain
  • you can specify explicitly how you'd like the tail handled in a split
  • the profiler now also profiles memory use
  • you can constrain the alignment of input images and internal allocations
  • a bunch of improvements to shared memory usage in cuda
  • fixes to ARM64 codegen
  • extra options for GenGen

Halide 2015/03/02

@abadams abadams released this Mar 2, 2016 · 15816 commits to master since this release

Assets

You probably want halide-linux-64-trunk, halide-mac-64-trunk or halide-win-64-trunk for linux, os x, and windows respectively. The "pnacl" versions are for compiling native client code. For linux, pay attention to the various gcc versions and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Notable changes since last release:

  • Support for mingw (64-bit only for now)
  • The compiler itself is now thread-safe
  • Releases for many more gcc versions

Halide 2015/12/17

@abadams abadams released this Dec 18, 2015 · 15816 commits to master since this release

You probably want halide-linux-64-trunk, halide-mac-64-trunk or halide-win-64-trunk for linux, os x, and windows respectively. The "pnacl" versions are for compiling native client code. For linux, pay attention to gcc-4.8 vs gcc-4.9 and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Notable changes since last release:

  • Changes to the Type class methods that might require changes to your code
  • Better boundary condition performance

Halide 2015/10/22

@abadams abadams released this Oct 22, 2015 · 15816 commits to master since this release

You probably want halide_Linux_64_trunk, halide_Darwin_64_trunk or halide_Windows_64_trunk for linux, os x, and windows respectively. The "pnacl" versions are for compiling native client code. For linux, pay attention to gcc-4.8 vs gcc-4.9 and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Notable new features since last release:

  • Works with XCode 7
  • Support for immediates of arbitrary type
  • 5-25% better cuda performance

Halide 2015/09/011

@steven-johnson steven-johnson released this Sep 11, 2015

You probably want halide_Linux_64_trunk, halide_Darwin_64_trunk or halide_Windows_64_trunk for linux, os x, and windows respectively. The "pnacl" versions are for compiling native client code. For linux, pay attention to gcc-4.8 vs gcc-4.9 and download the one that matches your compiler version. You may get linker errors if you download the wrong one.

Notable new features since last release:

  • Metal backend
  • halide_image.h added to tools/ folder