30.04.2014 Views

NVIDIA CUDA 计算统一设备架构

NVIDIA CUDA 计算统一设备架构

NVIDIA CUDA 计算统一设备架构

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

cudaUnbindTexture() 用 。<br />

填<br />

完<br />

及<br />

<br />

cudaGetChannelDesc(&channelDesc, cuArray);<br />

cudaBindTextureToArray(texRef, cuArray, &channelDesc);<br />

texture texRef;<br />

cudaBindTextureToArray(texRef, cuArray);<br />

4.5.2.7 OpenGL 互 操 作 性<br />

GLuint bufferObj;<br />

cudaGLRegisterBufferObject(bufferObj);<br />

返<br />

用 高 级 API: 使<br />

纹 理 绑 定 到 纹 理 参 考 时 指 定 的 格 式 必 须 与 声 明 纹 理 参 考 时 指 定 的 参 数 相 匹 配 ; 否 则 纹 理 拾 取 的 结 果 将 无 法 确 定 于 解 除 纹 理 参 考 的 绑 定 。 将<br />

GLuint bufferObj;<br />

float* devPtr;<br />

cudaGLMapBufferObject((void**)&devPtr, bufferObj);<br />

之<br />

取 完<br />

4.5.2.8 Direct3D 互 操 作 性<br />

先 必 须 将 一 个 缓 冲 对 象 注 册 到 <strong>CUDA</strong>, 首<br />

cudaGLRegisterBufferObject() 能 进 行 映 射 。 可 通 过 才 后<br />

: 成<br />

cudaGLMapBufferObject() 完 成 后 , 内 核 即 可 使 用 册 注<br />

的 设 备 存 储 器 地 址 读 取 或 写 入 缓 冲 对 象 : 回<br />

Direct3D<br />

Direct3D 设 互<br />

指<br />

cudaGLUnmapBufferObject() 映 射 是 通 过 除 解<br />

cudaGLUnregisterBufferObject() , 可 使 用 的 成<br />

注 册 。 消<br />

将<br />

资<br />

LPDIRECT3DVERTEXBUFFER9 buffer;<br />

cudaD3D9RegisterResource(buffer, cudaD3D9RegisterFlagsNone);<br />

LPDIRECT3DSURFACE9 surface;<br />

cudaD3D9RegisterResource(surface, cudaD3D9RegisterFlagsNone);<br />

cudaD3D9RegisterResource()<br />

cudaD3D9UnregisterVertexBuffer()<br />

cudaD3D9MapResources()<br />

有 较 高 的 开 销 , 通 常 仅 为 每 个 资 源 调 用 一 次 。 使 用 可 之 后 , 即 可 在 需 要 时 分 和 任 返 和 具 能 可<br />

。 备<br />

cudaD3D9SetDirect3DDevice() 性 要 求 在 执 行 其 他 任 何 运 行 时 调 用 之 前 通 过 作 操<br />

定<br />

cudaD3D9RegisterResource() 即 可 使 用 后 随<br />

Direct3D<br />

cudaD3D9ResourceGetMappedSize()<br />

cudaD3D9ResourceGetMappedPitchSlice() 返 访 、<br />

回 的 设 备 存 储 器 地 址<br />

注 册 到 <strong>CUDA</strong>: 源<br />

意 多 次 地 映 射 和 解 除 映<br />

<strong>CUDA</strong> 注 册 。 将 资 源 注 册 到 消 取<br />

void* devPtr;<br />

cudaD3D9ResourceGetMappedPointer(&devPtr, buffer);<br />

size_t size;<br />

cudaD3D9ResourceGetMappedSize(&size, buffer);<br />

cudaMemset(devPtr, 0, size);<br />

height) 的<br />

cudaD3D9ResourceGetMappedPointer() 内 核 可 使 用 回 的 大 小 和 间 距 信 息 来 读 取 和 写 入 已 映 射 的 资 源 。 通 问 已 映 射 的 资 源 将 导 致 不 确 定 的 结 果 。 射 。<br />

一 个 缓 冲 区 : 了 充<br />

使 用 别<br />

cudaD3D9UnmapResources()<br />

cudaD3D9ResourceGetMappedPitch()<br />

过 Direct3D<br />

// host code<br />

void* devPtr;<br />

cudaD3D9ResourceGetMappedPointer(&devPtr, surface);<br />

size_t pitch;<br />

cudaD3D9ResourceGetMappedPitch(&pitch, surface);<br />

dim3 Db = dim3(16, 16);<br />

dim3 Dg = dim3((width+Db.x–1)/Db.x, (height+Db.y–1)/Db.y);<br />

myKernel((unsigned char*)devPtr,<br />

width, height, pitch);<br />

// device code<br />

维 表 面 的 一 个 像 素 , 像 素 格 式 为 二<br />

28 <strong>CUDA</strong> 编<br />

0 的 代 码 示 例 使 用 面 下<br />

float4:<br />

(width, 面 的 代 码 示 例 中 , 每 个 线 程 都 访 问 大 小 为 下 在<br />

2.0 南 , 版 本 指 程

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!