You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by "kurapov-peter (via GitHub)" <gi...@apache.org> on 2023/04/12 17:57:41 UTC

[GitHub] [arrow] kurapov-peter commented on a diff in pull request #34972: GH-34971: [Format] Enhance C-Data API to support non-cpu cases

kurapov-peter commented on code in PR #34972:
URL: https://github.com/apache/arrow/pull/34972#discussion_r1164469074


##########
cpp/src/arrow/c/abi.h:
##########
@@ -65,6 +65,69 @@ struct ArrowArray {
 
 #endif  // ARROW_C_DATA_INTERFACE
 
+#ifndef ARROW_C_DEVICE_DATA_INTERFACE
+#define ARROW_C_DEVICE_DATA_INTERFACE
+
+// ArrowDeviceType is compatible with dlpack DLDeviceType for portability
+// it uses the same values for each enum as the equivalent kDL<type> from dlpack.h
+#ifdef __cplusplus
+typedef enum : int32_t {
+#else
+typedef enum {
+#endif
+  // CPU device, same as using ArrowArray directly
+  kArrowCPU = 1,
+  // CUDA GPU Device
+  kArrowCUDA = 2,
+  // Pinned CUDA CPU memory by cudaMallocHost
+  kArrowCUDAHost = 3,
+  // OpenCL Device
+  kArrowOpenCL = 4,
+  // Vulkan buffer for next-gen graphics
+  kArrowVulkan = 7,
+  // Metal for Apple GPU
+  kArrowMetal = 8,
+  // Verilog simulator buffer
+  kArrowVPI = 9,
+  // ROCm GPUs for AMD GPUs
+  kArrowROCM = 10,
+  // Pinned ROCm CPU memory allocated by hipMallocHost
+  kArrowROCMHost = 11,
+  // Reserved for extension
+  // used to quickly test extension devices,
+  // semantics can differ based on the implementation
+  kArrowExtDev = 12,
+  // CUDA managed/unified memory allocated by cudaMallocManaged
+  kArrowCUDAManaged = 13,
+  // unified shared memory allocated on a oneAPI non-partitioned
+  // device. call to oneAPI runtime is required to determine the
+  // device type, the USM allocation type and the sycl context it
+  // is bound to
+  kArrowOneAPI = 14,
+  // GPU support for next-gen WebGPU standard
+  kArrowWebGPU = 15,
+  // Qualcomm Hexagon DSP
+  kArrowHexagon = 16,
+} ArrowDeviceType;
+
+struct ArrowDeviceArray {
+  // the private_date and release callback of the arrow array
+  // should contain any necessary information and structures
+  // related to freeing the array according to the device it
+  // is allocated on, rather than having a separate release
+  // callback embedded here.
+  struct ArrowArray* array;
+  int device_id;

Review Comment:
   > CUDA (NVIDIA GPUs) and ROCm (AMD GPUs) both use `int` to specify a device ID in their APIs.
   > 
   > SYCL uses a `cl_device_id` which is an opaque type where I'm not sure if an `int32_t` or `int64_t` is sufficient to capture it. Maybe @aregm could have someone help guide here?
   > 
   > dlpack has historically used an `int` / `int32_t` for 6+ years.
   
   DPC++ uses level zero (https://github.com/oneapi-src/level-zero/tree/master) as the primary C API. As to the device ID it is stored as `uint32_t` currently (see https://spec.oneapi.io/level-zero/latest/core/api.html#_CPPv422ze_device_properties_t) and it is not expected to exceed `int64_t`, so +1 as well.



-- 
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: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org