Feature Gates¶
Feature Gates are a mechanism provided in the FBGEMM_GPU codebase that provides a consistent way to enable and disable experimental features based on environment settings.
While it can be thought of as a type-safe abstraction over environment variables, note that feature gates are a run-time mechanism for controlling code behavior.
Creating a Feature Gate¶
Feature Gates should be created if the intent is to land a feature into the codebase, but defer its enablement until further verification in production workloads.
C++¶
To define a feature gate on the C++ side, append to the ENUMERATE_ALL_FEATURE_FLAGS X-macros definition in fbgemm_gpu/config/feature_gates.h:
#define ENUMERATE_ALL_FEATURE_FLAGS   \
  X(...)                              \
  ...                                 \
  X(EXAMPLE_FEATURE)  // <-- Append here
Python¶
To define a feature gate on the Python side, simply add a new value to the FeatureGateName enum definition in fbgemm_gpu/config/feature_list.py:
class FeatureGateName(Enum):
  ...
  # Add here
  EXAMPLE_FEATURE = auto()
While not required, it is best to mirror the enum values defined in fbgemm_gpu/config/feature_gates.h for consistency.
Enabling a Feature Gate¶
See the documentation in Feature Gates (C++) and Feature Gates (Python) for code examples of how to enable feature gates.