From c6eb5c69e71d1a49b415e35e68d06c4af3beb7fb Mon Sep 17 00:00:00 2001 From: Matt Topol Date: Tue, 18 Jun 2024 16:08:22 -0400 Subject: [PATCH 1/2] Fix ArrowDeviceArray interface to pass address of event --- cpp/src/interop/to_arrow_device.cu | 2 +- cpp/tests/interop/to_arrow_device_test.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cpp/src/interop/to_arrow_device.cu b/cpp/src/interop/to_arrow_device.cu index ebfd6605977..b9d3a59e647 100644 --- a/cpp/src/interop/to_arrow_device.cu +++ b/cpp/src/interop/to_arrow_device.cu @@ -603,7 +603,7 @@ unique_device_array_t create_device_array(nanoarrow::UniqueArray&& out, }); result->device_id = rmm::get_current_cuda_device().value(); result->device_type = ARROW_DEVICE_CUDA; - result->sync_event = private_data->sync_event; + result->sync_event = &private_data->sync_event; result->array = private_data->parent; // makes a shallow copy result->array.private_data = private_data.release(); result->array.release = &detail::ArrowDeviceArrayRelease; diff --git a/cpp/tests/interop/to_arrow_device_test.cpp b/cpp/tests/interop/to_arrow_device_test.cpp index 4c73cd637a4..1645a26efe3 100644 --- a/cpp/tests/interop/to_arrow_device_test.cpp +++ b/cpp/tests/interop/to_arrow_device_test.cpp @@ -352,11 +352,15 @@ TEST_F(ToArrowDeviceTest, EmptyTable) auto got_arrow_device = cudf::to_arrow_device(table->view()); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_device->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_device->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventQuery(*reinterpret_cast(got_arrow_device->sync_event))); compare_arrays(schema.get(), arr.get(), &got_arrow_device->array); got_arrow_device = cudf::to_arrow_device(std::move(*table)); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_device->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_device->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventQuery(*reinterpret_cast(got_arrow_device->sync_event))); compare_arrays(schema.get(), arr.get(), &got_arrow_device->array); } From 640501703ebebbfe5ac4046f5afdec08bd6406a9 Mon Sep 17 00:00:00 2001 From: Matt Topol Date: Fri, 28 Jun 2024 16:17:18 -0400 Subject: [PATCH 2/2] add cudaEventSynchronize --- cpp/tests/interop/to_arrow_device_test.cpp | 26 ++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/cpp/tests/interop/to_arrow_device_test.cpp b/cpp/tests/interop/to_arrow_device_test.cpp index beb21681efd..8903f09b82b 100644 --- a/cpp/tests/interop/to_arrow_device_test.cpp +++ b/cpp/tests/interop/to_arrow_device_test.cpp @@ -353,14 +353,14 @@ TEST_F(ToArrowDeviceTest, EmptyTable) EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_device->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_device->device_type); ASSERT_CUDA_SUCCEEDED( - cudaEventQuery(*reinterpret_cast(got_arrow_device->sync_event))); + cudaEventSynchronize(*reinterpret_cast(got_arrow_device->sync_event))); compare_arrays(schema.get(), arr.get(), &got_arrow_device->array); got_arrow_device = cudf::to_arrow_device(std::move(*table)); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_device->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_device->device_type); ASSERT_CUDA_SUCCEEDED( - cudaEventQuery(*reinterpret_cast(got_arrow_device->sync_event))); + cudaEventSynchronize(*reinterpret_cast(got_arrow_device->sync_event))); compare_arrays(schema.get(), arr.get(), &got_arrow_device->array); } @@ -390,6 +390,8 @@ TEST_F(ToArrowDeviceTest, DateTimeTable) auto got_arrow_array = cudf::to_arrow_device(input.view()); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); EXPECT_EQ(data.size(), got_arrow_array->array.length); EXPECT_EQ(0, got_arrow_array->array.null_count); @@ -406,6 +408,8 @@ TEST_F(ToArrowDeviceTest, DateTimeTable) got_arrow_array = cudf::to_arrow_device(std::move(input)); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); EXPECT_EQ(data.size(), got_arrow_array->array.length); EXPECT_EQ(0, got_arrow_array->array.null_count); @@ -460,6 +464,8 @@ TYPED_TEST(ToArrowDeviceTestDurationsTest, DurationTable) auto got_arrow_array = cudf::to_arrow_device(input.view()); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); EXPECT_EQ(data.size(), got_arrow_array->array.length); EXPECT_EQ(0, got_arrow_array->array.null_count); @@ -476,6 +482,8 @@ TYPED_TEST(ToArrowDeviceTestDurationsTest, DurationTable) got_arrow_array = cudf::to_arrow_device(std::move(input)); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); EXPECT_EQ(data.size(), got_arrow_array->array.length); EXPECT_EQ(0, got_arrow_array->array.null_count); @@ -542,6 +550,8 @@ TEST_F(ToArrowDeviceTest, NestedList) auto got_arrow_array = cudf::to_arrow_device(input.view()); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); compare_arrays(expected_schema.get(), expected_array.get(), &got_arrow_array->array); got_arrow_array = cudf::to_arrow_device(std::move(input)); @@ -686,11 +696,15 @@ TEST_F(ToArrowDeviceTest, StructColumn) auto got_arrow_array = cudf::to_arrow_device(input.view()); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); compare_arrays(expected_schema.get(), expected_array.get(), &got_arrow_array->array); got_arrow_array = cudf::to_arrow_device(std::move(input)); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); compare_arrays(expected_schema.get(), expected_array.get(), &got_arrow_array->array); } @@ -759,11 +773,15 @@ TEST_F(ToArrowDeviceTest, FixedPoint64Table) auto got_arrow_array = cudf::to_arrow_device(input.view()); ASSERT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); ASSERT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); compare_arrays(expected_schema.get(), expected_array.get(), &got_arrow_array->array); got_arrow_array = cudf::to_arrow_device(std::move(input)); ASSERT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); ASSERT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); compare_arrays(expected_schema.get(), expected_array.get(), &got_arrow_array->array); } } @@ -806,11 +824,15 @@ TEST_F(ToArrowDeviceTest, FixedPoint128Table) auto got_arrow_array = cudf::to_arrow_device(input.view()); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); compare_arrays(expected_schema.get(), expected_array.get(), &got_arrow_array->array); got_arrow_array = cudf::to_arrow_device(std::move(input)); EXPECT_EQ(rmm::get_current_cuda_device().value(), got_arrow_array->device_id); EXPECT_EQ(ARROW_DEVICE_CUDA, got_arrow_array->device_type); + ASSERT_CUDA_SUCCEEDED( + cudaEventSynchronize(*reinterpret_cast(got_arrow_array->sync_event))); compare_arrays(expected_schema.get(), expected_array.get(), &got_arrow_array->array); } }