Revision c3882a5a00025b113eeb40385dad0b5aeee271b6 authored by Dillon Sharlet on 11 March 2021, 23:14:36 UTC, committed by GitHub on 11 March 2021, 23:14:36 UTC
* Implement sliding window warmups by backing up the loop min.

* Fix indirect sliding windows.

* Improve is_monotonic.

* Small cleanups.

* Avoid generating vector valued bounds.

* Fix build error on some compilers.

* Fix loop bounds.

* Don't try to slide things that should just be compute_at the store_at location.

* Print condition when printing boxes.

* Less things broken.

* Add/fix comments.

* Comments

* Fix async by moving if inside consume (and so inside acquires).

* Fix division.

* This doesn't work on master either.

* Add TODO

* Acquire is not a no-op.

* Add comment about unfortunate simplification.

* Remove debug(0)

* Add simplification of for { acquire { noop } }

* Fix folding factors finally!

* Update storage_folding test.

* Fix bug when cloning a semaphore used more than once.

* Disable failing test.

* Work around bad complexity in is_monotonic.

* Fix sub bug

* Significantly faster schedule for blur.

* Update tracing test.

* New simplifications that help with upsampled and downsampled sliding windows.

* This doesn't need explicit folding any more.

* Fix new simplifier rules.

* Fix simplifier div rule

* Remove ancient brittle test.

* Fix simplify rule again

* More LT -> EQ rules for mod

* Fix nested sliding windows with upsamples.

* Replace hack with better solution.

* Add missing override

* Don't rewrite loop variable if the min doesn't change.

* Refactor sliding window lowering.

* Fixed bounds growing redundantly for independent producers.

* Don't take the union unless possibly needed.

* Respect conditional provide/required.

* Add missing overrides

* Much better schedule.

* Use a smaller image for blur benchmarking so that different schedules have different perf

* Replace Interval with ConstantInterval for is_monotonic.

* Don't try to handle unsigned deltas.

* Add failing test.

* Remove unused new code.

* Remove weird debugging code.

* Avoid expanding bounds of split producers

* Remove stray likely_if_innermost.

* Remove old autotune tests.

* Update test for guarded producers.

* Reenable test.

* Update trace for guarding producers.

* Don't overwrite required.used

* Handle LE/LT in bounds of lanes in vectorize

* Fix acquire and release of warmups

* Earlier fix for multiply cloned acquires was wrong.

* Handle nested vectorization.

* clang-format

* Remove autotune_bug_* tests

* Fix shadowing error on some compilers.

* Appease overzealous clang-tidy warning.

* clang-format

* Don't use silly hack.

* clang-tidy...

* It's no longer safe to assume monotonic means bounds_of_expr_in_scope is exact

* Address review comments

* Add comment

* Add missing override.

* Fix constant interval issues.

* Revert and remove empty interval

* Fix multiply!?

* Reduce need for simplifications.

* Simplifications from dsharletg/sliding-window branch

* Don't learn likely(x) and x.

* Add comment

* Add some min/max rules.

* Also substitute facts from asserts

* Remove is_empty from header too.

* More rules

* Add double stairstep rule.

* Disable rule that uncovers bugs.

* Consider anded expressions as if they were independent nested ifs.

* Add promise_clamped to producer guards.

* Revert "Consider anded expressions as if they were independent nested ifs."

This reverts commit 03efb3f784b3078b64961c98edde383f4de04fb4.

* Don't combine ifs, split them instead.

* Update trace

* clang-tidy/clang-format

* Remove splitting of ifs, it breaks brittle tests.

* Safer check on old conditions.

* Fix producer guard condition.

* Interval fixes.

* Handle sliding backwards

* Handle transitive dependencies.

* Backport abadams' fix from abadams/slide_over_split_loop

* Fix select visitor.

* More simplifier rules.

* Bring back old logic as a fallback.

* Avoid specializations corrupting sliding

* Fix boneheaded rule errors.

* Fix slightly conservative bounds at the max for split case.

* This pattern is too sensitive to the simplifier. In a real use case, it's just a sum, and the result can be subtracted after doing a reduction.

* Add missing clamp rule

* Don't count unlikely loops as inner loops for likely_if_innermost

