You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by "shengjun.li (JIRA)" <ji...@apache.org> on 2019/07/12 12:39:00 UTC

[jira] [Created] (ARROW-5924) [C++][Plasma] It is not convenient to release a GPU object

shengjun.li created ARROW-5924:
----------------------------------

             Summary: [C++][Plasma] It is not convenient to release a GPU object
                 Key: ARROW-5924
                 URL: https://issues.apache.org/jira/browse/ARROW-5924
             Project: Apache Arrow
          Issue Type: Improvement
          Components: C++ - Plasma
    Affects Versions: 0.14.0
            Reporter: shengjun.li
             Fix For: 0.14.1


cmake_modules/DefineOptions.cmake
  define_option(ARROW_CUDA "Build the Arrow CUDA extensions (requires CUDA toolkit)" ON)
  define_option(ARROW_PLASMA "Build the plasma object store along with Arrow" ON)


The corrent sequence is as follow:
(1) plasma_client.Create(object_id, size, nullptr, 0, &buff, 1);  // where device_num > 0
(2) plasma_client.Seal(object_id);
(3) buff = nullptr;
(4) plasma_client.Release(object_id);
(5) plasma_client.Delete(object_id);


To set buff nullptr (step 3) just before release the object (step 4) because CloseIpcBuffer is in its destructor (class CudaBuffer).
If a user does not do that promptly, CloseIpcBuffer will be blocked. Then, the following error may occure when another object created:
    IOError: Cuda Driver API call in /home/zilliz/arrow/cpp/src/arrow/gpu/cuda_context.cc at line 156 failed with code 208: cuIpcOpenMemHandle(&data, *handle, CU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS) (nil)


To prevent the risk, we can call CloseIpcBuffer manually.



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)