SlideShare a Scribd company logo
1 of 16
Download to read offline
CUDA简介
什么是CUDA
• CUDA的全称是Compute Unified Device
  Architecture, 是NVIDIA® 公司的并行计
  算架构,主要是要来利用GPU的计算能
  力,来提高计算性能。进一步的说是在
  GPU上提供标准C编程语言,为在支持
  CUDA的NVIDIA GPU上进行并行计算而提
  供了统一的软硬件解决方案。
为什么GPU快
为什么GPU快
• 图片中绿色的是ALU(运算器),可以看到,
  CPU只有4个ALU,而GPU中的ALU多很多,并
  且GPU中把更多的晶体管用于数据处理方面。之
  所以这样是因为CPU和GPU的功能不一样,CPU
  要考虑上下文切换等所以需要复杂的控制单元和
  缓存来提高执行效率,而GPU不需要那样复杂的
  控制逻辑,所以GPU可以通过增加并行处理单元
  和存储控制单元来提供处理能力和存储器带宽。
  因而同期的GPU的计算能力会比CPU高很多个档
  次。为了充分利用GPU的运算能力,就有了现在
  的CUDA编程。
为什么GPU快




Gflop/s is a rate of execution, billions of floating point operations per second
GPU运算的缺点
• 显示芯片的运算单元数量很多,因此对于不能高
  度并行化的工作,所能带来的帮助就不大。
• 显示芯片目前通常只支持 32 bits 浮点数,且多半
  不能完全支持 IEEE 754 规格, 有些运算的精确
  度可能较低。目前许多显示芯片并没有分开的整
  数运算单元,因此整数运算的效率较差。
• 显示芯片通常不具有分支预测等复杂的流程控制
  单元,因此对于具有高度分支的程序,效率会比
  较差。
CUDA代码
•   __global__ static void HelloCUDA(char* result, int num){
•    int i = threadIdx.x;
•    char p_HelloCUDA[] = "Hello CUDA!";
•    if(i < num) result[i] = p_HelloCUDA[i];
•   }
•   int main(int argc, char* argv[]){
•    if(!InitCUDA()) {
•     return 0;
•    }
•    char *device_result = 0;
•    char host_result[12] ={0};
•    cudaMalloc((void**) &device_result, sizeof(char) * 11);
•    HelloCUDA<<<1, 11, 0>>>(device_result, 11);
•    cudaMemcpy(host_result, device_result, sizeof(char) * 11, cudaMemcpyDeviceToHost);
•    printf("%sn", host_result);
•    cudaFree(device_result);
•    return 0;
•   }
CUDA代码
• CUDA编程中用__global__来表示这是个可以有
  CPU调用的运行在GPU上的一个函数。由于GPU
  访问数据都是在显存中获取的,所以我们需要调
  用cudaMalloc在显存中开辟空间,用法类似于在
  内存中开辟空间的malloc。之后调用函数
  HelloCUDA<<<1, 11, 0>>>(device_result, 11);尖
  括号中有三项,分别表示block的数量,thread的
  数量,和共享内存的大小。用threadIdx.x我们可
  以获取thread的编号,来达到并行的效果。最后
  我们需要调用cudaMemcpy把数据从显存中取回
  到内存中,并释放显存中的数据,这样cpu就可以
  获得最后的结果了。
CUDA中的优化
• GPU没有cache,所以一般是要尽量少的请
  求数据,请求数据时尽量要求对齐
• 不要有太多的分支结构
• 尽可能大并发的计算,一般一个函数几千
  thread并发都是很正常的
CUDA同步
• CUDA中没有锁,不要不同thread写同一个
  内容
• __syncthreads() 是一个 CUDA 的内部函
  数,表示 block 中所有的 thread 都要同步
  到这个点,才能继续执行。
CUDA架构
CUDA架构
• 用__global__修饰的函数被称作一个kernel函数或者是叫
  做一个kernel,一个kernel会有一个grid(目前是,据说以
  后可能会是多个),一个grid包含多个block,一个block
  包含多个thread,thread就类似于平常cpu运算中的线程
  thread。这样的排布是因为我们需要不同粒度的并行,处
  于同一个block的thread可以通过共享内存来交换数据,而
  不同block的thread不能直接共享数据。为了能更方便的运
  算一二三维的数组,grid中的block或者是block中的thread
  都可以按照不同的维度来排布,比如如果block中的thread
  按照二维排布的话,我们可以通过threadIdx.x和
  threadIdx.y来获得当前thread的位置,这样的结构使得运
  算二维或三维数组更加自然,而且可以避免除法和取余操
  作,加快了速度。
