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 />
设<br />
的<br />
和<br />
相<br />
次 语<br />
语 (declaration 使 specifier),<br />
个<br />
block)。 这<br />
是<br />
是<br />
的<br />
中 变<br />
和<br />
z)<br />
相<br />
语 。<br />
此 ID。<br />
x,D y ) 的<br />
第 2 章 编 程 模 型<br />
<strong>CUDA</strong> 允<br />
言 的 一 种 扩 展 , 在 调 用 此 类 函<br />
言 函 数 只 执 行 一 次 的 方 式 不 同<br />
的<br />
// Kernel definition<br />
__global__ void vecAdd(float* A, float* B, float* C)<br />
{<br />
}<br />
符 定 限 明<br />
(kernel)<br />
许 程 序 员 定 义 被 称 为 内 核<br />
C<br />
int main()<br />
{<br />
}<br />
// Kernel invocation<br />
vecAdd(A, B, C);<br />
C 数 , 这 是 对 函 言<br />
N , 它 将 由 时 数<br />
<strong>CUDA</strong> 的 同 不<br />
N 行 执 行 并 程<br />
C 与 普 通 的 这 ,<br />
__global__ 义 内 核 时 , 需 要 使 用 定 在<br />
:<br />
种 全 新 的 一 用<br />
__global__ void vecAdd(float* A, float* B, float* C)<br />
{<br />
int i = threadIdx.x;<br />
C[i] = A[i] + B[i];<br />
}<br />
可<br />
<strong>CUDA</strong> 定 每 次 调 用 的 指 法<br />
数 : 程<br />
int main()<br />
{<br />
// Kernel invocation<br />
vecAdd(A, B, C);<br />
}<br />
) 每 个 线 程 都 会 执 行 一 次 两 两 相 加 运 算 的<br />
行 内 核 的 每 个 线 程 都 会 被 分 配 一 个 独 特 的 线 程 ID, 执<br />
threadIdx 内 置 的 过 通<br />
量 在 内 核 中 访 问<br />
2.1 线 程 层 次 结 构<br />
执<br />
线 程 层 次 结 构<br />
N 示 例 代 码 将 大 小 为 下 以<br />
A 量 向<br />
B 量 向<br />
C 并 将 结 果 存 储 在 向 量 , 加<br />
行 vecAdd(<br />
__global__ void matAdd(float A[N][N], float B[N][N],<br />
float C[N][N])<br />
{<br />
int i = threadIdx.x;<br />
int j = threadIdx.y;<br />
C[i][j] = A[i][j] + B[i][j];<br />
}<br />
int main()<br />
{<br />
// Kernel invocation<br />
dim3 dimBlock(N, N);<br />
matAdd(A, B, C);<br />
}<br />
:<br />
(thread<br />
C<br />
构 成 一 维 、 二 维 或 三 维 线 程 块 储 在 矩 阵 , 程 线<br />
有<br />
。<br />
供 了 一 种 自 然 的 方 法 , 可 为 一 个 域 中 的 各 元 素 提<br />
threadIdx 便 起 见 , 我 们 将 方 为<br />
3 一 个 包 含 为 置<br />
分 量 的 向 量 , 因 而 可 使 用 一 维 、 二 维 或 三 维 索 引 标 识<br />
y, z)<br />
+ yD<br />
+ yD x + zD x D y)。 x);<br />
x,D y,<br />
4 <strong>CUDA</strong> 编<br />
NxN 计 算 , 如 向 量 、 矩 阵 或 字 段 。 下 面 的 示 例 代 码 将 大 小 为 用 调<br />
A 阵 矩<br />
B 阵 矩<br />
加 , 并 将 结 果 存<br />
(x,y) 块 来 说 , 索 引 为 维 二<br />
ID 的 程 线<br />
(x<br />
(D 大 小 为 于 对<br />
D<br />
的 三 维 块 来 说 , 索<br />
2.0 南 , 版 本 指 程<br />
ID 的 索 引 与 其 线 程 程 线<br />
(D 接 的 对 应 关 系 : 对 于 一 维 块 来 说 , 两 者 是 相 同 的 ; 对 于 大 小 为 直 着<br />
(x, 为 引<br />
ID 程 的 线 的<br />
(x