6.26. 图形互操作性
本节介绍 CUDA 运行时应用程序编程接口的图形互操作性功能。
函数
- __host__ cudaError_t cudaGraphicsMapResources ( int count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0 )
- 映射图形资源以供 CUDA 访问。
- __host__ cudaError_t cudaGraphicsResourceGetMappedMipmappedArray ( cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource )
- 获取一个多级纹理数组,通过它可以访问映射的图形资源。
- __host__ cudaError_t cudaGraphicsResourceGetMappedPointer ( void** devPtr, size_t* size, cudaGraphicsResource_t resource )
- 获取一个设备指针,通过它可以访问映射的图形资源。
- __host__ cudaError_t cudaGraphicsResourceSetMapFlags ( cudaGraphicsResource_t resource, unsigned int flags )
- 为映射图形资源设置使用标志。
- __host__ cudaError_t cudaGraphicsSubResourceGetMappedArray ( cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel )
- 获取一个数组,通过它可以访问映射的图形资源的子资源。
- __host__ cudaError_t cudaGraphicsUnmapResources ( int count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0 )
- 取消映射图形资源。
- __host__ cudaError_t cudaGraphicsUnregisterResource ( cudaGraphicsResource_t resource )
- 取消注册图形资源以供 CUDA 访问。
函数
- __host__ cudaError_t cudaGraphicsMapResources ( int count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0 )
-
映射图形资源以供 CUDA 访问。
参数
- count
- - 要映射的资源数量
- resources
- - 要为 CUDA 映射的资源
- stream
- - 用于同步的流
描述
映射count中的图形资源resources以供 CUDA 访问。
中的资源resources可以被 CUDA 访问,直到它们被取消映射。从中注册的图形 APIresources在被 CUDA 映射时,不应访问任何资源。如果应用程序这样做,则结果未定义。
此函数提供同步保证,即在 cudaGraphicsMapResources() 之前发出的任何图形调用都将在stream中发出的任何后续 CUDA 工作开始之前完成。
如果resources包含任何重复条目,则返回 cudaErrorInvalidResourceHandle。如果resources中的任何资源当前被映射以供 CUDA 访问,则返回 cudaErrorUnknown。
注意-
此函数使用标准 默认流 语义。
-
请注意,此函数也可能返回先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError、cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,根据 cudaStreamAddCallback 的规定,不得从回调中调用任何 CUDA 函数。在这种情况,cudaErrorNotPermitted 可能会(但不能保证)作为诊断信息返回。
另请参阅
cudaGraphicsResourceGetMappedPointer, cudaGraphicsSubResourceGetMappedArray, cudaGraphicsUnmapResources, cuGraphicsMapResources
- __host__ cudaError_t cudaGraphicsResourceGetMappedMipmappedArray ( cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource )
-
获取一个多级纹理数组,通过它可以访问映射的图形资源。
参数
- mipmappedArray
- - 返回的多级纹理数组,通过它resource可以被访问
- resource
- - 要访问的映射资源
描述
在*mipmappedArray中返回一个多级纹理数组,通过它可以访问映射的图形资源resource。中设置的值mipmappedArray可能每次resource被映射时都会更改。
如果resource不是纹理,则无法通过数组访问它,并且返回 cudaErrorUnknown。如果resource未映射,则返回 cudaErrorUnknown。
注意-
请注意,此函数也可能返回先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError、cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,根据 cudaStreamAddCallback 的规定,不得从回调中调用任何 CUDA 函数。在这种情况,cudaErrorNotPermitted 可能会(但不能保证)作为诊断信息返回。
另请参阅
cudaGraphicsResourceGetMappedPointer, cuGraphicsResourceGetMappedMipmappedArray
- __host__ cudaError_t cudaGraphicsResourceGetMappedPointer ( void** devPtr, size_t* size, cudaGraphicsResource_t resource )
-
获取一个设备指针,通过它可以访问映射的图形资源。
参数
- devPtr
- - 返回的指针,通过它resource可以被访问
- size
- - 返回的可从*devPtr
- resource
- - 要访问的映射资源
描述
在*devPtr开始访问的缓冲区大小resource是一个指针,通过它可以访问映射的图形资源。在*sizedevPtr可能每次resource被映射时都会更改。
如果resource中返回可以从该指针访问的内存大小(以字节为单位)。中设置的值resource不是缓冲区,则无法通过指针访问它,并且返回 cudaErrorUnknown。如果
注意-
请注意,此函数也可能返回先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError、cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,根据 cudaStreamAddCallback 的规定,不得从回调中调用任何 CUDA 函数。在这种情况,cudaErrorNotPermitted 可能会(但不能保证)作为诊断信息返回。
另请参阅
未映射,则返回 cudaErrorUnknown。*
- cudaGraphicsMapResources, cudaGraphicsSubResourceGetMappedArray, cuGraphicsResourceGetMappedPointer
-
__host__ cudaError_t cudaGraphicsResourceSetMapFlags ( cudaGraphicsResource_t resource, unsigned int flags )
参数
- resource
- 为映射图形资源设置使用标志。
- resource
- - 要设置标志的已注册资源
返回值
flags
描述
- 资源映射的参数resourcecudaSuccess, cudaErrorInvalidValue, cudaErrorInvalidResourceHandle, cudaErrorUnknown,resource.
设置resource用于映射图形资源resource。对resource的更改将在下次
-
被映射时生效。参数resource可以是以下任何值resource.
-
cudaGraphicsMapFlagsNone:指定关于如何使用resource.
-
的任何提示。因此,假定 CUDA 可以从resource读取或写入。resourcecudaGraphicsMapFlagsReadOnly:指定 CUDA 将不会写入resource。
如果resourcecudaGraphicsMapFlagsWriteDiscard:指定 CUDA 将不会从resource读取,并且将覆盖
注意-
请注意,此函数也可能返回先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError、cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,根据 cudaStreamAddCallback 的规定,不得从回调中调用任何 CUDA 函数。在这种情况,cudaErrorNotPermitted 可能会(但不能保证)作为诊断信息返回。
另请参阅
的全部内容,因此先前存储在
- 中的任何数据都将不会被保留。
-
当前是否被映射以供 CUDA 访问,则返回 cudaErrorUnknown。如果
参数
- 不是上述值之一,则返回 cudaErrorInvalidValue。
- cudaGraphicsMapResources, cuGraphicsResourceSetMapFlagsresource可以被访问
- resource
- - 要访问的映射资源
- __host__ cudaError_t cudaGraphicsSubResourceGetMappedArray ( cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel )
- 获取一个数组,通过它可以访问映射的图形资源的子资源。
- array
- - 返回的数组,通过它可以访问
描述
在的子资源arrayIndexresource- 数组纹理的数组索引或立方体贴图面索引,由 cudaGraphicsCubeFace 定义,用于立方体贴图纹理,表示要访问的子资源 __host__ cudaError_t cudaGraphicsSubResourceGetMappedArray ( cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel ) mipLevelarray。中设置的值不是上述值之一,则返回 cudaErrorInvalidValue。可能每次resource被映射时都会更改。
如果resource不是纹理,则无法通过数组访问它,并且返回 cudaErrorUnknown。如果 __host__ cudaError_t cudaGraphicsSubResourceGetMappedArray ( cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel ) - 要访问的子资源的 mipmap 级别resource*arrayarray一个数组,通过它可以访问映射的图形资源的子资源resource*arrayresource未映射,则返回 cudaErrorUnknown。
注意-
请注意,此函数也可能返回先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError、cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,根据 cudaStreamAddCallback 的规定,不得从回调中调用任何 CUDA 函数。在这种情况,cudaErrorNotPermitted 可能会(但不能保证)作为诊断信息返回。
另请参阅
,该子资源对应于数组索引
- 和 mipmap 级别
-
。如果
参数
- count
- 不是
- resources
- 的有效数组索引,则返回 cudaErrorInvalidValue。如果
- stream
- - 用于同步的流
描述
不是count中的图形资源resources.
的有效 mipmap 级别,则返回 cudaErrorInvalidValue。resourcescudaGraphicsResourceGetMappedPointer, cuGraphicsSubResourceGetMappedArray
__host__ cudaError_t cudaGraphicsUnmapResources ( int count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0 ) stream取消映射图形资源。
如果resources包含任何重复条目,则返回 cudaErrorInvalidResourceHandle。如果resourcescount
注意-
此函数使用标准 默认流 语义。
-
请注意,此函数也可能返回先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError、cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,根据 cudaStreamAddCallback 的规定,不得从回调中调用任何 CUDA 函数。在这种情况,cudaErrorNotPermitted 可能会(但不能保证)作为诊断信息返回。
另请参阅
- 要取消映射的资源数量
- resources
-
- 要取消映射的资源
参数
- resource
- 取消映射
描述
。取消映射后,resource中的资源在再次映射之前可能无法被 CUDA 访问。
如果resource此函数提供同步保证,即在 cudaGraphicsUnmapResources() 之前在
注意-
请注意,此函数也可能返回先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError、cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,根据 cudaStreamAddCallback 的规定,不得从回调中调用任何 CUDA 函数。在这种情况,cudaErrorNotPermitted 可能会(但不能保证)作为诊断信息返回。
-
中发出的任何 CUDA 工作都将在任何后续发出的图形工作开始之前完成。
另请参阅
中的资源当前未被映射以供 CUDA 访问,则返回 cudaErrorUnknown。