CUDA连载

原创 2013年12月03日 23:42:09

本文不是科普,是自我学习道路上的一个笔记,一个总结。


一,术语。

CUDA是NVIDIA公司的通用并行计算架构,全名为 Computer Unified Device Architecture。它目前支持C编程语言。GPU是一个多核处理器,每个核心称为multiprocessor (MP)。

SP(Streaming Processor)是线程最终执行的单位,它包括ALU(逻辑运算单元),一个FPU(浮点运算单元)以及一个Register File(寄存器堆)。SM包括8个SP。SM内包含有一个Instruction Unit、一个Constant Memory、一个Texture Memory,8192个Register、一个16KB的Share Memory、8个Stream Processor(SP)和两个Special Function Units(SFU)。warp愿意为丝线,在CUDA里面它的专有意义为同时运行的一组线程。CUDA程序执行的时候,就是以 warp为单位的,为什么以warp为单位呢?我们假设线程数为512个,如果SM(Streaming Multi-Processor)以一个线程一个线程地去切换,那么效率过低!而且由于SM本身就是一个并行的结构,所以,它可以一次切换多个线程,那么,这个“多个”到底是多少呢?我们就把它定义为warp,这个值一般为32。属于一个warp的线程们的线程ID是连续的。那么,block又是什么呢?这个要从SM说起了,一个GPU有多个SM,它们都会去接受某些任务,以warp的形式去调度。那么,分配到一个SM上的任务就属于一个block,也可以理解为多个warp组成一个block,它们共享存储。从这里可以看出,block的size(线程个数)一定是warp的size的整数倍,这个值一般取64,128,256等等。一个block最多包括32个warp,同一个block里面的线程在同一个MP上执行。而多个block对应一个grid,即一个实际的任务。一个grid里面的block共享全局内存。一个完整的GPU程序称为一个kernel(核心)。如果GPU资源足够,则一次可以运行多个kernel。

关于共享内存的问题,我们可以从CUDA定义的变量存储关键字来区分:

•__device__
–储存于GPU上的globalmemory空间
–和应用程序具有相同的生命期(lifetime)
–可被grid中所有线程存取,CPU代码通过runtime函数存取
•__constant__
–储存于GPU上的constantmemory空间
–和应用程序具有相同的生命期(lifetime)
–可被grid中所有线程存取,CPU代码通过runtime函数存取
•__shared__
–储存于GPU上threadblock内的共享存储器
–和threadblock具有相同的生命期(lifetime)
–只能被threadblock内的线程存取
•无修饰(Local变量)
–储存于SM内的寄存器和localmemory
–和具有相同的生命期(lifetime)
Thread私有



...不定期更新

神经网络入门(连载1-6)

神经网络入门> .  (连载之一) 用平常语言介绍神经网络 (Neural Networks in Plain English) ...
  • Leytton
  • Leytton
  • 2014年08月14日 14:46
  • 3401

《iOS移动开发从入门到精通》图书连载3:如何创建一个基本的iOS项目?

通过前两篇的学习,我们已经完成了AppleID的注册、加入Apple开发者计划、Xcode软件和模拟器的下载与安装,以及开发配置文件的创建等操作。 现在终于可以创建并运行一个iOS项目了!...
  • fzhlee
  • fzhlee
  • 2016年10月06日 16:51
  • 1318

技术分享连载(七十)

我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间20分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。 UWA QQ群:465082844 UWA 问答社区:...
  • UWA4D
  • UWA4D
  • 2017年11月30日 10:37
  • 65

神经网络入门(连载之二)

最近在学习有关遗传算法和神经网络方面的知识,网上查看了很多这方面的秘笈,只怪小生天生愚钝、才疏学浅,不能很好的领悟秘笈中的真谛,往往被弄得晕头转向、不知所措。直到有一天无意中看到了博主zzwu写的有关...
  • u011514451
  • u011514451
  • 2016年04月02日 11:46
  • 761

Python从零开始系列连载(5)——Python的基本运算和表达式(上)

变量 如果你学过其他语言,使用变量先要定义,或者在定义的同时赋值。 而python的变量不需要单独定义,你直接在赋值的过程中完成了定义。 当我们直接运行一个没有赋值过的变量,就报错了。之后我们对变...
  • qq_29226911
  • qq_29226911
  • 2017年10月30日 20:03
  • 51

【连载】关系型数据库是如何工作的?(6) - Hash表

最后我们介绍的重要数据结构就是Hash表。
  • u013721793
  • u013721793
  • 2016年05月07日 15:58
  • 2422

《iOS移动开发从入门到精通》图书连载7:iOS模拟器的使用

酷课堂(ID:coolketang)独家文章,其他媒体转载请注明出处本期导读当您在使用Xcode软件开发iOS平台的应用程序时,可以使用Apple提供的iOS模拟器进行应用程序的测试。Apple提供了...
  • fzhlee
  • fzhlee
  • 2016年12月22日 21:40
  • 789

《iOS移动开发从入门到精通》图书连载9:Swift的基本概念(下)

注释就是对代码的解释和说明。其目的是为了让同伴一看就知道这段代码的作用,而且也方便日后对代码的修改和管理。...
  • fzhlee
  • fzhlee
  • 2016年12月26日 16:33
  • 1351

神经网络入门(连载之三)

最近在学习有关遗传算法和神经网络方面的知识,网上查看了很多这方面的秘笈,只怪小生天生愚钝、才疏学浅,不能很好的领悟秘笈中的真谛,往往被弄得晕头转向、不知所措。直到有一天无意中看到了博主zzwu写的有关...
  • u011514451
  • u011514451
  • 2016年04月02日 11:52
  • 819

CUDA编程(一)第一个CUDA程序

CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决...
  • sunmc1204953974
  • sunmc1204953974
  • 2016年03月28日 22:52
  • 14037
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CUDA连载
举报原因:
原因补充:

(最多只允许输入30个字)