diff --git a/backends-velox/src/main/scala/org/apache/gluten/config/VeloxConfig.scala b/backends-velox/src/main/scala/org/apache/gluten/config/VeloxConfig.scala index 58645290586..81ae87a6fcf 100644 --- a/backends-velox/src/main/scala/org/apache/gluten/config/VeloxConfig.scala +++ b/backends-velox/src/main/scala/org/apache/gluten/config/VeloxConfig.scala @@ -779,6 +779,12 @@ object VeloxConfig extends ConfigRegistry { .booleanConf .createWithDefault(true) + val CUDF_ALLOW_CPU_FALLBACK = + buildStaticConf("spark.gluten.sql.columnar.backend.velox.cudf.allowCpuFallback") + .doc("Allow cuDF to fall back to CPU execution for unsupported operators.") + .booleanConf + .createWithDefault(true) + val CUDF_CONCURRENT_GPU_TASKS = buildStaticConf("spark.gluten.sql.columnar.backend.velox.cudf.concurrentGpuTasks") .doc("The number of concurrent GPU tasks to run.") diff --git a/cpp/core/config/GlutenConfig.h b/cpp/core/config/GlutenConfig.h index 3dd99e4cf3a..9c556289917 100644 --- a/cpp/core/config/GlutenConfig.h +++ b/cpp/core/config/GlutenConfig.h @@ -110,6 +110,8 @@ const std::string kCudfEnabled = "spark.gluten.sql.columnar.cudf"; constexpr bool kCudfEnabledDefault = false; const std::string kDebugCudf = "spark.gluten.sql.debug.cudf"; const std::string kDebugCudfDefault = "false"; +const std::string kCudfAllowCpuFallback = "spark.gluten.sql.columnar.backend.velox.cudf.allowCpuFallback"; +const std::string kCudfAllowCpuFallbackDefault = "true"; std::unordered_map parseConfMap(JNIEnv* env, const uint8_t* planData, const int32_t planDataLength); diff --git a/cpp/velox/compute/VeloxBackend.cc b/cpp/velox/compute/VeloxBackend.cc index 4ba7dd7a739..d23ab1782c7 100644 --- a/cpp/velox/compute/VeloxBackend.cc +++ b/cpp/velox/compute/VeloxBackend.cc @@ -202,7 +202,9 @@ void VeloxBackend::init( {velox::cudf_velox::CudfConfig::kCudfMemoryResource, backendConf_->get(kCudfMemoryResource, kCudfMemoryResourceDefault)}, {velox::cudf_velox::CudfConfig::kCudfMemoryPercent, - backendConf_->get(kCudfMemoryPercent, kCudfMemoryPercentDefault)}}; + backendConf_->get(kCudfMemoryPercent, kCudfMemoryPercentDefault)}, + {velox::cudf_velox::CudfConfig::kCudfAllowCpuFallback, + backendConf_->get(kCudfAllowCpuFallback, kCudfAllowCpuFallbackDefault)}}; auto& cudfConfig = velox::cudf_velox::CudfConfig::getInstance(); cudfConfig.initialize(std::move(options)); velox::cudf_velox::registerCudf(); diff --git a/docs/velox-configuration.md b/docs/velox-configuration.md index 5f7c49afc46..44f3f5949ae 100644 --- a/docs/velox-configuration.md +++ b/docs/velox-configuration.md @@ -19,6 +19,7 @@ nav_order: 16 | spark.gluten.sql.columnar.backend.velox.cacheEnabled | ⚓ Static | false | Enable Velox cache, default off. It's recommended to enablesoft-affinity as well when enable velox cache. | | spark.gluten.sql.columnar.backend.velox.cachePrefetchMinPct | ⚓ Static | 0 | Set prefetch cache min pct for velox file scan | | spark.gluten.sql.columnar.backend.velox.checkUsageLeak | ⚓ Static | true | Enable check memory usage leak. | +| spark.gluten.sql.columnar.backend.velox.cudf.allowCpuFallback | ⚓ Static | true | Allow cuDF to fall back to CPU execution for unsupported operators. | | spark.gluten.sql.columnar.backend.velox.cudf.batchSize | 🔄 Dynamic | 2147483647 | Cudf input batch size after shuffle reader | | spark.gluten.sql.columnar.backend.velox.cudf.concurrentGpuTasks | ⚓ Static | 1 | The number of concurrent GPU tasks to run. | | spark.gluten.sql.columnar.backend.velox.cudf.enableTableScan | ⚓ Static | false | Enable cudf table scan |