0.引言
本文记载了CUDA的学习过程~刚开始接触GPU相关的东西,包括图形、计算、并行处理模式等,先从概念性的东西入手,然后结合实践开始学习。CUDA感觉没有一种权威性的书籍,开发工具变动也比较快,所以总感觉心里不是很踏实。所以本文就是从初学者的角度,从无知开始探索的过程。当然在学习过程中避免不了出现概念性的理解错误,出现描述模糊不确切的地方还望指出,共勉共勉~

1.CUDA的概念

2.CUDA的模型

CUDA的运行模型,让host中的每个kernel按照线程网格的方式(Grid)在显卡硬件(GPU)上执行。每一个线程网格又包含多个线程块(block),每一个线程块又包含多个线程(Thread)。

 

Thread是UCDA模型中最基本的运行单元,执行最基本的程序指令。每一组协作的Thread被归于一个Block。在Block内部允许共享存储,可以容纳Thread的上限是512个。Grid是一组Block,共享全局存储空间。每一个Grid对应着一个Kernel任务(GPU上执行的核心任务)。

Warp:GPU执行程序时(Multi-processor)调度单位,目前CUDA的Warp的大小为32,同在一个Warp线程,在相同的指令下执行不同的数据。由于Multi-processor的数量不同,所以一个Block内的所有Thread不一定全部同时运行,但是每个Warp内的所有Thread一定同时运行。因此,我们定义BlockSize的时候应该是Warp Size的整数倍,也就是BlockSize应该为32 的整数倍。理论上来说,Thread的数量越多,就越能弥补单个Thread读取数据的 latency,但是当Tread越多,每个Thread可用的寄存器数量也就越少,严重的时候甚至能造成Kernel无法启动。因此每个Block至少应该包含64个Thread,一般数目为128或者256,具体的数量依据Multi-processor的数目而定。一个Multi-processor最多可以同时运行768个Thread,但是每个Multi-processor最多包含8个Block,因此要保持100%利用率,Block与Size就应该保持下列设定:
2 blocks x 384 threads 
3 blocks x 256 threads
4 blocks x 192 threads
6 blocks x 128 threads 
8 blocks x 96 threads 

CUDA学习ing..的更多相关文章

  1. CUDA学习,第一个kernel函数及代码讲解

    前一篇CUDA学习,我们已经完成了编程环境的配置,现在我们继续深入去了解CUDA编程.本博文分为三个部分,第一部分给出一个代码示例,第二部分对代码进行讲解,第三部分根据这个例子介绍如何部署和发起一个k ...

  2. CUDA学习之二:shared_memory使用,矩阵相乘

    CUDA中使用shared_memory可以加速运算,在矩阵乘法中是一个体现. 矩阵C = A * B,正常运算时我们运用 C[i,j] = A[i,:] * B[:,j] 可以计算出结果.但是在CP ...

  3. CUDA学习之一:二维矩阵加法

    今天忙活了3个小时,竟然被一个苦恼的CUDA小例程给困住了,本来是参照Rachal zhang大神的CUDA学习笔记来一个模仿,结果却自己给自己糊里糊涂,最后还是弄明白了一些. RZ大神对CUDA关于 ...

  4. CUDA学习笔记(三)——CUDA内存

    转自:http://blog.sina.com.cn/s/blog_48b9e1f90100fm5f.html 结合lec07_intro_cuda.pptx学习 内存类型 CGMA: Compute ...

  5. CUDA学习笔记(二)【转】

    来源:http://luofl1992.is-programmer.com/posts/38847.html 编程语言的特点是要实践,实践多了才有经验.很多东西书本上讲得不慎清楚,不妨自己用代码实现一 ...

  6. cuda学习2-block与thread数量的选取

    由上一节可知,在main函数中,cuda程序的并行能力是在add<<<N,1>>>( dev_a, dev_b, dev_c )函数中体现的,这里面设置的是由N个b ...

  7. cuda学习3-共享内存和同步

    为什么要使用共享内存呢,因为共享内存的访问速度快.这是首先要明确的,下面详细研究. cuda程序中的内存使用分为主机内存(host memory) 和 设备内存(device memory),我们在这 ...

  8. CUDA学习之从CPU架构说起

    最近要学习GPU编程,就去英伟达官网下载CUDA, 遇到的第一个问题就是架构的选择 所以我学习的CUDA的第一步是从学习认识CPU架构开始的,x86-64简称x64,是64位版的x86指令集,向前兼容 ...

  9. CUDA学习笔记1

    最近要做三维重建就学习一下cuda的一些使用. CUDA并行变成的基本四路是把一个很大的任务划分成N个简单重复的操作,创建N个线程分别执行. CPU和GPU,有各自的存储空间: Host, CPU a ...

随机推荐

  1. HDU 4630、BOJ 某题

    两道离线线段树. 比赛时候没想到.... 扫描数组,i从1到n,线段树维护从1到i每一个约数(1~50000)的出现的最近位置,线段树存储的是约数的最大值 #include<cstdio> ...

  2. Linux 宿主机安装 MiniGUI

    去MiniGUI官方网站看的时候,很兴奋,安装竟然这么容易. 上帝总是在给你一个苹果之后,赏你一巴掌.我的确是高兴太早了. 首先看一下官网文档的说明步骤: (截取于官方文档) Installing r ...

  3. 使用MMS(MongoDB Monitoring Service)监控MongoDB

    使用MMS(MongoDB Monitoring Service)监控MongoDB 一.MongoDB简介: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可 ...

  4. 事件聚合IEventAggregator和 Ihandle<T>

    -事件聚合IEventAggregator和 Ihandle<T>   今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇 ...

  5. IController控制器的创建过程

    .NET/ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)   阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactor ...

  6. P2P中的NAT穿越方案简介

    文章链接: http://www.shipin.it/Index/videolist/id/68.html

  7. [转]Resolving kernel symbols

    原:http://ho.ax/posts/2012/02/resolving-kernel-symbols/ KXLD doesn't like us much. He has KPIs to mee ...

  8. Orchard网上商店模块

    从头开始编写一个Orchard网上商店模块(1) - 介绍 原文地址:http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-w ...

  9. Object-c学习之路八(NSArray(数组)遍历和排序)

    今天学习了NSArray的遍历和排序,现在在这里做一下总结: 遍历现在实现了四中方法: 排序大概有三中方法:(代码中都有注释) 关于对象的排序还是以Student和Book为例 每个Student持有 ...

  10. SQL Server中日志

    再谈SQL Server中日志的的作用 简介 之前我已经写了一个关于SQL Server日志的简单系列文章.本篇文章会进一步挖掘日志背后的一些概念,原理以及作用.如果您没有看过我之前的文章,请参阅: ...