* Use <= instead of == to solve for the new loop min

Useful when the warmup is a partial vector or something

* Verify simplifier changes and add variants as suggested by synthesizer

* Make implicit assumption explicit, for clarity

* Use find_constant_bounds

* Guard against expanded bounds more effectively.

* Update tracing test

* Small cleanup.

* Don't simplify/prove using lets that might change value.

* Stronger solving without expanding lets.

* New simplifier rule for alignment

* Fix case where no warmup needed

* Add some useful rules.

* Add safety check on when we can use the new loop min.

* Better proof to avoid hacky condition that is hard to prove.

* Small cleanup and use the nice new folding factors.

* Bring back unrolled producer test.

* clang-format

* Expand comment.

* Fix sliding backwards condition.

* min(new_loop_min, loop_min) isn't needed any more.

* We need that min, but we can be more conservative about it.

* Stronger handling of previous loop mins.

* Remove unused is_monotonic_strong.

* Remove ConstantInterval::make_intersection.

* Avoid need to handle uint specially.

* Add cache for depends_on.

* Reduce unnecessarily large cache scope

* The first part of the key is always the same

Co-authored-by: Andrew Adams <andrew.b.adams@gmail.com>
1 parent c2a0db1
Raw File
CODE_OF_CONDUCT.md
The Halide community has always worked to be a welcoming and respectful
community, and we want to ensure that doesn’t change as we grow and evolve. To
that end, we have a few ground rules that we ask people to adhere to:

- **Be friendly and patient.**

- **Be welcoming.** We strive to be a community that welcomes and supports
  people of all backgrounds and identities. This includes, but is not limited to
  members of any race, ethnicity, culture, national origin, colour, immigration
  status, social and economic class, educational level, sex, sexual orientation,
  gender identity and expression, age, size, family status, political belief,
  religion, and mental and physical ability.

- **Be considerate.** Your work will be used by other people, and you in turn
  will depend on the work of others. Any decision you take will affect users and
  colleagues, and you should take those consequences into account when making
  decisions. Remember that we're a world-wide community, so you might not be
  communicating in someone else's primary language.

- **Be respectful.** Not all of us will agree all the time, but disagreement is
  no excuse for poor behavior and poor manners. We might all experience some
  frustration now and then, but we cannot allow that frustration to turn into a
  personal attack. It’s important to remember that a community where people feel
  uncomfortable or threatened is not a productive one. Members of the Halide
  community should be respectful when dealing with other members as well as with
  people outside the Halide community.

- **Be careful in the words that you choose.** We are a community of
  professionals, and we conduct ourselves professionally. Be kind to others. Do
  not insult or put down other participants. Harassment and other exclusionary
  behavior aren't acceptable. This includes, but is not limited to:

  - Violent threats or language directed against another person.
  - Discriminatory jokes and language.
  - Posting sexually explicit or violent material.
  - Posting (or threatening to post) other people's personally identifying
    information ("doxing").
  - Personal insults, especially those using racist or sexist terms.
  - Unwelcome sexual attention.
  - Advocating for, or encouraging, any of the above behavior.
  - Repeated harassment of others. In general, if someone asks you to stop, then
    stop.

- **When we disagree, try to understand why.** Disagreements, both social and
  technical, happen all the time and Halide is no exception. It is important
  that we resolve disagreements and differing views constructively. Being unable
  to understand why someone holds a viewpoint doesn't mean that they’re wrong.
  Don’t forget that it is human to err and blaming each other doesn't get us
  anywhere. Instead, focus on helping to resolve issues and learning from
  mistakes.

- **Give credit where it's due.** If you use code or ideas from other people,
  projects, or publications, say so. Add a comment in the source code at the
  point where the idea is used. If adapting code, this requirement is above and
  beyond any requirements placed on you by the license of the original code. We
  all like recognition for our work. To that end...

**Acknowledgements.** This code of conduct is a mix of
[LLVM's](https://llvm.org/docs/CodeOfConduct.html) and
[Django's](https://www.djangoproject.com/conduct/), which both ultimately derive
from the code of conduct from the
[Speak Up!](http://web.archive.org/web/20141109123859/http://speakup.io/coc.html)
project.
back to top