paleolimbot commented on issue #497: URL: https://github.com/apache/arrow-nanoarrow/issues/497#issuecomment-2160718697
The old README: # nanoarrow device option The nanoarrow device options provides a similar set of tools as the core nanoarrow C API extended to the [Arrow C Device](https://arrow.apache.org/docs/dev/format/CDeviceDataInterface.html) interfaces in the Arrow specification. Currently, this option provides an implementation of CUDA devices and an implementation for the default Apple Metal device on MacOS/M1. These implementation are preliminary/experimental and are under active development. ## Example ```c struct ArrowDevice* gpu = ArrowDeviceMetalDefaultDevice(); // Alternatively, ArrowDeviceCuda(ARROW_DEVICE_CUDA, 0) // or ArrowDeviceCuda(ARROW_DEVICE_CUDA_HOST, 0) struct ArrowDevice* cpu = ArrowDeviceCpu(); struct ArrowArray array; struct ArrowDeviceArray device_array; struct ArrowDeviceArrayView device_array_view; // Build a CPU array ASSERT_EQ(ArrowArrayInitFromType(&array, NANOARROW_TYPE_STRING), NANOARROW_OK); ASSERT_EQ(ArrowArrayStartAppending(&array), NANOARROW_OK); ASSERT_EQ(ArrowArrayAppendString(&array, ArrowCharView("abc")), NANOARROW_OK); ASSERT_EQ(ArrowArrayAppendString(&array, ArrowCharView("defg")), NANOARROW_OK); ASSERT_EQ(ArrowArrayAppendNull(&array, 1), NANOARROW_OK); ASSERT_EQ(ArrowArrayFinishBuildingDefault(&array, nullptr), NANOARROW_OK); // Convert to a DeviceArray, still on the CPU ASSERT_EQ(ArrowDeviceArrayInit(cpu, &device_array, &array), NANOARROW_OK); // Parse contents into a view that can be copied to another device ArrowDeviceArrayViewInit(&device_array_view); ArrowArrayViewInitFromType(&device_array_view.array_view, string_type); ASSERT_EQ(ArrowDeviceArrayViewSetArray(&device_array_view, &device_array, nullptr), NANOARROW_OK); // Copy to another device. For some devices, ArrowDeviceArrayMoveToDevice() is // possible without an explicit copy (although this sometimes triggers an implicit // copy by the driver). struct ArrowDeviceArray device_array2; device_array2.array.release = nullptr; ASSERT_EQ( ArrowDeviceArrayViewCopy(&device_array, &device_array_view, gpu, &device_array2), NANOARROW_OK); ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
