[all-commits] [llvm/llvm-project] e45705: [MLIR] Use a shared uniquer for affine maps and in...

Ulysse Beaugnon via All-commits all-commits at lists.llvm.org
Thu Dec 2 14:49:46 PST 2021

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: e45705ad5051247e1cb2355094ef77316ae24c37
  Author: Ulysse Beaugnon <ulysse at google.com>
  Date:   2021-12-02 (Thu, 02 Dec 2021)

  Changed paths:
    M mlir/include/mlir/IR/IntegerSet.h
    M mlir/lib/IR/AffineMapDetail.h
    M mlir/lib/IR/IntegerSet.cpp
    M mlir/lib/IR/IntegerSetDetail.h
    M mlir/lib/IR/MLIRContext.cpp

  Log Message:
  [MLIR] Use a shared uniquer for affine maps and integer sets.

Affine maps and integer sets previously relied on a single lock for creating unique instances. In a multi-threaded setting, this lock becomes a contention point. This commit updates AffineMap and IntegerSet to use StorageUniquer instead. StorageUniquer internally uses sharded locks and thread-local caches to reduce contention. It is already used for affine expressions, types and attributes. On my local machine, this gives me a 5X speedup for an application that manipulates a lot of affine maps and integer sets.

This commit also removes the integer set uniquer threshold. The threshold was used to avoid adding integer sets with a lot of constraints to the hash_map containing unique instances, but the constraints and the integer set were still allocated in the same allocator and never freed, thus not saving any space expect for the hash-map entry.

Reviewed By: rriddle

Differential Revision: https://reviews.llvm.org/D114942

More information about the All-commits mailing list