本章的样例来源:vectorAdd CUDA sample

2.1 Kernels

__global__来声明kernel函数

// Kernel definition
__global__ void VecAdd(float* A, float* B, float* C)
{int i = threadIdx.x;C[i] = A[i] + B[i];
}int main()
{...// Kernel invocation with N threadsVecAdd<<<1, N>>>(A, B, C);...
}

2.2. Thread Hierarchy

ThreadIdx是3-component vector,所以threads可以被设计为one-dimensional, two-dimensional, or three-dimensional thread index,对应的block是a one-dimensional, two-dimensional, or three-dimensional block
Dx和Dy是横坐标和纵坐标的长度.这里是指thread的绝对索引(线性的,既将二维的block thread索引,转换为一维)

  1. one-dimensional block,size(Dx),thread ID是(x)
  2. two-dimensional block,size (Dx, Dy),thread ID 是 (x + y Dx)
  3. three-dimensional block, size (Dx, Dy, Dz),thread ID (x + y Dx + z Dx Dy)
// Kernel definition
__global__ void MatAdd(float A[N][N], float B[N][N],float C[N][N])
{int i = threadIdx.x;int j = threadIdx.y;C[i][j] = A[i][j] + B[i][j];
}int main()
{...// Kernel invocation with one block of N * N * 1 threadsint numBlocks = 1;dim3 threadsPerBlock(N, N);MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C);...
}

同样的block也可以像thread那样进行组合

图6 thread block 和 grid

每个bolck的thread可每个grid的block可以使用<<<...>>>指定,传入int和或者dim3类型
类似于thread ID,block在grid里也是用相同的索引方式:

  1. one-dimensional:
  2. two-dimensional
  3. three-dimensional
// Kernel definition
__global__ void MatAdd(float A[N][N], float B[N][N],
float C[N][N])
{int i = blockIdx.x * blockDim.x + threadIdx.x;//将cuda的block,grid布局转换为矩阵的索引int j = blockIdx.y * blockDim.y + threadIdx.y;if (i < N && j < N)C[i][j] = A[i][j] + B[i][j];
}int main()
{...// Kernel invocationdim3 threadsPerBlock(16, 16);dim3 numBlocks(N / threadsPerBlock.x, N / threadsPerBlock.y);MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C);...
}

block size(16*16,256 threads),一个block的所有thread可以实现共享数据和同步(synchronizing)
__shared__共享数据
__syncthreads()实现同步,在一个block里建立一堵墙,必须block内的所有thread完成后才能进行下一步操作

2.3 Memory Hierarchy

内存设置:
1)每个thread有自己的local memory
2)一个block的所有thread有shared memory
3)一个grid的所有thread有global memory
4)2个额外的read-only memory空间:constant和texture memory

图7,内存架构

2.4 Heterogeneous Programming

host和device有各自的DRAM
Unified Memory 提供了host和device,memory 空间的桥梁

图8 ??

CUDA TOOlkit Programming Guide 2. Programming Model相关推荐

  1. CUDA TOOlkit Programming Guide 3. Programming Interface

    3.1. Compilation with NVCC nvcc是简化的C++编译器(解释了为啥在编译C动态库时会丢失函数指针) 3.2. CUDA Runtime 3.2.1. Initializat ...

  2. CUDA C++ Programming Guide( v11.2.0)部分翻译+笔记

    笔记对有些较为简单的部分做了省略,有些原文中表达比较拗口的地方,重新组织了话叙,由于部分内容并不是完全翻译,所以不建议作为主要学习资料,建议作为学习对比参考使用,如有不明白的地方或觉得有问题的地方,欢 ...

  3. Structured Streaming编程 Programming Guide

    Structured Streaming编程 Programming Guide • Overview • Quick Example • Programming Model o Basic Conc ...

  4. View Controller Programming Guide for iOS---(七)---Resizing the View Controller’s Views

    Resizing the View Controller's Views A view controller owns its own view and manages the view's cont ...

  5. [译]1-Key-Value Coding Programming Guide 官方文档第一部分

    Key-Value Coding Programming Guide 官方文档第一部分 2018.9.20 第一次修正 iOS-KVC官方文档第一部分 Key-Value Coding Program ...

  6. [iOS]Advanced Memory Management Programming Guide 高级内存管理编程指南(官方文档翻译)

    Advanced Memory Management Programming Guide - 高级内存管理编程指南(官方文档翻译) 版权声明:本文为博主原创翻译,如需转载请注明出处. 新博客文章地址: ...

  7. AVFoundation Programming Guide(官方文档翻译)完整版中英对照

    新博客: 完整版 - AVFoundation Programming Guide 分章节版: – 第1章:About AVFoundation - AVFoundation概述 – 第2章:Usin ...

  8. AVFoundation Programming Guide(官方文档翻译5)Still and Video Media Capture - 静态视频媒体捕获。

    新博客文章地址: 完整版 - AVFoundation Programming Guide 分章节版: – 第1章:About AVFoundation - AVFoundation概述 – 第2章: ...

  9. 再读苹果《Threading Programming Guide》笔记(一):初识线程

    记得第一次读这个文档还是3年前,那时也只是泛读.如今关于iOS多线程的文章层出不穷,但我觉得若想更好的领会各个实践者的文章,应该先仔细读读官方的相关文档,打好基础,定会有更好的效果.文章中有对官方文档 ...

最新文章

  1. 【tf.keras】TensorFlow 1.x 到 2.0 的 API 变化
  2. 「MICCAI 2016」Reading Note
  3. python url请求
  4. Nginx安装、配置及使用总结
  5. linux常用命令linux自动挂载WinXP系统下的分区
  6. 利用xml+xsl给客户机添加超级管理帐户!
  7. 从零开始学C++之继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别...
  8. 关于ALTERA的FPGA的弱上拉问题
  9. SQL表名,应该用复数还是单数
  10. 国产性能车天花板?145万买极星1,认真的么?
  11. Nginx内置模块简介
  12. 第十三 关于JavaScript
  13. 网站克隆工具-httrack安装使用教程
  14. u盘被写保护怎么解除,如何去掉u盘写保护?
  15. linux dns无法正向解析,linux系统下部署DNS正向解析
  16. 雷电9模拟器安装抓包工具whistle证书
  17. 测试用例评审的旁观记录
  18. 基于C++控制台(Windows平台)的一个吃豆人小游戏
  19. C# 操作通过word模板合并N个word文档
  20. 唐山大地震:接近尸体

热门文章

  1. Java接口四个类四则运算_java 实现四则运算小程序
  2. python自动卸载win程序_利用python实现自动扫雷程序
  3. python习题_新手练习:Python练习题目
  4. Python在应用层实现UDP协议的可靠传输
  5. 详解Python类定义中的各种方法
  6. 最新全国暴雨强度公式2019_2019-2020最新全国高中排名
  7. 毛绒材质渲染_零基础如何用OCtane做一只毛绒绒的皮卡丘?
  8. 魅族android n内测报名,底层升级安卓 N 内测报名 Flyme 迎来五周年
  9. ffmpeg threads_用ffmpeg命令行转压视频
  10. mysql连接28000错误代码_mysql 在登陆的时候出现error 1045 (28000): 错误解决办法