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 />
个<br />
、cudaMallocPitch() 分<br />
数<br />
。 用<br />
节<br />
、<strong>CUDA</strong> 数<br />
int device;<br />
for (device = 0; device < deviceCount; ++device) {<br />
cudaDeviceProp deviceProp;<br />
cudaGetDeviceProperties(&deviceProp, device);<br />
}<br />
cudaSetDevice() 于 选 择 与 宿 主 线 程 相 关 的 设 备 : 用<br />
cudaSetDevice(device);<br />
cudaSetDevice() 完<br />
函<br />
的 4.5.2.3 存 储 器 管 理<br />
或<br />
分<br />
: 释<br />
成 此 任 务 , 将 自 动 选 中 设<br />
__global__ 首 先 选 择 设 备 , 之 后 才 能 调 用 须 必<br />
API 任 何 来 自 运 行 时 或 数<br />
数 。 如 果 未 通 过 显 式 调 任 何 显 式 调 用 都 将 无 效 函<br />
cudaSetDevice() 随 后 对 0, 备<br />
float* devPtr;<br />
cudaMalloc((void**)&devPtr, 256 * sizeof(float));<br />
// host code<br />
float* devPtr;<br />
int pitch;<br />
点 元 素 的 数 组 因<br />
cudaMallocPitch((void**)&devPtr, &pitch,<br />
浮<br />
width * sizeof(float), height);<br />
myKernel(devPtr, pitch);<br />
// device code<br />
__global__ void myKernel(float* devPtr, int pitch)<br />
{<br />
for (int r = 0; r < height; ++r) {<br />
float* row = (float*)((char*)devPtr + r * pitch);<br />
for (int c = 0; c < width; ++c) {<br />
float element = row[c];<br />
}<br />
}<br />
}<br />
<strong>CUDA</strong><br />
cudaCreateChannelDesc() 创 分 数<br />
释<br />
。 放<br />
。cudaMallocArray() 需<br />
cudaMalloc() 存 储 器 是 使 用 性 线<br />
cudaMallocPitch()<br />
cudaFree() , 使 用 的 配<br />
256 示 例 代 码 将 在 线 性 存 储 器 中 分 配 一 个 包 含 下 以<br />
议 在 分 配 二 维 数 组 时 使 用 cudaMallocPitch(), 建<br />
5.1.2.1 能 确 保 合 理 填 充 已 分 配 的 存 储 器 , 满 足 第 它 为<br />
绍 的 对 齐 要 求 , 从 而 确 保 访 问 行 地 址 或 执 行 二 维 数 组 与 设 备 存 储 器 的 其 他 区 域 之 间 的 复 制 ( 使 用<br />
cudaMemcpy2D()) 时 获 得 最 优 性 能 。 所 返 回 的 间 距 ( 或 步 幅 ) 必 须 用 于 访 问 数 组 元 素 。 以 下 代 码 示 例 将 分 介<br />
widthxheight 个 一 配<br />
维 浮 点 值 数 组 , 并 显 示 如 何 在 设 备 代 码 中 循 环 遍 历 数 组 元 素 : 二<br />
的<br />
数<br />
位<br />
cudaChannelFormatDesc channelDesc =<br />
cudaCreateChannelDesc();<br />
cudaArray* cuArray;<br />
cudaMallocArray(&cuArray, &channelDesc, width, height);<br />
cudaGetSymbolAddress() 用<br />
的 格 式 描 述 。 建<br />
获<br />
cudaMallocArray() 使 用 是 组<br />
cudaFreeArray() , 使 用 的 配<br />
放<br />
使 用 要<br />
考 手 册 列 举 了 用 于 配 的 线 性 存 储 器 组 和 为 全 局 或 常 量 存 储 器 空 间 中 声 明 的 变 量 分 配 的 存 储 器 之 间 复 制 存 储 器 的 所 有 函 数 。 参<br />
widthxheight 代 码 示 例 分 配 了 一 个 下 以<br />
<strong>CUDA</strong><br />
32 包 含 一 个 , 组<br />
浮 点 组 件 : 的<br />
cudaGetSymbolSize()<br />
索 指 向 为 全 局 存 储 器 空 间 中 声 明 的 变 量 分 配 的 存 储 器 的 地 址 。 所 分 配 存 储 器 的 大 小 是 通 过 取 的 。<br />
cudaMemcpy2DToArray(cuArray, 0, 0, devPtr, pitch,<br />
检 于<br />
width * sizeof(float), height,<br />
cudaMemcpyDeviceToDevice);<br />
<strong>CUDA</strong> 编<br />
:<br />
25<br />
在 cudaMalloc()<br />
配 的 线 性 存 储 器<br />
float data[256];<br />
代 码 示 例 将 一 些 宿 主 存 储 器 数 组 复 制 到 设 备 存 储 器 中 的 面 下<br />
int size = sizeof(data);<br />
float* devPtr;<br />
cudaMalloc((void**)&devPtr, size);<br />
<strong>CUDA</strong> 的 代 码 示 例 将 二 维 数 组 复 制 到 之 前 代 码 示 例 中 分 配 的 面 下<br />
中 : 组<br />
2.0 南 , 版 本 指 程