硬件结构
硬件结构
• stream processor流处理器,一般商家号称
  GPU有多少核,一般都是指有多少流处理
  器,流处理器拥有自己的寄存器和local
  memory,但是sp不是真正地核,他没有前
  端
• stream multiprocessor 流多处理器,一般
  一个流多处理器包含8个流处理器,sm有前
  端,就是说他有取指令的部件
硬件结构
• 运行的时候每个block只能在一个sm里,但
  是一个sm可以有多个block
• 每次sm取一次指令,每个sp会执行四次,
  也就是说一次取值可以让32个thread跑一次
总结一下。。。
• 基本就是如果想用GPU来计算的话,要求
  程序必须是可以大并发的,而且要尽量减
  少数据读取和分支
• 为了能跑的更快要理解很多硬件架构一类
  的东西,优化需要做很多,而且优化可能
  会有几十倍的差距
• 目测我们暂时用不到。。。

More Related Content

Viewers also liked

16963450-1
16963450-116963450-1
16963450-116963450
 
Psikologi pendidikan
Psikologi pendidikanPsikologi pendidikan
Psikologi pendidikanAchik Hanan
 
Front cover comparisons
Front cover comparisonsFront cover comparisons
Front cover comparisonsArooj_Aftab96
 
About XOtel
About XOtelAbout XOtel
About XOtelxoweb
 
208297406 cec-242-construction-management
208297406 cec-242-construction-management208297406 cec-242-construction-management
208297406 cec-242-construction-managementBayzulaev Aslan
 
การตอบสนองของสัตว์
การตอบสนองของสัตว์การตอบสนองของสัตว์
การตอบสนองของสัตว์KUJEAB
 
Eseikumpulan 121215230300-phpapp01
Eseikumpulan 121215230300-phpapp01Eseikumpulan 121215230300-phpapp01
Eseikumpulan 121215230300-phpapp01Achik Hanan
 
อาเซียน
อาเซียนอาเซียน
อาเซียนKUJEAB
 
Fungsi dan proses peralatan komputer
Fungsi dan proses peralatan komputerFungsi dan proses peralatan komputer
Fungsi dan proses peralatan komputerchyntrus26
 

Viewers also liked (18)

16963450-1
16963450-116963450-1
16963450-1
 
pais favorito
pais favoritopais favorito
pais favorito
 
Psikologi pendidikan
Psikologi pendidikanPsikologi pendidikan
Psikologi pendidikan
 
Front cover comparisons
Front cover comparisonsFront cover comparisons
Front cover comparisons
 
pais favorito
pais favoritopais favorito
pais favorito
 
About XOtel
About XOtelAbout XOtel
About XOtel
 
Country argenti
Country argentiCountry argenti
Country argenti
 
208297406 cec-242-construction-management
208297406 cec-242-construction-management208297406 cec-242-construction-management
208297406 cec-242-construction-management
 
Mps cemp-final
Mps cemp-finalMps cemp-final
Mps cemp-final
 
16963450
1696345016963450
16963450
 
การตอบสนองของสัตว์
การตอบสนองของสัตว์การตอบสนองของสัตว์
การตอบสนองของสัตว์
 
Mohamed Afify (CV)
Mohamed Afify (CV)Mohamed Afify (CV)
Mohamed Afify (CV)
 
División territorial
División territorialDivisión territorial
División territorial
 
P15264 d safety rules
P15264 d safety rulesP15264 d safety rules
P15264 d safety rules
 
Agile
AgileAgile
Agile
 
Eseikumpulan 121215230300-phpapp01
Eseikumpulan 121215230300-phpapp01Eseikumpulan 121215230300-phpapp01
Eseikumpulan 121215230300-phpapp01
 
อาเซียน
อาเซียนอาเซียน
อาเซียน
 
Fungsi dan proses peralatan komputer
Fungsi dan proses peralatan komputerFungsi dan proses peralatan komputer
Fungsi dan proses peralatan komputer
 

Similar to introduction to cuda

0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)Timothy Chen
 
Deep learning hardware architecture and software deploy with docker
Deep learning hardware architecture and software deploy with dockerDeep learning hardware architecture and software deploy with docker
Deep learning hardware architecture and software deploy with dockerYa-Lun Li
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130Jinrong Ye
 
