You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
节<br />
函<br />
。cuCtxPopCurrent()<br />
上<br />
(usage<br />
库<br />
以<br />
创<br />
中<br />
或<br />
来<br />
(floating)”<br />
函<br />
输<br />
:<br />
用<br />
或<br />
cuCtxPopCurrent() 都 有 一 个 当 前 上 下 文 堆 栈 将 为 任 意 宿 主 线 程 的 当 前 上 下 文 压 入 个 每<br />
cuCtxDestroy() 使 将<br />
。cuCtxCreate() 将<br />
涉 及 设 备 模 拟 或 上 下 文 管 理 的 大 多 数 函 数 ) 将 返<br />
cuCtxDetach() 来<br />
此 外 还 会 为 每 个 上 下 文 维 护 一 个 使 用 计 数<br />
文 。cuCtxAttach()<br />
下 文 与 宿 主 线 程 分 离 开 来 。 随 后 此 上 下 文 将 成 为 “ 浮 动 还 可 恢 复 之 前 的 当 前 上 下 文 ( 如 果 存 在 )。 上<br />
count)。cuCtxCreate()<br />
则 将<br />
主 线 程 的 当 前 上 下 文 。 如 果 有 效 上 下 文 未 成 为 线 程 的 当 前 上 下 文 , 在 一 个 上 下 文 中 操 作<br />
cuCtxDetach() 用 计 数 递 增 , 而 使 使<br />
回 <strong>CUDA</strong>_ERROR_INVALID_CONTEXT。<br />
使 之 递 减 。 在 调<br />
通 过 使 用 计<br />
上 下 文 压 入 堆 栈 顶 端 。 可 调 上 下 文 , 可 作 创 新<br />
的 <strong>CUDA</strong><br />
数 1<br />
数 ( 不<br />
建 一 个 上 下<br />
cuCtxCreate() 宿 主 线 程 一 次 只 能 有 一 个 当 前 设 备 上 下 文 。 在 使 用 个 一<br />
建 上 下 文 时 , 它 将 成 为 调 用 方 宿<br />
用 cuCtxDetach()<br />
使 用 计 数<br />
时<br />
客<br />
为 0<br />
用 相 同 的 上 下 文 , 则 每 个 库 都 将 调<br />
上 下 文 将 被 销 毁 。 ,<br />
用 计 数 促 进 了 在 同 一 上 下 文 中 操 作 第 三 授 权 代 码 之 间 的 互 操 作 。 举 例 来 说 , 如 果 载 入 了 三 个 库 使 递 减 使 用 计 数 。 对 于 大 多 数 来 说 , 应 用 程 序 将 在 载 入 或 初 始 化 库 之 前 创 建 一 个 上 下 文 , 通 过 这 种 方 式 , 应 用 程 序 即 可 使 用 自 己 的 启 发 式 方 法 来 创 建 上 下 文 , 库 只 需 在 传 递 给 它 的 上 下 文 中 操 作 即 可 。 使<br />
用 cuCtxAttach()<br />
来<br />
和<br />
如<br />
所<br />
递 增 使 用 计 数 , 并 在 库 不 再 使 用 该 上 下 文 时 调<br />
用<br />
希 望 创 建 自 己 的 上 下 文 的 库 (<br />
其 API<br />
户 端 并 不 了 解 这 种 情 况 , 并 且 可 能 已 经 创 建 或 未 创 建 自 己 的 上 下<br />
cuCtxPushCurrent() 可 使 用 ) 文<br />
cuCtxPopCurrent(),<br />
图 4-1<br />
。 示<br />
4.5.3.4 模 块 管 理<br />
图 4-1.<br />
库 上 下 文 管 理<br />
是<br />
CUmodule cuModule;<br />
cuModuleLoad(&cuModule, “myModule.cubin”);<br />
CUfunction cuFunction;<br />
作<br />
cuModuleGetFunction(&cuFunction, cuModule, “myKernel”);<br />
面 的 代 码 示 例 载 入 了 一 个 模 块 并 检 索 内 核 的 句 柄 : 下 。 操 互 行 进 中 文 下<br />
(module)<br />
4.5.3.5 执 行 控 制<br />
是<br />
参 见 第 4.2.5<br />
)。 所 有 符 号 的 名 称 ( 包 括 函 数 、 全 局 变 量 和 纹 理 参 考 ) 均 在 模 块 范 围 内 维 护 , 从 而 使 独<br />
模 块<br />
Windows 态 加 载 的 设 备 代 码 和 数 据 包 , 类 似 于 动 可<br />
的 DLL,<br />
由 nvcc<br />
出 的 ( 请<br />
cuFuncSetBlockShape() 为<br />
分 配 方 式 。 的<br />
<strong>CUDA</strong> 编<br />
31<br />
的 第 二 个 参 数 指 定 参 数 在 参 数 堆 栈 中 的 偏 移 。 这 个 偏 移 量 必 须 与 参 数 一 种 可 迁 移 的 方 式 来 完 成 此 任 务 数<br />
<strong>CUDA</strong> 第 三 方 编 写 的 模 块 可 在 相 同 的 的 立<br />
cuFuncSetSharedSize() 为<br />
cuParam*() 系<br />
数 设 置 共 享 存 储 器 的 大 小 。 函<br />
cuFuncSetBlockShape(cuFunction, blockWidth, blockHeight, 1);<br />
__alignof()<br />
参 数 。 类 型 的 对 齐 要 求 相 匹 配 。 可 通 过 使 用 的 供<br />
2.0 南 , 版 本 指 程<br />
threadID 函 数 设 置 每 个 块 的 线 程 数 , 同 时 还 会 设 置 其 定 给<br />
cuLaunch()<br />
各 cuParam*()<br />
cuLaunchGrid() 数 用 于 指 定 在 下 一 次 调 用 函 列<br />
启 动 内 核 时 为 内 核 提