You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
。hostPtr<br />
copyParam.srcDevice = devPtr;<br />
copyParam.srcPitch = pitch;<br />
copyParam.WidthInBytes = width * sizeof(float);<br />
copyParam.Height = height;<br />
cuMemcpy2D(©Param);<br />
float data[256];<br />
int size = sizeof(data);<br />
CUdeviceptr devPtr;<br />
cuMemAlloc(&devPtr, size);<br />
cuMemcpyHtoD(devPtr, data, size);<br />
4.5.3.7 流 管 理<br />
面 的 代 码 示 例 将 一 些 宿 主 存 储 器 数 组 复 制 到 设 备 存 储 器 中 : 下<br />
CUstream stream[2];<br />
for (int i = 0; i < 2; ++i)<br />
cuStreamCreate(&stream[i], 0);<br />
for (int i = 0; i < 2; ++i)<br />
cuMemcpyHtoDAsync(inputDevPtr + i * size, hostPtr + i * size,<br />
size, stream[i]);<br />
for (int i = 0; i < 2; ++i) {<br />
cuFuncSetBlockShape(cuFunction, 512, 1, 1);<br />
int offset = 0;<br />
cuParamSeti(cuFunction, offset, outputDevPtr);<br />
offset += sizeof(int);<br />
cuParamSeti(cuFunction, offset, inputDevPtr);<br />
offset += sizeof(int);<br />
cuParamSeti(cuFunction, offset, size);<br />
offset += sizeof(int);<br />
cuParamSetSize(cuFunction, offset);<br />
cuLaunchGridAsync(cuFunction, 100, 1, stream[i]);<br />
面 的 代 码 示 例 创 建 了 两 个 流 : 这 些 流 均 通 过 以 下 代 码 示 例 定 义 为 一 个 任 务 序 列 , 包 括 一 次 从 宿 主 到 设 备 的 存 储 器 复 制 、 一 次 内 核 启 动 、 下<br />
次 从 设 备 到 宿 主 的 存 储 器 复 制 : 一<br />
}<br />
for (int i = 0; i < 2; ++i)<br />
cuMemcpyDtoHAsync(hostPtr + i * size, outputDevPtr + i * size,<br />
size, stream[i]);<br />
cudaCtxSynchronize();<br />
的<br />
数<br />
cuFunction<br />
允 处<br />
复<br />
必 的<br />
处 理 hostPtr<br />
许 一 个 流 的 存 储 器 复 制 与 另 外 一 个 流 的 内 核 执 行 相 互 重 叠<br />
须 指 向 分 页 锁 定 的 宿<br />
float* hostPtr;<br />
器 , 这 样 才 能 同 时 执 行 : 储 存 主<br />
cuMemAllocHost((void**)&hostPtr, 2 * size);<br />
hostPtr 流 均 会 将 其 输 入 数 组 个 两<br />
inputDevPtr 分 复 制 到 设 备 存 储 器 中 的 部 一<br />
中 , 通 过 调 用 组<br />
并<br />
设 备 上 的 inputDevPtr, 理<br />
outputDevPtr 果 结 将<br />
hostPtr 回 制<br />
相 同 部 分 。 使 用 两 个 流<br />
cuStreamSynchronize() 可<br />
4.5.3.8 事 件 管 理<br />
目<br />
事 件 管 理<br />
CUevent start, stop;<br />
cuEventCreate(&start);<br />
cuEventCreate(&stop);<br />
后 调 用 的 是 在 进 一 步 处 理 之 前 确 定 所 有 流 均 已 完 成 。 用 于 同 步 宿 主 与 特 定 流 , 允 许 其 他 流 继 续 在 该 设 备 上 执 行 。 最<br />
面 的 代 码 示 例 创 建 了 两 个 事 件 : 下<br />
<strong>CUDA</strong> 编<br />
33<br />
了 cuCtxSynchronize(),<br />
cuEventRecord(start, 0);<br />
for (int i = 0; i < 2; ++i)<br />
cuMemcpyHtoDAsync(inputDevPtr + i * size, hostPtr + i * size,<br />
些 事 件 可 用 于 为 上 一 节 的 代 码 示 例 计 时 , 方 法 如 下 : 这<br />
2.0 南 , 版 本 指 程