【发布时间】:2014-12-18 16:40:41
【问题描述】:
这个问题与之前在此处提出但未得到回答的问题相同: https://stackoverflow.com/questions/22996075/invalid-device-error-return-by-cupointergetattribute.
我使用 GTX680、CUDA 6.5 工具包、NVIDIA 340.46 内核。 GPU具有统一的寻址能力和计算能力3.0。
以下代码返回CUDA_ERROR_INVALID_DEVICE:
CUDA_DR_ASSERT(cuMemAlloc(&dev_ptr, size));
CUDA_DR_ASSERT(cuPointerGetAttribute(&tokens, CU_POINTER_ATTRIBUTE_P2P_TOKENS, dev_ptr));
有没有人(Sankar?)遇到过类似的问题并找到原因?
编辑:这是我从中得到错误的代码:
CUDA_DR_ASSERT( cuInit(0) );
CUdevice dev;
CUDA_DR_ASSERT( cuDeviceGet(&dev, 0) );
CUDA_ASSERT(cudaSetDevice(dev));
CUdeviceptr dev_ptr;
std::size_t size = 2*65536;
CUDA_DR_ASSERT( cuMemAlloc( &dev_ptr, size ) );
uint flag = 1; // set CU_POINTER_ATTRIBUTE_SYNC_MEMOPS (set to 0 for unsetting this option)
CUDA_DR_ASSERT( cuPointerSetAttribute(&flag, CU_POINTER_ATTRIBUTE_SYNC_MEMOPS, dev_ptr) );
CUDA_POINTER_ATTRIBUTE_P2P_TOKENS tokens;
CUDA_DR_ASSERT( cuPointerGetAttribute( &tokens, CU_POINTER_ATTRIBUTE_P2P_TOKENS, dev_ptr ) );
【问题讨论】:
-
你们中的任何一个人都提供了MCVE,SO 期望此类问题出现。您是否尝试创建 GPUDirect RDMA 接口? GPUDirect RDMA 是not available on GeForce GPUs。
-
感谢 Robert 提供的示例代码。是的,我正在尝试创建一个 GPUDirect RDMA 接口。由于需要大多数通用虚拟寻址,因此我想尝试 GeForce,直到出现“不支持”错误。我一开始在没有令牌的情况下实现了它,使用 cuPointerSetAttribute 中的 SYNC_MEMOPS 选项,并在调用 nvidia_p2p_get_pages 时从 nvidia 内核获取了一个 INVALID ARGUMENT。这就是为什么我也尝试了令牌。我想知道为什么我没有收到“不支持”的错误消息,而是“无效的设备”。
-
您问了这个问题:“有没有人(Sankar?)有类似的问题并找到原因?”您收到错误消息,因为 GeForce 不支持 GPUDirect RDMA。