Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ permissions:
jobs:
build:
name: Build
runs-on: runs-on=${{ github.run_id }}/runner=gpu/tag=cudf-test-harness
runs-on: runs-on=${{ github.run_id }}/family=g5+g4dn+g6.*/cpu=8/image=ubuntu24-gpu-x64/spot=true/extras=s3-cache/tag=cudf-test-harness
container:
image: nvidia/cuda:13.0.0-devel-ubuntu24.04

Expand Down Expand Up @@ -58,7 +58,8 @@ jobs:
- name: Build
run: |
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CUDA_ARCHITECTURES=90-virtual \
-DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc \
-DCMAKE_C_COMPILER_LAUNCHER=sccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache \
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ FetchContent_Declare(
GIT_REPOSITORY https://github.com/rapidsai/cudf.git
# rapidsai/cudf#22620: fix Arrow Device string-view imports with producer-owned
# ArrowArray.private_data.
GIT_TAG 2a2b126f870bb1d1fdad62ac1c726ccad6001ec6
GIT_TAG 3ad0f0c9aeed6e5a521b07587e97c58943a714f7
SOURCE_SUBDIR cpp
)
FetchContent_MakeAvailable(cudf)
Expand Down
30 changes: 19 additions & 11 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
#include <dlfcn.h>
#include <iostream>
#include <memory>
#include <stdexcept>
#include <string>
#include <vector>

#include <cudf/column/column.hpp>
#include <cudf/column/column_view.hpp>
Expand Down Expand Up @@ -152,27 +154,33 @@ int run_check(const char *library_path) {
}
}

// Convert to cuDF column view using from_arrow_device_column
std::cout << "\nConverting to cuDF column view...\n";
std::cout << "\nConverting to cuDF table view...\n";
try {
auto table = cudf::from_arrow_device(&schema, &device_array);

std::cout << "Conversion successful!\n\n";

// convert to host array, call the verifier inside of the shared library.
// Round-trip to host Arrow and validate in the producer library.
auto host_array = cudf::to_arrow_host(*table);
auto host_metadata = std::vector<cudf::column_metadata>{
cudf::column_metadata{"prims"},
cudf::column_metadata{"decimals"},
cudf::column_metadata{"strings"},
cudf::column_metadata{"dates"},
};
auto host_metadata = std::vector<cudf::column_metadata>{};
auto const num_columns = table->num_columns();
if (schema.n_children != num_columns || schema.children == nullptr) {
throw std::runtime_error("exported schema does not match imported table");
}
host_metadata.reserve(num_columns);
for (auto i = 0; i < num_columns; ++i) {
auto const child_schema = schema.children[i];
if (child_schema == nullptr || child_schema->name == nullptr) {
throw std::runtime_error("exported schema child is missing a name");
}
host_metadata.push_back(cudf::column_metadata{child_schema->name});
}
auto host_schema = cudf::to_arrow_schema(*table, host_metadata);
if (validate_array(host_schema.get(), &host_array->array) != 0) {
std::cerr << "\nValidation failed!\n";
throw std::runtime_error("validation failed");
}
} catch (const std::exception &e) {
std::cerr << "Error: Failed to convert Arrow array to cuDF column: " << e.what() << "\n";
std::cerr << "Error: Failed to validate Arrow device export with cuDF: " << e.what() << "\n";

// Release the Arrow array
if (device_array.array.release) {
Expand Down
Loading