尚观Linux研究室 linux驱动程序全解析
尚观Linux研究室   linux驱动程序全解析尚观Linux研究室   linux驱动程序全解析
尚观Linux研究室 linux驱动程序全解析hangejnu
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介Kito Cheng
 
Kmeans in-hadoop
Kmeans in-hadoopKmeans in-hadoop
Kmeans in-hadoopTianwei Liu
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境均民 戴
 
How to write Platform Devices and Drivers with FPGA via GPMC
How to write Platform Devices and Drivers with FPGA via GPMCHow to write Platform Devices and Drivers with FPGA via GPMC
How to write Platform Devices and Drivers with FPGA via GPMCBo-Yi Wu
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Chu-Siang Lai
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Wei-Yu Chen
 
Python小团队不妨知道的技术
Python小团队不妨知道的技术Python小团队不妨知道的技术
Python小团队不妨知道的技术jie.wang
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010Chuanying Du
 
OpenRISC whsap
OpenRISC whsapOpenRISC whsap
OpenRISC whsap柏毅 李
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習孜羲 顏
 
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境dbabc
 
系統程式 -- 第 10 章
系統程式 -- 第 10 章系統程式 -- 第 10 章
系統程式 -- 第 10 章鍾誠 陳鍾誠
 
使用 Keras, Tensorflow 進行分散式訓練初探 (Distributed Training in Keras and Tensorflow)
使用 Keras, Tensorflow 進行分散式訓練初探 (Distributed Training in Keras and Tensorflow)使用 Keras, Tensorflow 進行分散式訓練初探 (Distributed Training in Keras and Tensorflow)
使用 Keras, Tensorflow 進行分散式訓練初探 (Distributed Training in Keras and Tensorflow)Jian-Kai Wang
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江thinkinlamp
 

Similar to introduction to cuda (20)

0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)
 
Deep learning hardware architecture and software deploy with docker
Deep learning hardware architecture and software deploy with dockerDeep learning hardware architecture and software deploy with docker
Deep learning hardware architecture and software deploy with docker
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
尚观Linux研究室 linux驱动程序全解析
尚观Linux研究室   linux驱动程序全解析尚观Linux研究室   linux驱动程序全解析
尚观Linux研究室 linux驱动程序全解析
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
Kmeans in-hadoop
Kmeans in-hadoopKmeans in-hadoop
Kmeans in-hadoop
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
 
How to write Platform Devices and Drivers with FPGA via GPMC
How to write Platform Devices and Drivers with FPGA via GPMCHow to write Platform Devices and Drivers with FPGA via GPMC
How to write Platform Devices and Drivers with FPGA via GPMC
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
 
Python小团队不妨知道的技术
Python小团队不妨知道的技术Python小团队不妨知道的技术
Python小团队不妨知道的技术
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 
OpenRISC whsap
OpenRISC whsapOpenRISC whsap
OpenRISC whsap
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習
 
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
 
系統程式 -- 第 10 章
系統程式 -- 第 10 章系統程式 -- 第 10 章
系統程式 -- 第 10 章
 
使用 Keras, Tensorflow 進行分散式訓練初探 (Distributed Training in Keras and Tensorflow)
使用 Keras, Tensorflow 進行分散式訓練初探 (Distributed Training in Keras and Tensorflow)使用 Keras, Tensorflow 進行分散式訓練初探 (Distributed Training in Keras and Tensorflow)
使用 Keras, Tensorflow 進行分散式訓練初探 (Distributed Training in Keras and Tensorflow)
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
 

