-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
Description
GPU support eligibility for cudf operators is split across two locations: static methods / free functions in operator source files (e.g. isSupportedJoinType, canBeEvaluatedByCudf) and the OperatorAdapter::canRunOnGPU overrides in OperatorAdapters.cpp. In several cases the adapter silently adds restrictions that are invisible from the operator-side check, making the operator-side function misleading as a source of truth.
As pointed out in #16714 (comment)
Affected operators are
-
HashJoin
CudfHashJoinProbe::isSupportedJoinType(CudfHashJoin.h) checks only the join type enum and returns true for kAnti. ButCudfHashJoinBaseAdapter::canRunOnGPU(OperatorAdapters.cpp) adds two additional restrictions on top:- Null-aware anti join with filter is not supported.
- The join filter expression itself must be evaluable by cudf.
-
FilterProject
-
Aggregation
AggregationAdapter::canRunOnGPUandFilterProjectAdapter::canRunOnGPUreturns false when the input or output type has zero columns, but this restriction does not appear in their respectivecanBeEvaluatedByCudf.
Suggested solution:
Either move all the checks to Operator, or Adapter.