From 8d160a206e2ca8accc31ceb65f2cdd7315d23711 Mon Sep 17 00:00:00 2001
From: Hui Liu <96135754+amdsc21@users.noreply.github.com>
Date: Mon, 30 Oct 2023 11:49:47 -0700
Subject: [PATCH] add jvm rocm support
---
jvm-packages/CMakeLists.txt | 5 +++++
jvm-packages/create_jni.py | 12 +++++++++---
jvm-packages/pom.xml | 1 +
jvm-packages/xgboost4j-gpu/pom.xml | 2 ++
.../xgboost4j-gpu/src/native/xgboost4j-gpu.cpp | 2 +-
.../xgboost4j-gpu/src/native/xgboost4j-gpu.cu | 4 ++++
.../xgboost4j-gpu/src/native/xgboost4j-gpu.hip | 4 ++++
7 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/jvm-packages/CMakeLists.txt b/jvm-packages/CMakeLists.txt
index e1d0e94e2..f9b964a89 100644
--- a/jvm-packages/CMakeLists.txt
+++ b/jvm-packages/CMakeLists.txt
@@ -9,6 +9,11 @@ if (USE_CUDA)
${PROJECT_SOURCE_DIR}/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu)
endif (USE_CUDA)
+if (USE_HIP)
+ list(APPEND JVM_SOURCES
+ ${PROJECT_SOURCE_DIR}/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip)
+endif (USE_HIP)
+
add_library(xgboost4j SHARED ${JVM_SOURCES} ${XGBOOST_OBJ_SOURCES})
if (ENABLE_ALL_WARNINGS)
diff --git a/jvm-packages/create_jni.py b/jvm-packages/create_jni.py
index 18908fc1c..009d0cf6d 100755
--- a/jvm-packages/create_jni.py
+++ b/jvm-packages/create_jni.py
@@ -22,6 +22,8 @@ CONFIG = {
"USE_CUDA": "OFF",
"USE_NCCL": "OFF",
+ "USE_HIP": "OFF",
+ "USE_RCCL": "OFF",
"JVM_BINDINGS": "ON",
"LOG_CAPI_INVOCATION": "OFF"
}
@@ -74,6 +76,7 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--log-capi-invocation', type=str, choices=['ON', 'OFF'], default='OFF')
parser.add_argument('--use-cuda', type=str, choices=['ON', 'OFF'], default='OFF')
+ parser.add_argument('--use-hip', type=str, choices=['ON', 'OFF'], default='OFF')
cli_args = parser.parse_args()
if sys.platform == "darwin":
@@ -84,7 +87,7 @@ if __name__ == "__main__":
print("building Java wrapper")
with cd(".."):
- build_dir = 'build-gpu' if cli_args.use_cuda == 'ON' else 'build'
+ build_dir = 'build-gpu' if cli_args.use_cuda == 'ON' or cli_args.use_hip == 'ON' else 'build'
maybe_makedirs(build_dir)
with cd(build_dir):
if sys.platform == "win32":
@@ -103,6 +106,9 @@ if __name__ == "__main__":
if cli_args.use_cuda == 'ON':
CONFIG['USE_CUDA'] = 'ON'
CONFIG['USE_NCCL'] = 'ON'
+ elif cli_args.use_hip== 'ON':
+ CONFIG['USE_HIP'] = 'ON'
+ CONFIG['USE_RCCL'] = 'ON'
args = ["-D{0}:BOOL={1}".format(k, v) for k, v in CONFIG.items()]
@@ -125,8 +131,8 @@ if __name__ == "__main__":
run(f'"{sys.executable}" mapfeat.py')
run(f'"{sys.executable}" mknfold.py machine.txt 1')
- xgboost4j = 'xgboost4j-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j'
- xgboost4j_spark = 'xgboost4j-spark-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j-spark'
+ xgboost4j = 'xgboost4j-gpu' if cli_args.use_cuda == 'ON' or cli_args.use_hip== 'ON' else 'xgboost4j'
+ xgboost4j_spark = 'xgboost4j-spark-gpu' if cli_args.use_cuda == 'ON' or cli_args.use_hip == 'ON' else 'xgboost4j-spark'
print("copying native library")
library_name, os_folder = {
diff --git a/jvm-packages/pom.xml b/jvm-packages/pom.xml
index 0faf52b8e..ec73605b4 100644
--- a/jvm-packages/pom.xml
+++ b/jvm-packages/pom.xml
@@ -43,6 +43,7 @@
5
OFF
OFF
+ OFF
23.08.0
23.08.0
cuda11
diff --git a/jvm-packages/xgboost4j-gpu/pom.xml b/jvm-packages/xgboost4j-gpu/pom.xml
index b9ff1590c..e46df9afb 100644
--- a/jvm-packages/xgboost4j-gpu/pom.xml
+++ b/jvm-packages/xgboost4j-gpu/pom.xml
@@ -104,6 +104,8 @@
${log.capi.invocation}
--use-cuda
${use.cuda}
+ --use-hip
+ ${use.hip}
${user.dir}
diff --git a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cpp b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cpp
index 698da6244..57769e5dc 100644
--- a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cpp
+++ b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cpp
@@ -2,7 +2,7 @@
// Created by bobwang on 2021/9/8.
//
-#ifndef XGBOOST_USE_CUDA
+#if !defined(XGBOOST_USE_CUDA) && !defined(XGBOOST_USE_HIP)
#include
diff --git a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu
index 317be01ad..272a90354 100644
--- a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu
+++ b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu
@@ -1,6 +1,10 @@
#include
+#if defined(XGBOOST_USE_CUDA)
#include "../../../../src/common/device_helpers.cuh"
+#elif defined(XGBOOST_USE_HIP)
+#include "../../../../src/common/device_helpers.hip.h"
+#endif
#include "../../../../src/common/cuda_pinned_allocator.h"
#include "../../../../src/data/array_interface.h"
#include "jvm_utils.h"
diff --git a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip
index e69de29bb..2095d4182 100644
--- a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip
+++ b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip
@@ -0,0 +1,4 @@
+
+#if defined(XGBOOST_USE_HIP)
+#include "xgboost4j-gpu.cu"
+#endif