introduction to cuda

  • 2. 什么是CUDA • CUDA的全称是Compute Unified Device Architecture, 是NVIDIA® 公司的并行计 算架构,主要是要来利用GPU的计算能 力,来提高计算性能。进一步的说是在 GPU上提供标准C编程语言,为在支持 CUDA的NVIDIA GPU上进行并行计算而提 供了统一的软硬件解决方案。
  • 4. 为什么GPU快 • 图片中绿色的是ALU(运算器),可以看到, CPU只有4个ALU,而GPU中的ALU多很多,并 且GPU中把更多的晶体管用于数据处理方面。之 所以这样是因为CPU和GPU的功能不一样,CPU 要考虑上下文切换等所以需要复杂的控制单元和 缓存来提高执行效率,而GPU不需要那样复杂的 控制逻辑,所以GPU可以通过增加并行处理单元 和存储控制单元来提供处理能力和存储器带宽。 因而同期的GPU的计算能力会比CPU高很多个档 次。为了充分利用GPU的运算能力,就有了现在 的CUDA编程。
  • 5. 为什么GPU快 Gflop/s is a rate of execution, billions of floating point operations per second
  • 6. GPU运算的缺点 • 显示芯片的运算单元数量很多,因此对于不能高 度并行化的工作,所能带来的帮助就不大。 • 显示芯片目前通常只支持 32 bits 浮点数,且多半 不能完全支持 IEEE 754 规格, 有些运算的精确 度可能较低。目前许多显示芯片并没有分开的整 数运算单元,因此整数运算的效率较差。 • 显示芯片通常不具有分支预测等复杂的流程控制 单元,因此对于具有高度分支的程序,效率会比 较差。
  • 7. CUDA代码 • __global__ static void HelloCUDA(char* result, int num){ • int i = threadIdx.x; • char p_HelloCUDA[] = "Hello CUDA!"; • if(i < num) result[i] = p_HelloCUDA[i]; • } • int main(int argc, char* argv[]){ • if(!InitCUDA()) { • return 0; • } • char *device_result = 0; • char host_result[12] ={0}; • cudaMalloc((void**) &device_result, sizeof(char) * 11); • HelloCUDA<<<1, 11, 0>>>(device_result, 11); • cudaMemcpy(host_result, device_result, sizeof(char) * 11, cudaMemcpyDeviceToHost); • printf("%sn", host_result); • cudaFree(device_result); • return 0; • }
  • 8. CUDA代码 • CUDA编程中用__global__来表示这是个可以有 CPU调用的运行在GPU上的一个函数。由于GPU 访问数据都是在显存中获取的,所以我们需要调 用cudaMalloc在显存中开辟空间,用法类似于在 内存中开辟空间的malloc。之后调用函数 HelloCUDA<<<1, 11, 0>>>(device_result, 11);尖 括号中有三项,分别表示block的数量,thread的 数量,和共享内存的大小。用threadIdx.x我们可 以获取thread的编号,来达到并行的效果。最后 我们需要调用cudaMemcpy把数据从显存中取回 到内存中,并释放显存中的数据,这样cpu就可以 获得最后的结果了。
  • 9. CUDA中的优化 • GPU没有cache,所以一般是要尽量少的请 求数据,请求数据时尽量要求对齐 • 不要有太多的分支结构 • 尽可能大并发的计算,一般一个函数几千 thread并发都是很正常的
  • 10. CUDA同步 • CUDA中没有锁,不要不同thread写同一个 内容 • __syncthreads() 是一个 CUDA 的内部函 数,表示 block 中所有的 thread 都要同步 到这个点,才能继续执行。
  • 12. CUDA架构 • 用__global__修饰的函数被称作一个kernel函数或者是叫 做一个kernel,一个kernel会有一个grid(目前是,据说以 后可能会是多个),一个grid包含多个block,一个block 包含多个thread,thread就类似于平常cpu运算中的线程 thread。这样的排布是因为我们需要不同粒度的并行,处 于同一个block的thread可以通过共享内存来交换数据,而 不同block的thread不能直接共享数据。为了能更方便的运 算一二三维的数组,grid中的block或者是block中的thread 都可以按照不同的维度来排布,比如如果block中的thread 按照二维排布的话,我们可以通过threadIdx.x和 threadIdx.y来获得当前thread的位置,这样的结构使得运 算二维或三维数组更加自然,而且可以避免除法和取余操 作,加快了速度。
  • 14. 硬件结构 • stream processor流处理器,一般商家号称 GPU有多少核,一般都是指有多少流处理 器,流处理器拥有自己的寄存器和local memory,但是sp不是真正地核,他没有前 端 • stream multiprocessor 流多处理器,一般 一个流多处理器包含8个流处理器,sm有前 端,就是说他有取指令的部件
  • 15. 硬件结构 • 运行的时候每个block只能在一个sm里,但 是一个sm可以有多个block • 每次sm取一次指令,每个sp会执行四次, 也就是说一次取值可以让32个thread跑一次
  • 16. 总结一下。。。 • 基本就是如果想用GPU来计算的话,要求 程序必须是可以大并发的,而且要尽量减 少数据读取和分支 • 为了能跑的更快要理解很多硬件架构一类 的东西,优化需要做很多,而且优化可能 会有几十倍的差距 • 目测我们暂时用不到。。。