Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
节<br />
变<br />
和<br />
助<br />
变<br />
(implied<br />
(segmentation 和 fault)<br />
助<br />
节<br />
可<br />
4.2.2.3 __shared__<br />
__shared__ 限<br />
<br />
<br />
尽 与 位<br />
过 网 格 内 的 所 有 线 程 访 问 , 也 可 通 过 运 行 时 库 从 宿 主 访 问 。 通<br />
于 线 程 块 的 共 享 存 储 器 空 间 中 ; 限<br />
具 有 相 同 的 生 命 周 期 ; 节 块<br />
extern __shared__ float shared[];<br />
节<br />
short array0[128];<br />
float array1[64];<br />
int array2[256];<br />
通 过 块 内 的 所 有 线 程 访 问 。 参 将 共 享 存 储 器 声 明 为 外 部 数 组 时 , 例 如 : 可<br />
, 因 此 数 组 中 的 变 量 布 局 必 须 通 过 偏 移 显 式 管 理 。 例 如 , 如 果 一 名 用 户 希 望 在 动 态 分 配 的 共 享 存 储 器 内 始<br />
__device__ 可 选 择 与 符 定<br />
符 一 起 使 用 , 所 声 明 的 变 量 具 有 以 下 特 征 : 定<br />
extern __shared__ char array[];<br />
__device__ void func() // __device__ or __global__ function<br />
{<br />
short* array0 = (short*)array;<br />
float* array1 = (float*)&array0[128];<br />
int* array2 = (int*)&array1[64];<br />
}<br />
得 与 以 下 代 码 对 应 的 内 容 : 则 应 通 过 以 下 方 法 声 明 和 初 始 化 数 组 : 获<br />
有 在 __syncthreads()( 只<br />
4.4.2 第 见<br />
) 的 执 行 写 入 之 后 , 才 能 保 证 共 享 变 量 对 其 他 线 程 可 见 。 除 非 变<br />
volatile 声 明 为 被 量<br />
, 否 则 只 要 之 前 的 语 句 完 成 , 编 译 器 即 可 随 意 优 化 共 享 存 储 器 的 读 写 操 作 。 量<br />
4.2.3 的 大 小 将 在 启 动 时 确 定 ( 参 见 第 组 数<br />
)。 所 有 变 量 均 以 这 种 形 式 声 明 , 在 存 储 器 中 的 同 一 地 址 开<br />
4.2.2.4 限 制<br />
和<br />
成<br />
__shared__ 和<br />
变<br />
static storage)。<br />
__constant__<br />
量 无 法 使<br />
字 定 义 为 外 部 变 量 。 键<br />
__device__、__shared__ 和<br />
变<br />
关<br />
__device__ 和<br />
变<br />
struct 限 定 符 不 允 许 被 用 于 在 宿 主 上 执 行 的 函 数 内 的 些 这<br />
union<br />
的 形 参 和 局 部 变 量 。 员<br />
_shared_ 变<br />
量 的 声 明 中 不 可 包 含 初 始 化<br />
和<br />
)。<br />
__constant__<br />
量 具 有 隐 含 的 静 态 存 储<br />
设 备 代 码 中 声 明 、 不 带 任 何 限 定 符 的 自 动 变 量 通 常 位 于 寄 存 器 中 。 但 在 某 些 情 况 下 , 编 译 器 可 能 择 将 其 置 于 本 地 存 储 器 中 。 如 果 使 用 占 用 了 过 多 寄 存 器 空 间 的 大 型 结 构 或 数 组 , 或 者 编 译 器 无 法 确 定 其 是 否 使 汇 或 选 在<br />
options =-v<br />
。<br />
选<br />
用 extern<br />
__constant__<br />
仅 允 许 在 文 件 作 用 域 内 使 用 。 量<br />
<strong>CUDA</strong> 编<br />
针 即 受 支 持 , 否 则 将 仅 限 于 指 向 在 全 局 存 储 器 空 间 中 分 配 或 声 明 的 存 储 器 。<br />
15<br />
__constant__ 为 设 备 或 从 设 备 指 派 可 不<br />
4.5.2.3 仅 可 通 过 宿 主 运 行 时 函 数 从 宿 主 指 派 ( 参 见 第 , 量<br />
第 4.5.3.6<br />
--ptxas- 寄 存 器 空 间 。 可 通 过 使 用 多 过<br />
项 编 译 来 进 行 检 查 , 这 将 报 告 本 地 存 储 器 的 使 用 情 况<br />
ptx 定 数 量 索 引 的 数 组 , 则 往 往 会 出 现 这 种 情 况 。 检 查 固 用<br />
–ptx 码 ( 通 过 使 用 代 编<br />
–keep<br />
项 编<br />
用 , 将 导 致 不 确 定 的 行 为 , 往 往 会 出 现 分 区 错 误<br />
用 程 序 终 止 。 应<br />
.local 得 ) 即 可 在 初 次 编 译 过 程 中 确 定 一 个 变 量 是 否 位 于 本 地 存 储 器 中 , 因 为 它 将 使 用 获 译<br />
记 符 声 明 ,<br />
如 果 取 消 在 宿 主 上 执 行 的 代 码 中 全 局 或 共 享 存 储 器 指 针 , 或 者 在 设 备 上 执 行 的 代 码 中 宿 主 存 储 器 指 针 的 引<br />
只 要 编 译 器 能 够 确 定 在 设 备 上 执 行 的 代 码 中 的 指 针 指 向 的 是 共 享 存 储 器 空 间 还 是 全 局 存 储 器 空 间 , 此 类 指<br />
(lmem)。<br />
ld.local 用 使 可<br />
st.local<br />
记 符 访 问 。 如 果 不 是 这 样 , 在 后 续 编 译 阶 段 仍 能 确 定 是 否 占 用 了 目 标 架 构 的<br />
2.0 南 , 版 本 指 程