You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CUDA导出句柄导入DirectX12失败:OpenSharedHandle支持性及替代方案咨询

CUDA共享句柄导入DirectX12的问题

在CUDA中创建GPU缓冲区后,使用cuMemExportToShareableHandle()导出并获取HANDLE,将该CUDA句柄传入ID3D12Device::OpenSharedHandle()时,出现“Access violation writing location”错误。请问:
(A) OpenSharedHandle()是否支持打开CUDA句柄?
(B) OpenSharedHandle()是否仅支持打开CreateSharedHandle()创建的句柄?
若为(A)则我的句柄存在问题;若为(B),是否有其他方法将CUDA句柄导入DirectX12?


问题解答

针对(A)(B)的明确结论

  • ID3D12Device::OpenSharedHandle()不直接支持cuMemExportToShareableHandle()导出的CUDA共享句柄。
  • 该方法仅适配DirectX体系内生成的共享句柄:比如DirectX 12的ID3D12Device::CreateSharedHandle()、或DXGI规范下的共享句柄,CUDA导出的句柄不符合其直接兼容要求,直接传入会触发内存访问错误。

跨API共享的正确实现方式

要完成CUDA与DirectX12的资源共享,必须遵循DXGI共享资源规范,具体流程分两种场景:

  1. 从DirectX12侧发起共享
    创建资源时设置D3D12_RESOURCE_FLAGS::D3D12_RESOURCE_FLAG_ALLOW_SHARED标志,通过ID3D12Device::CreateSharedHandle()生成共享句柄;之后CUDA通过cuD3D12CtxCreate()关联DX12设备,再用cuMemImportFromShareableHandle()导入该资源。
  2. 从CUDA侧发起共享
    创建CUDA资源时指定CU_MEM_CREATE_FLAGS_GRAPHICS_SHARED标志,确保资源格式、内存布局与DX12兼容;导出共享句柄后,通过DXGI的IDXGIResource1::CreateSharedHandle()接口中转,再转换为DX12可识别的资源,而非直接调用OpenSharedHandle()。
  3. 通用注意事项
    跨API共享必须保证资源的像素格式、内存布局(线性/纹理布局)、访问权限(读写/渲染目标等)在CUDA与DX12两侧完全匹配,否则即使句柄导入成功也会出现异常。

内容的提问来源于stack exchange,提问作者porente

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:45:59