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 />
(shared<br />
(intrinsic 内 function) 在 来 memory)<br />
(grid),<br />
所<br />
缓<br />
变 语<br />
将 每 个 线 程 处 理 一 个 矩 阵 元 素 , 这 与 之 前 完 全 相 同 。 线 程 块 需 要 独 立 执 行 : 必 须 能 够 以 任 意 顺 序 执 行 —— 能 够 并 行 或 串 行 执 行 。 这 种 独 立 性 需 求 允 许 为 任 意 数 量 的 处 理 器 内 核 安 排 线 程 块 , 从 而 使 程 序 员 能 够 编 写 出 可 伸 缩 的 代 码 。<br />
个 网 格 内 的 线 程 块 通 常 是 由 所 处 理 的 数 据 大 小 限 定 的 , 而 不 是 由 系 统 中 的 处 理 器 数 量 决 定 的 , 前 者 可 以 远 远 超 过 后 者 的 数 量 。 一<br />
建 函 数<br />
共 享 数 据 , 并 同 步 其 执 行 来 协 调 存<br />
屏 障 的 作 用 , 块 中 的 所 有 线 程 都 必 须 在 这 里 等 待 处 理 。 到<br />
__syncthreads() 起<br />
__syncthreads() 被<br />
个<br />
Tesla 架<br />
个 块 内 的 线 程 可 彼 此 协 作 , 一 些 共 享 存 储 器 储 器 访 问 。 更 具 体 地 说 , 可 以 通 过 调 一<br />
用 __syncthreads()<br />
像 L1<br />
内 核 中 指 定 同 步 点 ;<br />
__global__ void matAdd(float A[N][N], float B[N][N],<br />
float C[N][N])<br />
{<br />
int i = blockIdx.x * blockDim.x + threadIdx.x;<br />
int j = blockIdx.y * blockDim.y + threadIdx.y;<br />
if (i < N && j < N)<br />
C[i][j] = A[i][j] + B[i][j];<br />
}<br />
int main()<br />
{<br />
// Kernel invocation<br />
dim3 dimBlock(16, 16);<br />
dim3 dimGrid((N + dimBlock.x – 1) / dimBlock.x,<br />
(N + dimBlock.y – 1) / dimBlock.y);<br />
matAdd(A, B, C);<br />
}<br />
<strong>NVIDIA</strong> 内 核 的 有 限 存 储 器 资 源 限 制 了 每 个 块 的 线 程 数 量 。 在 构 中 , 一 个 线 程 块 最 多 可 以 包 但 一 个 内 核 函 数 能 由 多 个 大 小 相 同 的 线 程 块 执 行 , 因 而 线 程 总 数 应 等 于 每 个 块 的 线 程 数 乘 以 块 的 数 量 。 如 理<br />
blockDim<br />
器<br />
问 此 索 引 。 可 以 通 过 内 置 的 量 在 内 核 中 访 问 线 程 块 的 维 度 。 此 时 , 之 前 的 示 例 代 码 可 修 改 为 : 访 中<br />
的<br />
个<br />
实 现 有 效 的 协 作 , 共 享 存 储 器 被 设 计 为 靠 近 各 处 理 器 内 核 的 低 延 迟 存 储 , 这 很 存 , 设 计 为 轻 量 级 的 , 一 个 块 中 的 所 有 线 程 都 必 须 位 于 同 一 个 处 理 器 内 核 中 。 因 而 , 一 个 处 为<br />
含 512<br />
程 。 线<br />
这 些 块 被 组 织 为 一 个 一 维 或 二 维 线 程 块 网 格<br />
图 2-1<br />
该 网 格 的 维 度 由 。 示<br />
法 的<br />
blockIdx 个 参 数 指 定 。 网 格 内 的 每 个 块 多 可 由 一 个 一 维 或 二 维 索 引 标 识 , 可 通 过 内 置 的 一 第<br />
量 在 内 核<br />
16x16 随 机 选 择 了 大 小 为 们 我<br />
256 块 ( 即 包 含 程 线<br />
线 程 ), 此 外 创 建 了 一 个 网 格 , 它 具 有 足 够 的 块 ,<br />
<strong>CUDA</strong> 编<br />
5<br />
本 2.0